flysoft-react-ui 1.2.3 → 1.2.5

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.
Files changed (270) hide show
  1. package/AI_CONTEXT.md +1400 -217
  2. package/AI_INTEGRATION_GUIDE.md +343 -0
  3. package/INTEGRATION_GUIDE.md +60 -0
  4. package/README.md +5 -3
  5. package/dist/components/form-controls/Input.d.ts.map +1 -1
  6. package/dist/components/form-controls/index.d.ts +2 -2
  7. package/dist/components/form-controls/index.d.ts.map +1 -1
  8. package/dist/components/layout/Accordion.d.ts +1 -0
  9. package/dist/components/layout/Accordion.d.ts.map +1 -1
  10. package/dist/components/layout/DataTable.d.ts.map +1 -1
  11. package/dist/components/layout/DropdownMenu.d.ts +2 -1
  12. package/dist/components/layout/DropdownMenu.d.ts.map +1 -1
  13. package/dist/components/layout/DropdownPanel.d.ts +2 -1
  14. package/dist/components/layout/DropdownPanel.d.ts.map +1 -1
  15. package/dist/components/layout/Filter.d.ts +1 -0
  16. package/dist/components/layout/Filter.d.ts.map +1 -1
  17. package/dist/components/layout/Menu.d.ts +2 -1
  18. package/dist/components/layout/Menu.d.ts.map +1 -1
  19. package/dist/components/layout/TabsGroup.d.ts +1 -0
  20. package/dist/components/layout/TabsGroup.d.ts.map +1 -1
  21. package/dist/index.css +1 -1
  22. package/dist/index.d.ts +2 -0
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +11889 -24
  25. package/dist/index.js.map +1 -1
  26. package/dist/templates/forms/ContactForm.d.ts +1 -0
  27. package/dist/templates/forms/ContactForm.d.ts.map +1 -1
  28. package/dist/templates/forms/LoginForm.d.ts +1 -0
  29. package/dist/templates/forms/LoginForm.d.ts.map +1 -1
  30. package/dist/templates/forms/RegistrationForm.d.ts +1 -0
  31. package/dist/templates/forms/RegistrationForm.d.ts.map +1 -1
  32. package/dist/templates/layouts/DashboardLayout.d.ts +1 -0
  33. package/dist/templates/layouts/DashboardLayout.d.ts.map +1 -1
  34. package/dist/templates/layouts/SidebarLayout.d.ts +1 -0
  35. package/dist/templates/layouts/SidebarLayout.d.ts.map +1 -1
  36. package/dist/templates/patterns/FormPattern.d.ts +1 -0
  37. package/dist/templates/patterns/FormPattern.d.ts.map +1 -1
  38. package/dist/templates/patterns/ListPattern.d.ts +77 -0
  39. package/dist/templates/patterns/ListPattern.d.ts.map +1 -0
  40. package/package.json +6 -3
  41. package/dist/App.d.ts +0 -4
  42. package/dist/App.d.ts.map +0 -1
  43. package/dist/App.js +0 -30
  44. package/dist/components/ThemeSwitcher.js +0 -12
  45. package/dist/components/form-controls/AutocompleteInput.js +0 -680
  46. package/dist/components/form-controls/Button.js +0 -211
  47. package/dist/components/form-controls/Checkbox.js +0 -79
  48. package/dist/components/form-controls/CurrencyInput.js +0 -106
  49. package/dist/components/form-controls/DateInput.js +0 -578
  50. package/dist/components/form-controls/DatePicker.js +0 -144
  51. package/dist/components/form-controls/Input.js +0 -35
  52. package/dist/components/form-controls/LinkButton.js +0 -248
  53. package/dist/components/form-controls/Pagination.js +0 -23
  54. package/dist/components/form-controls/RadioButtonGroup.js +0 -220
  55. package/dist/components/form-controls/SearchSelectInput-OLD.d.ts +0 -68
  56. package/dist/components/form-controls/SearchSelectInput-OLD.d.ts.map +0 -1
  57. package/dist/components/form-controls/SearchSelectInput-OLD.js +0 -962
  58. package/dist/components/form-controls/SearchSelectInput.js +0 -336
  59. package/dist/components/form-controls/index.js +0 -11
  60. package/dist/components/index.js +0 -7
  61. package/dist/components/layout/Accordion.js +0 -67
  62. package/dist/components/layout/AppLayout.js +0 -230
  63. package/dist/components/layout/Card.js +0 -54
  64. package/dist/components/layout/Collection.js +0 -18
  65. package/dist/components/layout/DataField.js +0 -38
  66. package/dist/components/layout/DataTable.js +0 -164
  67. package/dist/components/layout/DropdownMenu.js +0 -176
  68. package/dist/components/layout/DropdownPanel.js +0 -162
  69. package/dist/components/layout/Filter.js +0 -629
  70. package/dist/components/layout/Menu.js +0 -21
  71. package/dist/components/layout/TabPanel.js +0 -11
  72. package/dist/components/layout/TabsGroup.js +0 -52
  73. package/dist/components/layout/index.js +0 -12
  74. package/dist/components/utils/Avatar.js +0 -77
  75. package/dist/components/utils/Badge.js +0 -151
  76. package/dist/components/utils/Dialog.js +0 -44
  77. package/dist/components/utils/FiltersDialog.js +0 -104
  78. package/dist/components/utils/Loader.js +0 -44
  79. package/dist/components/utils/RoadMap.js +0 -139
  80. package/dist/components/utils/Skeleton.js +0 -10
  81. package/dist/components/utils/Snackbar.js +0 -136
  82. package/dist/components/utils/SnackbarContainer.js +0 -26
  83. package/dist/components/utils/iconUtils.js +0 -40
  84. package/dist/components/utils/index.js +0 -9
  85. package/dist/contexts/AppLayoutContext.js +0 -104
  86. package/dist/contexts/AuthContext.js +0 -224
  87. package/dist/contexts/CrudContext.js +0 -333
  88. package/dist/contexts/SnackbarContext.js +0 -41
  89. package/dist/contexts/ThemeContext.js +0 -197
  90. package/dist/contexts/index.js +0 -13
  91. package/dist/contexts/presets.js +0 -311
  92. package/dist/contexts/types.js +0 -1
  93. package/dist/docs/AccordionDocs.d.ts +0 -4
  94. package/dist/docs/AccordionDocs.d.ts.map +0 -1
  95. package/dist/docs/AccordionDocs.js +0 -21
  96. package/dist/docs/AuthDocs.tsx/AuthDocs.d.ts +0 -13
  97. package/dist/docs/AuthDocs.tsx/AuthDocs.d.ts.map +0 -1
  98. package/dist/docs/AuthDocs.tsx/AuthDocs.js +0 -18
  99. package/dist/docs/AuthDocs.tsx/AuthDocsContent.d.ts +0 -2
  100. package/dist/docs/AuthDocs.tsx/AuthDocsContent.d.ts.map +0 -1
  101. package/dist/docs/AuthDocs.tsx/AuthDocsContent.js +0 -22
  102. package/dist/docs/AuthDocs.tsx/mockAuthService.d.ts +0 -24
  103. package/dist/docs/AuthDocs.tsx/mockAuthService.d.ts.map +0 -1
  104. package/dist/docs/AuthDocs.tsx/mockAuthService.js +0 -78
  105. package/dist/docs/AutocompleteInputDocs.d.ts +0 -4
  106. package/dist/docs/AutocompleteInputDocs.d.ts.map +0 -1
  107. package/dist/docs/AutocompleteInputDocs.js +0 -84
  108. package/dist/docs/AvatarDocs.d.ts +0 -4
  109. package/dist/docs/AvatarDocs.d.ts.map +0 -1
  110. package/dist/docs/AvatarDocs.js +0 -7
  111. package/dist/docs/BadgeDocs.d.ts +0 -4
  112. package/dist/docs/BadgeDocs.d.ts.map +0 -1
  113. package/dist/docs/BadgeDocs.js +0 -9
  114. package/dist/docs/ButtonDocs.d.ts +0 -4
  115. package/dist/docs/ButtonDocs.d.ts.map +0 -1
  116. package/dist/docs/ButtonDocs.js +0 -7
  117. package/dist/docs/CardDocs.d.ts +0 -4
  118. package/dist/docs/CardDocs.d.ts.map +0 -1
  119. package/dist/docs/CardDocs.js +0 -22
  120. package/dist/docs/CheckboxDocs.d.ts +0 -4
  121. package/dist/docs/CheckboxDocs.d.ts.map +0 -1
  122. package/dist/docs/CheckboxDocs.js +0 -7
  123. package/dist/docs/CurrencyInputDocs.d.ts +0 -4
  124. package/dist/docs/CurrencyInputDocs.d.ts.map +0 -1
  125. package/dist/docs/CurrencyInputDocs.js +0 -22
  126. package/dist/docs/DataFieldDocs.d.ts +0 -4
  127. package/dist/docs/DataFieldDocs.d.ts.map +0 -1
  128. package/dist/docs/DataFieldDocs.js +0 -7
  129. package/dist/docs/DataTableDocs.d.ts +0 -4
  130. package/dist/docs/DataTableDocs.d.ts.map +0 -1
  131. package/dist/docs/DataTableDocs.js +0 -244
  132. package/dist/docs/DateInputDocs.d.ts +0 -5
  133. package/dist/docs/DateInputDocs.d.ts.map +0 -1
  134. package/dist/docs/DateInputDocs.js +0 -19
  135. package/dist/docs/DatePickerDocs.d.ts +0 -5
  136. package/dist/docs/DatePickerDocs.d.ts.map +0 -1
  137. package/dist/docs/DatePickerDocs.js +0 -16
  138. package/dist/docs/DialogDocs.d.ts +0 -4
  139. package/dist/docs/DialogDocs.d.ts.map +0 -1
  140. package/dist/docs/DialogDocs.js +0 -13
  141. package/dist/docs/DocAdmin.d.ts +0 -4
  142. package/dist/docs/DocAdmin.d.ts.map +0 -1
  143. package/dist/docs/DocAdmin.js +0 -68
  144. package/dist/docs/DocsMenu.d.ts +0 -2
  145. package/dist/docs/DocsMenu.d.ts.map +0 -1
  146. package/dist/docs/DocsMenu.js +0 -5
  147. package/dist/docs/DocsRouter.d.ts +0 -4
  148. package/dist/docs/DocsRouter.d.ts.map +0 -1
  149. package/dist/docs/DocsRouter.js +0 -39
  150. package/dist/docs/DropdownMenuDocs.d.ts +0 -4
  151. package/dist/docs/DropdownMenuDocs.d.ts.map +0 -1
  152. package/dist/docs/DropdownMenuDocs.js +0 -66
  153. package/dist/docs/DropdownPanelDocs.d.ts +0 -4
  154. package/dist/docs/DropdownPanelDocs.d.ts.map +0 -1
  155. package/dist/docs/DropdownPanelDocs.js +0 -7
  156. package/dist/docs/ExampleFormDocs.d.ts +0 -4
  157. package/dist/docs/ExampleFormDocs.d.ts.map +0 -1
  158. package/dist/docs/ExampleFormDocs.js +0 -153
  159. package/dist/docs/FilterDocs.d.ts +0 -4
  160. package/dist/docs/FilterDocs.d.ts.map +0 -1
  161. package/dist/docs/FilterDocs.js +0 -130
  162. package/dist/docs/InputDocs.d.ts +0 -4
  163. package/dist/docs/InputDocs.d.ts.map +0 -1
  164. package/dist/docs/InputDocs.js +0 -17
  165. package/dist/docs/LinkButtonDocs.d.ts +0 -4
  166. package/dist/docs/LinkButtonDocs.d.ts.map +0 -1
  167. package/dist/docs/LinkButtonDocs.js +0 -7
  168. package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.d.ts +0 -2
  169. package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.d.ts.map +0 -1
  170. package/dist/docs/ListCrudDocs.tsx/ListCrudDocs.js +0 -47
  171. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaPersonas.d.ts +0 -2
  172. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaPersonas.d.ts.map +0 -1
  173. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaPersonas.js +0 -34
  174. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaSingle.d.ts +0 -2
  175. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaSingle.d.ts.map +0 -1
  176. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresaSingle.js +0 -66
  177. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresas.d.ts +0 -2
  178. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresas.d.ts.map +0 -1
  179. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresas.js +0 -7
  180. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresasPersonasEditDialog.d.ts +0 -10
  181. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresasPersonasEditDialog.d.ts.map +0 -1
  182. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentEmpresasPersonasEditDialog.js +0 -39
  183. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.d.ts +0 -2
  184. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.d.ts.map +0 -1
  185. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsContentPersonas.js +0 -57
  186. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsEditDialog.d.ts +0 -9
  187. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsEditDialog.d.ts.map +0 -1
  188. package/dist/docs/ListCrudDocs.tsx/ListCrudDocsEditDialog.js +0 -30
  189. package/dist/docs/LoaderDocs.d.ts +0 -4
  190. package/dist/docs/LoaderDocs.d.ts.map +0 -1
  191. package/dist/docs/LoaderDocs.js +0 -33
  192. package/dist/docs/MenuDocs.d.ts +0 -4
  193. package/dist/docs/MenuDocs.d.ts.map +0 -1
  194. package/dist/docs/MenuDocs.js +0 -26
  195. package/dist/docs/PaginationDocs.d.ts +0 -4
  196. package/dist/docs/PaginationDocs.d.ts.map +0 -1
  197. package/dist/docs/PaginationDocs.js +0 -38
  198. package/dist/docs/RadioButtonGroupDocs.d.ts +0 -4
  199. package/dist/docs/RadioButtonGroupDocs.d.ts.map +0 -1
  200. package/dist/docs/RadioButtonGroupDocs.js +0 -46
  201. package/dist/docs/RoadMapDocs.d.ts +0 -4
  202. package/dist/docs/RoadMapDocs.d.ts.map +0 -1
  203. package/dist/docs/RoadMapDocs.js +0 -171
  204. package/dist/docs/SearchSelectInputDocs.d.ts +0 -4
  205. package/dist/docs/SearchSelectInputDocs.d.ts.map +0 -1
  206. package/dist/docs/SearchSelectInputDocs.js +0 -168
  207. package/dist/docs/SkeletonDocs.d.ts +0 -4
  208. package/dist/docs/SkeletonDocs.d.ts.map +0 -1
  209. package/dist/docs/SkeletonDocs.js +0 -7
  210. package/dist/docs/SnackbarDocs.d.ts +0 -4
  211. package/dist/docs/SnackbarDocs.d.ts.map +0 -1
  212. package/dist/docs/SnackbarDocs.js +0 -69
  213. package/dist/docs/TabsGroupDocs.d.ts +0 -4
  214. package/dist/docs/TabsGroupDocs.d.ts.map +0 -1
  215. package/dist/docs/TabsGroupDocs.js +0 -38
  216. package/dist/docs/ThemeSwitcherDocs.d.ts +0 -4
  217. package/dist/docs/ThemeSwitcherDocs.d.ts.map +0 -1
  218. package/dist/docs/ThemeSwitcherDocs.js +0 -11
  219. package/dist/docs/docMockServices/empresaService.d.ts +0 -38
  220. package/dist/docs/docMockServices/empresaService.d.ts.map +0 -1
  221. package/dist/docs/docMockServices/empresaService.js +0 -125
  222. package/dist/docs/docMockServices/index.d.ts +0 -9
  223. package/dist/docs/docMockServices/index.d.ts.map +0 -1
  224. package/dist/docs/docMockServices/index.js +0 -8
  225. package/dist/docs/docMockServices/initialData.d.ts +0 -6
  226. package/dist/docs/docMockServices/initialData.d.ts.map +0 -1
  227. package/dist/docs/docMockServices/initialData.js +0 -132
  228. package/dist/docs/docMockServices/interfaces.d.ts +0 -38
  229. package/dist/docs/docMockServices/interfaces.d.ts.map +0 -1
  230. package/dist/docs/docMockServices/interfaces.js +0 -1
  231. package/dist/docs/docMockServices/personaEmpresaService.d.ts +0 -43
  232. package/dist/docs/docMockServices/personaEmpresaService.d.ts.map +0 -1
  233. package/dist/docs/docMockServices/personaEmpresaService.js +0 -151
  234. package/dist/docs/docMockServices/personaService.d.ts +0 -39
  235. package/dist/docs/docMockServices/personaService.d.ts.map +0 -1
  236. package/dist/docs/docMockServices/personaService.js +0 -190
  237. package/dist/helpers/currencyFormat.js +0 -3
  238. package/dist/helpers/getErrorMessage.js +0 -13
  239. package/dist/helpers/getInitialLetters.js +0 -5
  240. package/dist/helpers/getQueryString.js +0 -13
  241. package/dist/helpers/index.js +0 -9
  242. package/dist/helpers/mappers.js +0 -27
  243. package/dist/helpers/nameValueArrayToObject.js +0 -3
  244. package/dist/helpers/objectToQueryString.js +0 -3
  245. package/dist/helpers/queryStringToObject.js +0 -13
  246. package/dist/helpers/regularExpressions.js +0 -5
  247. package/dist/hooks/index.js +0 -6
  248. package/dist/hooks/useAsyncRequest.js +0 -53
  249. package/dist/hooks/useBreakpoint.js +0 -59
  250. package/dist/hooks/useElementScroll.js +0 -58
  251. package/dist/hooks/useEnum.js +0 -21
  252. package/dist/hooks/useGlobalThemeStyles.js +0 -40
  253. package/dist/hooks/useThemeOverride.js +0 -99
  254. package/dist/interfaces/index.js +0 -1
  255. package/dist/interfaces/name-value.interface.js +0 -1
  256. package/dist/interfaces/pagination.interface.js +0 -1
  257. package/dist/main.d.ts +0 -2
  258. package/dist/main.d.ts.map +0 -1
  259. package/dist/main.js +0 -6
  260. package/dist/services/apiClient.js +0 -216
  261. package/dist/services/index.js +0 -1
  262. package/dist/styles.d.ts +0 -2
  263. package/dist/styles.d.ts.map +0 -1
  264. package/dist/styles.js +0 -3
  265. package/dist/templates/forms/ContactForm.js +0 -58
  266. package/dist/templates/forms/LoginForm.js +0 -36
  267. package/dist/templates/forms/RegistrationForm.js +0 -54
  268. package/dist/templates/layouts/DashboardLayout.js +0 -26
  269. package/dist/templates/layouts/SidebarLayout.js +0 -28
  270. package/dist/templates/patterns/FormPattern.js +0 -68
