|
@@ -11,6 +11,7 @@ import {
|
|
|
Statistic,
|
|
Statistic,
|
|
|
InputNumber,
|
|
InputNumber,
|
|
|
Checkbox,
|
|
Checkbox,
|
|
|
|
|
+ message,
|
|
|
} from "antd";
|
|
} from "antd";
|
|
|
import {
|
|
import {
|
|
|
SaveOutlined,
|
|
SaveOutlined,
|
|
@@ -22,16 +23,16 @@ import {
|
|
|
} from "@ant-design/icons";
|
|
} from "@ant-design/icons";
|
|
|
import moment from "moment";
|
|
import moment from "moment";
|
|
|
import HttpService from "../../../services/httpService";
|
|
import HttpService from "../../../services/httpService";
|
|
|
-import { useModel, useQuery } from "../../../hooks";
|
|
|
|
|
|
|
+import { useModel, useModels, useQuery } from "../../../hooks";
|
|
|
import { firestore } from "../../../services/firebase";
|
|
import { firestore } from "../../../services/firebase";
|
|
|
import { useHistory } from "react-router-dom";
|
|
import { useHistory } from "react-router-dom";
|
|
|
import { ViewLoading } from "../../../components";
|
|
import { ViewLoading } from "../../../components";
|
|
|
import { DefaultLayout } from "../../../components/layouts";
|
|
import { DefaultLayout } from "../../../components/layouts";
|
|
|
import {
|
|
import {
|
|
|
collection,
|
|
collection,
|
|
|
- doc,
|
|
|
|
|
- getDoc,
|
|
|
|
|
- updateDoc,
|
|
|
|
|
|
|
+ // doc,
|
|
|
|
|
+ // getDoc,
|
|
|
|
|
+ // updateDoc,
|
|
|
query as queryFirestore,
|
|
query as queryFirestore,
|
|
|
startAfter,
|
|
startAfter,
|
|
|
where,
|
|
where,
|
|
@@ -51,12 +52,12 @@ const UsuariosDetalle = () => {
|
|
|
const url = "/administracion/usuarios";
|
|
const url = "/administracion/usuarios";
|
|
|
const [form] = Form.useForm();
|
|
const [form] = Form.useForm();
|
|
|
|
|
|
|
|
- const [usuario, setUsuario] = useState([]);
|
|
|
|
|
- const [cargandoUsuario, setCargandoUsuario] = useState(true);
|
|
|
|
|
|
|
+ // const [usuario, setUsuario] = useState([]);
|
|
|
|
|
+ // const [cargandoUsuario, setCargandoUsuario] = useState(true);
|
|
|
const [guadandoCargando, setGuardandoCargando] = useState(false);
|
|
const [guadandoCargando, setGuardandoCargando] = useState(false);
|
|
|
|
|
|
|
|
- const [cargandoDependencias, setCargandoDependencias] = useState(false);
|
|
|
|
|
- const [dependencias, setDependencias] = useState([]);
|
|
|
|
|
|
|
+ // const [cargandoDependencias, setCargandoDependencias] = useState(false);
|
|
|
|
|
+ // const [dependencias, setDependencias] = useState([]);
|
|
|
|
|
|
|
|
const [atendidos, setAtendidos] = useState(0);
|
|
const [atendidos, setAtendidos] = useState(0);
|
|
|
const [pendientes, setPendientes] = useState(0);
|
|
const [pendientes, setPendientes] = useState(0);
|
|
@@ -65,7 +66,9 @@ const UsuariosDetalle = () => {
|
|
|
|
|
|
|
|
const [esLiderGlobal, setEsLiderGlobal] = useState(false);
|
|
const [esLiderGlobal, setEsLiderGlobal] = useState(false);
|
|
|
|
|
|
|
|
- const [request, setRequest] = useState(emptyRequest);
|
|
|
|
|
|
|
+ const [request, setRequest] = useState(emptyRequest); const [timer, setTimer] = useState(null);
|
|
|
|
|
+ const [dependenciasRequest, setDependenciasRequest] = useState({});
|
|
|
|
|
+ const [buscarValue, setBuscarValue] = useState('');
|
|
|
|
|
|
|
|
const requestParams = useMemo(() => ({
|
|
const requestParams = useMemo(() => ({
|
|
|
name: 'v1/usuario',
|
|
name: 'v1/usuario',
|
|
@@ -73,7 +76,28 @@ const UsuariosDetalle = () => {
|
|
|
expand: 'eventos'
|
|
expand: 'eventos'
|
|
|
}), [id]);
|
|
}), [id]);
|
|
|
|
|
|
|
|
- const { model } = useModel(request)
|
|
|
|
|
|
|
+ const dependenciasExtraParams = React.useMemo(() => ({ q: buscarValue }), [buscarValue])
|
|
|
|
|
+ const dependenciasParams = React.useMemo(() => ({
|
|
|
|
|
+ name: 'v1/dependencia',
|
|
|
|
|
+ limite: 20,
|
|
|
|
|
+ extraParams: dependenciasExtraParams
|
|
|
|
|
+ }), [dependenciasExtraParams])
|
|
|
|
|
+
|
|
|
|
|
+ const { model, modelLoading } = useModel(request)
|
|
|
|
|
+
|
|
|
|
|
+ const [
|
|
|
|
|
+ models,
|
|
|
|
|
+ modelsLoading, , ,
|
|
|
|
|
+ ] = useModels(dependenciasRequest);
|
|
|
|
|
+
|
|
|
|
|
+ const onSearchDependencias = (value) => {
|
|
|
|
|
+ clearTimeout(timer);
|
|
|
|
|
+ const newTimer = setTimeout(() => {
|
|
|
|
|
+ setBuscarValue(value);
|
|
|
|
|
+ }, 300);
|
|
|
|
|
+
|
|
|
|
|
+ setTimer(newTimer);
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
const multipleButtonData = [
|
|
const multipleButtonData = [
|
|
|
{
|
|
{
|
|
@@ -88,6 +112,8 @@ const UsuariosDetalle = () => {
|
|
|
try {
|
|
try {
|
|
|
setGuardandoCargando(true);
|
|
setGuardandoCargando(true);
|
|
|
const {
|
|
const {
|
|
|
|
|
+ clave,
|
|
|
|
|
+ pwdConfirm,
|
|
|
ciudad,
|
|
ciudad,
|
|
|
email,
|
|
email,
|
|
|
facebook,
|
|
facebook,
|
|
@@ -97,13 +123,18 @@ const UsuariosDetalle = () => {
|
|
|
rol,
|
|
rol,
|
|
|
telefono,
|
|
telefono,
|
|
|
twitter,
|
|
twitter,
|
|
|
- dependencias,
|
|
|
|
|
|
|
+ idDependencia,
|
|
|
} = values;
|
|
} = values;
|
|
|
|
|
|
|
|
|
|
+ if (clave !== pwdConfirm) {
|
|
|
|
|
+ message.error("Las contraseñas no coinciden.");
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
let body = {
|
|
let body = {
|
|
|
ciudad: ciudad,
|
|
ciudad: ciudad,
|
|
|
email: email,
|
|
email: email,
|
|
|
- dependencias: dependencias,
|
|
|
|
|
|
|
+ idDependencia: idDependencia,
|
|
|
facebook: facebook?.trim() || "",
|
|
facebook: facebook?.trim() || "",
|
|
|
genero: "",
|
|
genero: "",
|
|
|
instagram: instagram?.trim() || "",
|
|
instagram: instagram?.trim() || "",
|
|
@@ -114,29 +145,34 @@ const UsuariosDetalle = () => {
|
|
|
twitter: twitter?.trim() || "",
|
|
twitter: twitter?.trim() || "",
|
|
|
liderGlobal: esLiderGlobal,
|
|
liderGlobal: esLiderGlobal,
|
|
|
sincronizado: null,
|
|
sincronizado: null,
|
|
|
|
|
+ pwd: clave,
|
|
|
};
|
|
};
|
|
|
|
|
+ delete body.clave;
|
|
|
|
|
+ delete body.pwdConfirm;
|
|
|
|
|
|
|
|
if (editando) {
|
|
if (editando) {
|
|
|
- body["uid"] = id;
|
|
|
|
|
- } else {
|
|
|
|
|
|
|
+ // body["uid"] = id;
|
|
|
|
|
+ body.id = id;
|
|
|
|
|
+ } /* else {
|
|
|
body["verificado"] = "";
|
|
body["verificado"] = "";
|
|
|
body["clave"] = "Laud2026";
|
|
body["clave"] = "Laud2026";
|
|
|
body["timestamp"] = new Date();
|
|
body["timestamp"] = new Date();
|
|
|
- }
|
|
|
|
|
|
|
+ } */
|
|
|
|
|
|
|
|
let res = null;
|
|
let res = null;
|
|
|
- if (editando) {
|
|
|
|
|
|
|
+ res = await HttpService.post('v1/usuario/guardar', body);
|
|
|
|
|
+ /* if (editando) {
|
|
|
res = await HttpService.post("v1/usuario-firebase/put", body);
|
|
res = await HttpService.post("v1/usuario-firebase/put", body);
|
|
|
} else {
|
|
} else {
|
|
|
res = await HttpService.post("v1/usuario-firebase/post", body);
|
|
res = await HttpService.post("v1/usuario-firebase/post", body);
|
|
|
- }
|
|
|
|
|
|
|
+ } */
|
|
|
|
|
|
|
|
if (res?.status >= 200 && res?.status <= 299) {
|
|
if (res?.status >= 200 && res?.status <= 299) {
|
|
|
- body["uid"] = editando ? id : res?.response?.uid;
|
|
|
|
|
|
|
+ /* body["uid"] = editando ? id : res?.response?.uid;
|
|
|
body["grupos"] = editando ? usuario?.grupos : [];
|
|
body["grupos"] = editando ? usuario?.grupos : [];
|
|
|
|
|
|
|
|
const uid = editando ? id : res?.response?.uid;
|
|
const uid = editando ? id : res?.response?.uid;
|
|
|
- await updateDoc(doc(firestore, "usuarios", uid), body);
|
|
|
|
|
|
|
+ await updateDoc(doc(firestore, "usuarios", uid), body); */
|
|
|
|
|
|
|
|
Modal.success({
|
|
Modal.success({
|
|
|
title: "Éxito",
|
|
title: "Éxito",
|
|
@@ -163,11 +199,11 @@ const UsuariosDetalle = () => {
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- const obtenerEventosUsuario = useCallback(async () => {
|
|
|
|
|
|
|
+ /* const obtenerEventosUsuario = useCallback(async () => {
|
|
|
try {
|
|
try {
|
|
|
// Obtener eventos del usuario
|
|
// Obtener eventos del usuario
|
|
|
- const gruposUsuario = usuario?.grupos;
|
|
|
|
|
- const idUsuario = usuario?.uid;
|
|
|
|
|
|
|
+ const gruposUsuario = model?.grupos;
|
|
|
|
|
+ const idUsuario = model?.id;
|
|
|
|
|
|
|
|
// Obtener los eventos de todos los grupos
|
|
// Obtener los eventos de todos los grupos
|
|
|
if (gruposUsuario?.length > 0) {
|
|
if (gruposUsuario?.length > 0) {
|
|
@@ -240,9 +276,9 @@ const UsuariosDetalle = () => {
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
console.log("eror al obtener eventos del usuario: ", error);
|
|
console.log("eror al obtener eventos del usuario: ", error);
|
|
|
}
|
|
}
|
|
|
- }, [usuario?.grupos, usuario?.uid]);
|
|
|
|
|
|
|
+ }, [usuario?.grupos, usuario?.uid]); */
|
|
|
|
|
|
|
|
- const obtenerDependencias = useCallback(async () => {
|
|
|
|
|
|
|
+ /* const obtenerDependencias = useCallback(async () => {
|
|
|
try {
|
|
try {
|
|
|
setCargandoDependencias(true);
|
|
setCargandoDependencias(true);
|
|
|
const querySnapshot = await getDocs(
|
|
const querySnapshot = await getDocs(
|
|
@@ -258,7 +294,7 @@ const UsuariosDetalle = () => {
|
|
|
} finally {
|
|
} finally {
|
|
|
setCargandoDependencias(false);
|
|
setCargandoDependencias(false);
|
|
|
}
|
|
}
|
|
|
- }, []);
|
|
|
|
|
|
|
+ }, []); */
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
|
setRequest(requestParams);
|
|
setRequest(requestParams);
|
|
@@ -269,6 +305,11 @@ const UsuariosDetalle = () => {
|
|
|
}, [requestParams])
|
|
}, [requestParams])
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
|
|
|
+ setDependenciasRequest(dependenciasParams);
|
|
|
|
|
+ return () => setDependenciasRequest({});
|
|
|
|
|
+ }, [dependenciasParams])
|
|
|
|
|
+
|
|
|
|
|
+ useEffect(() => {
|
|
|
if (editando && model) {
|
|
if (editando && model) {
|
|
|
form.setFieldsValue({
|
|
form.setFieldsValue({
|
|
|
...model
|
|
...model
|
|
@@ -277,12 +318,12 @@ const UsuariosDetalle = () => {
|
|
|
}, [editando, form, model])
|
|
}, [editando, form, model])
|
|
|
|
|
|
|
|
// Obtener eventos del usuario.
|
|
// Obtener eventos del usuario.
|
|
|
- useEffect(() => {
|
|
|
|
|
|
|
+ /* useEffect(() => {
|
|
|
obtenerEventosUsuario();
|
|
obtenerEventosUsuario();
|
|
|
- }, [obtenerEventosUsuario]);
|
|
|
|
|
|
|
+ }, [obtenerEventosUsuario]); */
|
|
|
|
|
|
|
|
// Obtener usuario
|
|
// Obtener usuario
|
|
|
- useEffect(() => {
|
|
|
|
|
|
|
+ /* useEffect(() => {
|
|
|
let mounted = true;
|
|
let mounted = true;
|
|
|
if (mounted && editando) {
|
|
if (mounted && editando) {
|
|
|
try {
|
|
try {
|
|
@@ -301,27 +342,25 @@ const UsuariosDetalle = () => {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
return () => (mounted = false);
|
|
return () => (mounted = false);
|
|
|
- }, [editando, id]);
|
|
|
|
|
|
|
+ }, [editando, id]); */
|
|
|
|
|
|
|
|
// Dependencias
|
|
// Dependencias
|
|
|
- useEffect(() => {
|
|
|
|
|
|
|
+ /* useEffect(() => {
|
|
|
obtenerDependencias();
|
|
obtenerDependencias();
|
|
|
- }, [obtenerDependencias]);
|
|
|
|
|
|
|
+ }, [obtenerDependencias]); */
|
|
|
|
|
|
|
|
// Set form
|
|
// Set form
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
|
- let mounted = true;
|
|
|
|
|
- if (mounted && usuario && editando) {
|
|
|
|
|
|
|
+ if (editando && model) {
|
|
|
form.setFieldsValue({
|
|
form.setFieldsValue({
|
|
|
- ...usuario,
|
|
|
|
|
|
|
+ ...model,
|
|
|
});
|
|
});
|
|
|
} else {
|
|
} else {
|
|
|
form.setFieldValue("rol", "cliente");
|
|
form.setFieldValue("rol", "cliente");
|
|
|
}
|
|
}
|
|
|
- return () => (mounted = false);
|
|
|
|
|
- }, [editando, form, usuario]);
|
|
|
|
|
|
|
+ }, [editando, form, model]);
|
|
|
|
|
|
|
|
- if (cargandoUsuario && editando) return <ViewLoading />;
|
|
|
|
|
|
|
+ if (modelLoading && editando) return <ViewLoading />;
|
|
|
|
|
|
|
|
return (
|
|
return (
|
|
|
<DefaultLayout title={titulo} multipleButtonData={multipleButtonData}>
|
|
<DefaultLayout title={titulo} multipleButtonData={multipleButtonData}>
|
|
@@ -374,11 +413,30 @@ const UsuariosDetalle = () => {
|
|
|
</Col>
|
|
</Col>
|
|
|
<Col className="gutter-row" span={24} md={12} lg={8}>
|
|
<Col className="gutter-row" span={24} md={12} lg={8}>
|
|
|
<Form.Item
|
|
<Form.Item
|
|
|
- rules={[{ required: true, message: "Requerido" }]}
|
|
|
|
|
|
|
+ // rules={[{ required: true, message: "Requerido" }]}
|
|
|
label="Dependencia"
|
|
label="Dependencia"
|
|
|
- name="dependencias"
|
|
|
|
|
|
|
+ name="idDependencia"
|
|
|
>
|
|
>
|
|
|
<Select
|
|
<Select
|
|
|
|
|
+ showSearch
|
|
|
|
|
+ onSearch={onSearchDependencias}
|
|
|
|
|
+ allowClear
|
|
|
|
|
+ placeholder="Elige a una dependencia"
|
|
|
|
|
+ optionFilterProp="children"
|
|
|
|
|
+ filterOption={(input, option) =>
|
|
|
|
|
+ (option?.label ?? "")
|
|
|
|
|
+ .toLowerCase()
|
|
|
|
|
+ .includes(input.toLowerCase())
|
|
|
|
|
+ }
|
|
|
|
|
+ loading={modelsLoading}
|
|
|
|
|
+ options={models?.length > 0 && models?.map(i => ({
|
|
|
|
|
+ ...i,
|
|
|
|
|
+ value: i.id,
|
|
|
|
|
+ label: i.nombre
|
|
|
|
|
+ }))}
|
|
|
|
|
+ // onChange={(_, item) => { setNombreDependencia(item?.nombre) }}
|
|
|
|
|
+ />
|
|
|
|
|
+ {/* <Select
|
|
|
placeholder="Seleccionar un una dependencia"
|
|
placeholder="Seleccionar un una dependencia"
|
|
|
style={{ width: "100%" }}
|
|
style={{ width: "100%" }}
|
|
|
allowClear
|
|
allowClear
|
|
@@ -393,7 +451,7 @@ const UsuariosDetalle = () => {
|
|
|
label: i?.nombre,
|
|
label: i?.nombre,
|
|
|
}))
|
|
}))
|
|
|
}
|
|
}
|
|
|
- />
|
|
|
|
|
|
|
+ /> */}
|
|
|
</Form.Item>
|
|
</Form.Item>
|
|
|
</Col>
|
|
</Col>
|
|
|
<Col className="gutter-row" span={24} md={12} lg={8}>
|
|
<Col className="gutter-row" span={24} md={12} lg={8}>
|
|
@@ -489,7 +547,7 @@ const UsuariosDetalle = () => {
|
|
|
<Divider />
|
|
<Divider />
|
|
|
|
|
|
|
|
{/* Atendidos | Pendientes | Incompletos | Totales */}
|
|
{/* Atendidos | Pendientes | Incompletos | Totales */}
|
|
|
- {editando && (
|
|
|
|
|
|
|
+ {/* editando && (
|
|
|
<Row gutter={10}>
|
|
<Row gutter={10}>
|
|
|
<Col
|
|
<Col
|
|
|
className="gutter-row"
|
|
className="gutter-row"
|
|
@@ -547,7 +605,7 @@ const UsuariosDetalle = () => {
|
|
|
/>
|
|
/>
|
|
|
</Col>
|
|
</Col>
|
|
|
</Row>
|
|
</Row>
|
|
|
- )}
|
|
|
|
|
|
|
+ ) */}
|
|
|
</DefaultLayout>
|
|
</DefaultLayout>
|
|
|
);
|
|
);
|
|
|
};
|
|
};
|