@royaltics/ui 1.8.0 → 1.8.2

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 (69) hide show
  1. package/dist/core/http/http-store.d.ts +43 -0
  2. package/dist/core/http/http-store.d.ts.map +1 -0
  3. package/dist/core/http/http-store.js +262 -0
  4. package/dist/core/http/http-store.js.map +1 -0
  5. package/dist/core/i18n/i18n-store.d.ts +33 -0
  6. package/dist/core/i18n/i18n-store.d.ts.map +1 -0
  7. package/dist/core/i18n/i18n-store.js +187 -0
  8. package/dist/core/i18n/i18n-store.js.map +1 -0
  9. package/dist/core/i18n/index.d.ts +2 -0
  10. package/dist/core/i18n/index.d.ts.map +1 -0
  11. package/dist/core/i18n/index.js +2 -0
  12. package/dist/core/i18n/index.js.map +1 -0
  13. package/dist/core/socket/index.d.ts +4 -0
  14. package/dist/core/socket/index.d.ts.map +1 -0
  15. package/dist/core/socket/index.js +4 -0
  16. package/dist/core/socket/index.js.map +1 -0
  17. package/dist/core/socket/socket-store.d.ts +14 -0
  18. package/dist/core/socket/socket-store.d.ts.map +1 -0
  19. package/dist/core/socket/socket-store.js +82 -0
  20. package/dist/core/socket/socket-store.js.map +1 -0
  21. package/dist/core/zustand/index.d.ts +2 -0
  22. package/dist/core/zustand/index.d.ts.map +1 -0
  23. package/dist/core/zustand/index.js +2 -0
  24. package/dist/core/zustand/index.js.map +1 -0
  25. package/dist/forms/PasswordValidationToltip.d.ts +23 -0
  26. package/dist/forms/PasswordValidationToltip.d.ts.map +1 -0
  27. package/dist/forms/PasswordValidationToltip.js +98 -0
  28. package/dist/forms/PasswordValidationToltip.js.map +1 -0
  29. package/dist/forms/index.d.ts +1 -0
  30. package/dist/forms/index.d.ts.map +1 -1
  31. package/dist/forms/index.js +1 -0
  32. package/dist/forms/index.js.map +1 -1
  33. package/dist/hooks/index.d.ts +1 -0
  34. package/dist/hooks/index.d.ts.map +1 -1
  35. package/dist/hooks/index.js +1 -0
  36. package/dist/hooks/index.js.map +1 -1
  37. package/dist/hooks/useHttpState.d.ts +6 -6
  38. package/dist/hooks/useHttpState.d.ts.map +1 -1
  39. package/dist/hooks/useHttpState.js +7 -144
  40. package/dist/hooks/useHttpState.js.map +1 -1
  41. package/dist/providers/http-provider.d.ts +4 -13
  42. package/dist/providers/http-provider.d.ts.map +1 -1
  43. package/dist/providers/http-provider.js +27 -30
  44. package/dist/providers/http-provider.js.map +1 -1
  45. package/dist/providers/index.d.ts +3 -0
  46. package/dist/providers/index.d.ts.map +1 -0
  47. package/dist/providers/index.js +3 -0
  48. package/dist/providers/index.js.map +1 -0
  49. package/dist/providers/websocket-provider.d.ts +11 -0
  50. package/dist/providers/websocket-provider.d.ts.map +1 -0
  51. package/dist/providers/websocket-provider.js +19 -0
  52. package/dist/providers/websocket-provider.js.map +1 -0
  53. package/dist/validators/index.d.ts +5 -1
  54. package/dist/validators/index.d.ts.map +1 -1
  55. package/dist/validators/index.js +19 -1
  56. package/dist/validators/index.js.map +1 -1
  57. package/package.json +19 -2
  58. package/dist/forms/InputAutocomplete.d.ts +0 -20
  59. package/dist/forms/InputAutocomplete.d.ts.map +0 -1
  60. package/dist/forms/InputAutocomplete.js +0 -67
  61. package/dist/forms/InputAutocomplete.js.map +0 -1
  62. package/dist/icons/royalticsSvg.d.ts +0 -4
  63. package/dist/icons/royalticsSvg.d.ts.map +0 -1
  64. package/dist/icons/royalticsSvg.js +0 -7
  65. package/dist/icons/royalticsSvg.js.map +0 -1
  66. package/dist/icons/samirappSvg.d.ts +0 -4
  67. package/dist/icons/samirappSvg.d.ts.map +0 -1
  68. package/dist/icons/samirappSvg.js +0 -7
  69. package/dist/icons/samirappSvg.js.map +0 -1
