flysoft-react-ui 0.5.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/form-controls/AutocompleteInput.d.ts.map +1 -1
- package/dist/components/form-controls/AutocompleteInput.js +175 -130
- package/dist/components/form-controls/SearchSelectInput-OLD.d.ts.map +1 -1
- package/dist/components/form-controls/SearchSelectInput-OLD.js +2 -2
- package/dist/components/form-controls/SearchSelectInput.d.ts.map +1 -1
- package/dist/components/form-controls/SearchSelectInput.js +1 -1
- package/dist/components/layout/AppLayout.d.ts.map +1 -1
- package/dist/components/layout/AppLayout.js +7 -7
- package/dist/components/layout/Card.d.ts.map +1 -1
- package/dist/components/layout/Card.js +4 -4
- package/dist/components/layout/DataTable.js +1 -1
- package/dist/components/layout/DropdownMenu.d.ts.map +1 -0
- package/dist/components/{utils → layout}/DropdownMenu.js +12 -6
- package/dist/components/layout/DropdownPanel.d.ts +7 -0
- package/dist/components/layout/DropdownPanel.d.ts.map +1 -0
- package/dist/components/layout/DropdownPanel.js +137 -0
- package/dist/components/{utils → layout}/Filter.d.ts +5 -0
- package/dist/components/layout/Filter.d.ts.map +1 -0
- package/dist/components/{utils → layout}/Filter.js +17 -9
- package/dist/components/layout/Menu.d.ts +31 -0
- package/dist/components/layout/Menu.d.ts.map +1 -0
- package/dist/components/layout/Menu.js +21 -0
- package/dist/components/layout/index.d.ts +8 -0
- package/dist/components/layout/index.d.ts.map +1 -1
- package/dist/components/layout/index.js +4 -0
- package/dist/components/utils/Dialog.d.ts +2 -2
- package/dist/components/utils/Dialog.d.ts.map +1 -1
- package/dist/components/utils/Dialog.js +2 -2
- package/dist/components/utils/FiltersDialog.d.ts +1 -1
- package/dist/components/utils/FiltersDialog.d.ts.map +1 -1
- package/dist/components/utils/FiltersDialog.js +2 -2
- package/dist/components/utils/index.d.ts +0 -2
- package/dist/components/utils/index.d.ts.map +1 -1
- package/dist/components/utils/index.js +0 -1
- package/dist/contexts/{ListCrudContext.d.ts → CrudContext.d.ts} +20 -8
- package/dist/contexts/CrudContext.d.ts.map +1 -0
- package/dist/contexts/{ListCrudContext.js → CrudContext.js} +102 -22
- package/dist/contexts/index.d.ts +2 -2
- package/dist/contexts/index.d.ts.map +1 -1
- package/dist/contexts/index.js +2 -2
- package/dist/docs/DialogDocs.d.ts.map +1 -1
- package/dist/docs/DialogDocs.js +1 -1
- package/dist/docs/DocsMenu.d.ts.map +1 -1
- package/dist/docs/DocsMenu.js +1 -1
- package/dist/docs/DocsRouter.d.ts.map +1 -1
- package/dist/docs/DocsRouter.js +3 -1
- package/dist/docs/DropdownPanelDocs.d.ts +4 -0
- package/dist/docs/DropdownPanelDocs.d.ts.map +1 -0
- package/dist/docs/DropdownPanelDocs.js +7 -0
- package/dist/docs/FilterDocs.d.ts.map +1 -1
- package/dist/docs/FilterDocs.js +19 -1
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.d.ts.map +1 -1
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.js +26 -14
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaPersonas.d.ts +2 -0
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaPersonas.d.ts.map +1 -0
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaPersonas.js +34 -0
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaSingle.d.ts +2 -0
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaSingle.d.ts.map +1 -0
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaSingle.js +66 -0
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresas.d.ts.map +1 -1
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresas.js +5 -5
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresasPersonasEditDialog.d.ts +10 -0
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresasPersonasEditDialog.d.ts.map +1 -0
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresasPersonasEditDialog.js +39 -0
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.d.ts.map +1 -1
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.js +3 -3
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsEditDialog.d.ts.map +1 -1
- package/dist/docs/ListCrudDocs.tsx/ListCrudDocsEditDialog.js +4 -4
- package/dist/docs/MenuDocs.d.ts +4 -0
- package/dist/docs/MenuDocs.d.ts.map +1 -0
- package/dist/docs/MenuDocs.js +26 -0
- package/dist/docs/docMockServices/empresaService.d.ts +5 -5
- package/dist/docs/docMockServices/empresaService.d.ts.map +1 -1
- package/dist/docs/docMockServices/empresaService.js +18 -10
- package/dist/docs/docMockServices/interfaces.d.ts +12 -0
- package/dist/docs/docMockServices/interfaces.d.ts.map +1 -1
- package/dist/docs/docMockServices/personaEmpresaService.d.ts +6 -6
- package/dist/docs/docMockServices/personaEmpresaService.d.ts.map +1 -1
- package/dist/docs/docMockServices/personaEmpresaService.js +52 -14
- package/dist/docs/docMockServices/personaService.d.ts +1 -1
- package/dist/docs/docMockServices/personaService.d.ts.map +1 -1
- package/dist/docs/docMockServices/personaService.js +14 -5
- package/dist/index.css +1 -1
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
- package/dist/components/utils/DropdownMenu.d.ts.map +0 -1
- package/dist/components/utils/Filter.d.ts.map +0 -1
- package/dist/contexts/ListCrudContext.d.ts.map +0 -1
- /package/dist/components/{utils → layout}/DropdownMenu.d.ts +0 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { personaEmpresaService } from "../docMockServices";
|
|
3
|
+
import { CrudProvider, useCrud } from "../../contexts";
|
|
4
|
+
import { Button, Card, Collection, Dialog, Input, Loader } from "../../components";
|
|
5
|
+
import { useNavigate } from "react-router-dom";
|
|
6
|
+
import { ListCrudDocsContentEmpresaPersonas } from "./ListCrudDocsContentEmpresaPersonas";
|
|
7
|
+
import { useEffect, useState, useCallback } from "react";
|
|
8
|
+
import { DropdownMenu } from "../../components/layout/DropdownMenu";
|
|
9
|
+
import { FormProvider, useForm } from "react-hook-form";
|
|
10
|
+
export const ListCrudDocsContentEmpresaSingle = () => {
|
|
11
|
+
const { item, fetchItem, fetchItems, updateItem, deleteItem } = useCrud();
|
|
12
|
+
const methods = useForm({
|
|
13
|
+
defaultValues: item,
|
|
14
|
+
});
|
|
15
|
+
const { buscarPorEmpresa, agregar, editar, eliminar } = personaEmpresaService;
|
|
16
|
+
const navigate = useNavigate();
|
|
17
|
+
const [isEditing, setIsEditing] = useState(false);
|
|
18
|
+
const [isOpenEliminarDialog, setIsOpenEliminarDialog] = useState(false);
|
|
19
|
+
const buscarPersonasPorEmpresa = useCallback(async () => {
|
|
20
|
+
if (!item?.id) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
const personas = await buscarPorEmpresa(item.id);
|
|
24
|
+
return personas;
|
|
25
|
+
}, [item?.id, buscarPorEmpresa]);
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
if (item) {
|
|
28
|
+
methods.reset(item);
|
|
29
|
+
}
|
|
30
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
31
|
+
}, [item]);
|
|
32
|
+
const onSubmitEdit = async (empresa) => {
|
|
33
|
+
await updateItem.execute(empresa);
|
|
34
|
+
setIsEditing(false);
|
|
35
|
+
fetchItem.execute();
|
|
36
|
+
fetchItems.execute();
|
|
37
|
+
};
|
|
38
|
+
const onDeleteEmpresaSubmit = async () => {
|
|
39
|
+
await deleteItem.execute(item);
|
|
40
|
+
setIsOpenEliminarDialog(false);
|
|
41
|
+
navigate(-1);
|
|
42
|
+
fetchItems.execute();
|
|
43
|
+
};
|
|
44
|
+
return (_jsxs(_Fragment, { children: [_jsx(Card, { title: fetchItem.isLoading ? "" : item?.nombre, headerActions: !isEditing ? (_jsxs(Collection, { direction: "row", children: [_jsx(DropdownMenu, { options: [
|
|
45
|
+
{ label: "Editar", icon: "fa-edit" },
|
|
46
|
+
{ label: "Eliminar", icon: "fa-trash" },
|
|
47
|
+
], onOptionSelected: (item) => {
|
|
48
|
+
if (item.label === "Editar") {
|
|
49
|
+
setIsEditing(true);
|
|
50
|
+
}
|
|
51
|
+
if (item.label === "Eliminar") {
|
|
52
|
+
setIsOpenEliminarDialog(true);
|
|
53
|
+
}
|
|
54
|
+
} }), _jsx(Button, { icon: "fa-undo", variant: "ghost", size: "sm", onClick: () => navigate(-1) })] })) : null, alwaysDisplayHeaderActions: true, footer: isEditing ? (_jsx("div", { className: "flex justify-end", children: _jsxs(Collection, { direction: "row", children: [_jsx(Button, { variant: "outline", onClick: () => setIsEditing(false), disabled: updateItem.isLoading, children: "Cancelar" }), _jsx(Button, { icon: "fa-save", onClick: methods.handleSubmit(onSubmitEdit), disabled: updateItem.isLoading, children: "Guardar" })] }) })) : null, children: !isEditing ? (_jsx(CrudProvider, { getPromise: buscarPersonasPorEmpresa, postPromise: {
|
|
55
|
+
execute: (persona) => agregar(persona),
|
|
56
|
+
successMessage: "Persona agregada correctamente",
|
|
57
|
+
}, putPromise: {
|
|
58
|
+
execute: (personaEmpresa) => editar(personaEmpresa.idPersona, personaEmpresa.idEmpresa, personaEmpresa),
|
|
59
|
+
successMessage: "Cambios guardados",
|
|
60
|
+
}, deletePromise: {
|
|
61
|
+
execute: (persona) => eliminar(persona),
|
|
62
|
+
successMessage: "Persona eliminada correctamente",
|
|
63
|
+
}, extraData: { idEmpresa: item?.id }, children: _jsx(ListCrudDocsContentEmpresaPersonas, {}) })) : (_jsx(FormProvider, { ...methods, children: _jsx("form", { onSubmit: methods.handleSubmit(onSubmitEdit), children: _jsx(Collection, { children: _jsx("div", { className: "w-[300px]", children: _jsx(Input, { label: "Nombre", ...methods.register("nombre", {
|
|
64
|
+
required: "Campo obligatorio",
|
|
65
|
+
}) }) }) }) }) })) }), isOpenEliminarDialog && (_jsxs(Dialog, { isOpen: isOpenEliminarDialog, title: "Eliminar Empresa", onClose: () => setIsOpenEliminarDialog(false), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "outline", onClick: () => setIsOpenEliminarDialog(false), disabled: deleteItem.isLoading, children: "Cancelar" }), _jsx(Button, { onClick: onDeleteEmpresaSubmit, disabled: deleteItem.isLoading, children: "Eliminar" })] }), children: [_jsx("p", { children: "\u00BFEst\u00E1s seguro de querer eliminar esta empresa?" }), _jsx(Loader, { isLoading: deleteItem.isLoading })] }))] }));
|
|
66
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListCrudDocsContentEmpresas.d.ts","sourceRoot":"","sources":["../../../src/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresas.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,2BAA2B,+
|
|
1
|
+
{"version":3,"file":"ListCrudDocsContentEmpresas.d.ts","sourceRoot":"","sources":["../../../src/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresas.tsx"],"names":[],"mappings":"AAIA,eAAO,MAAM,2BAA2B,+CAsCvC,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Card, Collection } from "../../components";
|
|
3
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Card, Collection, Filter, LinkButton, Loader } from "../../components";
|
|
3
|
+
import { useCrud } from "../../contexts";
|
|
4
4
|
export const ListCrudDocsContentEmpresas = () => {
|
|
5
|
-
const { list } =
|
|
6
|
-
return (
|
|
5
|
+
const { list, pagination, fetchItems } = useCrud();
|
|
6
|
+
return (_jsxs(Card, { className: "bg-gray-50", title: "Empresas", children: [_jsxs("div", { className: "flex justify-between items-center my-2", children: [_jsx(Collection, { direction: "row", wrap: true, children: _jsx(Filter, { paramName: "filtroEmpresa", label: "Buscar", filterType: "search" }) }), _jsx(Collection, { direction: "row", wrap: true, children: pagination })] }), _jsx(Loader, { isLoading: fetchItems.isLoading, children: _jsx(Collection, { direction: "row", wrap: true, children: list?.map((empresa) => (_jsx(Card, { className: "bg-white w-[100%] md:w-[45%] lg:w-[30%] xl:w-[18%]", title: empresa.nombre, headerActions: _jsx(LinkButton, { to: `/docs/listcrud/empresa/${empresa.id}`, icon: "fa-search", variant: "ghost", size: "sm" }) }, empresa.id))) }) })] }));
|
|
7
7
|
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type PersonaEmpresaConPersona } from "../docMockServices";
|
|
2
|
+
interface ListCrudDocsContentEmpresasPersonasEditDialogProps {
|
|
3
|
+
isOpen: boolean;
|
|
4
|
+
onClose: () => void;
|
|
5
|
+
personaEmpresa: PersonaEmpresaConPersona | undefined;
|
|
6
|
+
personasEnEmpresa: PersonaEmpresaConPersona[];
|
|
7
|
+
}
|
|
8
|
+
export declare const ListCrudDocsContentEmpresasPersonasEditDialog: ({ isOpen, onClose, personaEmpresa, personasEnEmpresa, }: ListCrudDocsContentEmpresasPersonasEditDialogProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=ListCrudDocsContentEmpresasPersonasEditDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListCrudDocsContentEmpresasPersonasEditDialog.d.ts","sourceRoot":"","sources":["../../../src/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresasPersonasEditDialog.tsx"],"names":[],"mappings":"AASA,OAAO,EAIL,KAAK,wBAAwB,EAC9B,MAAM,oBAAoB,CAAC;AAK5B,UAAU,kDAAkD;IAC1D,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,EAAE,wBAAwB,GAAG,SAAS,CAAC;IACrD,iBAAiB,EAAE,wBAAwB,EAAE,CAAC;CAC/C;AAED,eAAO,MAAM,6CAA6C,GAAI,yDAK3D,kDAAkD,4CAyEpD,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { FormProvider, useForm } from "react-hook-form";
|
|
3
|
+
import { AutocompleteInput, Button, Collection, Dialog, Input, Loader, } from "../../components";
|
|
4
|
+
import { personaService, } from "../docMockServices";
|
|
5
|
+
import { useEffect, useState } from "react";
|
|
6
|
+
import { useCrud } from "../../contexts";
|
|
7
|
+
import { useAsyncRequest } from "../../hooks";
|
|
8
|
+
export const ListCrudDocsContentEmpresasPersonasEditDialog = ({ isOpen, onClose, personaEmpresa, personasEnEmpresa, }) => {
|
|
9
|
+
const { listar } = personaService;
|
|
10
|
+
const { updateItem, createItem, extraData, fetchItems } = useCrud();
|
|
11
|
+
const [personas, setPersonas] = useState([]);
|
|
12
|
+
const listarPersonas = useAsyncRequest();
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
listarPersonas.execute(listar).then((personas) => {
|
|
15
|
+
setPersonas((personas || []).filter((persona) => !personasEnEmpresa.some((personaEnEmpresa) => personaEnEmpresa.idPersona === persona.id)));
|
|
16
|
+
});
|
|
17
|
+
}, [listar, personasEnEmpresa]);
|
|
18
|
+
const methods = useForm({
|
|
19
|
+
defaultValues: personaEmpresa,
|
|
20
|
+
});
|
|
21
|
+
const onSubmit = async (personaEmpresa) => {
|
|
22
|
+
if (personaEmpresa.idEmpresa) {
|
|
23
|
+
await updateItem.execute(personaEmpresa);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
if (!extraData?.idEmpresa) {
|
|
27
|
+
throw new Error("No se encontro el id de la empresa");
|
|
28
|
+
}
|
|
29
|
+
await createItem.execute({ ...personaEmpresa, idEmpresa: extraData.idEmpresa });
|
|
30
|
+
}
|
|
31
|
+
onClose();
|
|
32
|
+
await fetchItems.execute();
|
|
33
|
+
};
|
|
34
|
+
return (_jsx(FormProvider, { ...methods, children: _jsx(Dialog, { isOpen: isOpen, onClose: onClose, title: "Editar Persona Empresa", footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "outline", onClick: onClose, children: "Cancelar" }), _jsx(Button, { onClick: methods.handleSubmit(onSubmit), children: "Guardar" })] }), children: _jsx("form", { onSubmit: methods.handleSubmit(onSubmit), children: _jsxs(Collection, { children: [_jsx(AutocompleteInput, { label: "Persona", options: personas, getOptionLabel: (option) => option.nombre, getOptionValue: (option) => option.id.toString(), ...methods.register("idPersona", {
|
|
35
|
+
required: "Campo obligatorio",
|
|
36
|
+
}), error: methods.formState.errors.idPersona?.message, disabled: listarPersonas.isLoading || updateItem.isLoading || createItem.isLoading }), _jsx(Input, { label: "Cargo", ...methods.register("cargo", {
|
|
37
|
+
required: "Campo obligatorio",
|
|
38
|
+
}), error: methods.formState.errors.cargo?.message, disabled: listarPersonas.isLoading || updateItem.isLoading || createItem.isLoading }), _jsx(Loader, { isLoading: listarPersonas.isLoading || updateItem.isLoading || createItem.isLoading })] }) }) }) }));
|
|
39
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListCrudDocsContentPersonas.d.ts","sourceRoot":"","sources":["../../../src/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.tsx"],"names":[],"mappings":"AAgBA,eAAO,MAAM,2BAA2B,+
|
|
1
|
+
{"version":3,"file":"ListCrudDocsContentPersonas.d.ts","sourceRoot":"","sources":["../../../src/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.tsx"],"names":[],"mappings":"AAgBA,eAAO,MAAM,2BAA2B,+CAkJvC,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { useCrud } from "../../contexts";
|
|
3
3
|
import { Button, Card, Collection, DataTable, Dialog, Filter, Loader, } from "../../components";
|
|
4
4
|
import { useEffect } from "react";
|
|
5
5
|
import { useState } from "react";
|
|
6
6
|
import { empresaService } from "../docMockServices";
|
|
7
7
|
import { ListCrudDocsEditDialog } from "./ListCrudDocsEditDialog";
|
|
8
8
|
export const ListCrudDocsContentPersonas = () => {
|
|
9
|
-
const { list, pagination, isLoading, fetchItems, deleteItem } =
|
|
9
|
+
const { list, pagination, isLoading, fetchItems, deleteItem } = useCrud();
|
|
10
10
|
const { listar } = empresaService;
|
|
11
11
|
const [empresas, setEmpresas] = useState([]);
|
|
12
12
|
const [isOpenDeleteDialog, setIsOpenDeleteDialog] = useState(false);
|
|
@@ -53,5 +53,5 @@ export const ListCrudDocsContentPersonas = () => {
|
|
|
53
53
|
_jsx(Button, { size: "sm", variant: "ghost", icon: "fa-trash", onClick: () => onDeletePersona(row), children: "Eliminar" }, "delete"),
|
|
54
54
|
],
|
|
55
55
|
},
|
|
56
|
-
], rows: list || [], maxRows: 10, isLoading: isLoading, loadingRows: 10 })] }), isOpenDeleteDialog && (
|
|
56
|
+
], rows: list || [], maxRows: 10, isLoading: isLoading, loadingRows: 10 })] }), isOpenDeleteDialog && (_jsxs(Dialog, { isOpen: isOpenDeleteDialog, title: "Eliminar Persona", onClose: () => setIsOpenDeleteDialog(false), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "outline", onClick: () => setIsOpenDeleteDialog(false), disabled: deleteItem.isLoading, children: "Cancelar" }), _jsx(Button, { onClick: onDeletePersonaSubmit, disabled: deleteItem.isLoading, children: "Eliminar" })] }), children: [_jsx("p", { children: "\u00BFEst\u00E1s seguro de querer eliminar esta persona?" }), _jsx(Loader, { isLoading: deleteItem.isLoading })] })), isOpenEditDialog && (_jsx(ListCrudDocsEditDialog, { isOpen: isOpenEditDialog, onClose: () => setIsOpenEditDialog(false), persona: selectedPersona }))] }));
|
|
57
57
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListCrudDocsEditDialog.d.ts","sourceRoot":"","sources":["../../../src/docs/ListCrudDocs.tsx/ListCrudDocsEditDialog.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAsB,MAAM,oBAAoB,CAAC;AAGtE,UAAU,2BAA2B;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B;AAED,eAAO,MAAM,sBAAsB,GAAI,+BAIpC,2BAA2B,
|
|
1
|
+
{"version":3,"file":"ListCrudDocsEditDialog.d.ts","sourceRoot":"","sources":["../../../src/docs/ListCrudDocs.tsx/ListCrudDocsEditDialog.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAsB,MAAM,oBAAoB,CAAC;AAGtE,UAAU,2BAA2B;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;CAC9B;AAED,eAAO,MAAM,sBAAsB,GAAI,+BAIpC,2BAA2B,4CA2E7B,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useForm, FormProvider } from "react-hook-form";
|
|
3
3
|
import { Button, Collection, DateInput, Dialog, Input, Loader, } from "../../components";
|
|
4
|
-
import {
|
|
4
|
+
import { useCrud } from "../../contexts";
|
|
5
5
|
export const ListCrudDocsEditDialog = ({ isOpen, onClose, persona, }) => {
|
|
6
6
|
const methods = useForm({
|
|
7
7
|
defaultValues: persona,
|
|
8
8
|
});
|
|
9
|
-
const { createItem, updateItem, fetchItems } =
|
|
9
|
+
const { createItem, updateItem, fetchItems } = useCrud();
|
|
10
10
|
const { register, handleSubmit, formState: { errors }, } = methods;
|
|
11
11
|
const onSubmit = async (persona) => {
|
|
12
12
|
if (persona.id) {
|
|
@@ -19,12 +19,12 @@ export const ListCrudDocsEditDialog = ({ isOpen, onClose, persona, }) => {
|
|
|
19
19
|
fetchItems.execute();
|
|
20
20
|
};
|
|
21
21
|
const isLoading = createItem.isLoading || updateItem.isLoading;
|
|
22
|
-
return (_jsx(FormProvider, { ...methods, children: _jsx(Dialog, { isOpen: isOpen, onClose: onClose, title: "Editar Persona",
|
|
22
|
+
return (_jsx(FormProvider, { ...methods, children: _jsx(Dialog, { isOpen: isOpen, onClose: onClose, title: "Editar Persona", footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "outline", onClick: onClose, children: "Cancelar" }), _jsx(Button, { onClick: handleSubmit(onSubmit), children: "Guardar" })] }), children: _jsx("form", { onSubmit: handleSubmit(onSubmit), onKeyDown: (e) => {
|
|
23
23
|
if (e.key === "Enter") {
|
|
24
24
|
e.preventDefault();
|
|
25
25
|
handleSubmit(onSubmit)();
|
|
26
26
|
}
|
|
27
27
|
}, children: _jsxs(Collection, { children: [_jsx(Input, { label: "Nombre", ...register("nombre", { required: "Campo obligatorio" }), error: errors.nombre?.message }), _jsx(Input, { label: "Email", ...register("email", { required: "Campo obligatorio" }), error: errors.email?.message }), _jsx(DateInput, { label: "Fecha de Nacimiento", placeholder: "dd/mm/yyyy", icon: "fa-calendar-alt", ...register("fechaNacimiento", {
|
|
28
28
|
required: "Campo obligatorio",
|
|
29
|
-
}), error: errors.fechaNacimiento?.message }), _jsx(Loader, { isLoading: isLoading })] }) })
|
|
29
|
+
}), error: errors.fechaNacimiento?.message }), _jsx(Loader, { isLoading: isLoading })] }) }) }) }));
|
|
30
30
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuDocs.d.ts","sourceRoot":"","sources":["../../src/docs/MenuDocs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAqBxC,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EA2KrB,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React, { useState } from "react";
|
|
3
|
+
import { Card, Menu, Badge } from "../index";
|
|
4
|
+
const MenuDocs = () => {
|
|
5
|
+
const [selectedItem, setSelectedItem] = useState(null);
|
|
6
|
+
// Opciones básicas
|
|
7
|
+
const basicOptions = [
|
|
8
|
+
{ label: "Dashboard", id: "dashboard" },
|
|
9
|
+
{ label: "Configuración", id: "settings" },
|
|
10
|
+
{ label: "Perfil", id: "profile" },
|
|
11
|
+
{ label: "Ayuda", id: "help" },
|
|
12
|
+
];
|
|
13
|
+
// Opciones con iconos
|
|
14
|
+
const optionsWithIcons = [
|
|
15
|
+
{ label: "Editar", icon: "fa-edit", action: "edit" },
|
|
16
|
+
{ label: "Eliminar", icon: "fa-trash", action: "delete" },
|
|
17
|
+
{ label: "Compartir", icon: "fa-share", action: "share" },
|
|
18
|
+
];
|
|
19
|
+
// Opciones complejas
|
|
20
|
+
const userOptions = [
|
|
21
|
+
{ id: 1, name: "Juan Pérez", email: "juan@ejemplo.com", role: "Admin" },
|
|
22
|
+
{ id: 2, name: "María García", email: "maria@ejemplo.com", role: "User" },
|
|
23
|
+
];
|
|
24
|
+
return (_jsx("div", { className: "max-w-5xl mx-auto space-y-8", children: _jsx(Card, { title: "Menu - Lista de Opciones", children: _jsxs("div", { className: "space-y-10", children: [_jsxs("section", { children: [_jsx("h3", { className: "text-lg font-semibold mb-4", style: { color: "var(--flysoft-text-primary)" }, children: "Uso b\u00E1sico" }), _jsx("p", { className: "mb-4 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: "El componente Menu muestra una lista vertical de opciones. Es la versi\u00F3n est\u00E1tica y siempre visible del contenido de un DropdownMenu." }), _jsx("div", { className: "space-y-4", children: _jsxs("div", { className: "flex items-start gap-8", children: [_jsx(Menu, { options: basicOptions, onOptionSelected: (item) => setSelectedItem(item) }), selectedItem && (_jsxs("div", { className: "p-4 border rounded bg-[var(--color-bg-secondary)]", children: [_jsx("p", { className: "text-sm font-semibold", children: "Seleccionado:" }), _jsxs("p", { className: "text-sm", children: [selectedItem.label, " (", selectedItem.id, ")"] })] }))] }) })] }), _jsxs("section", { children: [_jsx("h3", { className: "text-lg font-semibold mb-4", style: { color: "var(--flysoft-text-primary)" }, children: "Personalizaci\u00F3n con renderOption" }), _jsx("p", { className: "mb-4 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: "Puedes personalizar completamente c\u00F3mo se renderiza cada opci\u00F3n." }), _jsx("div", { className: "space-y-4", children: _jsx(Menu, { options: optionsWithIcons, onOptionSelected: (item) => console.log(item), renderOption: (item) => (_jsxs("div", { className: "flex items-center", children: [_jsx("i", { className: `fa ${item.icon} w-6` }), _jsx("span", { children: item.label })] })) }) })] }), _jsxs("section", { children: [_jsx("h3", { className: "text-lg font-semibold mb-4", style: { color: "var(--flysoft-text-primary)" }, children: "Uso de getOptionLabel" }), _jsx("p", { className: "mb-4 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: "Si tus objetos no tienen una propiedad `label`, puedes usar `getOptionLabel`." }), _jsx("div", { className: "space-y-4", children: _jsx(Menu, { options: userOptions, onOptionSelected: (item) => console.log(item), getOptionLabel: (item) => item.name, renderOption: (item) => (_jsxs("div", { className: "flex justify-between items-center w-full min-w-[200px]", children: [_jsxs("div", { children: [_jsx("div", { className: "font-medium", children: item.name }), _jsx("div", { className: "text-xs text-[var(--flysoft-text-secondary)]", children: item.email })] }), _jsx(Badge, { variant: item.role === 'Admin' ? 'primary' : 'secondary', size: "sm", children: item.role })] })) }) })] }), _jsxs("section", { children: [_jsx("h3", { className: "text-lg font-semibold mb-4", style: { color: "var(--flysoft-text-primary)" }, children: "Personalizaci\u00F3n de Estilos" }), _jsx("p", { className: "mb-4 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: "Puedes usar la propiedad `className` para sobreescribir los estilos por defecto usando clases de Tailwind. Por ejemplo, puedes cambiar el color de fondo, quitar el borde o sombra, etc." }), _jsx("div", { className: "space-y-4", children: _jsxs("div", { className: "flex gap-8 flex-wrap", children: [_jsxs("div", { children: [_jsx("h4", { className: "text-sm font-medium mb-2", children: "Fondo Oscuro" }), _jsx(Menu, { options: basicOptions, onOptionSelected: (item) => setSelectedItem(item), className: "bg-gray-800 border-gray-700 text-white", itemClassName: "text-gray-200 hover:bg-gray-700 hover:text-white", renderOption: (item) => (_jsx("span", { children: item.label })) })] }), _jsxs("div", { children: [_jsx("h4", { className: "text-sm font-medium mb-2", children: "Sin Borde ni Sombra" }), _jsx(Menu, { options: basicOptions, onOptionSelected: (item) => setSelectedItem(item), className: "border-0 shadow-none bg-blue-50" })] }), _jsxs("div", { children: [_jsx("h4", { className: "text-sm font-medium mb-2", children: "Estilo Destacado" }), _jsx(Menu, { options: basicOptions, onOptionSelected: (item) => setSelectedItem(item), className: "bg-indigo-50 border-indigo-200 shadow-md", renderOption: (item) => (_jsx("span", { className: "text-indigo-800 font-medium", children: item.label })) })] })] }) })] })] }) }) }));
|
|
25
|
+
};
|
|
26
|
+
export default MenuDocs;
|
|
@@ -14,14 +14,14 @@ export declare const empresaService: {
|
|
|
14
14
|
* Obtiene empresas paginadas opcionalmente filtradas por nombre
|
|
15
15
|
*/
|
|
16
16
|
listarPaginados(params?: {
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
filtroEmpresa?: string;
|
|
18
|
+
paginaEmpresa?: number;
|
|
19
19
|
limit?: number;
|
|
20
20
|
}): Promise<PaginationInterface<Empresa>>;
|
|
21
21
|
/**
|
|
22
22
|
* Busca una empresa por ID
|
|
23
23
|
*/
|
|
24
|
-
buscarPorId(id:
|
|
24
|
+
buscarPorId(id: string): Promise<Empresa>;
|
|
25
25
|
/**
|
|
26
26
|
* Agrega una nueva empresa
|
|
27
27
|
*/
|
|
@@ -31,8 +31,8 @@ export declare const empresaService: {
|
|
|
31
31
|
*/
|
|
32
32
|
editar(id: number, datos: Partial<Omit<Empresa, "id">>): Promise<Empresa | null>;
|
|
33
33
|
/**
|
|
34
|
-
* Elimina una empresa por ID
|
|
34
|
+
* Elimina una empresa por ID y todas sus relaciones con personas
|
|
35
35
|
*/
|
|
36
|
-
eliminar(
|
|
36
|
+
eliminar(empresa: Empresa): Promise<void>;
|
|
37
37
|
};
|
|
38
38
|
//# sourceMappingURL=empresaService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"empresaService.d.ts","sourceRoot":"","sources":["../../../src/docs/docMockServices/empresaService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"empresaService.d.ts","sourceRoot":"","sources":["../../../src/docs/docMockServices/empresaService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAoBrF;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB;;OAEG;oBACmB;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAY9D;;OAEG;6BAC4B;QAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IA2CzC;;OAEG;oBACmB,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW/C;;OAEG;qBACoB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAe7D;;OAEG;eAEG,MAAM,SACH,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,GAClC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAW1B;;OAEG;sBACqB,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAYhD,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { personaEmpresaService } from "./personaEmpresaService";
|
|
1
2
|
const STORAGE_KEY = "docMockServices_empresas";
|
|
2
3
|
/**
|
|
3
4
|
* Simula un delay de red para hacer más realista el mock
|
|
@@ -32,14 +33,15 @@ export const empresaService = {
|
|
|
32
33
|
* Obtiene empresas paginadas opcionalmente filtradas por nombre
|
|
33
34
|
*/
|
|
34
35
|
async listarPaginados(params) {
|
|
36
|
+
console.log("Lista empresas paginadas", params);
|
|
35
37
|
await simulateNetworkDelay();
|
|
36
|
-
const pagina = params?.
|
|
38
|
+
const pagina = params?.paginaEmpresa ?? 1;
|
|
37
39
|
const limit = params?.limit ?? 20;
|
|
38
40
|
const todas = _obtenerTodas();
|
|
39
41
|
let todasFiltradas = todas;
|
|
40
|
-
if (params?.
|
|
41
|
-
const filtroLower = params.
|
|
42
|
-
todasFiltradas =
|
|
42
|
+
if (params?.filtroEmpresa) {
|
|
43
|
+
const filtroLower = params.filtroEmpresa.toLowerCase();
|
|
44
|
+
todasFiltradas = todasFiltradas.filter((emp) => emp.nombre.toLowerCase().includes(filtroLower));
|
|
43
45
|
}
|
|
44
46
|
const total = todasFiltradas.length;
|
|
45
47
|
// Si limit es 0, devolver todos los elementos sin paginar
|
|
@@ -68,9 +70,14 @@ export const empresaService = {
|
|
|
68
70
|
* Busca una empresa por ID
|
|
69
71
|
*/
|
|
70
72
|
async buscarPorId(id) {
|
|
73
|
+
console.log("Busca empresa por id", id);
|
|
71
74
|
await simulateNetworkDelay();
|
|
72
75
|
const empresas = _obtenerTodas();
|
|
73
|
-
|
|
76
|
+
const empresa = empresas.find((emp) => emp.id.toString() === id.toString());
|
|
77
|
+
if (!empresa) {
|
|
78
|
+
throw new Error("Empresa no encontrada");
|
|
79
|
+
}
|
|
80
|
+
return empresa;
|
|
74
81
|
},
|
|
75
82
|
/**
|
|
76
83
|
* Agrega una nueva empresa
|
|
@@ -102,16 +109,17 @@ export const empresaService = {
|
|
|
102
109
|
return empresas[index];
|
|
103
110
|
},
|
|
104
111
|
/**
|
|
105
|
-
* Elimina una empresa por ID
|
|
112
|
+
* Elimina una empresa por ID y todas sus relaciones con personas
|
|
106
113
|
*/
|
|
107
|
-
async eliminar(
|
|
114
|
+
async eliminar(empresa) {
|
|
108
115
|
await simulateNetworkDelay();
|
|
109
116
|
const empresas = _obtenerTodas();
|
|
110
|
-
const index = empresas.findIndex((emp) => emp.id === id);
|
|
117
|
+
const index = empresas.findIndex((emp) => emp.id === empresa.id);
|
|
111
118
|
if (index === -1)
|
|
112
|
-
return
|
|
119
|
+
return;
|
|
120
|
+
// Eliminar todas las relaciones de esta empresa
|
|
121
|
+
await personaEmpresaService.eliminarPorEmpresa(empresa.id);
|
|
113
122
|
empresas.splice(index, 1);
|
|
114
123
|
localStorage.setItem(STORAGE_KEY, JSON.stringify(empresas));
|
|
115
|
-
return true;
|
|
116
124
|
},
|
|
117
125
|
};
|
|
@@ -23,4 +23,16 @@ export interface PersonaEmpresa {
|
|
|
23
23
|
idEmpresa: number;
|
|
24
24
|
cargo: string;
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Relación Persona-Empresa con la información completa de la Persona
|
|
28
|
+
*/
|
|
29
|
+
export interface PersonaEmpresaConPersona extends PersonaEmpresa {
|
|
30
|
+
persona: Persona;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Relación Persona-Empresa con la información completa de la Empresa
|
|
34
|
+
*/
|
|
35
|
+
export interface PersonaEmpresaConEmpresa extends PersonaEmpresa {
|
|
36
|
+
empresa: Empresa;
|
|
37
|
+
}
|
|
26
38
|
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/docs/docMockServices/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC;;GAEG;AAEH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,KAAK,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,OAAO;IACjD,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf"}
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/docs/docMockServices/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC;;GAEG;AAEH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,KAAK,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,OAAO;IACjD,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC9D,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC9D,OAAO,EAAE,OAAO,CAAC;CAClB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PersonaEmpresa } from "./interfaces";
|
|
1
|
+
import type { PersonaEmpresa, PersonaEmpresaConPersona, PersonaEmpresaConEmpresa } from "./interfaces";
|
|
2
2
|
/**
|
|
3
3
|
* Servicio mock para gestionar relaciones Persona-Empresa en localStorage
|
|
4
4
|
*/
|
|
@@ -8,13 +8,13 @@ export declare const personaEmpresaService: {
|
|
|
8
8
|
*/
|
|
9
9
|
listar(): Promise<PersonaEmpresa[]>;
|
|
10
10
|
/**
|
|
11
|
-
* Busca relaciones por ID de persona
|
|
11
|
+
* Busca relaciones por ID de persona, incluyendo la información completa de la empresa
|
|
12
12
|
*/
|
|
13
|
-
buscarPorPersona(idPersona: number): Promise<
|
|
13
|
+
buscarPorPersona(idPersona: number): Promise<PersonaEmpresaConEmpresa[]>;
|
|
14
14
|
/**
|
|
15
|
-
* Busca relaciones por ID de empresa
|
|
15
|
+
* Busca relaciones por ID de empresa, incluyendo la información completa de la persona
|
|
16
16
|
*/
|
|
17
|
-
buscarPorEmpresa(idEmpresa: number): Promise<
|
|
17
|
+
buscarPorEmpresa(idEmpresa: number): Promise<PersonaEmpresaConPersona[]>;
|
|
18
18
|
/**
|
|
19
19
|
* Busca una relación específica por persona y empresa
|
|
20
20
|
*/
|
|
@@ -30,7 +30,7 @@ export declare const personaEmpresaService: {
|
|
|
30
30
|
/**
|
|
31
31
|
* Elimina una relación por persona y empresa
|
|
32
32
|
*/
|
|
33
|
-
eliminar(
|
|
33
|
+
eliminar(personaEmpresa: PersonaEmpresa): Promise<void>;
|
|
34
34
|
/**
|
|
35
35
|
* Elimina todas las relaciones de una persona
|
|
36
36
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personaEmpresaService.d.ts","sourceRoot":"","sources":["../../../src/docs/docMockServices/personaEmpresaService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"personaEmpresaService.d.ts","sourceRoot":"","sources":["../../../src/docs/docMockServices/personaEmpresaService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,cAAc,CAAC;AAqBtB;;GAEG;AACH,eAAO,MAAM,qBAAqB;IAChC;;OAEG;cACa,OAAO,CAAC,cAAc,EAAE,CAAC;IAKzC;;OAEG;gCAEU,MAAM,GAChB,OAAO,CAAC,wBAAwB,EAAE,CAAC;IA6BtC;;OAEG;gCAEU,MAAM,GAChB,OAAO,CAAC,wBAAwB,EAAE,CAAC;IAyCtC;;OAEG;wCAEU,MAAM,aACN,MAAM,GAChB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAQtC;;OAEG;sBACqB,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAgBhE;;OAEG;sBAEU,MAAM,aACN,MAAM,SACV,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,WAAW,CAAC,CAAC,GAC9D,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAajC;;OAEG;6BAC4B,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAY7D;;OAEG;kCACiC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW5D;;OAEG;kCACiC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAU7D,CAAC"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { personaService } from "./personaService";
|
|
2
|
+
import { empresaService } from "./empresaService";
|
|
1
3
|
const STORAGE_KEY = "docMockServices_personaEmpresas";
|
|
2
4
|
/**
|
|
3
5
|
* Simula un delay de red para hacer más realista el mock
|
|
@@ -24,20 +26,57 @@ export const personaEmpresaService = {
|
|
|
24
26
|
return _obtenerTodas();
|
|
25
27
|
},
|
|
26
28
|
/**
|
|
27
|
-
* Busca relaciones por ID de persona
|
|
29
|
+
* Busca relaciones por ID de persona, incluyendo la información completa de la empresa
|
|
28
30
|
*/
|
|
29
31
|
async buscarPorPersona(idPersona) {
|
|
30
32
|
await simulateNetworkDelay();
|
|
31
33
|
const relaciones = _obtenerTodas();
|
|
32
|
-
|
|
34
|
+
const relacionesFiltradas = relaciones.filter((rel) => rel.idPersona.toString() === idPersona.toString());
|
|
35
|
+
// Obtener todas las empresas de una vez para optimizar
|
|
36
|
+
const todasLasEmpresas = await empresaService.listar();
|
|
37
|
+
// Enriquecer cada relación con la información de la empresa
|
|
38
|
+
const relacionesConEmpresas = await Promise.all(relacionesFiltradas.map(async (rel) => {
|
|
39
|
+
const empresa = todasLasEmpresas.find((e) => e.id.toString() === rel.idEmpresa.toString());
|
|
40
|
+
if (!empresa) {
|
|
41
|
+
throw new Error(`Empresa con id ${rel.idEmpresa} no encontrada para la relación`);
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
...rel,
|
|
45
|
+
empresa,
|
|
46
|
+
};
|
|
47
|
+
}));
|
|
48
|
+
return relacionesConEmpresas;
|
|
33
49
|
},
|
|
34
50
|
/**
|
|
35
|
-
* Busca relaciones por ID de empresa
|
|
51
|
+
* Busca relaciones por ID de empresa, incluyendo la información completa de la persona
|
|
36
52
|
*/
|
|
37
53
|
async buscarPorEmpresa(idEmpresa) {
|
|
54
|
+
console.log("Busca relaciones por empresa", idEmpresa);
|
|
38
55
|
await simulateNetworkDelay();
|
|
39
56
|
const relaciones = _obtenerTodas();
|
|
40
|
-
|
|
57
|
+
const relacionesFiltradas = relaciones.filter((rel) => rel.idEmpresa.toString() === idEmpresa.toString());
|
|
58
|
+
// Obtener todas las personas de una vez para optimizar
|
|
59
|
+
const todasLasPersonas = await personaService.listar();
|
|
60
|
+
// Enriquecer cada relación con la información de la persona
|
|
61
|
+
// PersonaConEmpresas extiende Persona, así que podemos usarlo directamente
|
|
62
|
+
const relacionesConPersonas = await Promise.all(relacionesFiltradas.map(async (rel) => {
|
|
63
|
+
const personaConEmpresas = todasLasPersonas.find((p) => p.id.toString() === rel.idPersona.toString());
|
|
64
|
+
if (!personaConEmpresas) {
|
|
65
|
+
throw new Error(`Persona con id ${rel.idPersona} no encontrada para la relación`);
|
|
66
|
+
}
|
|
67
|
+
// Extraer solo los campos de Persona (sin empresas)
|
|
68
|
+
const persona = {
|
|
69
|
+
id: personaConEmpresas.id,
|
|
70
|
+
nombre: personaConEmpresas.nombre,
|
|
71
|
+
email: personaConEmpresas.email,
|
|
72
|
+
fechaNacimiento: personaConEmpresas.fechaNacimiento,
|
|
73
|
+
};
|
|
74
|
+
return {
|
|
75
|
+
...rel,
|
|
76
|
+
persona,
|
|
77
|
+
};
|
|
78
|
+
}));
|
|
79
|
+
return relacionesConPersonas;
|
|
41
80
|
},
|
|
42
81
|
/**
|
|
43
82
|
* Busca una relación específica por persona y empresa
|
|
@@ -45,7 +84,7 @@ export const personaEmpresaService = {
|
|
|
45
84
|
async buscarPorPersonaYEmpresa(idPersona, idEmpresa) {
|
|
46
85
|
await simulateNetworkDelay();
|
|
47
86
|
const relaciones = _obtenerTodas();
|
|
48
|
-
return relaciones.find((rel) => rel.idPersona === idPersona && rel.idEmpresa === idEmpresa);
|
|
87
|
+
return relaciones.find((rel) => rel.idPersona.toString() === idPersona.toString() && rel.idEmpresa.toString() === idEmpresa.toString());
|
|
49
88
|
},
|
|
50
89
|
/**
|
|
51
90
|
* Agrega una nueva relación
|
|
@@ -54,8 +93,8 @@ export const personaEmpresaService = {
|
|
|
54
93
|
await simulateNetworkDelay();
|
|
55
94
|
const relaciones = _obtenerTodas();
|
|
56
95
|
// Verificar que no exista ya la relación
|
|
57
|
-
const existe = relaciones.some((rel) => rel.idPersona === relacion.idPersona &&
|
|
58
|
-
rel.idEmpresa === relacion.idEmpresa);
|
|
96
|
+
const existe = relaciones.some((rel) => rel.idPersona.toString() === relacion.idPersona.toString() &&
|
|
97
|
+
rel.idEmpresa.toString() === relacion.idEmpresa.toString());
|
|
59
98
|
if (!existe) {
|
|
60
99
|
relaciones.push(relacion);
|
|
61
100
|
localStorage.setItem(STORAGE_KEY, JSON.stringify(relaciones));
|
|
@@ -68,7 +107,7 @@ export const personaEmpresaService = {
|
|
|
68
107
|
async editar(idPersona, idEmpresa, datos) {
|
|
69
108
|
await simulateNetworkDelay();
|
|
70
109
|
const relaciones = _obtenerTodas();
|
|
71
|
-
const index = relaciones.findIndex((rel) => rel.idPersona === idPersona && rel.idEmpresa === idEmpresa);
|
|
110
|
+
const index = relaciones.findIndex((rel) => rel.idPersona.toString() === idPersona.toString() && rel.idEmpresa.toString() === idEmpresa.toString());
|
|
72
111
|
if (index === -1)
|
|
73
112
|
return null;
|
|
74
113
|
relaciones[index] = { ...relaciones[index], ...datos };
|
|
@@ -78,15 +117,14 @@ export const personaEmpresaService = {
|
|
|
78
117
|
/**
|
|
79
118
|
* Elimina una relación por persona y empresa
|
|
80
119
|
*/
|
|
81
|
-
async eliminar(
|
|
120
|
+
async eliminar(personaEmpresa) {
|
|
82
121
|
await simulateNetworkDelay();
|
|
83
122
|
const relaciones = _obtenerTodas();
|
|
84
|
-
const index = relaciones.findIndex((rel) => rel.idPersona === idPersona && rel.idEmpresa === idEmpresa);
|
|
123
|
+
const index = relaciones.findIndex((rel) => rel.idPersona.toString() === personaEmpresa.idPersona.toString() && rel.idEmpresa.toString() === personaEmpresa.idEmpresa.toString());
|
|
85
124
|
if (index === -1)
|
|
86
|
-
return
|
|
125
|
+
return;
|
|
87
126
|
relaciones.splice(index, 1);
|
|
88
127
|
localStorage.setItem(STORAGE_KEY, JSON.stringify(relaciones));
|
|
89
|
-
return true;
|
|
90
128
|
},
|
|
91
129
|
/**
|
|
92
130
|
* Elimina todas las relaciones de una persona
|
|
@@ -95,7 +133,7 @@ export const personaEmpresaService = {
|
|
|
95
133
|
await simulateNetworkDelay();
|
|
96
134
|
const relaciones = _obtenerTodas();
|
|
97
135
|
const inicialLength = relaciones.length;
|
|
98
|
-
const nuevasRelaciones = relaciones.filter((rel) => rel.idPersona !== idPersona);
|
|
136
|
+
const nuevasRelaciones = relaciones.filter((rel) => rel.idPersona.toString() !== idPersona.toString());
|
|
99
137
|
localStorage.setItem(STORAGE_KEY, JSON.stringify(nuevasRelaciones));
|
|
100
138
|
return inicialLength - nuevasRelaciones.length;
|
|
101
139
|
},
|
|
@@ -106,7 +144,7 @@ export const personaEmpresaService = {
|
|
|
106
144
|
await simulateNetworkDelay();
|
|
107
145
|
const relaciones = _obtenerTodas();
|
|
108
146
|
const inicialLength = relaciones.length;
|
|
109
|
-
const nuevasRelaciones = relaciones.filter((rel) => rel.idEmpresa !== idEmpresa);
|
|
147
|
+
const nuevasRelaciones = relaciones.filter((rel) => rel.idEmpresa.toString() !== idEmpresa.toString());
|
|
110
148
|
localStorage.setItem(STORAGE_KEY, JSON.stringify(nuevasRelaciones));
|
|
111
149
|
return inicialLength - nuevasRelaciones.length;
|
|
112
150
|
},
|
|
@@ -32,7 +32,7 @@ export declare const personaService: {
|
|
|
32
32
|
*/
|
|
33
33
|
editar(id: number, datos: Partial<Omit<Persona, "id">>): Promise<Persona | undefined>;
|
|
34
34
|
/**
|
|
35
|
-
* Elimina una persona por ID
|
|
35
|
+
* Elimina una persona por ID y todas sus relaciones con empresas
|
|
36
36
|
*/
|
|
37
37
|
eliminar(persona: Persona): Promise<void>;
|
|
38
38
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personaService.d.ts","sourceRoot":"","sources":["../../../src/docs/docMockServices/personaService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAW,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AA6DrF;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB;;OAEG;oBACmB;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAuBzE;;OAEG;6BAC4B;QAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;IAoEpD;;OAEG;oBACmB,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM3D;;OAEG;qBACoB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB7D;;OAEG;eAEG,MAAM,SACH,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,GAClC,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAgB/B;;OAEG;sBACqB,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"personaService.d.ts","sourceRoot":"","sources":["../../../src/docs/docMockServices/personaService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAW,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AA6DrF;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB;;OAEG;oBACmB;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAuBzE;;OAEG;6BAC4B;QAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;IAoEpD;;OAEG;oBACmB,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM3D;;OAEG;qBACoB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB7D;;OAEG;eAEG,MAAM,SACH,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,GAClC,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAgB/B;;OAEG;sBACqB,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBhD,CAAC"}
|
|
@@ -38,7 +38,7 @@ const _enriquecerConEmpresas = async (persona, todasLasEmpresas) => {
|
|
|
38
38
|
else {
|
|
39
39
|
// Si no, obtener cada empresa individualmente
|
|
40
40
|
for (const idEmpresa of empresasIds) {
|
|
41
|
-
const empresa = await empresaService.buscarPorId(idEmpresa);
|
|
41
|
+
const empresa = await empresaService.buscarPorId(idEmpresa.toString());
|
|
42
42
|
if (empresa) {
|
|
43
43
|
empresas.push(empresa);
|
|
44
44
|
}
|
|
@@ -88,8 +88,8 @@ export const personaService = {
|
|
|
88
88
|
// y filtrar las personas que tienen esa relación
|
|
89
89
|
if (params?.idEmpresa !== undefined) {
|
|
90
90
|
const relaciones = await personaEmpresaService.buscarPorEmpresa(Number(params.idEmpresa));
|
|
91
|
-
const personasIdsConEmpresa = new Set(relaciones.map((rel) => rel.idPersona));
|
|
92
|
-
todasFiltradas = todasFiltradas.filter((per) => personasIdsConEmpresa.has(per.id));
|
|
91
|
+
const personasIdsConEmpresa = new Set(relaciones.map((rel) => rel.idPersona.toString()));
|
|
92
|
+
todasFiltradas = todasFiltradas.filter((per) => personasIdsConEmpresa.has(per.id.toString()));
|
|
93
93
|
}
|
|
94
94
|
const total = todasFiltradas.length;
|
|
95
95
|
// Obtener todas las empresas de una vez para optimizar
|
|
@@ -169,13 +169,22 @@ export const personaService = {
|
|
|
169
169
|
return personas[index];
|
|
170
170
|
},
|
|
171
171
|
/**
|
|
172
|
-
* Elimina una persona por ID
|
|
172
|
+
* Elimina una persona por ID y todas sus relaciones con empresas
|
|
173
173
|
*/
|
|
174
174
|
async eliminar(persona) {
|
|
175
175
|
await simulateNetworkDelay();
|
|
176
176
|
const personas = _obtenerTodas();
|
|
177
177
|
const index = personas.findIndex((per) => per.id === persona.id);
|
|
178
|
+
if (index === -1)
|
|
179
|
+
return;
|
|
180
|
+
// Eliminar todas las relaciones de esta persona
|
|
181
|
+
await personaEmpresaService.eliminarPorPersona(persona.id);
|
|
178
182
|
personas.splice(index, 1);
|
|
179
|
-
|
|
183
|
+
// Guardar convirtiendo fechaNacimiento a string ISO
|
|
184
|
+
const personasParaGuardar = personas.map((p) => ({
|
|
185
|
+
...p,
|
|
186
|
+
fechaNacimiento: p.fechaNacimiento.toISOString(),
|
|
187
|
+
}));
|
|
188
|
+
localStorage.setItem(STORAGE_KEY, JSON.stringify(personasParaGuardar));
|
|
180
189
|
},
|
|
181
190
|
};
|