Bin
2025-12-17 05a69820e0c402b0b33c063d3b922f0a0571cbbb
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
50
import { applySnapshot, getParent, getSnapshot, types } from "mobx-state-tree";
import { guidGenerator } from "../../utils/random";
import { FF_LOPS_E_3, isFF } from "../../utils/feature-flags";
 
export const DataStoreItem = types
  .model("DataStoreItem", {
    updated: guidGenerator(),
    loading: isFF(FF_LOPS_E_3) ? types.maybeNull(types.union(types.string, types.boolean), false) : false,
  })
  .views((self) => ({
    get parent() {
      return getParent(getParent(self));
    },
 
    get isSelected() {
      return self.parent?.selected === self;
    },
 
    get isHighlighted() {
      return self.parent?.highlighted === self;
    },
 
    get isLoading() {
      return self.parent.itemIsLoading(self.id);
    },
  }))
  .actions((self) => ({
    update(newData) {
      const patch = {
        ...getSnapshot(self),
        ...newData,
        updated: guidGenerator(),
      };
 
      try {
        applySnapshot(self, patch);
      } catch (err) {
        console.log(err);
      }
      return self;
    },
 
    setLoading(loading) {
      self.loading = loading;
    },
 
    markUpdated() {
      self.updated = guidGenerator();
    },
  }));