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();
| },
| }));
|
|