import React, { useState, useEffect } 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 } 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";
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 [lideres, setLideres] = useState([]);
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 [
models,
modelsLoading, , ,
] = useModels(requestUsuarios);
const columnasMiembros = [
{ title: 'Nombre', dataIndex: 'nombre', key: 'nombre', },
{ title: 'Correo', dataIndex: 'email', key: 'email', },
]
const columnasLideres = [
{ title: 'Nombre', dataIndex: 'nombre', key: 'nombre', },
{
title: '', dataIndex: 'uid', key: 'uid', render: (text) =>
}
onClick={() => setLideres(lideres.filter(l => l.uid !== text))}
/>
},
]
const onSearchUsuarios = (value) => {
clearTimeout(timer);
const newTimer = setTimeout(() => {
setBuscarValue(value);
}, 300);
setTimer(newTimer);
};
React.useEffect(() => {
setRequestUsuarios(usuariosParams);
return () => setRequestUsuarios({});
}, [usuariosParams]);
React.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]);
const onFinish = async (values) => {
try {
setGuardandoCargando(true);
let body = {
...values,
timestamp: editando ? dependencia?.timestamp : new Date(),
estatus: editando ? dependencia?.estatus : true,
sincronizado: null,
usuarios: lideres.map(l => ({
uid: l.uid,
nombre: l.nombre,
})),
};
// comentario prueba
// Agregamos o editamos el documento grupo
if (editando) {
await updateDoc(doc(firestore, firebaseCollection, id), body);
} else {
await addDoc(collection(firestore, firebaseCollection), body);
}
Modal.success({
title: "Éxito",
content: "Dependencia guardado correctamente",
});
history.push(url);
} 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(() => {
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(() => {
let mounted = true;
if (mounted && editando) {
form.setFieldsValue({
...dependencia,
});
}
return () => (mounted = false);
}, [dependencia, editando, form]);
if (cargandoDependencia && editando) return ;
return (