@royaltics/ui 1.9.2 → 1.9.3
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.
|
@@ -15,6 +15,12 @@ export interface HttpOptions {
|
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
17
|
export declare const initHttpOptions: (options: HttpOptions) => void;
|
|
18
|
+
/**
|
|
19
|
+
* Hook to access the global HTTP store state with selector optimization.
|
|
20
|
+
*
|
|
21
|
+
* IMPORTANT: This hook uses a stabilization layer to prevent infinite loops in React
|
|
22
|
+
* when using inline selectors that return new objects or functions.
|
|
23
|
+
*/
|
|
18
24
|
export declare function useHttpStore(): HttpStoreState;
|
|
19
25
|
export declare function useHttpStore<T>(selector: (state: HttpStoreState) => T): T;
|
|
20
26
|
//# sourceMappingURL=useHttpStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHttpStore.d.ts","sourceRoot":"","sources":["../../src/hooks/useHttpStore.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useHttpStore.d.ts","sourceRoot":"","sources":["../../src/hooks/useHttpStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,cAAc,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAGtF,MAAM,WAAW,WAAW;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC;IAChD,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACF;AAID,eAAO,MAAM,eAAe,GAAI,SAAS,WAAW,SAmCnD,CAAC;AA6BF;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,cAAc,CAAC;AAC/C,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,CAAC,GAAG,CAAC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { useRef, useCallback } from 'react';
|
|
1
2
|
import { useStore } from 'zustand';
|
|
2
3
|
import { httpStore } from '../core/http/http-store.js';
|
|
3
4
|
import QueryManager from '../core/http/query-manager.js';
|
|
@@ -25,7 +26,64 @@ export const initHttpOptions = (options) => {
|
|
|
25
26
|
window.addEventListener('offline', handleOffline);
|
|
26
27
|
}
|
|
27
28
|
};
|
|
29
|
+
/**
|
|
30
|
+
* Shallow equality check to prevent infinite loops when selectors return new objects
|
|
31
|
+
*/
|
|
32
|
+
function shallowEqual(objA, objB) {
|
|
33
|
+
if (Object.is(objA, objB))
|
|
34
|
+
return true;
|
|
35
|
+
if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null)
|
|
36
|
+
return false;
|
|
37
|
+
const keysA = Object.keys(objA);
|
|
38
|
+
const keysB = Object.keys(objB);
|
|
39
|
+
if (keysA.length !== keysB.length)
|
|
40
|
+
return false;
|
|
41
|
+
for (let i = 0; i < keysA.length; i++) {
|
|
42
|
+
const key = keysA[i];
|
|
43
|
+
if (!Object.prototype.hasOwnProperty.call(objB, key))
|
|
44
|
+
return false;
|
|
45
|
+
const valA = objA[key];
|
|
46
|
+
const valB = objB[key];
|
|
47
|
+
// If both are functions, we treat them as equal for referential stability of the object.
|
|
48
|
+
// This is a common pattern in selectors when wrapping actions.
|
|
49
|
+
if (typeof valA === 'function' && typeof valB === 'function')
|
|
50
|
+
continue;
|
|
51
|
+
if (!Object.is(valA, valB))
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
28
56
|
export function useHttpStore(selector) {
|
|
29
|
-
|
|
57
|
+
// Refs to track state and results for referential stability
|
|
58
|
+
const refs = useRef({
|
|
59
|
+
lastState: null,
|
|
60
|
+
lastResult: null,
|
|
61
|
+
selector
|
|
62
|
+
});
|
|
63
|
+
// Update the selector ref so the callback always has the latest version
|
|
64
|
+
refs.current.selector = selector;
|
|
65
|
+
const stableSelector = useCallback((state) => {
|
|
66
|
+
const { lastState, lastResult, selector: currentSelector } = refs.current;
|
|
67
|
+
// 1. FAST PATH: Identity check on the whole state
|
|
68
|
+
// If the store hasn't changed, reuse the previous result immediately.
|
|
69
|
+
if (state === lastState && lastResult !== null) {
|
|
70
|
+
return lastResult;
|
|
71
|
+
}
|
|
72
|
+
// 2. RUN SELECTOR
|
|
73
|
+
const nextResult = currentSelector
|
|
74
|
+
? currentSelector(state)
|
|
75
|
+
: state;
|
|
76
|
+
// 3. STABILITY CHECK: Shallow comparison
|
|
77
|
+
// Even if state changed, if the selected data is "equal" to previous,
|
|
78
|
+
// we return the OLD reference to keep React stable.
|
|
79
|
+
if (lastResult !== null && shallowEqual(lastResult, nextResult)) {
|
|
80
|
+
return lastResult;
|
|
81
|
+
}
|
|
82
|
+
// 4. UPDATE CACHE
|
|
83
|
+
refs.current.lastState = state;
|
|
84
|
+
refs.current.lastResult = nextResult;
|
|
85
|
+
return nextResult;
|
|
86
|
+
}, []);
|
|
87
|
+
return useStore(httpStore, stableSelector);
|
|
30
88
|
}
|
|
31
89
|
//# sourceMappingURL=useHttpStore.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHttpStore.js","sourceRoot":"","sources":["../../src/hooks/useHttpStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,SAAS,EAAiC,MAAM,4BAA4B,CAAC;AACtF,OAAO,YAAY,MAAM,+BAA+B,CAAC;AAkBzD,IAAI,wBAAwB,GAAG,KAAK,CAAC;AAErC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAoB,EAAE,EAAE;IACvD,IAAI,wBAAwB;QAAE,OAAO;IACrC,wBAAwB,GAAG,IAAI,CAAC;IAEhC,MAAM,EACL,OAAO,GAAG,EAAE,EACZ,KAAK,GAAG,KAAK,EACb,OAAO,GAAG,EAAE,EACZ,YAAY,GAAG,KAAK,EACpB,WAAW,EACX,SAAS,EACT,aAAa,EAAE,OAAO,EACtB,WAAW,GACX,GAAG,OAAO,CAAC;IAEZ,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;IAEnD,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;QACzB,OAAO;QACP,KAAK;QACL,OAAO;QACP,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,SAAS;QACT,aAAa,EAAE,OAAO;KACtB,CAAC,CAAC;IAEH,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChE,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAElE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACnD,CAAC;AACF,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"useHttpStore.js","sourceRoot":"","sources":["../../src/hooks/useHttpStore.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@royaltics/ui",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -15,59 +15,59 @@
|
|
|
15
15
|
"require": "./dist/index.cjs"
|
|
16
16
|
},
|
|
17
17
|
"./icons": {
|
|
18
|
+
"types": "./dist/icons/index.d.ts",
|
|
18
19
|
"import": "./dist/icons/index.js",
|
|
19
|
-
"require": "./dist/icons/index.cjs"
|
|
20
|
-
"types": "./dist/icons/index.d.ts"
|
|
20
|
+
"require": "./dist/icons/index.cjs"
|
|
21
21
|
},
|
|
22
22
|
"./forms": {
|
|
23
|
+
"types": "./dist/forms/index.d.ts",
|
|
23
24
|
"import": "./dist/forms/index.js",
|
|
24
|
-
"require": "./dist/forms/index.cjs"
|
|
25
|
-
"types": "./dist/forms/index.d.ts"
|
|
25
|
+
"require": "./dist/forms/index.cjs"
|
|
26
26
|
},
|
|
27
27
|
"./hooks": {
|
|
28
|
+
"types": "./dist/hooks/index.d.ts",
|
|
28
29
|
"import": "./dist/hooks/index.js",
|
|
29
|
-
"require": "./dist/hooks/index.cjs"
|
|
30
|
-
"types": "./dist/hooks/index.d.ts"
|
|
30
|
+
"require": "./dist/hooks/index.cjs"
|
|
31
31
|
},
|
|
32
32
|
"./providers": {
|
|
33
|
+
"types": "./dist/providers/index.d.ts",
|
|
33
34
|
"import": "./dist/providers/index.js",
|
|
34
|
-
"require": "./dist/providers/index.cjs"
|
|
35
|
-
"types": "./dist/providers/index.d.ts"
|
|
35
|
+
"require": "./dist/providers/index.cjs"
|
|
36
36
|
},
|
|
37
37
|
"./reducers": {
|
|
38
|
+
"types": "./dist/reducers/index.d.ts",
|
|
38
39
|
"import": "./dist/reducers/index.js",
|
|
39
|
-
"require": "./dist/reducers/index.cjs"
|
|
40
|
-
"types": "./dist/reducers/index.d.ts"
|
|
40
|
+
"require": "./dist/reducers/index.cjs"
|
|
41
41
|
},
|
|
42
42
|
"./components": {
|
|
43
|
+
"types": "./dist/components/index.d.ts",
|
|
43
44
|
"import": "./dist/components/index.js",
|
|
44
|
-
"require": "./dist/components/index.cjs"
|
|
45
|
-
"types": "./dist/components/index.d.ts"
|
|
45
|
+
"require": "./dist/components/index.cjs"
|
|
46
46
|
},
|
|
47
47
|
"./validators": {
|
|
48
|
+
"types": "./dist/validators/index.d.ts",
|
|
48
49
|
"import": "./dist/validators/index.js",
|
|
49
|
-
"require": "./dist/validators/index.cjs"
|
|
50
|
-
"types": "./dist/validators/index.d.ts"
|
|
50
|
+
"require": "./dist/validators/index.cjs"
|
|
51
51
|
},
|
|
52
52
|
"./utils": {
|
|
53
|
+
"types": "./dist/utils/index.d.ts",
|
|
53
54
|
"import": "./dist/utils/index.js",
|
|
54
|
-
"require": "./dist/utils/index.cjs"
|
|
55
|
-
"types": "./dist/utils/index.d.ts"
|
|
55
|
+
"require": "./dist/utils/index.cjs"
|
|
56
56
|
},
|
|
57
57
|
"./zustand": {
|
|
58
|
+
"types": "./dist/core/zustand/index.d.ts",
|
|
58
59
|
"import": "./dist/core/zustand/index.js",
|
|
59
|
-
"require": "./dist/core/zustand/index.cjs"
|
|
60
|
-
"types": "./dist/core/zustand/index.d.ts"
|
|
60
|
+
"require": "./dist/core/zustand/index.cjs"
|
|
61
61
|
},
|
|
62
62
|
"./socket": {
|
|
63
|
+
"types": "./dist/core/socket/index.d.ts",
|
|
63
64
|
"import": "./dist/core/socket/index.js",
|
|
64
|
-
"require": "./dist/core/socket/index.cjs"
|
|
65
|
-
"types": "./dist/core/socket/index.d.ts"
|
|
65
|
+
"require": "./dist/core/socket/index.cjs"
|
|
66
66
|
},
|
|
67
67
|
"./i18n": {
|
|
68
|
+
"types": "./dist/core/i18n/index.d.ts",
|
|
68
69
|
"import": "./dist/core/i18n/index.js",
|
|
69
|
-
"require": "./dist/core/i18n/index.cjs"
|
|
70
|
-
"types": "./dist/core/i18n/index.d.ts"
|
|
70
|
+
"require": "./dist/core/i18n/index.cjs"
|
|
71
71
|
}
|
|
72
72
|
},
|
|
73
73
|
"scripts": {
|