@@ -1,333 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { createContext, useContext, useEffect, useMemo, useRef, useState, useCallback, } from "react";
3
- import { useSearchParams } from "react-router-dom";
4
- import { Pagination } from "../components/form-controls/Pagination";
5
- import { useAsyncRequest } from "../hooks/useAsyncRequest";
6
- const createCrudContext = () => {
7
- return createContext(undefined);
8
- };
9
- // Crear el contexto con un tipo genérico por defecto
10
- // Los usuarios pueden crear su propio contexto con su tipo específico
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);
14
- const [list, setList] = useState(undefined);
15
- const [item, setItem] = useState(undefined);
16
- const [page, setPage] = useState(1);
17
- const [pages, setPages] = useState(1);
18
- const [total, setTotal] = useState(0);
19
- const [searchParams, setSearchParams] = useSearchParams();
20
- // Extraer funciones execute y opciones de las promises
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;
32
- const postPromiseExecute = postPromise
33
- ? typeof postPromise === "function"
34
- ? postPromise
35
- : postPromise.execute
36
- : undefined;
37
- const postPromiseSuccessMessage = postPromise && typeof postPromise === "object"
38
- ? postPromise.successMessage
39
- : undefined;
40
- const postPromiseErrorMessage = postPromise && typeof postPromise === "object"
41
- ? postPromise.errorMessage
42
- : undefined;
43
- const putPromiseExecute = putPromise
44
- ? typeof putPromise === "function"
45
- ? putPromise
46
- : putPromise.execute
47
- : undefined;
48
- const putPromiseSuccessMessage = putPromise && typeof putPromise === "object"
49
- ? putPromise.successMessage
50
- : undefined;
51
- const putPromiseErrorMessage = putPromise && typeof putPromise === "object"
52
- ? putPromise.errorMessage
53
- : undefined;
54
- const deletePromiseExecute = deletePromise
55
- ? typeof deletePromise === "function"
56
- ? deletePromise
57
- : deletePromise.execute
58
- : undefined;
59
- const deletePromiseSuccessMessage = deletePromise && typeof deletePromise === "object"
60
- ? deletePromise.successMessage
61
- : undefined;
62
- const deletePromiseErrorMessage = deletePromise && typeof deletePromise === "object"
63
- ? deletePromise.errorMessage
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;
76
- const getPromiseRef = useRef(getPromiseExecute);
77
- // Hooks para manejar las peticiones asíncronas con mensajes opcionales
78
- const fetchDataAsync = useAsyncRequest({
79
- successMessage: getPromiseSuccessMessage,
80
- errorMessage: getPromiseErrorMessage,
81
- });
82
- const createItemAsync = useAsyncRequest({
83
- successMessage: postPromiseSuccessMessage,
84
- errorMessage: postPromiseErrorMessage,
85
- });
86
- const updateItemAsync = useAsyncRequest({
87
- successMessage: putPromiseSuccessMessage,
88
- errorMessage: putPromiseErrorMessage,
89
- });
90
- const deleteItemAsync = useAsyncRequest({
91
- successMessage: deletePromiseSuccessMessage,
92
- errorMessage: deletePromiseErrorMessage,
93
- });
94
- const fetchItemAsync = useAsyncRequest({
95
- successMessage: getItemPromiseSuccessMessage,
96
- errorMessage: getItemPromiseErrorMessage,
97
- });
98
- // El isLoading del contexto usa el hook de fetchData
99
- const isLoading = fetchDataAsync.isLoading;
100
- // Actualizar la referencia cuando cambie getPromise
101
- useEffect(() => {
102
- getPromiseRef.current = getPromiseExecute;
103
- }, [getPromiseExecute]);
104
- // Función para obtener los parámetros de la URL
105
- const getUrlParams = useCallback(() => {
106
- const params = { limit };
107
- // Agregar pageParam si existe en la URL
108
- const pageValue = searchParams.get(pageParam);
109
- if (pageValue) {
110
- const parsedPage = parseInt(pageValue, 10);
111
- if (!isNaN(parsedPage)) {
112
- params[pageParam] = parsedPage;
113
- }
114
- }
115
- // Agregar urlParams si existen en la URL
116
- urlParams.forEach((paramName) => {
117
- const paramValue = searchParams.get(paramName);
118
- if (paramValue !== null) {
119
- params[paramName] = paramValue;
120
- }
121
- });
122
- return params;
123
- }, [searchParams, pageParam, urlParams, limit]);
124
- // Función para obtener los datos
125
- const fetchData = useCallback(async (params) => {
126
- if (!getPromiseExecute) {
127
- return;
128
- }
129
- // Obtener los parámetros que se van a usar
130
- const requestParams = params || getUrlParams();
131
- const result = await fetchDataAsync.execute(async () => {
132
- return await getPromiseRef.current(requestParams);
133
- });
134
- // Solo procesar el resultado si no es undefined (undefined significa error)
135
- if (result !== undefined) {
136
- if (result && typeof result === "object" && "list" in result) {
137
- // Es un PaginationInterface
138
- const { list, page, pages, total } = result;
139
- setList(list);
140
- setPage(page);
141
- setPages(pages);
142
- setTotal(total);
143
- }
144
- else if (Array.isArray(result)) {
145
- // Es un array simple
146
- setList(result);
147
- setPage(1);
148
- setTotal(result.length);
149
- setPages(Math.ceil(result.length / limit));
150
- }
151
- else {
152
- // Resultado null
153
- setList(undefined);
154
- setPage(1);
155
- setPages(1);
156
- setTotal(0);
157
- }
158
- }
159
- }, [getUrlParams, limit, fetchDataAsync, getPromiseExecute]);
160
- // Ref para almacenar los valores anteriores de urlParams
161
- const prevUrlParamsValuesRef = useRef({});
162
- // Memoizar los valores actuales de los urlParams
163
- const urlParamsValues = useMemo(() => {
164
- const values = {};
165
- urlParams.forEach((paramName) => {
166
- values[paramName] = searchParams.get(paramName);
167
- });
168
- return values;
169
- }, [searchParams, urlParams]);
170
- // Memoizar los parámetros de URL para evitar re-renders innecesarios
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]);
190
- // Memoizar los parámetros actuales para exponerlos
191
- const currentParams = useMemo(() => getUrlParams(),
192
- // eslint-disable-next-line react-hooks/exhaustive-deps
193
- [searchParams, pageParam, urlParamsKey, limit, urlParams]);
194
- // Función para recargar los datos
195
- const fetchItemsExecute = useCallback(async (params) => {
196
- await fetchData(params);
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]);
216
- // Función para crear un item
217
- const createItemExecute = useCallback(async (item) => {
218
- if (!postPromiseExecute) {
219
- throw new Error("postPromise is not defined. Please provide postPromise to CrudProvider.");
220
- }
221
- return await createItemAsync.execute(async () => {
222
- return await postPromiseExecute(item);
223
- });
224
- }, [postPromiseExecute, createItemAsync]);
225
- // Función para actualizar un item
226
- const updateItemExecute = useCallback(async (item) => {
227
- if (!putPromiseExecute) {
228
- throw new Error("putPromise is not defined. Please provide putPromise to CrudProvider.");
229
- }
230
- return await updateItemAsync.execute(async () => {
231
- return await putPromiseExecute(item);
232
- });
233
- }, [putPromiseExecute, updateItemAsync]);
234
- // Función para eliminar un item
235
- const deleteItemExecute = useCallback(async (item) => {
236
- if (!deletePromiseExecute) {
237
- throw new Error("deletePromise is not defined. Please provide deletePromise to CrudProvider.");
238
- }
239
- await deleteItemAsync.execute(async () => {
240
- await deletePromiseExecute(item);
241
- });
242
- }, [deletePromiseExecute, deleteItemAsync]);
243
- // useEffect para resetear pageParam a 1 cuando cambien los urlParams
244
- useEffect(() => {
245
- // Verificar si hay algún urlParam definido
246
- if (urlParams.length === 0) {
247
- prevUrlParamsValuesRef.current = {};
248
- return;
249
- }
250
- // Comparar valores actuales con los anteriores
251
- const prevValues = prevUrlParamsValuesRef.current;
252
- const hasChanged = urlParams.some((paramName) => prevValues[paramName] !== urlParamsValues[paramName]);
253
- // Si los urlParams cambiaron, resetear pageParam a 1
254
- if (hasChanged) {
255
- const currentPage = searchParams.get(pageParam);
256
- if (currentPage && currentPage !== "1") {
257
- const newSearchParams = new URLSearchParams(searchParams);
258
- newSearchParams.set(pageParam, "1");
259
- setSearchParams(newSearchParams, { replace: true });
260
- // No hacer fetchData aquí, se hará cuando cambien los searchParams
261
- return;
262
- }
263
- }
264
- // Actualizar los valores anteriores
265
- prevUrlParamsValuesRef.current = { ...urlParamsValues };
266
- // eslint-disable-next-line react-hooks/exhaustive-deps
267
- }, [JSON.stringify(urlParamsValues), pageParam, urlParamsKey]);
268
- // useEffect para ejecutar fetchData cuando cambian los parámetros relevantes o getPromise
269
- useEffect(() => {
270
- if (!getPromiseExecute) {
271
- return;
272
- }
273
- const timeoutId = setTimeout(() => {
274
- fetchData();
275
- }, 0);
276
- return () => clearTimeout(timeoutId);
277
- // eslint-disable-next-line react-hooks/exhaustive-deps
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]);
290
- const value = {
291
- list,
292
- item,
293
- page,
294
- pages,
295
- total,
296
- limit,
297
- isLoading,
298
- params: currentParams,
299
- fetchItems: {
300
- execute: fetchItemsExecute,
301
- isLoading: fetchDataAsync.isLoading,
302
- },
303
- fetchItem: {
304
- execute: fetchItemExecute,
305
- isLoading: fetchItemAsync.isLoading,
306
- },
307
- createItem: {
308
- execute: createItemExecute,
309
- isLoading: createItemAsync.isLoading,
310
- },
311
- updateItem: {
312
- execute: updateItemExecute,
313
- isLoading: updateItemAsync.isLoading,
314
- },
315
- deleteItem: {
316
- execute: deleteItemExecute,
317
- isLoading: deleteItemAsync.isLoading,
318
- },
319
- pagination: (_jsx(Pagination, { page: page, pages: pages, total: total, fieldName: pageParam, isLoading: isLoading })),
320
- extraData,
321
- setExtraData,
322
- };
323
- return _jsx(CrudContext.Provider, { value: value, children: children });
324
- }
325
- // Hook to use Crud context
326
- // eslint-disable-next-line react-refresh/only-export-components
327
- export function useCrud() {
328
- const context = useContext(CrudContext);
329
- if (context === undefined) {
330
- throw new Error("useCrud must be used within a CrudProvider");
331
- }
332
- return context;
333
- }
@@ -1,41 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import React, { createContext, useContext, useState, useCallback, useMemo, } from "react";
3
- const SnackbarStateContext = createContext(undefined);
4
- const SnackbarActionsContext = createContext(undefined);
5
- export const SnackbarProvider = ({ children, }) => {
6
- const [snackbars, setSnackbars] = useState([]);
7
- const showSnackbar = useCallback((message, variant = "info", options) => {
8
- const id = `snackbar-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
9
- const newSnackbar = {
10
- id,
11
- message,
12
- variant,
13
- duration: options?.duration ?? 3000,
14
- icon: options?.icon,
15
- iconLabel: options?.iconLabel,
16
- };
17
- setSnackbars((prev) => [...prev, newSnackbar]);
18
- }, []);
19
- const removeSnackbar = useCallback((id) => {
20
- setSnackbars((prev) => prev.filter((snackbar) => snackbar.id !== id));
21
- }, []);
22
- const actions = useMemo(() => ({
23
- showSnackbar,
24
- removeSnackbar,
25
- }), [showSnackbar, removeSnackbar]);
26
- return (_jsx(SnackbarActionsContext.Provider, { value: actions, children: _jsx(SnackbarStateContext.Provider, { value: snackbars, children: children }) }));
27
- };
28
- export const useSnackbar = () => {
29
- const context = useContext(SnackbarActionsContext);
30
- if (context === undefined) {
31
- throw new Error("useSnackbar must be used within a SnackbarProvider");
32
- }
33
- return context;
34
- };
35
- export const useSnackbarState = () => {
36
- const context = useContext(SnackbarStateContext);
37
- if (context === undefined) {
38
- throw new Error("useSnackbarState must be used within a SnackbarProvider");
39
- }
40
- return context;
41
- };
@@ -1,197 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import React, { createContext, useContext, useEffect, useMemo, useState, } from "react";
3
- import { themes, defaultTheme } from "./presets";
4
- const ThemeContext = createContext(undefined);
5
- const toKebabCase = (value) => value.replace(/([A-Z])/g, "-$1").toLowerCase();
6
- const buildThemeResetStyles = (theme) => {
7
- const cssVariables = {
8
- "--flysoft-theme-name": theme.name,
9
- };
10
- Object.entries(theme.colors).forEach(([key, value]) => {
11
- cssVariables[`--flysoft-${toKebabCase(key)}`] = value;
12
- });
13
- Object.entries(theme.shadows).forEach(([key, value]) => {
14
- cssVariables[`--flysoft-shadow-${key}`] = value;
15
- });
16
- Object.entries(theme.radius).forEach(([key, value]) => {
17
- cssVariables[`--flysoft-radius-${key}`] = value;
18
- });
19
- Object.entries(theme.spacing).forEach(([key, value]) => {
20
- cssVariables[`--flysoft-spacing-${key}`] = value;
21
- });
22
- Object.entries(theme.fonts).forEach(([key, value]) => {
23
- cssVariables[`--flysoft-font-${key}`] = value;
24
- });
25
- return {
26
- color: theme.fonts.colorDefault ?? theme.colors.textPrimary,
27
- //backgroundColor: theme.colors.bgDefault,
28
- fontFamily: theme.fonts.default,
29
- fontSize: theme.fonts.sizeDefault,
30
- lineHeight: "1.5",
31
- ...cssVariables,
32
- };
33
- };
34
- export const ThemeProvider = ({ children, initialTheme = "light", storageKey = "flysoft-theme", forceInitialTheme = false, onThemeChange, }) => {
35
- // Almacenar el tema inicial para poder resetear a él
36
- const getInitialTheme = () => {
37
- if (typeof initialTheme === "string") {
38
- return themes[initialTheme] || defaultTheme;
39
- }
40
- return initialTheme;
41
- };
42
- const [currentTheme, setCurrentTheme] = useState(() => {
43
- // Si forceInitialTheme es true, usar siempre el initialTheme
44
- if (forceInitialTheme) {
45
- return getInitialTheme();
46
- }
47
- // Try to get theme from localStorage
48
- if (typeof window !== "undefined") {
49
- const savedTheme = localStorage.getItem(storageKey);
50
- if (savedTheme) {
51
- if (themes[savedTheme]) {
52
- return themes[savedTheme];
53
- }
54
- // Try to parse as custom theme
55
- try {
56
- const parsed = JSON.parse(savedTheme);
57
- if (parsed.name && parsed.colors) {
58
- return parsed;
59
- }
60
- }
61
- catch {
62
- // Invalid JSON, fallback to default
63
- }
64
- }
65
- }
66
- // Handle initialTheme prop
67
- return getInitialTheme();
68
- });
69
- const [currentThemeName, setCurrentThemeName] = useState(currentTheme.name);
70
- // Function to apply theme to CSS variables
71
- const applyThemeToCSS = (theme) => {
72
- if (typeof document === "undefined")
73
- return;
74
- const root = document.documentElement;
75
- // Apply color variables
76
- Object.entries(theme.colors).forEach(([key, value]) => {
77
- const cssVarName = `--flysoft-${key
78
- .replace(/([A-Z])/g, "-$1")
79
- .toLowerCase()}`;
80
- root.style.setProperty(cssVarName, value);
81
- });
82
- // Apply shadow variables
83
- Object.entries(theme.shadows).forEach(([key, value]) => {
84
- const cssVarName = `--flysoft-shadow-${key}`;
85
- root.style.setProperty(cssVarName, value);
86
- });
87
- // Apply radius variables
88
- Object.entries(theme.radius).forEach(([key, value]) => {
89
- const cssVarName = `--flysoft-radius-${key}`;
90
- root.style.setProperty(cssVarName, value);
91
- });
92
- // Apply spacing variables
93
- Object.entries(theme.spacing).forEach(([key, value]) => {
94
- const cssVarName = `--flysoft-spacing-${key}`;
95
- root.style.setProperty(cssVarName, value);
96
- });
97
- // Apply font variables
98
- Object.entries(theme.fonts).forEach(([key, value]) => {
99
- const cssVarName = `--flysoft-font-${key}`;
100
- root.style.setProperty(cssVarName, value);
101
- });
102
- // Set theme name as data attribute for CSS targeting
103
- root.setAttribute("data-theme", theme.name);
104
- // Apply background and text colors to body for better integration
105
- const body = document.body;
106
- if (body) {
107
- //body.style.backgroundColor = theme.colors.bgDefault;
108
- body.style.color = theme.colors.textPrimary;
109
- body.style.fontFamily = theme.fonts.default;
110
- }
111
- };
112
- // Function to set theme
113
- const setTheme = (theme) => {
114
- let newTheme;
115
- if (typeof theme === "string") {
116
- if (themes[theme]) {
117
- newTheme = themes[theme];
118
- }
119
- else {
120
- console.warn(`Theme "${theme}" not found, falling back to default`);
121
- newTheme = defaultTheme;
122
- }
123
- }
124
- else {
125
- newTheme = theme;
126
- }
127
- setCurrentTheme(newTheme);
128
- setCurrentThemeName(newTheme.name);
129
- // Save to localStorage
130
- if (typeof window !== "undefined") {
131
- localStorage.setItem(storageKey, JSON.stringify(newTheme));
132
- }
133
- // Trigger external callback
134
- onThemeChange?.(newTheme);
135
- // Apply to CSS
136
- applyThemeToCSS(newTheme);
137
- };
138
- // Function to update theme partially
139
- const updateTheme = (updates) => {
140
- setCurrentTheme((prev) => {
141
- const newTheme = typeof updates === "function"
142
- ? updates(prev)
143
- : {
144
- ...prev,
145
- ...updates,
146
- colors: { ...prev.colors, ...updates.colors },
147
- shadows: { ...prev.shadows, ...updates.shadows },
148
- radius: { ...prev.radius, ...updates.radius },
149
- spacing: { ...prev.spacing, ...updates.spacing },
150
- fonts: { ...prev.fonts, ...updates.fonts },
151
- };
152
- // Save to localStorage
153
- if (typeof window !== "undefined") {
154
- localStorage.setItem(storageKey, JSON.stringify(newTheme));
155
- }
156
- // Trigger external callback
157
- onThemeChange?.(newTheme);
158
- return newTheme;
159
- });
160
- };
161
- // Function to reset to initial theme (the one passed as initialTheme prop)
162
- const resetToDefault = () => {
163
- setTheme(getInitialTheme());
164
- };
165
- // Apply theme on mount and when theme changes
166
- useEffect(() => {
167
- applyThemeToCSS(currentTheme);
168
- }, [currentTheme]);
169
- // Check if current theme is dark
170
- const isDark = currentTheme.name === "dark";
171
- const themeResetStyles = useMemo(() => buildThemeResetStyles(currentTheme), [currentTheme]);
172
- const value = {
173
- theme: currentTheme,
174
- setTheme,
175
- updateTheme,
176
- currentThemeName,
177
- availableThemes: Object.keys(themes),
178
- resetToDefault,
179
- isDark,
180
- };
181
- return (_jsx(ThemeContext.Provider, { value: value, children: _jsx("div", { className: "flysoft-theme-reset", style: themeResetStyles, "data-theme": currentTheme.name, children: children }) }));
182
- };
183
- // Hook to use theme context
184
- // eslint-disable-next-line react-refresh/only-export-components
185
- export const useTheme = () => {
186
- const context = useContext(ThemeContext);
187
- if (context === undefined) {
188
- throw new Error("useTheme must be used within a ThemeProvider");
189
- }
190
- return context;
191
- };
192
- // Hook to check if theme context is available
193
- // eslint-disable-next-line react-refresh/only-export-components
194
- export const useThemeContext = () => {
195
- const context = useContext(ThemeContext);
196
- return context !== undefined;
197
- };
@@ -1,13 +0,0 @@
1
- // Theme system exports
2
- export { ThemeProvider, useTheme, useThemeContext } from "./ThemeContext";
3
- export { useThemeOverride, useTemporaryOverride, } from "../hooks/useThemeOverride";
4
- // Preset themes
5
- export { lightTheme, darkTheme, blueTheme, greenTheme, defaultTheme, themes, } from "./presets";
6
- // Auth system exports
7
- export { AuthProvider, AuthContext } from "./AuthContext";
8
- // Crud system exports
9
- export { CrudProvider, CrudContext, useCrud } from "./CrudContext";
10
- // AppLayout system exports
11
- export { AppLayoutProvider, useAppLayout, useAppLayoutContext } from "./AppLayoutContext";
12
- // Snackbar system exports
13
- export { SnackbarProvider, useSnackbar, useSnackbarState, } from "./SnackbarContext";