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
|
@@ -3,23 +3,32 @@ import { createContext, useContext, useEffect, useMemo, useRef, useState, useCal
|
|
|
3
3
|
import { useSearchParams } from "react-router-dom";
|
|
4
4
|
import { Pagination, } from "../components/form-controls/Pagination";
|
|
5
5
|
import { useAsyncRequest } from "../hooks/useAsyncRequest";
|
|
6
|
-
const
|
|
6
|
+
const createCrudContext = () => {
|
|
7
7
|
return createContext(undefined);
|
|
8
8
|
};
|
|
9
9
|
// Crear el contexto con un tipo genérico por defecto
|
|
10
10
|
// Los usuarios pueden crear su propio contexto con su tipo específico
|
|
11
|
-
export const
|
|
12
|
-
export function
|
|
11
|
+
export const CrudContext = createCrudContext();
|
|
12
|
+
export function CrudProvider({ children, getPromise, getItemPromise, postPromise, putPromise, deletePromise, limit = 15, pageParam = "pagina", urlParams = [], singleItemId, extraData: extraDataProp, }) {
|
|
13
|
+
const [extraData, setExtraData] = useState(extraDataProp);
|
|
13
14
|
const [list, setList] = useState(undefined);
|
|
15
|
+
const [item, setItem] = useState(undefined);
|
|
14
16
|
const [page, setPage] = useState(1);
|
|
15
17
|
const [pages, setPages] = useState(1);
|
|
16
18
|
const [total, setTotal] = useState(0);
|
|
17
19
|
const [searchParams, setSearchParams] = useSearchParams();
|
|
18
|
-
const lastFetchParamsRef = useRef("");
|
|
19
20
|
// Extraer funciones execute y opciones de las promises
|
|
20
|
-
const getPromiseExecute =
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
const getPromiseExecute = getPromise
|
|
22
|
+
? typeof getPromise === "function"
|
|
23
|
+
? getPromise
|
|
24
|
+
: getPromise.execute
|
|
25
|
+
: undefined;
|
|
26
|
+
const getPromiseSuccessMessage = getPromise && typeof getPromise === "object"
|
|
27
|
+
? getPromise.successMessage
|
|
28
|
+
: undefined;
|
|
29
|
+
const getPromiseErrorMessage = getPromise && typeof getPromise === "object"
|
|
30
|
+
? getPromise.errorMessage
|
|
31
|
+
: undefined;
|
|
23
32
|
const postPromiseExecute = postPromise
|
|
24
33
|
? typeof postPromise === "function"
|
|
25
34
|
? postPromise
|
|
@@ -53,6 +62,17 @@ export function ListCrudProvider({ children, getPromise, postPromise, putPromise
|
|
|
53
62
|
const deletePromiseErrorMessage = deletePromise && typeof deletePromise === "object"
|
|
54
63
|
? deletePromise.errorMessage
|
|
55
64
|
: undefined;
|
|
65
|
+
const getItemPromiseExecute = getItemPromise
|
|
66
|
+
? typeof getItemPromise === "function"
|
|
67
|
+
? getItemPromise
|
|
68
|
+
: getItemPromise.execute
|
|
69
|
+
: undefined;
|
|
70
|
+
const getItemPromiseSuccessMessage = getItemPromise && typeof getItemPromise === "object"
|
|
71
|
+
? getItemPromise.successMessage
|
|
72
|
+
: undefined;
|
|
73
|
+
const getItemPromiseErrorMessage = getItemPromise && typeof getItemPromise === "object"
|
|
74
|
+
? getItemPromise.errorMessage
|
|
75
|
+
: undefined;
|
|
56
76
|
const getPromiseRef = useRef(getPromiseExecute);
|
|
57
77
|
// Hooks para manejar las peticiones asíncronas con mensajes opcionales
|
|
58
78
|
const fetchDataAsync = useAsyncRequest({
|
|
@@ -71,6 +91,10 @@ export function ListCrudProvider({ children, getPromise, postPromise, putPromise
|
|
|
71
91
|
successMessage: deletePromiseSuccessMessage,
|
|
72
92
|
errorMessage: deletePromiseErrorMessage,
|
|
73
93
|
});
|
|
94
|
+
const fetchItemAsync = useAsyncRequest({
|
|
95
|
+
successMessage: getItemPromiseSuccessMessage,
|
|
96
|
+
errorMessage: getItemPromiseErrorMessage,
|
|
97
|
+
});
|
|
74
98
|
// El isLoading del contexto usa el hook de fetchData
|
|
75
99
|
const isLoading = fetchDataAsync.isLoading;
|
|
76
100
|
// Actualizar la referencia cuando cambie getPromise
|
|
@@ -99,11 +123,11 @@ export function ListCrudProvider({ children, getPromise, postPromise, putPromise
|
|
|
99
123
|
}, [searchParams, pageParam, urlParams, limit]);
|
|
100
124
|
// Función para obtener los datos
|
|
101
125
|
const fetchData = useCallback(async (params) => {
|
|
126
|
+
if (!getPromiseExecute) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
102
129
|
// Obtener los parámetros que se van a usar
|
|
103
130
|
const requestParams = params || getUrlParams();
|
|
104
|
-
// Crear una clave única para estos parámetros
|
|
105
|
-
const paramsKey = JSON.stringify(requestParams);
|
|
106
|
-
lastFetchParamsRef.current = paramsKey;
|
|
107
131
|
const result = await fetchDataAsync.execute(async () => {
|
|
108
132
|
return await getPromiseRef.current(requestParams);
|
|
109
133
|
});
|
|
@@ -132,7 +156,7 @@ export function ListCrudProvider({ children, getPromise, postPromise, putPromise
|
|
|
132
156
|
setTotal(0);
|
|
133
157
|
}
|
|
134
158
|
}
|
|
135
|
-
}, [getUrlParams, limit, fetchDataAsync]);
|
|
159
|
+
}, [getUrlParams, limit, fetchDataAsync, getPromiseExecute]);
|
|
136
160
|
// Ref para almacenar los valores anteriores de urlParams
|
|
137
161
|
const prevUrlParamsValuesRef = useRef({});
|
|
138
162
|
// Memoizar los valores actuales de los urlParams
|
|
@@ -145,6 +169,24 @@ export function ListCrudProvider({ children, getPromise, postPromise, putPromise
|
|
|
145
169
|
}, [searchParams, urlParams]);
|
|
146
170
|
// Memoizar los parámetros de URL para evitar re-renders innecesarios
|
|
147
171
|
const urlParamsKey = useMemo(() => urlParams.join(","), [urlParams]);
|
|
172
|
+
// Memoizar solo los parámetros relevantes de la URL (urlParams + pageParam)
|
|
173
|
+
// para que el useEffect solo se ejecute cuando cambien estos parámetros
|
|
174
|
+
const relevantParamsKey = useMemo(() => {
|
|
175
|
+
const relevantParams = {};
|
|
176
|
+
// Agregar pageParam si existe
|
|
177
|
+
const pageValue = searchParams.get(pageParam);
|
|
178
|
+
if (pageValue) {
|
|
179
|
+
relevantParams[pageParam] = pageValue;
|
|
180
|
+
}
|
|
181
|
+
// Agregar urlParams si existen
|
|
182
|
+
urlParams.forEach((paramName) => {
|
|
183
|
+
const paramValue = searchParams.get(paramName);
|
|
184
|
+
if (paramValue !== null) {
|
|
185
|
+
relevantParams[paramName] = paramValue;
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
return JSON.stringify(relevantParams);
|
|
189
|
+
}, [searchParams, pageParam, urlParams]);
|
|
148
190
|
// Memoizar los parámetros actuales para exponerlos
|
|
149
191
|
const currentParams = useMemo(() => getUrlParams(),
|
|
150
192
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -153,10 +195,28 @@ export function ListCrudProvider({ children, getPromise, postPromise, putPromise
|
|
|
153
195
|
const fetchItemsExecute = useCallback(async (params) => {
|
|
154
196
|
await fetchData(params);
|
|
155
197
|
}, [fetchData]);
|
|
198
|
+
// Función para obtener un item individual
|
|
199
|
+
const fetchItemExecute = useCallback(async (params) => {
|
|
200
|
+
if (!getItemPromiseExecute) {
|
|
201
|
+
throw new Error("getItemPromise is not defined. Please provide getItemPromise to CrudProvider.");
|
|
202
|
+
}
|
|
203
|
+
// Si no se pasan parámetros, usar singleItemId si está disponible
|
|
204
|
+
const finalParams = params !== undefined ? params : singleItemId;
|
|
205
|
+
if (finalParams === undefined) {
|
|
206
|
+
throw new Error("No parameters provided and singleItemId is not defined. Please provide parameters or set singleItemId in CrudProvider.");
|
|
207
|
+
}
|
|
208
|
+
const result = await fetchItemAsync.execute(async () => {
|
|
209
|
+
return await getItemPromiseExecute(finalParams);
|
|
210
|
+
});
|
|
211
|
+
if (result !== undefined) {
|
|
212
|
+
setItem(result);
|
|
213
|
+
}
|
|
214
|
+
return result;
|
|
215
|
+
}, [getItemPromiseExecute, fetchItemAsync, singleItemId]);
|
|
156
216
|
// Función para crear un item
|
|
157
217
|
const createItemExecute = useCallback(async (item) => {
|
|
158
218
|
if (!postPromiseExecute) {
|
|
159
|
-
throw new Error("postPromise is not defined. Please provide postPromise to
|
|
219
|
+
throw new Error("postPromise is not defined. Please provide postPromise to CrudProvider.");
|
|
160
220
|
}
|
|
161
221
|
return await createItemAsync.execute(async () => {
|
|
162
222
|
return await postPromiseExecute(item);
|
|
@@ -165,7 +225,7 @@ export function ListCrudProvider({ children, getPromise, postPromise, putPromise
|
|
|
165
225
|
// Función para actualizar un item
|
|
166
226
|
const updateItemExecute = useCallback(async (item) => {
|
|
167
227
|
if (!putPromiseExecute) {
|
|
168
|
-
throw new Error("putPromise is not defined. Please provide putPromise to
|
|
228
|
+
throw new Error("putPromise is not defined. Please provide putPromise to CrudProvider.");
|
|
169
229
|
}
|
|
170
230
|
return await updateItemAsync.execute(async () => {
|
|
171
231
|
return await putPromiseExecute(item);
|
|
@@ -174,7 +234,7 @@ export function ListCrudProvider({ children, getPromise, postPromise, putPromise
|
|
|
174
234
|
// Función para eliminar un item
|
|
175
235
|
const deleteItemExecute = useCallback(async (item) => {
|
|
176
236
|
if (!deletePromiseExecute) {
|
|
177
|
-
throw new Error("deletePromise is not defined. Please provide deletePromise to
|
|
237
|
+
throw new Error("deletePromise is not defined. Please provide deletePromise to CrudProvider.");
|
|
178
238
|
}
|
|
179
239
|
await deleteItemAsync.execute(async () => {
|
|
180
240
|
await deletePromiseExecute(item);
|
|
@@ -205,17 +265,31 @@ export function ListCrudProvider({ children, getPromise, postPromise, putPromise
|
|
|
205
265
|
prevUrlParamsValuesRef.current = { ...urlParamsValues };
|
|
206
266
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
207
267
|
}, [JSON.stringify(urlParamsValues), pageParam, urlParamsKey]);
|
|
208
|
-
// useEffect
|
|
268
|
+
// useEffect para ejecutar fetchData cuando cambian los parámetros relevantes o getPromise
|
|
209
269
|
useEffect(() => {
|
|
210
|
-
|
|
270
|
+
if (!getPromiseExecute) {
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
211
273
|
const timeoutId = setTimeout(() => {
|
|
212
274
|
fetchData();
|
|
213
275
|
}, 0);
|
|
214
276
|
return () => clearTimeout(timeoutId);
|
|
215
277
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
216
|
-
}, [
|
|
278
|
+
}, [relevantParamsKey, getPromiseExecute]);
|
|
279
|
+
// useEffect para obtener el item individual cuando cambie singleItemId
|
|
280
|
+
useEffect(() => {
|
|
281
|
+
if (singleItemId !== undefined && getItemPromiseExecute) {
|
|
282
|
+
fetchItemExecute(singleItemId);
|
|
283
|
+
}
|
|
284
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
285
|
+
}, [singleItemId]);
|
|
286
|
+
// Sincronizar extraDataProp con el estado local
|
|
287
|
+
useEffect(() => {
|
|
288
|
+
setExtraData(extraDataProp);
|
|
289
|
+
}, [extraDataProp]);
|
|
217
290
|
const value = {
|
|
218
291
|
list,
|
|
292
|
+
item,
|
|
219
293
|
page,
|
|
220
294
|
pages,
|
|
221
295
|
total,
|
|
@@ -226,6 +300,10 @@ export function ListCrudProvider({ children, getPromise, postPromise, putPromise
|
|
|
226
300
|
execute: fetchItemsExecute,
|
|
227
301
|
isLoading: fetchDataAsync.isLoading,
|
|
228
302
|
},
|
|
303
|
+
fetchItem: {
|
|
304
|
+
execute: fetchItemExecute,
|
|
305
|
+
isLoading: fetchItemAsync.isLoading,
|
|
306
|
+
},
|
|
229
307
|
createItem: {
|
|
230
308
|
execute: createItemExecute,
|
|
231
309
|
isLoading: createItemAsync.isLoading,
|
|
@@ -239,15 +317,17 @@ export function ListCrudProvider({ children, getPromise, postPromise, putPromise
|
|
|
239
317
|
isLoading: deleteItemAsync.isLoading,
|
|
240
318
|
},
|
|
241
319
|
pagination: (_jsx(Pagination, { page: page, pages: pages, total: total, fieldName: pageParam, isLoading: isLoading })),
|
|
320
|
+
extraData,
|
|
321
|
+
setExtraData,
|
|
242
322
|
};
|
|
243
|
-
return
|
|
323
|
+
return _jsx(CrudContext.Provider, { value: value, children: children });
|
|
244
324
|
}
|
|
245
|
-
// Hook to use
|
|
325
|
+
// Hook to use Crud context
|
|
246
326
|
// eslint-disable-next-line react-refresh/only-export-components
|
|
247
|
-
export function
|
|
248
|
-
const context = useContext(
|
|
327
|
+
export function useCrud() {
|
|
328
|
+
const context = useContext(CrudContext);
|
|
249
329
|
if (context === undefined) {
|
|
250
|
-
throw new Error("
|
|
330
|
+
throw new Error("useCrud must be used within a CrudProvider");
|
|
251
331
|
}
|
|
252
332
|
return context;
|
|
253
333
|
}
|
package/dist/contexts/index.d.ts
CHANGED
|
@@ -4,8 +4,8 @@ export type { Theme, ThemeContextType, ThemeOverride } from "./types";
|
|
|
4
4
|
export { lightTheme, darkTheme, blueTheme, greenTheme, defaultTheme, themes, } from "./presets";
|
|
5
5
|
export { AuthProvider, AuthContext } from "./AuthContext";
|
|
6
6
|
export type { AuthContextType, AuthContextUserInterface, AuthTokenInterface, } from "./AuthContext";
|
|
7
|
-
export {
|
|
8
|
-
export type {
|
|
7
|
+
export { CrudProvider, CrudContext, useCrud } from "./CrudContext";
|
|
8
|
+
export type { CrudContextType } from "./CrudContext";
|
|
9
9
|
export { AppLayoutProvider, useAppLayout, useAppLayoutContext } from "./AppLayoutContext";
|
|
10
10
|
export type { AppLayoutContextType, NavbarInterface, LeftDrawerInterface, } from "./AppLayoutContext";
|
|
11
11
|
export { SnackbarProvider, useSnackbar } from "./SnackbarContext";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contexts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAGnC,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGtE,OAAO,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,YAAY,EACZ,MAAM,GACP,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,YAAY,EACV,eAAe,EACf,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contexts/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAGnC,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGtE,OAAO,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,YAAY,EACZ,MAAM,GACP,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,YAAY,EACV,eAAe,EACf,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC1F,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,eAAe,GAChB,MAAM,mBAAmB,CAAC"}
|
package/dist/contexts/index.js
CHANGED
|
@@ -5,8 +5,8 @@ export { useThemeOverride, useTemporaryOverride, } from "../hooks/useThemeOverri
|
|
|
5
5
|
export { lightTheme, darkTheme, blueTheme, greenTheme, defaultTheme, themes, } from "./presets";
|
|
6
6
|
// Auth system exports
|
|
7
7
|
export { AuthProvider, AuthContext } from "./AuthContext";
|
|
8
|
-
//
|
|
9
|
-
export {
|
|
8
|
+
// Crud system exports
|
|
9
|
+
export { CrudProvider, CrudContext, useCrud } from "./CrudContext";
|
|
10
10
|
// AppLayout system exports
|
|
11
11
|
export { AppLayoutProvider, useAppLayout, useAppLayoutContext } from "./AppLayoutContext";
|
|
12
12
|
// Snackbar system exports
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogDocs.d.ts","sourceRoot":"","sources":["../../src/docs/DialogDocs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"DialogDocs.d.ts","sourceRoot":"","sources":["../../src/docs/DialogDocs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EA2XvB,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
package/dist/docs/DialogDocs.js
CHANGED
|
@@ -7,6 +7,6 @@ const DialogDocs = () => {
|
|
|
7
7
|
const [isOpenConfirm, setIsOpenConfirm] = useState(false);
|
|
8
8
|
const [isOpenNoOverlay, setIsOpenNoOverlay] = useState(false);
|
|
9
9
|
const [isOpenCustom, setIsOpenCustom] = useState(false);
|
|
10
|
-
return (_jsx("div", { className: "max-w-5xl mx-auto space-y-8", children: _jsx(Card, { title: "Dialog - Variantes y Ejemplos", 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" }), _jsxs("p", { className: "mb-4 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: ["El componente Dialog muestra un modal centrado con overlay. Se controla mediante la prop ", _jsx("code", { children: "isOpen" }), " y se cierra con", " ", _jsx("code", { children: "onClose" }), "."] }), _jsxs("div", { className: "space-y-4", children: [_jsx(Button, { variant: "primary", icon: "fa-window-maximize", onClick: () => setIsOpenBasic(true), children: "Abrir Dialog B\u00E1sico" }), _jsx(Dialog, { isOpen: isOpenBasic, title: "Dialog B\u00E1sico",
|
|
10
|
+
return (_jsx("div", { className: "max-w-5xl mx-auto space-y-8", children: _jsx(Card, { title: "Dialog - Variantes y Ejemplos", 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" }), _jsxs("p", { className: "mb-4 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: ["El componente Dialog muestra un modal centrado con overlay. Se controla mediante la prop ", _jsx("code", { children: "isOpen" }), " y se cierra con", " ", _jsx("code", { children: "onClose" }), ". El contenido se pasa como ", _jsx("code", { children: "children" }), "."] }), _jsxs("div", { className: "space-y-4", children: [_jsx(Button, { variant: "primary", icon: "fa-window-maximize", onClick: () => setIsOpenBasic(true), children: "Abrir Dialog B\u00E1sico" }), _jsx(Dialog, { isOpen: isOpenBasic, title: "Dialog B\u00E1sico", footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "outline", onClick: () => setIsOpenBasic(false), children: "Cancelar" }), _jsx(Button, { variant: "primary", onClick: () => setIsOpenBasic(false), children: "Aceptar" })] }), onClose: () => setIsOpenBasic(false), children: _jsxs("div", { className: "space-y-3", children: [_jsxs("p", { style: { color: "var(--flysoft-text-secondary)" }, children: ["Este es un ejemplo de dialog b\u00E1sico. Puedes incluir cualquier contenido como ", _jsx("code", { children: "children" }), "."] }), _jsx("p", { style: { color: "var(--flysoft-text-secondary)" }, children: "El dialog se puede cerrar haciendo clic en el overlay, en el bot\u00F3n de cerrar (X), o presionando la tecla Escape." })] }) })] })] }), _jsxs("section", { children: [_jsx("h3", { className: "text-lg font-semibold mb-4", style: { color: "var(--flysoft-text-primary)" }, children: "Dialog con formulario" }), _jsx("p", { className: "mb-4 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: "Ejemplo de dialog que contiene un formulario completo con campos de entrada." }), _jsxs("div", { className: "space-y-4", children: [_jsx(Button, { variant: "primary", icon: "fa-edit", onClick: () => setIsOpenForm(true), children: "Abrir Dialog con Formulario" }), _jsx(Dialog, { isOpen: isOpenForm, title: "Editar Usuario", footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "outline", icon: "fa-times", onClick: () => setIsOpenForm(false), children: "Cancelar" }), _jsx(Button, { variant: "primary", icon: "fa-save", onClick: () => setIsOpenForm(false), children: "Guardar Cambios" })] }), onClose: () => setIsOpenForm(false), children: _jsxs("div", { className: "space-y-4", children: [_jsx(Input, { label: "Nombre", placeholder: "Ingresa el nombre", icon: "fa-user" }), _jsx(Input, { label: "Email", type: "email", placeholder: "usuario@ejemplo.com", icon: "fa-envelope" }), _jsx(Input, { label: "Tel\u00E9fono", type: "tel", placeholder: "+34 600 000 000", icon: "fa-phone" })] }) })] })] }), _jsxs("section", { children: [_jsx("h3", { className: "text-lg font-semibold mb-4", style: { color: "var(--flysoft-text-primary)" }, children: "Dialog de confirmaci\u00F3n" }), _jsx("p", { className: "mb-4 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: "Ejemplo de dialog usado para confirmar una acci\u00F3n importante." }), _jsxs("div", { className: "space-y-4", children: [_jsx(Button, { variant: "primary", icon: "fa-trash", onClick: () => setIsOpenConfirm(true), children: "Eliminar Item" }), _jsx(Dialog, { isOpen: isOpenConfirm, title: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("i", { className: "fal fa-exclamation-triangle text-[var(--color-danger)]" }), _jsx("span", { children: "Confirmar Eliminaci\u00F3n" })] }), footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "outline", icon: "fa-times", onClick: () => setIsOpenConfirm(false), children: "Cancelar" }), _jsx(Button, { variant: "primary", icon: "fa-trash", onClick: () => setIsOpenConfirm(false), children: "Eliminar" })] }), onClose: () => setIsOpenConfirm(false), children: _jsxs("div", { className: "space-y-3", children: [_jsx("p", { style: { color: "var(--flysoft-text-secondary)" }, children: "\u00BFEst\u00E1s seguro de que deseas eliminar este elemento? Esta acci\u00F3n no se puede deshacer." }), _jsx("div", { className: "flex gap-2", children: _jsx(Badge, { variant: "danger", icon: "fa-exclamation-circle", children: "Acci\u00F3n irreversible" }) })] }) })] })] }), _jsxs("section", { children: [_jsx("h3", { className: "text-lg font-semibold mb-4", style: { color: "var(--flysoft-text-primary)" }, children: "Dialog sin cerrar al hacer clic en overlay" }), _jsxs("p", { className: "mb-4 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: ["Usando ", _jsxs("code", { children: ["closeOnOverlayClick=", false] }), " el dialog solo se puede cerrar mediante el bot\u00F3n de cerrar, los botones de acci\u00F3n, o la tecla Escape."] }), _jsxs("div", { className: "space-y-4", children: [_jsx(Button, { variant: "primary", icon: "fa-lock", onClick: () => setIsOpenNoOverlay(true), children: "Abrir Dialog (sin cerrar en overlay)" }), _jsx(Dialog, { isOpen: isOpenNoOverlay, title: "Dialog Protegido", footer: _jsxs(_Fragment, { children: [_jsx(Button, { variant: "outline", onClick: () => setIsOpenNoOverlay(false), children: "Cancelar" }), _jsx(Button, { variant: "primary", onClick: () => setIsOpenNoOverlay(false), children: "Continuar" })] }), onClose: () => setIsOpenNoOverlay(false), closeOnOverlayClick: false, children: _jsxs("div", { className: "space-y-3", children: [_jsx("p", { style: { color: "var(--flysoft-text-secondary)" }, children: "Este dialog no se cierra al hacer clic en el overlay. Debes usar el bot\u00F3n de cerrar o los botones de acci\u00F3n." }), _jsx("p", { style: { color: "var(--flysoft-text-secondary)" }, children: "\u00DAtil para formularios importantes donde no quieres que el usuario cierre accidentalmente el dialog." })] }) })] })] }), _jsxs("section", { children: [_jsx("h3", { className: "text-lg font-semibold mb-4", style: { color: "var(--flysoft-text-primary)" }, children: "Dialog con t\u00EDtulo personalizado" }), _jsxs("p", { className: "mb-4 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: ["El prop ", _jsx("code", { children: "title" }), " acepta un ReactNode, permitiendo incluir iconos, badges u otros componentes."] }), _jsxs("div", { className: "space-y-4", children: [_jsx(Button, { variant: "primary", icon: "fa-star", onClick: () => setIsOpenCustom(true), children: "Abrir Dialog Personalizado" }), _jsx(Dialog, { isOpen: isOpenCustom, title: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("i", { className: "fal fa-info-circle text-[var(--color-primary)]" }), _jsx("span", { children: "Informaci\u00F3n Importante" }), _jsx(Badge, { variant: "info", size: "sm", children: "Nuevo" })] }), footer: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Button, { variant: "outline", icon: "fa-bookmark", onClick: () => setIsOpenCustom(false), children: "Guardar para despu\u00E9s" }), _jsx(Button, { variant: "primary", icon: "fa-check", onClick: () => setIsOpenCustom(false), children: "Entendido" })] }), onClose: () => setIsOpenCustom(false), children: _jsxs("div", { className: "space-y-3", children: [_jsx("p", { style: { color: "var(--flysoft-text-secondary)" }, children: "Este dialog muestra c\u00F3mo puedes personalizar el t\u00EDtulo usando ReactNode, incluyendo iconos y badges." }), _jsx("div", { className: "p-3 bg-[var(--color-bg-default)] border border-[var(--color-border-default)] rounded", children: _jsxs("p", { className: "text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: [_jsx("i", { className: "fal fa-lightbulb mr-2" }), "Puedes usar cualquier componente React en el t\u00EDtulo, children y acciones."] }) })] }) })] })] }), _jsxs("section", { children: [_jsx("h3", { className: "text-lg font-semibold mb-4", style: { color: "var(--flysoft-text-primary)" }, children: "Caracter\u00EDsticas" }), _jsx("div", { className: "space-y-3", children: _jsx("div", { className: "p-3 bg-[var(--color-bg-default)] border border-[var(--color-border-default)] rounded", children: _jsxs("ul", { className: "list-disc list-inside space-y-2 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: [_jsxs("li", { children: [_jsx("strong", { children: "Overlay con blur:" }), " El overlay tiene un efecto de desenfoque (backdrop-blur) para mejor enfoque visual"] }), _jsxs("li", { children: [_jsx("strong", { children: "Cierre m\u00FAltiple:" }), " Se puede cerrar haciendo clic en el overlay, en el bot\u00F3n X, en los botones de acci\u00F3n, o presionando Escape"] }), _jsxs("li", { children: [_jsx("strong", { children: "Prevenci\u00F3n de scroll:" }), " Cuando el dialog est\u00E1 abierto, se previene el scroll del body"] }), _jsxs("li", { children: [_jsx("strong", { children: "Responsive:" }), " El dialog se adapta a diferentes tama\u00F1os de pantalla con padding adecuado"] }), _jsxs("li", { children: [_jsx("strong", { children: "Accesibilidad:" }), " Incluye atributos ARIA para mejor accesibilidad"] }), _jsxs("li", { children: [_jsx("strong", { children: "Contenido flexible:" }), " El body tiene scroll autom\u00E1tico si el contenido es muy largo"] })] }) }) })] })] }) }) }));
|
|
11
11
|
};
|
|
12
12
|
export default DialogDocs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocsMenu.d.ts","sourceRoot":"","sources":["../../src/docs/DocsMenu.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,+
|
|
1
|
+
{"version":3,"file":"DocsMenu.d.ts","sourceRoot":"","sources":["../../src/docs/DocsMenu.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,+CA2SpB,CAAC"}
|
package/dist/docs/DocsMenu.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Accordion, LinkButton } from "../index";
|
|
3
3
|
export const DocsMenu = () => {
|
|
4
|
-
return (_jsxs("div", { className: "space-y-2 p-4 bg-gray-100 h-full", children: [_jsx(Accordion, { title: "Form Controls", icon: "fa-edit", defaultOpen: true, children: _jsxs("div", { className: "space-y-2", children: [_jsx(LinkButton, { to: "/docs/button", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Button" }), _jsx(LinkButton, { to: "/docs/linkbutton", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "LinkButton" }), _jsx(LinkButton, { to: "/docs/input", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Input" }), _jsx(LinkButton, { to: "/docs/autocomplete-input", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "AutocompleteInput" }), _jsx(LinkButton, { to: "/docs/search-select-input", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "SearchSelectInput" }), _jsx(LinkButton, { to: "/docs/datepicker", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "DatePicker" }), _jsx(LinkButton, { to: "/docs/dateinput", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "DateInput" }), _jsx(LinkButton, { to: "/docs/checkbox", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Checkbox" }), _jsx(LinkButton, { to: "/docs/radiobuttongroup", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "RadioButtonGroup" }), _jsx(LinkButton, { to: "/docs/pagination", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Pagination" })] }) }), _jsx(Accordion, { title: "Layout", icon: "fa-th-large", children: _jsxs("div", { className: "space-y-2", children: [_jsx(LinkButton, { to: "/docs/card", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Card" }), _jsx(LinkButton, { to: "/docs/datafield", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "DataField" }), _jsx(LinkButton, { to: "/docs/tabsgroup", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "TabsGroup" }), _jsx(LinkButton, { to: "/docs/datatable", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "DataTable" }), _jsx(LinkButton, { to: "/docs/accordion", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Accordion" })
|
|
4
|
+
return (_jsxs("div", { className: "space-y-2 p-4 bg-gray-100 h-full", children: [_jsx(Accordion, { title: "Form Controls", icon: "fa-edit", defaultOpen: true, children: _jsxs("div", { className: "space-y-2", children: [_jsx(LinkButton, { to: "/docs/button", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Button" }), _jsx(LinkButton, { to: "/docs/linkbutton", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "LinkButton" }), _jsx(LinkButton, { to: "/docs/input", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Input" }), _jsx(LinkButton, { to: "/docs/autocomplete-input", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "AutocompleteInput" }), _jsx(LinkButton, { to: "/docs/search-select-input", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "SearchSelectInput" }), _jsx(LinkButton, { to: "/docs/datepicker", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "DatePicker" }), _jsx(LinkButton, { to: "/docs/dateinput", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "DateInput" }), _jsx(LinkButton, { to: "/docs/checkbox", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Checkbox" }), _jsx(LinkButton, { to: "/docs/radiobuttongroup", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "RadioButtonGroup" }), _jsx(LinkButton, { to: "/docs/pagination", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Pagination" })] }) }), _jsx(Accordion, { title: "Layout", icon: "fa-th-large", children: _jsxs("div", { className: "space-y-2", children: [_jsx(LinkButton, { to: "/docs/card", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Card" }), _jsx(LinkButton, { to: "/docs/datafield", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "DataField" }), _jsx(LinkButton, { to: "/docs/tabsgroup", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "TabsGroup" }), _jsx(LinkButton, { to: "/docs/datatable", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "DataTable" }), _jsx(LinkButton, { to: "/docs/accordion", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Accordion" }), _jsx(LinkButton, { to: "/docs/menu", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Menu" }), _jsx(LinkButton, { to: "/docs/dropdownmenu", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "DropdownMenu" }), _jsx(LinkButton, { to: "/docs/dropdownpanel", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "DropdownPanel" }), _jsx(LinkButton, { to: "/docs/filter", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Filter" })] }) }), _jsx(Accordion, { title: "Utils", icon: "fa-tools", children: _jsxs("div", { className: "space-y-2", children: [_jsx(LinkButton, { to: "/docs/badge", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Badge" }), _jsx(LinkButton, { to: "/docs/avatar", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Avatar" }), _jsx(LinkButton, { to: "/docs/roadmap", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "RoadMap" }), _jsx(LinkButton, { to: "/docs/dialog", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Dialog" }), _jsx(LinkButton, { to: "/docs/loader", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Loader" }), _jsx(LinkButton, { to: "/docs/snackbar", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Snackbar" }), _jsx(LinkButton, { to: "/docs/theme", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "ThemeSwitcher" })] }) }), _jsx(Accordion, { title: "Contexts", icon: "fa-database", children: _jsxs("div", { className: "space-y-2", children: [_jsx(LinkButton, { to: "/docs/auth", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "AuthContext" }), _jsx(LinkButton, { to: "/docs/listcrud", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "CrudContext" })] }) }), _jsx(Accordion, { title: "Otros", icon: "fa-folder", children: _jsxs("div", { className: "space-y-2", children: [_jsx(LinkButton, { to: "/docs/example-form", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Formulario de Ejemplo" }), _jsx(LinkButton, { to: "/docs/admin", variant: "ghost", size: "sm", className: "w-full justify-start", color: "secondary", children: "Admin (Mock Services)" })] }) })] }));
|
|
5
5
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocsRouter.d.ts","sourceRoot":"","sources":["../../src/docs/DocsRouter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DocsRouter.d.ts","sourceRoot":"","sources":["../../src/docs/DocsRouter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAiC1B,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAqC9B,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
package/dist/docs/DocsRouter.js
CHANGED
|
@@ -20,16 +20,18 @@ import PaginationDocs from "./PaginationDocs";
|
|
|
20
20
|
import LoaderDocs from "./LoaderDocs";
|
|
21
21
|
import DataTableDocs from "./DataTableDocs";
|
|
22
22
|
import DropdownMenuDocs from "./DropdownMenuDocs";
|
|
23
|
+
import DropdownPanelDocs from "./DropdownPanelDocs";
|
|
23
24
|
import FilterDocs from "./FilterDocs";
|
|
24
25
|
import { AuthDocs } from "./AuthDocs.tsx/AuthDocs";
|
|
25
26
|
import { ListCrudDocs } from "./ListCrudDocs.tsx/ListCrudDocs";
|
|
26
27
|
import ExampleFormDocs from "./ExampleFormDocs";
|
|
27
28
|
import CheckboxDocs from "./CheckboxDocs";
|
|
28
29
|
import RadioButtonGroupDocs from "./RadioButtonGroupDocs";
|
|
30
|
+
import MenuDocs from "./MenuDocs";
|
|
29
31
|
import SnackbarDocs from "./SnackbarDocs";
|
|
30
32
|
import AccordionDocs from "./AccordionDocs";
|
|
31
33
|
import DocAdmin from "./DocAdmin";
|
|
32
34
|
export const DocsRouter = () => {
|
|
33
|
-
return (_jsxs(Routes, { children: [_jsx(Route, { path: "", element: _jsx(Navigate, { to: "button", replace: true }) }), _jsx(Route, { path: "button", element: _jsx(ButtonDocs, {}) }), _jsx(Route, { path: "linkbutton", element: _jsx(LinkButtonDocs, {}) }), _jsx(Route, { path: "badge", element: _jsx(BadgeDocs, {}) }), _jsx(Route, { path: "avatar", element: _jsx(AvatarDocs, {}) }), _jsx(Route, { path: "roadmap", element: _jsx(RoadMapDocs, {}) }), _jsx(Route, { path: "card", element: _jsx(CardDocs, {}) }), _jsx(Route, { path: "input", element: _jsx(InputDocs, {}) }), _jsx(Route, { path: "autocomplete-input", element: _jsx(AutocompleteInputDocs, {}) }), _jsx(Route, { path: "search-select-input", element: _jsx(SearchSelectInputDocs, {}) }), _jsx(Route, { path: "datepicker", element: _jsx(DatePickerDocs, {}) }), _jsx(Route, { path: "dateinput", element: _jsx(DateInputDocs, {}) }), _jsx(Route, { path: "checkbox", element: _jsx(CheckboxDocs, {}) }), _jsx(Route, { path: "radiobuttongroup", element: _jsx(RadioButtonGroupDocs, {}) }), _jsx(Route, { path: "theme", element: _jsx(ThemeSwitcherDocs, {}) }), _jsx(Route, { path: "datafield", element: _jsx(DataFieldDocs, {}) }), _jsx(Route, { path: "tabsgroup", element: _jsx(TabsGroupDocs, {}) }), _jsx(Route, { path: "dialog", element: _jsx(DialogDocs, {}) }), _jsx(Route, { path: "pagination", element: _jsx(PaginationDocs, {}) }), _jsx(Route, { path: "loader", element: _jsx(LoaderDocs, {}) }), _jsx(Route, { path: "datatable", element: _jsx(DataTableDocs, {}) }), _jsx(Route, { path: "dropdownmenu", element: _jsx(DropdownMenuDocs, {}) }), _jsx(Route, { path: "filter", element: _jsx(FilterDocs, {}) }), _jsx(Route, { path: "auth", element: _jsx(AuthDocs, {}) }), _jsx(Route, { path: "listcrud", element: _jsx(ListCrudDocs, {}) }), _jsx(Route, { path: "example-form", element: _jsx(ExampleFormDocs, {}) }), _jsx(Route, { path: "snackbar", element: _jsx(SnackbarDocs, {}) }), _jsx(Route, { path: "accordion", element: _jsx(AccordionDocs, {}) }), _jsx(Route, { path: "admin", element: _jsx(DocAdmin, {}) })] }));
|
|
35
|
+
return (_jsxs(Routes, { children: [_jsx(Route, { path: "", element: _jsx(Navigate, { to: "button", replace: true }) }), _jsx(Route, { path: "button", element: _jsx(ButtonDocs, {}) }), _jsx(Route, { path: "linkbutton", element: _jsx(LinkButtonDocs, {}) }), _jsx(Route, { path: "badge", element: _jsx(BadgeDocs, {}) }), _jsx(Route, { path: "avatar", element: _jsx(AvatarDocs, {}) }), _jsx(Route, { path: "roadmap", element: _jsx(RoadMapDocs, {}) }), _jsx(Route, { path: "card", element: _jsx(CardDocs, {}) }), _jsx(Route, { path: "input", element: _jsx(InputDocs, {}) }), _jsx(Route, { path: "autocomplete-input", element: _jsx(AutocompleteInputDocs, {}) }), _jsx(Route, { path: "search-select-input", element: _jsx(SearchSelectInputDocs, {}) }), _jsx(Route, { path: "datepicker", element: _jsx(DatePickerDocs, {}) }), _jsx(Route, { path: "dateinput", element: _jsx(DateInputDocs, {}) }), _jsx(Route, { path: "checkbox", element: _jsx(CheckboxDocs, {}) }), _jsx(Route, { path: "radiobuttongroup", element: _jsx(RadioButtonGroupDocs, {}) }), _jsx(Route, { path: "theme", element: _jsx(ThemeSwitcherDocs, {}) }), _jsx(Route, { path: "datafield", element: _jsx(DataFieldDocs, {}) }), _jsx(Route, { path: "tabsgroup", element: _jsx(TabsGroupDocs, {}) }), _jsx(Route, { path: "dialog", element: _jsx(DialogDocs, {}) }), _jsx(Route, { path: "pagination", element: _jsx(PaginationDocs, {}) }), _jsx(Route, { path: "loader", element: _jsx(LoaderDocs, {}) }), _jsx(Route, { path: "datatable", element: _jsx(DataTableDocs, {}) }), _jsx(Route, { path: "dropdownmenu", element: _jsx(DropdownMenuDocs, {}) }), _jsx(Route, { path: "dropdownpanel", element: _jsx(DropdownPanelDocs, {}) }), _jsx(Route, { path: "filter", element: _jsx(FilterDocs, {}) }), _jsx(Route, { path: "auth", element: _jsx(AuthDocs, {}) }), _jsx(Route, { path: "listcrud/empresa/:id", element: _jsx(ListCrudDocs, {}) }), _jsx(Route, { path: "listcrud", element: _jsx(ListCrudDocs, {}) }), _jsx(Route, { path: "example-form", element: _jsx(ExampleFormDocs, {}) }), _jsx(Route, { path: "menu", element: _jsx(MenuDocs, {}) }), _jsx(Route, { path: "snackbar", element: _jsx(SnackbarDocs, {}) }), _jsx(Route, { path: "accordion", element: _jsx(AccordionDocs, {}) }), _jsx(Route, { path: "admin", element: _jsx(DocAdmin, {}) })] }));
|
|
34
36
|
};
|
|
35
37
|
export default DocsRouter;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropdownPanelDocs.d.ts","sourceRoot":"","sources":["../../src/docs/DropdownPanelDocs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,QAAA,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAuL9B,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { Card, DropdownPanel, Button } from "../index";
|
|
4
|
+
const DropdownPanelDocs = () => {
|
|
5
|
+
return (_jsx("div", { className: "max-w-5xl mx-auto space-y-8", children: _jsx(Card, { title: "DropdownPanel - Panel Flotante Gen\u00E9rico", 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 DropdownPanel muestra un panel flotante con contenido arbitrario (children). A diferencia de DropdownMenu, no maneja una lista de opciones, sino que renderiza lo que le pases." }), _jsx("div", { className: "space-y-4", children: _jsxs("div", { className: "flex items-center gap-4", children: [_jsx(DropdownPanel, { children: _jsxs("div", { className: "p-4 w-64", children: [_jsx("h4", { className: "font-bold mb-2", children: "Contenido del panel" }), _jsx("p", { className: "text-sm", children: "Aqu\u00ED puedes poner cualquier cosa: texto, im\u00E1genes, componentes, formularios, etc." })] }) }), _jsx("div", { className: "text-sm text-[var(--flysoft-text-secondary)]", children: "<- Click en los tres puntos para ver el panel" })] }) })] }), _jsxs("section", { children: [_jsx("h3", { className: "text-lg font-semibold mb-4", style: { color: "var(--flysoft-text-primary)" }, children: "Con renderNode personalizado" }), _jsxs("p", { className: "mb-4 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: ["Puedes personalizar el disparador (trigger) usando la prop", " ", _jsx("code", { children: "renderNode" }), "."] }), _jsx("div", { className: "space-y-4", children: _jsx(DropdownPanel, { renderNode: _jsx(Button, { variant: "primary", icon: "fa-filter", children: "Filtros Avanzados" }), children: _jsxs("div", { className: "p-4 w-80 space-y-4", children: [_jsx("h4", { className: "font-bold border-b pb-2", children: "Configuraci\u00F3n de Filtros" }), _jsxs("div", { children: [_jsx("label", { className: "block text-sm mb-1", children: "Buscar por nombre" }), _jsx("input", { type: "text", className: "w-full p-2 border rounded", placeholder: "Escribe..." })] }), _jsx("div", { className: "flex justify-end pt-2", children: _jsx(Button, { variant: "primary", size: "sm", children: "Aplicar" }) })] }) }) })] }), _jsxs("section", { children: [_jsx("h3", { className: "text-lg font-semibold mb-4", style: { color: "var(--flysoft-text-primary)" }, children: "Props" }), _jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full border-collapse", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b border-[var(--color-border-default)]", children: [_jsx("th", { className: "px-4 py-2 text-left text-sm font-semibold", style: { color: "var(--flysoft-text-primary)" }, children: "Prop" }), _jsx("th", { className: "px-4 py-2 text-left text-sm font-semibold", style: { color: "var(--flysoft-text-primary)" }, children: "Tipo" }), _jsx("th", { className: "px-4 py-2 text-left text-sm font-semibold", style: { color: "var(--flysoft-text-primary)" }, children: "Requerido" }), _jsx("th", { className: "px-4 py-2 text-left text-sm font-semibold", style: { color: "var(--flysoft-text-primary)" }, children: "Descripci\u00F3n" })] }) }), _jsxs("tbody", { children: [_jsxs("tr", { className: "border-b border-[var(--color-border-default)]", children: [_jsx("td", { className: "px-4 py-2 text-sm font-mono", style: { color: "var(--flysoft-text-primary)" }, children: "children" }), _jsx("td", { className: "px-4 py-2 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: "ReactNode" }), _jsx("td", { className: "px-4 py-2 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: "S\u00ED" }), _jsx("td", { className: "px-4 py-2 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: "Contenido a mostrar dentro del panel flotante." })] }), _jsxs("tr", { className: "border-b border-[var(--color-border-default)]", children: [_jsx("td", { className: "px-4 py-2 text-sm font-mono", style: { color: "var(--flysoft-text-primary)" }, children: "renderNode" }), _jsx("td", { className: "px-4 py-2 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: "ReactNode" }), _jsx("td", { className: "px-4 py-2 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: "No" }), _jsx("td", { className: "px-4 py-2 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: "Elemento personalizado que activa el panel. Si no se proporciona, se muestra un bot\u00F3n ghost con tres puntos." })] })] })] }) })] })] }) }) }));
|
|
6
|
+
};
|
|
7
|
+
export default DropdownPanelDocs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterDocs.d.ts","sourceRoot":"","sources":["../../src/docs/FilterDocs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"FilterDocs.d.ts","sourceRoot":"","sources":["../../src/docs/FilterDocs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAgzBvB,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
package/dist/docs/FilterDocs.js
CHANGED
|
@@ -107,6 +107,24 @@ const FilterDocs = () => {
|
|
|
107
107
|
paramName: "ejemplo2",
|
|
108
108
|
label: "Ejemplo 2",
|
|
109
109
|
},
|
|
110
|
-
] }), _jsxs("div", { className: "p-3 bg-[var(--color-bg-default)] border border-[var(--color-border-default)] rounded", children: [_jsxs("p", { className: "text-sm", children: [_jsx("span", { className: "font-semibold", children: "Query parameters actuales:" }), " ", _jsx("span", { style: { color: "var(--flysoft-text-secondary)" }, children: searchParams.toString() || "ninguno" })] }), _jsx("p", { className: "text-xs mt-2", style: { color: "var(--flysoft-text-secondary)" }, children: "\uD83D\uDCA1 Configura los filtros en el dialog y observa c\u00F3mo la URL no cambia hasta que hagas clic en \"Aplicar filtros\"." })] })] }) })] })] }) }) })
|
|
110
|
+
] }), _jsxs("div", { className: "p-3 bg-[var(--color-bg-default)] border border-[var(--color-border-default)] rounded", children: [_jsxs("p", { className: "text-sm", children: [_jsx("span", { className: "font-semibold", children: "Query parameters actuales:" }), " ", _jsx("span", { style: { color: "var(--flysoft-text-secondary)" }, children: searchParams.toString() || "ninguno" })] }), _jsx("p", { className: "text-xs mt-2", style: { color: "var(--flysoft-text-secondary)" }, children: "\uD83D\uDCA1 Configura los filtros en el dialog y observa c\u00F3mo la URL no cambia hasta que hagas clic en \"Aplicar filtros\"." })] })] }) })] }), _jsxs("section", { children: [_jsx("h3", { className: "text-lg font-semibold mb-4", style: { color: "var(--flysoft-text-primary)" }, children: "Search y FiltersDialog Combinados" }), _jsxs("p", { className: "mb-4 text-sm", style: { color: "var(--flysoft-text-secondary)" }, children: ["Una disposici\u00F3n com\u00FAn es tener una b\u00FAsqueda r\u00E1pida a la izquierda y filtros avanzados a la derecha. Esto se logra f\u00E1cilmente con un contenedor flex y ", _jsx("code", { children: "justify-between" }), "."] }), _jsx(Card, { title: "Barra de herramientas combinada", children: _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between w-full", children: [_jsxs(Collection, { direction: "row", children: [_jsx(Filter, { paramName: "busquedaGlobal", label: "Buscar...", filterType: "search", inputWidth: "300px" }), _jsx(Filter, { paramName: "filtroFecha", label: "Fecha", filterType: "date", inputWidth: "300px", hideEmpty: true }), _jsx(Filter, { paramName: "filtroEstado", label: "Estado", filterType: "autocomplete", inputWidth: "300px", hideEmpty: true, options: [
|
|
111
|
+
{ label: "Activo", value: "active" },
|
|
112
|
+
{ label: "Inactivo", value: "inactive" },
|
|
113
|
+
] })] }), _jsx(FiltersDialog, { filters: [
|
|
114
|
+
{
|
|
115
|
+
filterType: "date",
|
|
116
|
+
paramName: "filtroFecha",
|
|
117
|
+
label: "Fecha",
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
filterType: "autocomplete",
|
|
121
|
+
paramName: "filtroEstado",
|
|
122
|
+
label: "Estado",
|
|
123
|
+
options: [
|
|
124
|
+
{ label: "Activo", value: "active" },
|
|
125
|
+
{ label: "Inactivo", value: "inactive" },
|
|
126
|
+
],
|
|
127
|
+
},
|
|
128
|
+
] })] }), _jsxs("div", { className: "p-3 bg-[var(--color-bg-default)] border border-[var(--color-border-default)] rounded", children: [_jsxs("p", { className: "text-sm", children: [_jsx("span", { className: "font-semibold", children: "Query parameters actuales:" }), " ", _jsx("span", { style: { color: "var(--flysoft-text-secondary)" }, children: searchParams.toString() || "ninguno" })] }), _jsx("p", { className: "text-xs mt-2", style: { color: "var(--flysoft-text-secondary)" }, children: "\uD83D\uDCA1 Prueba escribir en el buscador (aplica inmediato) y luego usar los filtros avanzados (aplica al aceptar). Ambos coexisten en la URL." })] })] }) })] })] }) }) }));
|
|
111
129
|
};
|
|
112
130
|
export default FilterDocs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListCrudDocs.d.ts","sourceRoot":"","sources":["../../../src/docs/ListCrudDocs.tsx/ListCrudDocs.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ListCrudDocs.d.ts","sourceRoot":"","sources":["../../../src/docs/ListCrudDocs.tsx/ListCrudDocs.tsx"],"names":[],"mappings":"AAeA,eAAO,MAAM,YAAY,+CA6ExB,CAAC"}
|
|
@@ -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"}
|