flysoft-react-ui 0.5.3 → 1.0.1
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/AI_CONTEXT.md +84 -0
- 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 +6 -4
- 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
|
@@ -1,29 +1,41 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect } from "react";
|
|
3
3
|
import { useAppLayout } from "../../contexts";
|
|
4
|
-
import {
|
|
4
|
+
import { CrudProvider } from "../../contexts/CrudContext";
|
|
5
5
|
import { empresaService, personaService, } from "../docMockServices";
|
|
6
6
|
import { ListCrudDocsContentPersonas } from "./ListCrudDocsContentPersonas";
|
|
7
|
-
import { Collection } from "../../components";
|
|
7
|
+
import { Collection, TabPanel, TabsGroup } from "../../components";
|
|
8
8
|
import { ListCrudDocsContentEmpresas } from "./ListCrudDocsContentEmpresas";
|
|
9
|
+
import { useParams } from "react-router-dom";
|
|
10
|
+
import { ListCrudDocsContentEmpresaSingle } from "./ListCrudDocsContentEmpresaSingle";
|
|
9
11
|
export const ListCrudDocs = () => {
|
|
10
12
|
const { listarPaginados, eliminar, editar, agregar } = personaService;
|
|
11
|
-
const { listarPaginados: listarPaginadosEmpresa } = empresaService;
|
|
13
|
+
const { listarPaginados: listarPaginadosEmpresa, buscarPorId, editar: editarEmpresa, eliminar: eliminarEmpresa, } = empresaService;
|
|
12
14
|
const { setNavBarLeftNode } = useAppLayout();
|
|
13
15
|
useEffect(() => {
|
|
14
|
-
setNavBarLeftNode(_jsx("h3", { className: "text-2xl font-semibold", children: "
|
|
16
|
+
setNavBarLeftNode(_jsx("h3", { className: "text-2xl font-semibold", children: "CrudContext" }));
|
|
15
17
|
return () => {
|
|
16
18
|
setNavBarLeftNode(_jsx(_Fragment, {}));
|
|
17
19
|
};
|
|
18
20
|
}, [setNavBarLeftNode]);
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
21
|
+
const { id } = useParams();
|
|
22
|
+
return (_jsx(Collection, { children: _jsxs(TabsGroup, { tabs: [
|
|
23
|
+
{ id: "personas", label: "Personas" },
|
|
24
|
+
{ id: "empresas", label: "Empresas" },
|
|
25
|
+
], paramName: "tab", children: [_jsx(TabPanel, { tabId: "personas", children: _jsx(CrudProvider, { getPromise: listarPaginados, postPromise: {
|
|
26
|
+
execute: agregar,
|
|
27
|
+
successMessage: "Persona agregada correctamente",
|
|
28
|
+
}, putPromise: {
|
|
29
|
+
execute: (persona) => editar(persona.id, persona),
|
|
30
|
+
successMessage: "Cambios guardados",
|
|
31
|
+
}, deletePromise: {
|
|
32
|
+
execute: eliminar,
|
|
33
|
+
successMessage: "Persona eliminada correctamente",
|
|
34
|
+
}, urlParams: ["filtro", "idEmpresa"], children: _jsx(ListCrudDocsContentPersonas, {}) }) }), _jsx(TabPanel, { tabId: "empresas", children: _jsx(CrudProvider, { getPromise: listarPaginadosEmpresa, putPromise: {
|
|
35
|
+
execute: (empresa) => editarEmpresa(empresa.id, empresa),
|
|
36
|
+
successMessage: "Cambios guardados",
|
|
37
|
+
}, deletePromise: {
|
|
38
|
+
execute: eliminarEmpresa,
|
|
39
|
+
successMessage: "Persona eliminada correctamente",
|
|
40
|
+
}, getItemPromise: (params) => buscarPorId(params?.toString() || ""), pageParam: "paginaEmpresa", urlParams: ["filtroEmpresa", "idEmpresaEmpresa"], singleItemId: id, children: id ? (_jsx(ListCrudDocsContentEmpresaSingle, {})) : (_jsx(ListCrudDocsContentEmpresas, {})) }) })] }) }));
|
|
29
41
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListCrudDocsContentEmpresaPersonas.d.ts","sourceRoot":"","sources":["../../../src/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaPersonas.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,kCAAkC,+CAsG9C,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { Button, Card, DataTable, Dialog, Loader } from "../../components";
|
|
4
|
+
import { useCrud } from "../../contexts";
|
|
5
|
+
import { ListCrudDocsContentEmpresasPersonasEditDialog } from "./ListCrudDocsContentEmpresasPersonasEditDialog";
|
|
6
|
+
export const ListCrudDocsContentEmpresaPersonas = () => {
|
|
7
|
+
const { list, fetchItems, deleteItem } = useCrud();
|
|
8
|
+
const [isOpenEditDialog, setIsOpenEditDialog] = useState(false);
|
|
9
|
+
const [isOpenEliminarDialog, setIsOpenEliminarDialog] = useState(false);
|
|
10
|
+
const [selectedPersonaEmpresa, setSelectedPersonaEmpresa] = useState();
|
|
11
|
+
const onEditPersonaEmpresa = (personaEmpresa) => {
|
|
12
|
+
setSelectedPersonaEmpresa(personaEmpresa);
|
|
13
|
+
setIsOpenEditDialog(true);
|
|
14
|
+
};
|
|
15
|
+
const onEliminarPersonaEmpresa = (personaEmpresa) => {
|
|
16
|
+
setSelectedPersonaEmpresa(personaEmpresa);
|
|
17
|
+
setIsOpenEliminarDialog(true);
|
|
18
|
+
};
|
|
19
|
+
const onDeletePersonaSubmit = async () => {
|
|
20
|
+
await deleteItem.execute(selectedPersonaEmpresa);
|
|
21
|
+
setIsOpenEliminarDialog(false);
|
|
22
|
+
await fetchItems.execute();
|
|
23
|
+
};
|
|
24
|
+
return (_jsxs(_Fragment, { children: [_jsx(Card, { title: "Personas", headerActions: _jsx(Button, { icon: "fa-plus", onClick: () => onEditPersonaEmpresa(undefined), children: "Agregar Persona" }), alwaysDisplayHeaderActions: true, children: _jsx(DataTable, { isLoading: fetchItems.isLoading, columns: [
|
|
25
|
+
{ header: "Nombre", value: (row) => row.persona.nombre },
|
|
26
|
+
{ header: "Cargo", value: (row) => row.cargo },
|
|
27
|
+
{
|
|
28
|
+
actions: (row) => [
|
|
29
|
+
_jsx(Button, { icon: "fa-edit", onClick: () => onEditPersonaEmpresa(row), variant: "ghost", children: " Editar " }),
|
|
30
|
+
_jsx(Button, { icon: "fa-trash", onClick: () => onEliminarPersonaEmpresa(row), variant: "ghost", children: " Eliminar " })
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
], rows: list || [] }) }), isOpenEditDialog && (_jsx(ListCrudDocsContentEmpresasPersonasEditDialog, { isOpen: isOpenEditDialog, onClose: () => setIsOpenEditDialog(false), personaEmpresa: selectedPersonaEmpresa, personasEnEmpresa: list || [] })), isOpenEliminarDialog && (_jsxs(Dialog, { isOpen: isOpenEliminarDialog, title: "Eliminar Persona", onClose: () => setIsOpenEliminarDialog(false), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "outline", onClick: () => setIsOpenEliminarDialog(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 })] }))] }));
|
|
34
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListCrudDocsContentEmpresaSingle.d.ts","sourceRoot":"","sources":["../../../src/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaSingle.tsx"],"names":[],"mappings":"AAUA,eAAO,MAAM,gCAAgC,+CAgK5C,CAAC"}
|
|
@@ -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"}
|