Bin
2025-12-17 d616898802dfe7e5dd648bcf53c6d1f86b6d3642
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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;