@@ -0,0 +1,82 @@
1
+ import { createStore } from 'zustand/vanilla';
2
+ import { useStore } from 'zustand';
3
+ import { io } from 'socket.io-client';
4
+ import { useEffect } from 'react';
5
+ export const socketStore = createStore((set, get) => ({
6
+ socket: null,
7
+ status: 'disconnected',
8
+ isConnected: false,
9
+ connect: (url, token, extraOptions) => {
10
+ let { socket } = get();
11
+ // Prevent reconnecting if already connected to the same instance/token
12
+ if (socket?.connected && socket.auth && socket.auth.token === token)
13
+ return;
14
+ // Clean up previous instance
15
+ if (socket) {
16
+ socket.removeAllListeners();
17
+ socket.disconnect();
18
+ }
19
+ set({ status: 'connecting' });
20
+ const newSocket = io(url, {
21
+ auth: { token },
22
+ path: "/ws",
23
+ transports: ['websocket'],
24
+ reconnection: true,
25
+ reconnectionDelay: 3000,
26
+ reconnectionAttempts: 5,
27
+ timeout: 10000,
28
+ autoConnect: true,
29
+ ...extraOptions
30
+ });
31
+ newSocket.on('connect', () => {
32
+ set({ status: 'connected', isConnected: true });
33
+ });
34
+ newSocket.on('disconnect', (reason) => {
35
+ console.log('[Socket.IO] Disconnected:', reason);
36
+ set({ status: 'disconnected', isConnected: false });
37
+ if (reason === 'io server disconnect') {
38
+ newSocket.connect();
39
+ }
40
+ });
41
+ newSocket.on('connect_error', (error) => {
42
+ console.error('[Socket.IO] Connection error:', error.message);
43
+ set({ status: 'error', isConnected: false });
44
+ });
45
+ newSocket.on('error', (error) => {
46
+ console.error('[Socket.IO] Socket error:', error);
47
+ set({ status: 'error', isConnected: false });
48
+ });
49
+ set({ socket: newSocket });
50
+ },
51
+ disconnect: () => {
52
+ const { socket } = get();
53
+ if (socket) {
54
+ socket.removeAllListeners();
55
+ socket.disconnect();
56
+ set({ socket: null, status: 'disconnected', isConnected: false });
57
+ }
58
+ },
59
+ emit: (event, ...args) => {
60
+ const { socket } = get();
61
+ if (socket?.connected) {
62
+ socket.emit(event, ...args);
63
+ }
64
+ else {
65
+ console.warn(`[Socket.IO] Cannot emit "${event}": socket not connected`);
66
+ }
67
+ }
68
+ }));
69
+ // React Consumer Hooks
70
+ export const useSocketStore = (selector = (s) => s) => useStore(socketStore, selector);
71
+ export const useSocketEvent = (event, callback) => {
72
+ const socket = useSocketStore(s => s.socket);
73
+ useEffect(() => {
74
+ if (!socket)
75
+ return;
76
+ socket.on(event, callback);
77
+ return () => {
78
+ socket.off(event, callback);
79
+ };
80
+ }, [socket, event, callback]);
81
+ };
82
+ //# sourceMappingURL=socket-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket-store.js","sourceRoot":"","sources":["../../../src/core/socket/socket-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from 'zustand';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/zustand/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from 'zustand';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/zustand/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC"}
@@ -0,0 +1,23 @@
1
+ import React from "react";
2
+ export interface PasswordValidation {
3
+ minLength: boolean;
4
+ hasUppercase: boolean;
5
+ hasLowercase: boolean;
6
+ hasNumber: boolean;
7
+ hasSpecialChar: boolean;
8
+ }
9
+ export interface PasswordValidationOptions {
10
+ minLength?: number;
11
+ reqUppercase?: boolean;
12
+ reqLowercase?: boolean;
13
+ reqNumber?: boolean;
14
+ reqSpecialChar?: string[] | 'all' | false;
15
+ }
16
+ interface PasswordValidationProps {
17
+ show: boolean;
18
+ password: string;
19
+ options?: PasswordValidationOptions;
20
+ }
21
+ declare const PasswordValidationToltip: ({ show, password, options }: PasswordValidationProps) => React.JSX.Element | null;
22
+ export default PasswordValidationToltip;
23
+ //# sourceMappingURL=PasswordValidationToltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PasswordValidationToltip.d.ts","sourceRoot":"","sources":["../../src/forms/PasswordValidationToltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;CAC3B;AAuBD,MAAM,WAAW,yBAAyB;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC;CAC7C;AAED,UAAU,uBAAuB;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,yBAAyB,CAAC;CACvC;AAED,QAAA,MAAM,wBAAwB,GAAI,6BAAkC,uBAAuB,6BAmI1F,CAAA;AAED,eAAe,wBAAwB,CAAC"}
@@ -0,0 +1,98 @@
1
+ import React, { useEffect, useState } from "react";
2
+ const getPasswordStrength = (validation, enabledRules) => {
3
+ const rulesToCheck = ['minLength'];
4
+ if (enabledRules.uppercase)
5
+ rulesToCheck.push('hasUppercase');
6
+ if (enabledRules.lowercase)
7
+ rulesToCheck.push('hasLowercase');
8
+ if (enabledRules.number)
9
+ rulesToCheck.push('hasNumber');
10
+ if (enabledRules.specialChar)
11
+ rulesToCheck.push('hasSpecialChar');
12
+ const validCount = rulesToCheck.filter(rule => validation[rule]).length;
13
+ const totalRules = rulesToCheck.length;
14
+ const percentage = (validCount / totalRules) * 100;
15
+ if (percentage === 100)
16
+ return { level: 100, label: 'Muy segura', color: 'bg-green-500' };
17
+ if (percentage >= 80)
18
+ return { level: 75, label: 'Segura', color: 'bg-blue-500' };
19
+ if (percentage >= 60)
20
+ return { level: 50, label: 'Media', color: 'bg-yellow-500' };
21
+ if (percentage >= 40)
22
+ return { level: 25, label: 'Débil', color: 'bg-orange-500' };
23
+ return { level: 10, label: 'Muy débil', color: 'bg-red-500' };
24
+ };
25
+ const PasswordValidationToltip = ({ show, password, options = {} }) => {
26
+ const { minLength = 8, reqUppercase = true, reqLowercase = true, reqNumber = true, reqSpecialChar = 'all', } = options;
27
+ const [passwordValidation, setPasswordValidation] = useState({
28
+ minLength: false,
29
+ hasUppercase: false,
30
+ hasLowercase: false,
31
+ hasNumber: false,
32
+ hasSpecialChar: false,
33
+ });
34
+ useEffect(() => {
35
+ const _password = password || '';
36
+ let specialCharRegex;
37
+ if (reqSpecialChar === 'all') {
38
+ specialCharRegex = /[+\-_.!@#&?¿¡]/;
39
+ }
40
+ else if (Array.isArray(reqSpecialChar)) {
41
+ const escapedChars = reqSpecialChar.map(char => char.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('');
42
+ specialCharRegex = new RegExp(`[${escapedChars}]`);
43
+ }
44
+ else {
45
+ specialCharRegex = /(?!)/;
46
+ }
47
+ const validation = {
48
+ minLength: _password.length >= minLength,
49
+ hasUppercase: /[A-Z]/.test(_password),
50
+ hasLowercase: /[a-z]/.test(_password),
51
+ hasNumber: /[0-9]/.test(_password),
52
+ hasSpecialChar: specialCharRegex.test(_password),
53
+ };
54
+ setPasswordValidation(validation);
55
+ }, [password, minLength, reqSpecialChar]);
56
+ const enabledRules = {
57
+ uppercase: reqUppercase,
58
+ lowercase: reqLowercase,
59
+ number: reqNumber,
60
+ specialChar: !!reqSpecialChar,
61
+ };
62
+ const strength = getPasswordStrength(passwordValidation, enabledRules);
63
+ if (!show)
64
+ return null;
65
+ return (React.createElement("div", { className: "relative w-full h-0" },
66
+ React.createElement("div", { className: 'absolute mt-2 z-50 w-80 animate-in fade-in slide-in-from-top-2 duration-200' },
67
+ React.createElement("div", { className: 'relative' },
68
+ React.createElement("div", { className: 'absolute -top-2 left-8 w-4 h-4 bg-accent transform rotate-45' }),
69
+ React.createElement("div", { className: 'relative p-4 bg-background rounded-lg border border-accent shadow-lg' },
70
+ React.createElement("div", { className: 'flex items-center justify-between mb-2' },
71
+ React.createElement("span", { className: 'text-sm font-medium text-foreground/80' }, "Seguridad de la contrase\u00F1a:"),
72
+ React.createElement("span", { className: `text-sm font-semibold ${strength.color.replace('bg-', 'text-')}` }, strength.label)),
73
+ React.createElement("div", { className: 'w-full bg-foreground/10 rounded-full h-2 mb-3' },
74
+ React.createElement("div", { className: `h-2 rounded-full transition-all duration-300 ${strength.color}`, style: { width: `${strength.level}%` } })),
75
+ React.createElement("div", { className: 'space-y-1.5' },
76
+ React.createElement("div", { className: 'flex items-center gap-2 text-sm' },
77
+ React.createElement("span", { className: `w-4 h-4 rounded-full flex items-center justify-center ${passwordValidation.minLength ? 'bg-green-500' : 'bg-foreground/20'}` }, passwordValidation.minLength && React.createElement("span", { className: 'text-white text-xs' }, "\u2713")),
78
+ React.createElement("span", { className: passwordValidation.minLength ? 'text-green-500' : 'text-foreground/60' },
79
+ "M\u00EDnimo ",
80
+ minLength,
81
+ " caracteres")),
82
+ reqUppercase && (React.createElement("div", { className: 'flex items-center gap-2 text-sm' },
83
+ React.createElement("span", { className: `w-4 h-4 rounded-full flex items-center justify-center ${passwordValidation.hasUppercase ? 'bg-green-500' : 'bg-foreground/20'}` }, passwordValidation.hasUppercase && React.createElement("span", { className: 'text-white text-xs' }, "\u2713")),
84
+ React.createElement("span", { className: passwordValidation.hasUppercase ? 'text-green-500' : 'text-foreground/60' }, "Al menos una letra may\u00FAscula (A-Z)"))),
85
+ reqLowercase && (React.createElement("div", { className: 'flex items-center gap-2 text-sm' },
86
+ React.createElement("span", { className: `w-4 h-4 rounded-full flex items-center justify-center ${passwordValidation.hasLowercase ? 'bg-green-500' : 'bg-foreground/20'}` }, passwordValidation.hasLowercase && React.createElement("span", { className: 'text-white text-xs' }, "\u2713")),
87
+ React.createElement("span", { className: passwordValidation.hasLowercase ? 'text-green-500' : 'text-foreground/60' }, "Al menos una letra min\u00FAscula (a-z)"))),
88
+ reqNumber && (React.createElement("div", { className: 'flex items-center gap-2 text-sm' },
89
+ React.createElement("span", { className: `w-4 h-4 rounded-full flex items-center justify-center ${passwordValidation.hasNumber ? 'bg-green-500' : 'bg-foreground/20'}` }, passwordValidation.hasNumber && React.createElement("span", { className: 'text-white text-xs' }, "\u2713")),
90
+ React.createElement("span", { className: passwordValidation.hasNumber ? 'text-green-500' : 'text-foreground/60' }, "Al menos un n\u00FAmero (0-9)"))),
91
+ reqSpecialChar && (React.createElement("div", { className: 'flex items-center gap-2 text-sm' },
92
+ React.createElement("span", { className: `w-4 h-4 rounded-full flex items-center justify-center ${passwordValidation.hasSpecialChar ? 'bg-green-500' : 'bg-foreground/20'}` }, passwordValidation.hasSpecialChar && React.createElement("span", { className: 'text-white text-xs' }, "\u2713")),
93
+ React.createElement("span", { className: passwordValidation.hasSpecialChar ? 'text-green-500' : 'text-foreground/60' },
94
+ "Al menos un car\u00E1cter especial ",
95
+ Array.isArray(reqSpecialChar) ? `(${reqSpecialChar.join('')})` : '(+ - _ . ! @ # & ? ¿ ¡)')))))))));
96
+ };
97
+ export default PasswordValidationToltip;
98
+ //# sourceMappingURL=PasswordValidationToltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PasswordValidationToltip.js","sourceRoot":"","sources":["../../src/forms/PasswordValidationToltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAUnD,MAAM,mBAAmB,GAAG,CACxB,UAA8B,EAC9B,YAA+F,EAChD,EAAE;IACjD,MAAM,YAAY,GAAiC,CAAC,WAAW,CAAC,CAAC;IACjE,IAAI,YAAY,CAAC,SAAS;QAAE,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9D,IAAI,YAAY,CAAC,SAAS;QAAE,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9D,IAAI,YAAY,CAAC,MAAM;QAAE,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxD,IAAI,YAAY,CAAC,WAAW;QAAE,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAElE,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IACxE,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC;IACvC,MAAM,UAAU,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC;IAEnD,IAAI,UAAU,KAAK,GAAG;QAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAC1F,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IAClF,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IACnF,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IACnF,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AAClE,CAAC,CAAC;AAgBF,MAAM,wBAAwB,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAG,EAAE,EAA2B,EAAE,EAAE;IAC3F,MAAM,EACF,SAAS,GAAG,CAAC,EACb,YAAY,GAAG,IAAI,EACnB,YAAY,GAAG,IAAI,EACnB,SAAS,GAAG,IAAI,EAChB,cAAc,GAAG,KAAK,GACzB,GAAG,OAAO,CAAC;IAEZ,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAqB;QAC7E,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;QACnB,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,KAAK;QAChB,cAAc,EAAE,KAAK;KACxB,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,SAAS,GAAG,QAAQ,IAAI,EAAE,CAAC;QACjC,IAAI,gBAAwB,CAAC;QAC7B,IAAI,cAAc,KAAK,KAAK,EAAE,CAAC;YAC3B,gBAAgB,GAAG,gBAAgB,CAAC;QACxC,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;YACvC,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtG,gBAAgB,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACJ,gBAAgB,GAAG,MAAM,CAAC;QAC9B,CAAC;QAED,MAAM,UAAU,GAAuB;YACnC,SAAS,EAAE,SAAS,CAAC,MAAM,IAAI,SAAS;YACxC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YACrC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YACrC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;YAClC,cAAc,EAAE,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;SACnD,CAAC;QACF,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAEtC,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC,CAAA;IAEzC,MAAM,YAAY,GAAG;QACjB,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,YAAY;QACvB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,CAAC,CAAC,cAAc;KAChC,CAAC;IAEF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;IAEvE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,OAAO,CACH,6BAAK,SAAS,EAAC,qBAAqB;QAChC,6BAAK,SAAS,EAAC,6EAA6E;YACxF,6BAAK,SAAS,EAAC,UAAU;gBACrB,6BAAK,SAAS,EAAC,8DAA8D,GAAO;gBACpF,6BAAK,SAAS,EAAC,uEAAuE;oBAClF,6BAAK,SAAS,EAAC,wCAAwC;wBACnD,8BAAM,SAAS,EAAC,wCAAwC,uCAAmC;wBAC3F,8BAAM,SAAS,EAAE,yBAAyB,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,IAC7E,QAAQ,CAAC,KAAK,CACZ,CACL;oBAEN,6BAAK,SAAS,EAAC,+CAA+C;wBAC1D,6BACI,SAAS,EAAE,gDAAgD,QAAQ,CAAC,KAAK,EAAE,EAC3E,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,KAAK,GAAG,EAAE,GACxC,CACA;oBAEN,6BAAK,SAAS,EAAC,aAAa;wBACxB,6BAAK,SAAS,EAAC,iCAAiC;4BAC5C,8BAAM,SAAS,EAAE,yDAAyD,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,kBAAkB,EAAE,IACzI,kBAAkB,CAAC,SAAS,IAAI,8BAAM,SAAS,EAAC,oBAAoB,aAAS,CAC3E;4BACP,8BAAM,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB;;gCAC3E,SAAS;8CACd,CACL;wBAEL,YAAY,IAAI,CACb,6BAAK,SAAS,EAAC,iCAAiC;4BAC5C,8BAAM,SAAS,EAAE,yDAAyD,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,kBAAkB,EAAE,IAC5I,kBAAkB,CAAC,YAAY,IAAI,8BAAM,SAAS,EAAC,oBAAoB,aAAS,CAC9E;4BACP,8BAAM,SAAS,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,8CAEnF,CACL,CACT;wBAEA,YAAY,IAAI,CACb,6BAAK,SAAS,EAAC,iCAAiC;4BAC5C,8BAAM,SAAS,EAAE,yDAAyD,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,kBAAkB,EAAE,IAC5I,kBAAkB,CAAC,YAAY,IAAI,8BAAM,SAAS,EAAC,oBAAoB,aAAS,CAC9E;4BACP,8BAAM,SAAS,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,8CAEnF,CACL,CACT;wBAEA,SAAS,IAAI,CACV,6BAAK,SAAS,EAAC,iCAAiC;4BAC5C,8BAAM,SAAS,EAAE,yDAAyD,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,kBAAkB,EAAE,IACzI,kBAAkB,CAAC,SAAS,IAAI,8BAAM,SAAS,EAAC,oBAAoB,aAAS,CAC3E;4BACP,8BAAM,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,oCAEhF,CACL,CACT;wBAEA,cAAc,IAAI,CACf,6BAAK,SAAS,EAAC,iCAAiC;4BAC5C,8BAAM,SAAS,EAAE,yDAAyD,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,kBAAkB,EAAE,IAC9I,kBAAkB,CAAC,cAAc,IAAI,8BAAM,SAAS,EAAC,oBAAoB,aAAS,CAChF;4BACP,8BAAM,SAAS,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB;;gCAC7D,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,yBAAyB,CACtH,CACD,CACT,CACC,CACJ,CACJ,CACJ,CACJ,CACT,CAAA;AAEL,CAAC,CAAA;AAED,eAAe,wBAAwB,CAAC"}
@@ -12,4 +12,5 @@ export { default as ToggleSwitch } from "./ToggleSwitch.js";
12
12
  export { default as SwitchButton } from "./SwitchButton.js";
13
13
  export { default as SelectSearch } from "./SelectSearch.js";
14
14
  export type { ButtonProps } from './Button.js';
15
+ export { default as PasswordValidationToltip } from "./PasswordValidationToltip.js";
15
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/forms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,aAAa;AACb,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE5D,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/forms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,aAAa;AACb,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE5D,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -11,4 +11,5 @@ export { default as LinkButtonSmall } from "./LinkButton.js";
11
11
  export { default as ToggleSwitch } from "./ToggleSwitch.js";
12
12
  export { default as SwitchButton } from "./SwitchButton.js";
13
13
  export { default as SelectSearch } from "./SelectSearch.js";
14
+ export { default as PasswordValidationToltip } from "./PasswordValidationToltip.js";
14
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/forms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,aAAa;AACb,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/forms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,aAAa;AACb,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -2,4 +2,5 @@ export { default as useHttpState } from "./useHttpState.js";
2
2
  export { default as useNavigatorOnLine } from "./useNavigatorOnline.js";
3
3
  export { default as useRouter } from "./useRouter.js";
4
4
  export { HttpProvider, useHttpContext } from "../providers/http-provider.js";
5
+ export { i18nStore, useI18n, t } from "../core/i18n/i18n-store.js";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,4BAA4B,CAAC"}
@@ -2,4 +2,5 @@ export { default as useHttpState } from "./useHttpState.js";
2
2
  export { default as useNavigatorOnLine } from "./useNavigatorOnline.js";
3
3
  export { default as useRouter } from "./useRouter.js";
4
4
  export { HttpProvider, useHttpContext } from "../providers/http-provider.js";
5
+ export { i18nStore, useI18n, t } from "../core/i18n/i18n-store.js";
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,4BAA4B,CAAC"}
@@ -48,13 +48,13 @@ declare const useHttpState: (_options?: {
48
48
  refetch: (queryKey: QueryKey, api: string | string[], opts: HttpStateOptionsProps<any>) => Promise<void>;
49
49
  fetchNextPage: (queryKey: QueryKey) => Promise<void>;
50
50
  cleanupQuery: (queryKey: QueryKey) => void;
51
- get: <T = any>(api: string | string[], opts: HttpStateOptionsProps<T>) => Promise<any>;
51
+ get: <T = any>(api: string | string[], opts: HttpStateOptionsProps<T>) => Promise<T | undefined>;
52
52
  getInfinite: <T = any[]>(api: string | string[], opts: HttpStateOptionsProps<T>) => Promise<void>;
53
- post: <T = any>(api: string | string[], opts: HttpStateOptionsProps<T>) => Promise<any>;
54
- patch: <T = any>(api: string | string[], opts: Omit<HttpStateOptionsProps<T>, "method">) => Promise<any>;
55
- postPatch: <T = any>(api: string, id: string | number | undefined | null, opts: Omit<HttpStateOptionsProps<T>, "method">) => Promise<any>;
56
- del: <T = any>(api: string | string[], opts: Omit<HttpStateOptionsProps<T>, "method">) => Promise<any>;
57
- file: <T = any>(api: string | string[], opts: HttpStateOptionsProps<T>) => Promise<any>;
53
+ post: <T = any>(api: string | string[], opts: HttpStateOptionsProps<T>) => Promise<T | undefined>;
54
+ patch: <T = any>(api: string | string[], opts: Omit<HttpStateOptionsProps<T>, "method">) => Promise<T | undefined>;
55
+ postPatch: <T = any>(api: string, id: string | number | undefined | null, opts: Omit<HttpStateOptionsProps<T>, "method">) => Promise<T | undefined>;
56
+ del: <T = any>(api: string | string[], opts: Omit<HttpStateOptionsProps<T>, "method">) => Promise<T | undefined>;
57
+ file: <T = any>(api: string | string[], opts: HttpStateOptionsProps<T>) => Promise<T | undefined>;
58
58
  fileChunks: <T>(api: string | string[], opts: HttpStateOptionsProps<T>) => Promise<void>;
59
59
  };
60
60
  export default useHttpState;
@@ -1 +1 @@
1
- {"version":3,"file":"useHttpState.d.ts","sourceRoot":"","sources":["../../src/hooks/useHttpState.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useHttpState.d.ts","sourceRoot":"","sources":["../../src/hooks/useHttpState.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,16 @@
1
1
  import { useState, useEffect, useCallback, useRef, useMemo } from "react";
2
2
  import { toast } from "react-toastify";
3
- import { useHttpContext } from "../providers/http-provider.js";
3
+ import { useHttpStore, HttpFetch, uploadFileChunks } from "../core/http/http-store.js";
4
4
  const NOOP = (msg) => { toast.error(msg); };
5
5
  const useHttpState = (_options) => {
6
- const { baseUrl, debug, headers: contextHeaders, queryManager, onNotAuth, skipRejected, online, setOnline } = useHttpContext();
7
- const contextHeadersRef = useRef(contextHeaders);
6
+ const queryManager = useHttpStore(state => state.queryManager);
7
+ const online = useHttpStore(state => state.online);
8
+ const debug = useHttpStore(state => state.debug);
8
9
  const [queryStates, setQueryStates] = useState({});
9
10
  const subscriptionsRef = useRef(new Map());
10
11
  const callbacksRef = useRef(new Map());
11
12
  const loadingOperationsRef = useRef(new Set());
12
13
  const queryFunctionsRef = useRef(new Map());
13
- useEffect(() => {
14
- contextHeadersRef.current = contextHeaders;
15
- }, [contextHeaders]);
16
14
  const setOperationLoading = useCallback((method, key, loading) => {
17
15
  const keyString = `${method}-${generateReadableKey(key)}`;
18
16
  if (loading) {
@@ -23,134 +21,6 @@ const useHttpState = (_options) => {
23
21
  }
24
22
  setQueryStates(prev => ({ ...prev }));
25
23
  }, []);
26
- const prepareHeaders = useCallback((headers, withAuth, contentType) => {
27
- const { authorization, ...restHeaders } = contextHeadersRef.current;
28
- const merged = { ...headers, ...restHeaders };
29
- if (contentType === 'json' && !merged['Content-Type'])
30
- merged['Content-Type'] = 'application/json';
31
- if (withAuth && authorization)
32
- merged.authorization = authorization;
33
- return merged;
34
- }, []);
35
- const buildUrl = (api, data, method) => {
36
- let url = Array.isArray(api) ? api.join("/") : api;
37
- if (data?.edit && method === 'PATCH')
38
- url += '/' + data.edit;
39
- return `${!url.includes("http") ? baseUrl : ""}${url}`;
40
- };
41
- const buildBody = (data, content_type) => {
42
- if (content_type === 'file') {
43
- const formData = new FormData();
44
- const fileEntries = [];
45
- const regularEntries = [];
46
- const isFileOrBlob = (v) => v instanceof File || v instanceof Blob;
47
- const isFileArray = (v) => Array.isArray(v) && v.length > 0 && v.every(isFileOrBlob);
48
- Object.entries(data).forEach(([key, value]) => {
49
- if (isFileOrBlob(value) || isFileArray(value)) {
50
- fileEntries.push([key, value]);
51
- }
52
- else {
53
- regularEntries.push([key, value]);
54
- }
55
- });
56
- regularEntries.forEach(([key, value]) => {
57
- if (value == null)
58
- return;
59
- if (typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number') {
60
- formData.set(key, value.toString());
61
- }
62
- else {
63
- formData.set(key, JSON.stringify(value));
64
- }
65
- });
66
- fileEntries.forEach(([key, value]) => {
67
- if (Array.isArray(value)) {
68
- value.forEach((file) => {
69
- const fileName = file instanceof File ? file.name : undefined;
70
- formData.append(`${key}[]`, file, fileName);
71
- });
72
- }
73
- else if (isFileOrBlob(value)) {
74
- const fileName = value instanceof File ? value.name : undefined;
75
- formData.append(key, value, fileName);
76
- }
77
- });
78
- return formData;
79
- }
80
- return JSON.stringify(data);
81
- };
82
- const HttpFetch = async ({ api, data = {}, query = {}, method = 'POST', content_type = 'json', headers, withAuth = true }) => {
83
- const url = buildUrl(api, data, method);
84
- const body = ['POST', 'PUT', 'PATCH', 'DELETE'].includes(method) ? buildBody(data, content_type) : undefined;
85
- const queryArray = Object.keys(query).map((key) => `${key}=${query[key] !== false && query[key] !== null && query[key] !== undefined ? query[key] : ''}`);
86
- const params = method === 'GET' && queryArray.length > 0 ? '?' + new URLSearchParams(queryArray.join('&')).toString() : '';
87
- const res = await fetch(`${url}${params}`, {
88
- method,
89
- headers: prepareHeaders(headers, withAuth, content_type),
90
- body,
91
- credentials: withAuth ? "include" : "same-origin"
92
- }).catch((err) => {
93
- err.code = "BACKEND:OFFLINE";
94
- err.name = "ServerConnectError";
95
- err.message = "Sin Conexión al Servidor / Error connection to server";
96
- if (!api.toString().includes("http") && skipRejected)
97
- setOnline(false);
98
- throw err;
99
- });
100
- const json = await res.json();
101
- if (debug)
102
- console.log('Host:', url, method, params, data, 'Content Type:', content_type, 'Response:', json);
103
- if (json.code === 401 && !api.toString().includes('http') && onNotAuth) {
104
- if (!window.location.href?.includes("redirect"))
105
- onNotAuth(`${url}${params}`);
106
- }
107
- if (json.code === 500 || !json.success)
108
- throw new Error(json.message || 'Request failed');
109
- return { data: json.data, paginate: json.__paginate || json.paginate };
110
- };
111
- const uploadFileChunks = async (api, data, headers, withAuth = true, chunkSize = 2 * 1024 * 1024, method = 'POST', onSuccess, onError, onProgress) => {
112
- const file = data.file;
113
- if (!file)
114
- throw new Error("file key required for chunk upload");
115
- const totalChunks = Math.ceil(file.size / chunkSize);
116
- const url = buildUrl(api, data, method);
117
- let currentChunk = 0;
118
- const sendChunk = async () => {
119
- const start = currentChunk * chunkSize;
120
- const end = Math.min(file.size, start + chunkSize);
121
- const chunk = file.slice(start, end);
122
- const formData = new FormData();
123
- formData.append('name', file.name);
124
- formData.append('type', file.type);
125
- formData.append('size', file.size.toString());
126
- formData.append('chunkIndex', currentChunk.toString());
127
- formData.append('totalChunks', totalChunks.toString());
128
- Object.entries(data).forEach(([k, v]) => { if (k !== 'file')
129
- formData.append(k, typeof v === 'object' ? JSON.stringify(v) : String(v)); });
130
- formData.append('chunk', chunk);
131
- try {
132
- const res = await fetch(url, { method, headers: prepareHeaders(headers, withAuth), body: formData, credentials: withAuth ? "include" : "same-origin" });
133
- if (!res.ok)
134
- throw new Error(`Chunk failed ${res.status}`);
135
- const json = await res.json();
136
- currentChunk++;
137
- if (onProgress) {
138
- const percent = Math.round((currentChunk / totalChunks) * 100);
139
- const uploadedMB = (end / 1024 / 1024).toFixed(2);
140
- const totalMB = (file.size / 1024 / 1024).toFixed(2);
141
- onProgress(percent, `${uploadedMB}MB / ${totalMB}MB`);
142
- }
143
- if (currentChunk < totalChunks)
144
- await sendChunk();
145
- else
146
- json.success ? onSuccess?.(json.data) : onError?.(json.message, json.error);
147
- }
148
- catch (err) {
149
- onError?.('Chunk upload failed', err);
150
- }
151
- };
152
- await sendChunk();
153
- };
154
24
  const generateQueryKey = (api, query, customKey) => {
155
25
  return customKey || (query ? [api, query] : [api]);
156
26
  };
@@ -167,7 +37,6 @@ const useHttpState = (_options) => {
167
37
  const keyString = generateReadableKey(queryKey);
168
38
  if (subscriptionsRef.current.has(keyString))
169
39
  return;
170
- // Update callbacks if subscription already exists
171
40
  callbacksRef.current.set(keyString, { onSuccess, onError });
172
41
  if (subscriptionsRef.current.has(keyString)) {
173
42
  return;
@@ -178,7 +47,7 @@ const useHttpState = (_options) => {
178
47
  ...prev,
179
48
  [keyString]: {
180
49
  data: entry.data,
181
- pages: entry.pageResponses, // ← Cambiar a pageResponses
50
+ pages: entry.pageResponses,
182
51
  isLoading: entry.status === 'pending' && entry.pageResponses.length === 0,
183
52
  error: entry.error,
184
53
  hasNextPage: entry.hasNextPage,
@@ -222,13 +91,11 @@ const useHttpState = (_options) => {
222
91
  callbacksRef.current.delete(keyString);
223
92
  queryFunctionsRef.current.delete(keyString);
224
93
  }
225
- // Remove from local state
226
94
  setQueryStates(prev => {
227
95
  const newState = { ...prev };
228
96
  delete newState[keyString];
229
97
  return newState;
230
98
  });
231
- // Remove from queryManager cache
232
99
  queryManager.resetQueries(queryKey);
233
100
  }, [generateReadableKey, queryManager]);
234
101
  useEffect(() => {
@@ -253,7 +120,6 @@ const useHttpState = (_options) => {
253
120
  }
254
121
  try {
255
122
  const result = await queryManager.fetchQuery(queryKey, () => HttpFetch({ api, ...fetchOptions, method: 'GET' }), cacheOptions);
256
- // Only call onSuccess if no cache existed (first load)
257
123
  if (cachedData === null && result) {
258
124
  onSuccess?.(result.data, result.paginate);
259
125
  }
@@ -282,7 +148,7 @@ const useHttpState = (_options) => {
282
148
  finally {
283
149
  setOperationLoading('get', operationKey, false);
284
150
  }
285
- }, [queryManager, setupSubscription, online, setOperationLoading, prepareHeaders]);
151
+ }, [queryManager, setupSubscription, online, setOperationLoading]);
286
152
  const getInfinite = useCallback(async (api, opts) => {
287
153
  const { cacheOptions, infiniteOptions, onSuccess, onError, ...fetchOptions } = opts;
288
154
  const cursorKey = infiniteOptions?.cursorKey || 'next';
@@ -324,7 +190,6 @@ const useHttpState = (_options) => {
324
190
  const state = queryStates[keyString];
325
191
  const stored = queryFunctionsRef.current.get(keyString);
326
192
  if (!stored) {
327
- const keyString = generateReadableKey(queryKey);
328
193
  if (debug)
329
194
  console.error('fetchNextPage: No queryFn found. Call getInfinite first.', keyString);
330
195
  return;
@@ -349,7 +214,7 @@ const useHttpState = (_options) => {
349
214
  [keyString]: { ...prev[keyString], isFetchingNextPage: false }
350
215
  }));
351
216
  }
352
- }, [queryStates, queryManager, generateReadableKey]);
217
+ }, [queryStates, queryManager, generateReadableKey, debug]);
353
218
  const executeMutation = useCallback(async (api, opts, method) => {
354
219
  const { mutationOptions, onSuccess, onError, ...fetchOptions } = opts;
355
220
  if (mutationOptions?.mutation) {
@@ -422,8 +287,6 @@ const useHttpState = (_options) => {
422
287
  return {
423
288
  isLoading,
424
289
  error: Object.values(queryStates).find(state => state.error)?.error || null,
425
- //queryStates,
426
- //queryManager,
427
290
  paginates,
428
291
  refetch,
429
292
  fetchNextPage,