@@ -13,21 +13,28 @@ const APP_STORE_NAMESPACE = "lowcoder_app_local_storage";
13
13
const LocalStorageCompBase = withViewFn (
14
14
simpleMultiComp ( { values : stateComp < JSONObject > ( { } ) } ) ,
15
15
( comp ) => {
16
- const originStore = localStorage . getItem ( APP_STORE_NAMESPACE ) || "{}" ;
17
- let parseStore = { } ;
18
- try {
19
- parseStore = JSON . parse ( originStore ) ;
20
- } catch ( e ) {
21
- log . error ( "application local storage invalid" ) ;
22
- }
23
-
16
+ // add custom event listener to update values reactively
24
17
useEffect ( ( ) => {
25
- const value = comp . children . values . value ;
26
- if ( ! isEqual ( value , parseStore ) ) {
27
- log . info ( value , parseStore ) ;
28
- comp . children . values . dispatchChangeValueAction ( parseStore ) ;
29
- }
30
- } , [ parseStore ] ) ;
18
+ const handler = ( ) => {
19
+ try {
20
+ const raw = localStorage . getItem ( APP_STORE_NAMESPACE ) || "{}" ;
21
+ const parsed = JSON . parse ( raw ) ;
22
+ comp . children . values . dispatchChangeValueAction ( parsed ) ;
23
+ } catch ( e ) {
24
+ log . error ( "Failed to parse localStorage:" , e ) ;
25
+ }
26
+ } ;
27
+
28
+ // Add listener on mount
29
+ window . addEventListener ( "lowcoder-localstorage-updated" , handler ) ;
30
+
31
+ // Run once on mount to initialize
32
+ handler ( ) ;
33
+
34
+ return ( ) => {
35
+ window . removeEventListener ( "lowcoder-localstorage-updated" , handler ) ;
36
+ } ;
37
+ } , [ ] ) ;
31
38
32
39
return null ;
33
40
}
@@ -62,6 +69,8 @@ LocalStorageComp = withMethodExposing(LocalStorageComp, [
62
69
parseStore [ key ] = value ;
63
70
localStorage . setItem ( APP_STORE_NAMESPACE , JSON . stringify ( parseStore ) ) ;
64
71
comp . children . values . dispatchChangeValueAction ( parseStore ) ;
72
+
73
+ window . dispatchEvent ( new CustomEvent ( "lowcoder-localstorage-updated" ) ) ;
65
74
} catch ( e ) {
66
75
localStorage . setItem ( APP_STORE_NAMESPACE , "{}" ) ;
67
76
}
@@ -83,6 +92,9 @@ LocalStorageComp = withMethodExposing(LocalStorageComp, [
83
92
delete parseStore [ key ] ;
84
93
localStorage . setItem ( APP_STORE_NAMESPACE , JSON . stringify ( parseStore ) ) ;
85
94
comp . children . values . dispatchChangeValueAction ( parseStore ) ;
95
+
96
+ // Trigger update
97
+ window . dispatchEvent ( new CustomEvent ( "lowcoder-localstorage-updated" ) ) ;
86
98
} catch ( e ) {
87
99
localStorage . setItem ( APP_STORE_NAMESPACE , "{}" ) ;
88
100
}
@@ -98,6 +110,9 @@ LocalStorageComp = withMethodExposing(LocalStorageComp, [
98
110
execute : ( comp ) => {
99
111
localStorage . removeItem ( APP_STORE_NAMESPACE ) ;
100
112
comp . children . values . dispatchChangeValueAction ( { } ) ;
113
+
114
+ // Trigger update
115
+ window . dispatchEvent ( new CustomEvent ( "lowcoder-localstorage-updated" ) ) ;
101
116
} ,
102
117
} ,
103
118
] ) ;
0 commit comments