@inflector/aura 0.2.12 → 0.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hooks/react.d.ts.map +1 -1
- package/dist/hooks/react.js +34 -33
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/hooks/react.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,IAAI,CAAA;AAI3C,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAkB5B,wBAAgB,QAAQ,CACtB,IAAI,SAAS,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAElF,KAAK,EAAE,IAAI,EACX,OAAO,CAAC,EAAE;IACR,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;CACnE,
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/hooks/react.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAS,MAAM,IAAI,CAAA;AAI3C,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAkB5B,wBAAgB,QAAQ,CACtB,IAAI,SAAS,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAElF,KAAK,EAAE,IAAI,EACX,OAAO,CAAC,EAAE;IACR,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;CACnE,GA0Dc,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAChD;AAED,wBAAgB,SAAS,CACvB,IAAI,SAAS,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAElF,KAAK,EAAE,IAAI,EACX,OAAO,EAAE;IACP,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;CACnE,GA6Cc,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CACnD;AAED,eAAO,MAAM,OAAO,GAAI,UAAU,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;;;;;;;;;aAGjF,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,UAAU,GAAG,QAGvC,CAAA"}
|
package/dist/hooks/react.js
CHANGED
|
@@ -19,77 +19,78 @@ function deepEqual(a, b) {
|
|
|
19
19
|
}
|
|
20
20
|
export function useTable(table, Options) {
|
|
21
21
|
const [data, setData] = useState([]);
|
|
22
|
-
//
|
|
23
|
-
const whereRef = useRef(Options?.where);
|
|
22
|
+
// 1. Keep the ref logic
|
|
24
23
|
const whereString = JSON.stringify(Options?.where);
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
const whereRef = useRef(whereString);
|
|
25
|
+
// 2. Cleanup: If the filter changed, clear the state immediately
|
|
26
|
+
// This happens during render to prevent showing old data
|
|
27
|
+
if (whereRef.current !== whereString) {
|
|
28
|
+
whereRef.current = whereString;
|
|
29
|
+
setData([]);
|
|
27
30
|
}
|
|
28
31
|
useEffect(() => {
|
|
29
|
-
// Wait for auth to be initialized
|
|
30
32
|
const unsubscribe = table.Subscribe((event) => {
|
|
31
33
|
setData((prev) => {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
// Helper to prevent duplicates (The "Upsert" logic)
|
|
35
|
+
const merge = (existing, incoming) => {
|
|
36
|
+
const incomingItems = Array.isArray(incoming) ? incoming : [incoming];
|
|
37
|
+
const filtered = existing.filter((ex) => !incomingItems.some((inc) => deepEqual(ex, inc)));
|
|
38
|
+
return [...filtered, ...incomingItems];
|
|
39
|
+
};
|
|
34
40
|
switch (event.action) {
|
|
35
41
|
case 'Get':
|
|
36
42
|
case 'Add':
|
|
37
|
-
return [...prev, event.data];
|
|
38
43
|
case 'AddMany':
|
|
39
|
-
return
|
|
44
|
+
return merge(prev, event.data);
|
|
40
45
|
case 'Delete':
|
|
41
|
-
|
|
46
|
+
const toDelete = Array.isArray(event.data) ? event.data : [event.data];
|
|
47
|
+
return prev.filter((x) => !toDelete.some((d) => deepEqual(d, x)));
|
|
42
48
|
case 'Update':
|
|
49
|
+
const updates = Array.isArray(event.data) ? event.data : [event.data];
|
|
43
50
|
return prev.map((item) => {
|
|
44
|
-
const
|
|
45
|
-
return
|
|
51
|
+
const found = updates.find((d) => deepEqual(d.old, item));
|
|
52
|
+
return found ? found.new : item;
|
|
46
53
|
});
|
|
47
54
|
default:
|
|
48
55
|
return prev;
|
|
49
56
|
}
|
|
50
57
|
});
|
|
51
58
|
}, Options?.where, true);
|
|
52
|
-
return () =>
|
|
53
|
-
|
|
54
|
-
};
|
|
55
|
-
}, [table, whereString]); // <--- include sessionVersion here
|
|
59
|
+
return () => unsubscribe();
|
|
60
|
+
}, [table, whereString]);
|
|
56
61
|
return data;
|
|
57
62
|
}
|
|
58
63
|
export function useRecord(table, Options) {
|
|
59
64
|
const [data, setData] = useState(undefined);
|
|
60
|
-
//
|
|
61
|
-
const whereRef = useRef(Options.where);
|
|
65
|
+
// Ref logic for single record
|
|
62
66
|
const whereString = JSON.stringify(Options.where);
|
|
63
|
-
|
|
64
|
-
|
|
67
|
+
const whereRef = useRef(whereString);
|
|
68
|
+
if (whereRef.current !== whereString) {
|
|
69
|
+
whereRef.current = whereString;
|
|
70
|
+
setData(undefined);
|
|
65
71
|
}
|
|
66
72
|
useEffect(() => {
|
|
67
73
|
const unsubscribe = table.Subscribe((event) => {
|
|
68
74
|
setData((prev) => {
|
|
69
|
-
if (!prev && event.action !== 'Get' && event.action !== 'Add')
|
|
70
|
-
return prev;
|
|
71
75
|
switch (event.action) {
|
|
72
76
|
case 'Get':
|
|
73
77
|
case 'Add':
|
|
74
|
-
return event.data;
|
|
78
|
+
return Array.isArray(event.data) ? event.data[0] : event.data;
|
|
75
79
|
case 'Delete':
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
return prev;
|
|
80
|
+
const deleteList = Array.isArray(event.data) ? event.data : [event.data];
|
|
81
|
+
const isMatch = deleteList.some(d => deepEqual(d, prev) || deepEqual(d.old, prev));
|
|
82
|
+
return isMatch ? undefined : prev;
|
|
80
83
|
case 'Update':
|
|
81
|
-
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
return update.new;
|
|
85
|
-
return prev;
|
|
84
|
+
const updates = Array.isArray(event.data) ? event.data : [event.data];
|
|
85
|
+
const match = updates.find((d) => deepEqual(d.old, prev));
|
|
86
|
+
return match ? match.new : prev;
|
|
86
87
|
default:
|
|
87
88
|
return prev;
|
|
88
89
|
}
|
|
89
90
|
});
|
|
90
91
|
}, Options.where, true);
|
|
91
92
|
return () => unsubscribe();
|
|
92
|
-
}, [table, whereString]);
|
|
93
|
+
}, [table, whereString]);
|
|
93
94
|
return data;
|
|
94
95
|
}
|
|
95
96
|
export const useUser = (provider) => {
|