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,43 +0,0 @@
1
- import type { PersonaEmpresa, PersonaEmpresaConPersona, PersonaEmpresaConEmpresa } from "./interfaces";
2
- /**
3
- * Servicio mock para gestionar relaciones Persona-Empresa en localStorage
4
- */
5
- export declare const personaEmpresaService: {
6
- /**
7
- * Obtiene todas las relaciones
8
- */
9
- listar(): Promise<PersonaEmpresa[]>;
10
- /**
11
- * Busca relaciones por ID de persona, incluyendo la información completa de la empresa
12
- */
13
- buscarPorPersona(idPersona: number): Promise<PersonaEmpresaConEmpresa[]>;
14
- /**
15
- * Busca relaciones por ID de empresa, incluyendo la información completa de la persona
16
- */
17
- buscarPorEmpresa(idEmpresa: number): Promise<PersonaEmpresaConPersona[]>;
18
- /**
19
- * Busca una relación específica por persona y empresa
20
- */
21
- buscarPorPersonaYEmpresa(idPersona: number, idEmpresa: number): Promise<PersonaEmpresa | undefined>;
22
- /**
23
- * Agrega una nueva relación
24
- */
25
- agregar(relacion: PersonaEmpresa): Promise<PersonaEmpresa>;
26
- /**
27
- * Edita una relación existente
28
- */
29
- editar(idPersona: number, idEmpresa: number, datos: Partial<Omit<PersonaEmpresa, "idPersona" | "idEmpresa">>): Promise<PersonaEmpresa | null>;
30
- /**
31
- * Elimina una relación por persona y empresa
32
- */
33
- eliminar(personaEmpresa: PersonaEmpresa): Promise<void>;
34
- /**
35
- * Elimina todas las relaciones de una persona
36
- */
37
- eliminarPorPersona(idPersona: number): Promise<number>;
38
- /**
39
- * Elimina todas las relaciones de una empresa
40
- */
41
- eliminarPorEmpresa(idEmpresa: number): Promise<number>;
42
- };
43
- //# sourceMappingURL=personaEmpresaService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"personaEmpresaService.d.ts","sourceRoot":"","sources":["../../../src/docs/docMockServices/personaEmpresaService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,cAAc,CAAC;AAqBtB;;GAEG;AACH,eAAO,MAAM,qBAAqB;IAChC;;OAEG;cACa,OAAO,CAAC,cAAc,EAAE,CAAC;IAKzC;;OAEG;gCAEU,MAAM,GAChB,OAAO,CAAC,wBAAwB,EAAE,CAAC;IA6BtC;;OAEG;gCAEU,MAAM,GAChB,OAAO,CAAC,wBAAwB,EAAE,CAAC;IAyCtC;;OAEG;wCAEU,MAAM,aACN,MAAM,GAChB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAQtC;;OAEG;sBACqB,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;IAgBhE;;OAEG;sBAEU,MAAM,aACN,MAAM,SACV,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,WAAW,CAAC,CAAC,GAC9D,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAajC;;OAEG;6BAC4B,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAY7D;;OAEG;kCACiC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW5D;;OAEG;kCACiC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAU7D,CAAC"}
@@ -1,151 +0,0 @@
1
- import { personaService } from "./personaService";
2
- import { empresaService } from "./empresaService";
3
- const STORAGE_KEY = "docMockServices_personaEmpresas";
4
- /**
5
- * Simula un delay de red para hacer más realista el mock
6
- */
7
- const simulateNetworkDelay = (ms = 500) => {
8
- return new Promise((resolve) => setTimeout(resolve, ms));
9
- };
10
- /**
11
- * Obtiene todas las relaciones del almacenamiento (método interno)
12
- */
13
- const _obtenerTodas = () => {
14
- const data = localStorage.getItem(STORAGE_KEY);
15
- return data ? JSON.parse(data) : [];
16
- };
17
- /**
18
- * Servicio mock para gestionar relaciones Persona-Empresa en localStorage
19
- */
20
- export const personaEmpresaService = {
21
- /**
22
- * Obtiene todas las relaciones
23
- */
24
- async listar() {
25
- await simulateNetworkDelay();
26
- return _obtenerTodas();
27
- },
28
- /**
29
- * Busca relaciones por ID de persona, incluyendo la información completa de la empresa
30
- */
31
- async buscarPorPersona(idPersona) {
32
- await simulateNetworkDelay();
33
- const relaciones = _obtenerTodas();
34
- const relacionesFiltradas = relaciones.filter((rel) => rel.idPersona.toString() === idPersona.toString());
35
- // Obtener todas las empresas de una vez para optimizar
36
- const todasLasEmpresas = await empresaService.listar();
37
- // Enriquecer cada relación con la información de la empresa
38
- const relacionesConEmpresas = await Promise.all(relacionesFiltradas.map(async (rel) => {
39
- const empresa = todasLasEmpresas.find((e) => e.id.toString() === rel.idEmpresa.toString());
40
- if (!empresa) {
41
- throw new Error(`Empresa con id ${rel.idEmpresa} no encontrada para la relación`);
42
- }
43
- return {
44
- ...rel,
45
- empresa,
46
- };
47
- }));
48
- return relacionesConEmpresas;
49
- },
50
- /**
51
- * Busca relaciones por ID de empresa, incluyendo la información completa de la persona
52
- */
53
- async buscarPorEmpresa(idEmpresa) {
54
- console.log("Busca relaciones por empresa", idEmpresa);
55
- await simulateNetworkDelay();
56
- const relaciones = _obtenerTodas();
57
- const relacionesFiltradas = relaciones.filter((rel) => rel.idEmpresa.toString() === idEmpresa.toString());
58
- // Obtener todas las personas de una vez para optimizar
59
- const todasLasPersonas = await personaService.listar();
60
- // Enriquecer cada relación con la información de la persona
61
- // PersonaConEmpresas extiende Persona, así que podemos usarlo directamente
62
- const relacionesConPersonas = await Promise.all(relacionesFiltradas.map(async (rel) => {
63
- const personaConEmpresas = todasLasPersonas.find((p) => p.id.toString() === rel.idPersona.toString());
64
- if (!personaConEmpresas) {
65
- throw new Error(`Persona con id ${rel.idPersona} no encontrada para la relación`);
66
- }
67
- // Extraer solo los campos de Persona (sin empresas)
68
- const persona = {
69
- id: personaConEmpresas.id,
70
- nombre: personaConEmpresas.nombre,
71
- email: personaConEmpresas.email,
72
- fechaNacimiento: personaConEmpresas.fechaNacimiento,
73
- };
74
- return {
75
- ...rel,
76
- persona,
77
- };
78
- }));
79
- return relacionesConPersonas;
80
- },
81
- /**
82
- * Busca una relación específica por persona y empresa
83
- */
84
- async buscarPorPersonaYEmpresa(idPersona, idEmpresa) {
85
- await simulateNetworkDelay();
86
- const relaciones = _obtenerTodas();
87
- return relaciones.find((rel) => rel.idPersona.toString() === idPersona.toString() && rel.idEmpresa.toString() === idEmpresa.toString());
88
- },
89
- /**
90
- * Agrega una nueva relación
91
- */
92
- async agregar(relacion) {
93
- await simulateNetworkDelay();
94
- const relaciones = _obtenerTodas();
95
- // Verificar que no exista ya la relación
96
- const existe = relaciones.some((rel) => rel.idPersona.toString() === relacion.idPersona.toString() &&
97
- rel.idEmpresa.toString() === relacion.idEmpresa.toString());
98
- if (!existe) {
99
- relaciones.push(relacion);
100
- localStorage.setItem(STORAGE_KEY, JSON.stringify(relaciones));
101
- }
102
- return relacion;
103
- },
104
- /**
105
- * Edita una relación existente
106
- */
107
- async editar(idPersona, idEmpresa, datos) {
108
- await simulateNetworkDelay();
109
- const relaciones = _obtenerTodas();
110
- const index = relaciones.findIndex((rel) => rel.idPersona.toString() === idPersona.toString() && rel.idEmpresa.toString() === idEmpresa.toString());
111
- if (index === -1)
112
- return null;
113
- relaciones[index] = { ...relaciones[index], ...datos };
114
- localStorage.setItem(STORAGE_KEY, JSON.stringify(relaciones));
115
- return relaciones[index];
116
- },
117
- /**
118
- * Elimina una relación por persona y empresa
119
- */
120
- async eliminar(personaEmpresa) {
121
- await simulateNetworkDelay();
122
- const relaciones = _obtenerTodas();
123
- const index = relaciones.findIndex((rel) => rel.idPersona.toString() === personaEmpresa.idPersona.toString() && rel.idEmpresa.toString() === personaEmpresa.idEmpresa.toString());
124
- if (index === -1)
125
- return;
126
- relaciones.splice(index, 1);
127
- localStorage.setItem(STORAGE_KEY, JSON.stringify(relaciones));
128
- },
129
- /**
130
- * Elimina todas las relaciones de una persona
131
- */
132
- async eliminarPorPersona(idPersona) {
133
- await simulateNetworkDelay();
134
- const relaciones = _obtenerTodas();
135
- const inicialLength = relaciones.length;
136
- const nuevasRelaciones = relaciones.filter((rel) => rel.idPersona.toString() !== idPersona.toString());
137
- localStorage.setItem(STORAGE_KEY, JSON.stringify(nuevasRelaciones));
138
- return inicialLength - nuevasRelaciones.length;
139
- },
140
- /**
141
- * Elimina todas las relaciones de una empresa
142
- */
143
- async eliminarPorEmpresa(idEmpresa) {
144
- await simulateNetworkDelay();
145
- const relaciones = _obtenerTodas();
146
- const inicialLength = relaciones.length;
147
- const nuevasRelaciones = relaciones.filter((rel) => rel.idEmpresa.toString() !== idEmpresa.toString());
148
- localStorage.setItem(STORAGE_KEY, JSON.stringify(nuevasRelaciones));
149
- return inicialLength - nuevasRelaciones.length;
150
- },
151
- };
@@ -1,39 +0,0 @@
1
- import type { Persona, PersonaConEmpresas } from "./interfaces";
2
- import type { PaginationInterface } from "../../interfaces";
3
- /**
4
- * Servicio mock para gestionar Personas en localStorage
5
- */
6
- export declare const personaService: {
7
- /**
8
- * Obtiene personas opcionalmente filtradas por nombre, con sus empresas relacionadas
9
- */
10
- listar(params?: {
11
- filtro?: string;
12
- }): Promise<PersonaConEmpresas[]>;
13
- /**
14
- * Obtiene personas paginadas opcionalmente filtradas por nombre y/o idEmpresa, con sus empresas relacionadas
15
- */
16
- listarPaginados(params?: {
17
- filtro?: string;
18
- pagina?: string;
19
- limit?: string;
20
- idEmpresa?: string;
21
- }): Promise<PaginationInterface<PersonaConEmpresas>>;
22
- /**
23
- * Busca una persona por ID
24
- */
25
- buscarPorId(id: number): Promise<Persona | undefined>;
26
- /**
27
- * Agrega una nueva persona
28
- */
29
- agregar(persona: Omit<Persona, "id">): Promise<Persona>;
30
- /**
31
- * Edita una persona existente
32
- */
33
- editar(id: number, datos: Partial<Omit<Persona, "id">>): Promise<Persona | undefined>;
34
- /**
35
- * Elimina una persona por ID y todas sus relaciones con empresas
36
- */
37
- eliminar(persona: Persona): Promise<void>;
38
- };
39
- //# sourceMappingURL=personaService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"personaService.d.ts","sourceRoot":"","sources":["../../../src/docs/docMockServices/personaService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAW,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AA6D5D;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB;;OAEG;oBACmB;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAuBzE;;OAEG;6BAC4B;QAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;IAoEpD;;OAEG;oBACmB,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAM3D;;OAEG;qBACoB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB7D;;OAEG;eAEG,MAAM,SACH,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,GAClC,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAgB/B;;OAEG;sBACqB,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBhD,CAAC"}
@@ -1,190 +0,0 @@
1
- import dayjs from "dayjs";
2
- import { personaEmpresaService } from "./personaEmpresaService";
3
- import { empresaService } from "./empresaService";
4
- const STORAGE_KEY = "docMockServices_personas";
5
- /**
6
- * Simula un delay de red para hacer más realista el mock
7
- */
8
- const simulateNetworkDelay = (ms = 500) => {
9
- return new Promise((resolve) => setTimeout(resolve, ms));
10
- };
11
- /**
12
- * Obtiene todas las personas del almacenamiento (función helper interna)
13
- * Convierte las fechas de string ISO a dayjs
14
- */
15
- const _obtenerTodas = () => {
16
- const data = localStorage.getItem(STORAGE_KEY);
17
- if (!data)
18
- return [];
19
- const personas = JSON.parse(data);
20
- // Convertir fechaNacimiento de string ISO a dayjs
21
- return personas.map((persona) => ({
22
- ...persona,
23
- fechaNacimiento: dayjs(persona.fechaNacimiento),
24
- }));
25
- };
26
- /**
27
- * Enriquece una persona con sus empresas relacionadas
28
- * Optimizado para obtener todas las empresas de una vez
29
- */
30
- const _enriquecerConEmpresas = async (persona, todasLasEmpresas) => {
31
- const relaciones = await personaEmpresaService.buscarPorPersona(persona.id);
32
- const empresasIds = relaciones.map((rel) => rel.idEmpresa);
33
- let empresas = [];
34
- if (todasLasEmpresas) {
35
- // Si ya tenemos todas las empresas, filtrar por IDs
36
- empresas = todasLasEmpresas.filter((emp) => empresasIds.includes(emp.id));
37
- }
38
- else {
39
- // Si no, obtener cada empresa individualmente
40
- for (const idEmpresa of empresasIds) {
41
- const empresa = await empresaService.buscarPorId(idEmpresa.toString());
42
- if (empresa) {
43
- empresas.push(empresa);
44
- }
45
- }
46
- }
47
- return {
48
- ...persona,
49
- empresas,
50
- };
51
- };
52
- /**
53
- * Servicio mock para gestionar Personas en localStorage
54
- */
55
- export const personaService = {
56
- /**
57
- * Obtiene personas opcionalmente filtradas por nombre, con sus empresas relacionadas
58
- */
59
- async listar(params) {
60
- await simulateNetworkDelay();
61
- const todas = _obtenerTodas();
62
- let personasFiltradas = todas;
63
- if (params?.filtro) {
64
- const filtroLower = params.filtro.toLowerCase();
65
- personasFiltradas = todas.filter((per) => per.nombre.toLowerCase().includes(filtroLower));
66
- }
67
- // Obtener todas las empresas de una vez para optimizar
68
- const todasLasEmpresas = await empresaService.listar();
69
- // Enriquecer cada persona con sus empresas
70
- const personasConEmpresas = await Promise.all(personasFiltradas.map((p) => _enriquecerConEmpresas(p, todasLasEmpresas)));
71
- return personasConEmpresas;
72
- },
73
- /**
74
- * Obtiene personas paginadas opcionalmente filtradas por nombre y/o idEmpresa, con sus empresas relacionadas
75
- */
76
- async listarPaginados(params) {
77
- await simulateNetworkDelay();
78
- const pagina = params?.pagina ?? 1;
79
- const limit = params?.limit ?? 20;
80
- const todas = _obtenerTodas();
81
- let todasFiltradas = todas;
82
- // Filtro por nombre
83
- if (params?.filtro) {
84
- const filtroLower = params.filtro.toLowerCase();
85
- todasFiltradas = todasFiltradas.filter((per) => per.nombre.toLowerCase().includes(filtroLower));
86
- }
87
- // Filtro por idEmpresa: obtener todas las relaciones de esa empresa
88
- // y filtrar las personas que tienen esa relación
89
- if (params?.idEmpresa !== undefined) {
90
- const relaciones = await personaEmpresaService.buscarPorEmpresa(Number(params.idEmpresa));
91
- const personasIdsConEmpresa = new Set(relaciones.map((rel) => rel.idPersona.toString()));
92
- todasFiltradas = todasFiltradas.filter((per) => personasIdsConEmpresa.has(per.id.toString()));
93
- }
94
- const total = todasFiltradas.length;
95
- // Obtener todas las empresas de una vez para optimizar
96
- const todasLasEmpresas = await empresaService.listar();
97
- // Enriquecer cada persona con sus empresas antes de paginar
98
- const personasConEmpresas = await Promise.all(todasFiltradas.map((p) => _enriquecerConEmpresas(p, todasLasEmpresas)));
99
- const limitNumber = parseInt(limit.toString(), 10);
100
- const paginaNumber = parseInt(pagina.toString(), 10);
101
- const totalNumber = parseInt(total.toString(), 10);
102
- // Si limit es 0, devolver todos los elementos sin paginar
103
- if (limitNumber === 0) {
104
- return {
105
- list: personasConEmpresas,
106
- limit: 0,
107
- page: 1,
108
- pages: 1,
109
- total,
110
- };
111
- }
112
- const pages = Math.ceil(totalNumber / limitNumber);
113
- const inicio = (paginaNumber - 1) * limitNumber;
114
- const fin = inicio + limitNumber;
115
- const list = personasConEmpresas.slice(inicio, fin);
116
- return {
117
- list,
118
- limit: limitNumber,
119
- page: paginaNumber,
120
- pages,
121
- total,
122
- };
123
- },
124
- /**
125
- * Busca una persona por ID
126
- */
127
- async buscarPorId(id) {
128
- await simulateNetworkDelay();
129
- const personas = _obtenerTodas();
130
- return personas.find((per) => per.id === id);
131
- },
132
- /**
133
- * Agrega una nueva persona
134
- */
135
- async agregar(persona) {
136
- await simulateNetworkDelay();
137
- const personas = _obtenerTodas();
138
- const nuevoId = personas.length > 0 ? Math.max(...personas.map((p) => p.id)) + 1 : 1;
139
- // Crear nueva persona: el id generado siempre sobrescribe cualquier id que venga
140
- const nuevaPersona = {
141
- ...persona,
142
- id: nuevoId, // El id siempre se asigna después para sobrescribir cualquier id existente
143
- };
144
- personas.push(nuevaPersona);
145
- // Guardar convirtiendo fechaNacimiento a string ISO
146
- const personasParaGuardar = personas.map((p) => ({
147
- ...p,
148
- fechaNacimiento: p.fechaNacimiento.toISOString(),
149
- }));
150
- localStorage.setItem(STORAGE_KEY, JSON.stringify(personasParaGuardar));
151
- return nuevaPersona;
152
- },
153
- /**
154
- * Edita una persona existente
155
- */
156
- async editar(id, datos) {
157
- await simulateNetworkDelay();
158
- const personas = _obtenerTodas();
159
- const index = personas.findIndex((per) => per.id === id);
160
- if (index === -1)
161
- return undefined;
162
- personas[index] = { ...personas[index], ...datos };
163
- // Guardar convirtiendo fechaNacimiento a string ISO
164
- const personasParaGuardar = personas.map((p) => ({
165
- ...p,
166
- fechaNacimiento: p.fechaNacimiento.toISOString(),
167
- }));
168
- localStorage.setItem(STORAGE_KEY, JSON.stringify(personasParaGuardar));
169
- return personas[index];
170
- },
171
- /**
172
- * Elimina una persona por ID y todas sus relaciones con empresas
173
- */
174
- async eliminar(persona) {
175
- await simulateNetworkDelay();
176
- const personas = _obtenerTodas();
177
- const index = personas.findIndex((per) => per.id === persona.id);
178
- if (index === -1)
179
- return;
180
- // Eliminar todas las relaciones de esta persona
181
- await personaEmpresaService.eliminarPorPersona(persona.id);
182
- personas.splice(index, 1);
183
- // Guardar convirtiendo fechaNacimiento a string ISO
184
- const personasParaGuardar = personas.map((p) => ({
185
- ...p,
186
- fechaNacimiento: p.fechaNacimiento.toISOString(),
187
- }));
188
- localStorage.setItem(STORAGE_KEY, JSON.stringify(personasParaGuardar));
189
- },
190
- };
@@ -1,3 +0,0 @@
1
- export const currencyFormat = (value) => {
2
- return value.toFixed(2).replace(".", ",").replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1.');
3
- };
@@ -1,13 +0,0 @@
1
- import { AxiosError } from 'axios';
2
- export const getErrorMessage = (error) => {
3
- if (error instanceof AxiosError) {
4
- const data = error.response?.data || {};
5
- if (data.message) {
6
- return data.message;
7
- }
8
- else if (data.errors) {
9
- return Object.values(data.errors).join(', ');
10
- }
11
- }
12
- return 'Ha ocurrido un error';
13
- };
@@ -1,5 +0,0 @@
1
- export const getInitialLetters = (text) => {
2
- return text.split(' ')
3
- .filter((word, index, arr) => (index === 0 || index === arr.length - 1 ? word : null))
4
- .map(word => word.substring(0, 1)).join('');
5
- };
@@ -1,13 +0,0 @@
1
- export const getQueryString = (params, newParams) => {
2
- const queryObject = {
3
- ...Object.fromEntries(params.entries()),
4
- ...newParams
5
- };
6
- let query = '';
7
- for (const key in queryObject) {
8
- if (queryObject[key]) {
9
- query += (query !== '' ? '&' : '') + key + '=' + queryObject[key];
10
- }
11
- }
12
- return '?' + query;
13
- };
@@ -1,9 +0,0 @@
1
- export * from "./currencyFormat";
2
- export * from "./getErrorMessage";
3
- export * from "./getInitialLetters";
4
- export * from "./getQueryString";
5
- export * from "./mappers";
6
- export * from "./nameValueArrayToObject";
7
- export * from "./objectToQueryString";
8
- export * from "./queryStringToObject";
9
- export * from "./regularExpressions";
@@ -1,27 +0,0 @@
1
- export const promiseMapper = (promise, mapperFunction) => {
2
- return new Promise((resolve, reject) => {
3
- promise.then(res => {
4
- if (Array.isArray(res)) {
5
- resolve(res.map((i) => mapperFunction(i)));
6
- }
7
- else if (res.list !== undefined && res.total !== undefined && res.page !== undefined && res.pages !== undefined && res.limit !== undefined) {
8
- resolve({
9
- ...res,
10
- list: res.list.map((i) => mapperFunction(i))
11
- });
12
- }
13
- else if (res.lista !== undefined && res.total !== undefined && res.pagina !== undefined && res.paginas !== undefined && res.mostrar !== undefined) {
14
- resolve({
15
- total: res.total,
16
- list: res.lista.map((i) => mapperFunction(i)),
17
- limit: res.mostrar,
18
- page: res.pagina,
19
- pages: res.paginas,
20
- });
21
- }
22
- else {
23
- resolve(mapperFunction(res));
24
- }
25
- }).catch(error => reject(error));
26
- });
27
- };
@@ -1,3 +0,0 @@
1
- export const nameValueArrayToObject = (nameValueArray) => {
2
- return nameValueArray.reduce((obj, value) => ({ ...obj, [value.name]: value.value }), {});
3
- };
@@ -1,3 +0,0 @@
1
- export const objectToQueryString = (source) => {
2
- return Object.keys(source).map(key => source[key] ? `${key}=${source[key]}` : null).filter(p => p).join('&');
3
- };
@@ -1,13 +0,0 @@
1
- export const queryStringToObject = (params) => {
2
- return params
3
- .trim()
4
- .split('&')
5
- .filter(p => p.trim() !== '')
6
- .reduce((obj, value) => {
7
- const paramArr = value.split('=');
8
- return {
9
- ...obj,
10
- [paramArr[0]]: paramArr[1]
11
- };
12
- }, {});
13
- };
@@ -1,5 +0,0 @@
1
- export const RegularExpressions = {
2
- email: new RegExp('[a-z0-9!#$%&\'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&\'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?'),
3
- dateString: new RegExp('^\\d{4}[-]?((((0[13578])|(1[02]))[-]?(([0-2][0-9])|(3[01])))|(((0[469])|(11))[-]?(([0-2][0-9])|(30)))|(02[-]?[0-2][0-9]))$'),
4
- password: ({ minLength = 0, lowerCaseMin = 0, upperCaseMin = 0, digitsMin = 0, specialCharMin = 0 }) => new RegExp(`^${lowerCaseMin ? '(?=(.*[a-z]){' + lowerCaseMin + '})' : ''}${upperCaseMin ? '(?=(.*[A-Z]){' + upperCaseMin + '})' : ''}${digitsMin ? '(?=(.*\\d){' + digitsMin + '})' : ''}${specialCharMin ? '(?=(.*[^a-zA-Z0-9]){' + specialCharMin + '})' : ''}([^\\s]){${minLength},}$`)
5
- };
@@ -1,6 +0,0 @@
1
- export { useThemeOverride, useTemporaryOverride } from "./useThemeOverride";
2
- export { useGlobalThemeStyles } from "./useGlobalThemeStyles";
3
- export { useBreakpoint } from "./useBreakpoint";
4
- export { useElementScroll } from "./useElementScroll";
5
- export { useAsyncRequest } from "./useAsyncRequest";
6
- export { useEnum } from "./useEnum";
@@ -1,53 +0,0 @@
1
- import { useState, useCallback } from "react";
2
- import { useSnackbar } from "../contexts/SnackbarContext";
3
- export function useAsyncRequest(options = {}) {
4
- const [isLoading, setIsLoading] = useState(false);
5
- const { showSnackbar } = useSnackbar();
6
- const { successMessage, errorMessage, successVariant = "success", errorVariant = "danger", onSuccess, onError, onFinally, } = options;
7
- const execute = useCallback(async (requestFn) => {
8
- setIsLoading(true);
9
- try {
10
- const result = await requestFn();
11
- // Mostrar snackbar de éxito solo si existe successMessage
12
- if (successMessage) {
13
- console.log("TIENE SUCCESS MESSAGE", successMessage);
14
- showSnackbar(successMessage, successVariant);
15
- }
16
- onSuccess?.(result);
17
- return result;
18
- }
19
- catch (error) {
20
- console.error("Error en async request:", error);
21
- // Mostrar snackbar de error solo si existe errorMessage configurado
22
- if (errorMessage) {
23
- const finalErrorMessage = typeof errorMessage === "function"
24
- ? errorMessage(error)
25
- : errorMessage;
26
- showSnackbar(finalErrorMessage, errorVariant);
27
- }
28
- onError?.(error);
29
- return undefined;
30
- }
31
- finally {
32
- setIsLoading(false);
33
- onFinally?.();
34
- }
35
- }, [
36
- showSnackbar,
37
- successMessage,
38
- errorMessage,
39
- successVariant,
40
- errorVariant,
41
- onSuccess,
42
- onError,
43
- onFinally,
44
- ]);
45
- const setLoading = useCallback((loading) => {
46
- setIsLoading(loading);
47
- }, []);
48
- return {
49
- isLoading,
50
- execute,
51
- setLoading,
52
- };
53
- }
@@ -1,59 +0,0 @@
1
- import { useState, useEffect } from "react";
2
- // Breakpoints basados en Tailwind CSS
3
- const breakpoints = {
4
- xs: 0,
5
- sm: 640,
6
- md: 768,
7
- lg: 1024,
8
- xl: 1280,
9
- "2xl": 1536,
10
- };
11
- export const useBreakpoint = () => {
12
- const [windowSize, setWindowSize] = useState({
13
- width: typeof window !== "undefined" ? window.innerWidth : 1024,
14
- height: typeof window !== "undefined" ? window.innerHeight : 768,
15
- });
16
- const [breakpoint, setBreakpoint] = useState("lg");
17
- useEffect(() => {
18
- const handleResize = () => {
19
- const width = window.innerWidth;
20
- const height = window.innerHeight;
21
- setWindowSize({ width, height });
22
- // Determinar el breakpoint actual
23
- if (width >= breakpoints["2xl"]) {
24
- setBreakpoint("2xl");
25
- }
26
- else if (width >= breakpoints.xl) {
27
- setBreakpoint("xl");
28
- }
29
- else if (width >= breakpoints.lg) {
30
- setBreakpoint("lg");
31
- }
32
- else if (width >= breakpoints.md) {
33
- setBreakpoint("md");
34
- }
35
- else if (width >= breakpoints.sm) {
36
- setBreakpoint("sm");
37
- }
38
- else {
39
- setBreakpoint("xs");
40
- }
41
- };
42
- // Ejecutar una vez al montar
43
- handleResize();
44
- // Agregar listener para cambios de tamaño
45
- window.addEventListener("resize", handleResize);
46
- // Cleanup
47
- return () => window.removeEventListener("resize", handleResize);
48
- }, []);
49
- const isMobile = breakpoint === "xs" || breakpoint === "sm";
50
- const isTablet = breakpoint === "md";
51
- const isDesktop = breakpoint === "lg" || breakpoint === "xl" || breakpoint === "2xl";
52
- return {
53
- breakpoint,
54
- windowSize,
55
- isMobile,
56
- isTablet,
57
- isDesktop,
58
- };
59
- };