fix: inconsistent state of save button in admin config page
Massimo Melina committed
Feb 6, 2022 at 11:38 UTC
ec4e574a4e01eecc73aaf69b78d2f1fe0a7daa2c
1 file changed
+13
-11
admin/src/ConfigPage.ts
+13
-11
@@ -10,15 +10,7 @@ import StringStringField from './StringStringField'
10
11
let loaded: Dict | undefined
12
13
-subscribeKey(state, 'config', () => {
14
- const changes: Dict = {}
15
- if (state.config)
16
- for (const [k, v] of Object.entries(state.config))
17
- if (JSON.stringify(v) !== JSON.stringify(loaded?.[k]))
18
- changes[k] = v
19
- state.changes = changes
20
- console.debug('changes', Object.keys(changes))
21
-})
13
+subscribeKey(state, 'config', recalculateChanges)
14
15
export default function ConfigPage() {
16
const [res, reload] = useApiComp('get_config', {
@@ -77,8 +69,18 @@ export default function ConfigPage() {
69
70
async function save() {
71
await apiCall('set_config', { values: state.changes })
80
- Object.assign(state.config, state.changes)
81
- Object.assign(loaded, state.config)
72
+ Object.assign(loaded, state.changes) // since changes are recalculated subscribing state.config, but it depends on 'loaded' to (which cannot be subscribed), be sure to update loaded first
73
+ recalculateChanges()
74
console.debug('saved')
75
}
76
}
77
+
78
+function recalculateChanges() {
79
+ const changes: Dict = {}
80
+ if (state.config)
81
+ for (const [k, v] of Object.entries(state.config))
82
+ if (JSON.stringify(v) !== JSON.stringify(loaded?.[k]))
83
+ changes[k] = v
84
+ state.changes = changes
85
+ console.debug('changes', Object.keys(changes))
86
+}