import { types } from "mobx-state-tree";
|
|
const PersistentStateMixin = types
|
.model({})
|
.views(() => ({
|
get persistentValuesKey() {
|
return "labelStudio:storedValues";
|
},
|
|
get persistentValues() {
|
return {};
|
},
|
|
get persistentFingerprint() {
|
return {};
|
},
|
}))
|
.actions((self) => ({
|
afterCreate() {
|
setTimeout(self.restoreValues);
|
},
|
|
beforeDestroy() {
|
self.storeValues();
|
},
|
|
storeValues() {
|
const key = self.persistentValuesKey;
|
const obj = { ...self.persistentFingerprint, values: self.persistentValues };
|
|
localStorage.setItem(key, JSON.stringify(obj));
|
},
|
|
restoreValues() {
|
const stored = JSON.parse(localStorage.getItem(self.persistentValuesKey) || "{}");
|
|
if (!stored) return;
|
if (!Object.keys(self.persistentFingerprint).every((key) => stored[key] === self.persistentFingerprint[key]))
|
return;
|
|
const values = stored.values || {};
|
|
for (const key of Object.keys(values)) {
|
self[key] = values[key];
|
}
|
},
|
}));
|
|
export default PersistentStateMixin;
|