import React, { useState, useEffect, useMemo } from "react";
import { Form, Button, Row, Col, Input, Modal, Table, Typography, Select } from "antd";
import { SaveOutlined, PlusOutlined, CloseCircleOutlined } from "@ant-design/icons";
import { useQuery, useModels, useModel } from "../../../hooks";
import { useHistory } from "react-router-dom";
// import { firestore } from "../../../services/firebase";
import { ViewLoading } from "../../../components";
import { DefaultLayout } from "../../../components/layouts";
// import { addDoc, collection, doc, getDoc, updateDoc } from "firebase/firestore";
import HttpService from "../../../services/httpService";
import { emptyRequest } from "../../../constants/requests";
import { respuestas } from "../../../utilities";
const { Title } = Typography;
const DependenciaDetalle = () => {
// const firebaseCollection = "dependencias";
const query = useQuery();
const history = useHistory();
const { TextArea } = Input;
const id = query.get("id");
const editando = Boolean(id);
const titulo = editando ? "Editar dependencia" : "Agregar dependencia";
const url = "/administracion/dependencias";
const [form] = Form.useForm();
// const [dependencia, setDependencia] = useState([]);
// const [cargandoDependencia, setCargandoDependencia] = useState(true);
const [guadandoCargando, setGuardandoCargando] = useState(false);
const [buscarValue, setBuscarValue] = useState('');
const [requestUsuarios, setRequestUsuarios] = useState({});
const [timer, setTimer] = useState(null);
const [miembros, setMiembros] = useState([]);
const [miembrosLoading, setMiembrosLoading] = useState(false);
const [usuario, setUsuario] = useState(null);
const [miembro, setMiembro] = useState(null);
const [lideres, setLideres] = useState([]);
const [request, setRequest] = useState(emptyRequest);
const requestParams = useMemo(() => ({
name: 'v1/dependencia',
id: id,
expand: 'lideres,usuarios'
}), [id]);
const usuarioExtraParams = React.useMemo(() => ({ q: buscarValue }), [buscarValue])
const usuariosParams = React.useMemo(() => ({
name: 'v1/usuario',
limite: 20,
ordenar: 'nombre-asc',
expand: 'grupos',
extraParams: usuarioExtraParams
}), [usuarioExtraParams])
const {
model,
modelLoading
} = useModel(request);
const [
models,
modelsLoading, , ,
] = useModels(requestUsuarios);
const columnasMiembros = [
{ title: 'Nombre', dataIndex: 'nombre', key: 'nombre', },
{ title: 'Correo', dataIndex: 'email', key: 'email', },
{
title: '', dataIndex: 'id', key: 'id', render: (text) =>
}
onClick={() => setMiembros(miembros.filter(l => l.id !== text))}
/>
},
]
const columnasLideres = [
{ title: 'Nombre', dataIndex: 'nombre', key: 'nombre', },
{
title: '', dataIndex: 'id', key: 'id', render: (text) =>
}
onClick={() => setLideres(lideres.filter(l => l.id !== text))}
/>
},
]
const onSearchUsuarios = (value) => {
clearTimeout(timer);
const newTimer = setTimeout(() => {
setBuscarValue(value);
}, 300);
setTimer(newTimer);
};
const onFinish = async (values) => {
try {
setGuardandoCargando(true);
let body = {
...values,
// timestamp: editando ? dependencia?.timestamp : new Date(),
// estatus: editando ? dependencia?.estatus : true,
sincronizado: null,
lideres: lideres.map(l => ({
id: l.id,
nombre: l.nombre,
})),
usuarios: miembros.map(l => ({
id: l.id,
nombre: l.nombre,
}))
};
if (editando) {
body.id = model?.id;
}
const res = await HttpService.post('v1/dependencia', body);
respuestas(res);
if (res?.status === 200) {
Modal.success({
title: "Éxito",
content: "Dependencia guardada correctamente",
});
history.push(url);
}
// comentario prueba
// Agregamos o editamos el documento grupo
/* if (editando) {
await updateDoc(doc(firestore, firebaseCollection, id), body);
} else {
await addDoc(collection(firestore, firebaseCollection), body);
} */
} catch (error) {
Modal.warning({
title: "Atención",
content: "Hubo un problema al guardar, intentalo de nuevo.",
});
console.log("Error al guardar: ", error);
} finally {
setGuardandoCargando(false);
}
};
const onFinishFailed = () => {
Modal.warning({
title: "Atención",
content: "Por favor revise los datos.",
style: { marginTop: "20vh" },
});
};
useEffect(() => {
setRequest(requestParams);
return () => setRequest({});
}, [requestParams]);
useEffect(() => {
setRequestUsuarios(usuariosParams);
return () => setRequestUsuarios({});
}, [usuariosParams]);
/* useEffect(() => {
if (editando && id) {
const getMiembros = async () => {
setMiembrosLoading(true);
const response = await HttpService.get(`v1/usuario?ordenar=nombre-asc&idDependencia=${id}&limite=-1`);
if (!response.isError) {
setMiembros(response.resultado);
setMiembrosLoading(false);
}
}
getMiembros();
}
}, [editando, id]); */
/* useEffect(() => {
let mounted = true;
if (mounted && editando) {
try {
setTimeout(async () => {
const docRef = doc(firestore, "dependencias", id);
const docSnap = await getDoc(docRef);
setDependencia(docSnap.data());
const { usuarios } = docSnap.data();
if (usuarios?.length > 0) {
setLideres(usuarios);
}
}, 0);
} catch (error) {
console.log("Error al obtener dependencia: ", error);
} finally {
setCargandoDependencia(false);
}
}
return () => (mounted = false);
}, [editando, id]); */
useEffect(() => {
if (model && editando) {
form.setFieldsValue({
...model,
});
if (model?.lideres) {
setLideres(model?.lideres);
}
if (model?.usuarios) {
setMiembros(model?.usuarios);
}
}
}, [editando, form, model]);
if (modelLoading && editando) return ;
return (