@@ -19,7 +19,8 @@ export const App = (): JSX.Element => {
19
19
} else {
20
20
state . isLoggedIn = false ;
21
21
}
22
-
22
+
23
+
23
24
// following useEffect runs on first mount
24
25
useEffect ( ( ) => {
25
26
// if user is a guest, see if a project exists in localforage and retrieve it
@@ -51,43 +52,46 @@ export const App = (): JSX.Element => {
51
52
} else {
52
53
console . log (
53
54
'No user project found in localforage, setting initial state blank'
54
- ) ;
55
- }
56
- } ) ;
57
- }
58
- } , [ ] ) ;
59
-
60
- // Caret this useEffect was triggering a save after every state change, which is bad for performance
61
- // useEffect(() => {
62
- // let userId;
63
- // if (Cookies.get('ssid')) {
64
- // userId = Cookies.get('ssid');
65
- // } else {
66
- // userId = window.localStorage.getItem('ssid');
67
- // }
68
- // if (state.isLoggedIn === false) {
69
- // localforage.setItem('guestProject', state);
70
- // } else if (state.name !== '') {
71
- // saveProject(state.name, state);
72
- // localforage.setItem(userId, state);
73
- // }
74
- // }, [state]);
75
-
76
- // Caret setInterval alternative for 15 seconds between saves
77
- setInterval ( ( ) => {
78
- let userId ;
79
- if ( Cookies . get ( 'ssid' ) ) {
80
- userId = Cookies . get ( 'ssid' ) ;
81
- } else {
82
- userId = window . localStorage . getItem ( 'ssid' ) ;
55
+ ) ;
56
+ }
57
+ } ) ;
58
+ }
59
+ } , [ ] ) ;
60
+
61
+ // Caret Start Updated save cycle
62
+ useEffect ( ( ) => {
63
+ console . log ( 'Legacy state' , state ) ;
64
+ // provide config properties to legacy projects so new edits can be auto saved
65
+ if ( state . config === undefined ) {
66
+ state . config = { saveFlag :true , saveTimer :false } ;
67
+ } ;
68
+ console . log ( 'Updated state for legacy projects' , state ) ;
69
+ // New project save configuration to optimize server load and minimize Ajax requests
70
+ if ( state . config . saveFlag ) {
71
+ state . config . saveFlag = false ;
72
+ state . config . saveTimer = true ;
73
+ let userId ;
74
+ if ( Cookies . get ( 'ssid' ) ) {
75
+ userId = Cookies . get ( 'ssid' ) ;
76
+ } else {
77
+ userId = window . localStorage . getItem ( 'ssid' ) ;
78
+ }
79
+ if ( state . isLoggedIn === false ) {
80
+ localforage . setItem ( 'guestProject' , state ) ;
81
+ } else if ( state . name !== '' ) {
82
+ saveProject ( state . name , state ) ;
83
+ localforage . setItem ( userId , state ) ;
84
+ }
83
85
}
84
- if ( state . isLoggedIn === false ) {
85
- localforage . setItem ( 'guestProject' , state ) ;
86
- } else if ( state . name !== '' ) {
87
- saveProject ( state . name , state ) ;
88
- localforage . setItem ( userId , state ) ;
86
+ if ( state . config . saveTimer ) {
87
+ state . config . saveTimer = false ;
88
+ setTimeout ( ( ) => {
89
+ state . config . saveFlag = true ;
90
+ } , 15000 ) ;
89
91
}
90
- } , 15000 )
92
+ } , [ state ] )
93
+ // Caret End
94
+
91
95
92
96
return (
93
97
< div className = "app" >
0 commit comments