@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.
@@ -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,GAiDc,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,GA+Cc,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"}
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"}
@@ -19,77 +19,78 @@ function deepEqual(a, b) {
19
19
  }
20
20
  export function useTable(table, Options) {
21
21
  const [data, setData] = useState([]);
22
- // Use ref to track where clause changes with deep comparison
23
- const whereRef = useRef(Options?.where);
22
+ // 1. Keep the ref logic
24
23
  const whereString = JSON.stringify(Options?.where);
25
- if (JSON.stringify(whereRef.current) !== whereString) {
26
- whereRef.current = Options?.where;
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
- if (!prev)
33
- return prev;
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 [...prev, ...event.data];
44
+ return merge(prev, event.data);
40
45
  case 'Delete':
41
- return prev.filter((x) => !event.data.some((d) => deepEqual(d, x)));
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 update = event.data.find((d) => deepEqual(d.old, item));
45
- return update ? update.new : item;
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
- unsubscribe();
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
- // Use ref to track where clause changes with deep comparison
61
- const whereRef = useRef(Options.where);
65
+ // Ref logic for single record
62
66
  const whereString = JSON.stringify(Options.where);
63
- if (JSON.stringify(whereRef.current) !== whereString) {
64
- whereRef.current = Options.where;
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
- // Remove current record if it matches
77
- if (event.data.old && deepEqual(event.data.old, prev))
78
- return undefined;
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
- // Replace current record if it matches
82
- const update = event.data.find((d) => deepEqual(d.old, prev));
83
- if (update)
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]); // <--- include sessionVersion
93
+ }, [table, whereString]);
93
94
  return data;
94
95
  }
95
96
  export const useUser = (provider) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inflector/aura",
3
- "version": "0.2.12",
3
+ "version": "0.2.14",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",