Bin
2025-12-16 9e0b2ba2c317b1a86212f24cbae3195ad1f3dbfa
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import { getRoot, types } from "mobx-state-tree";
import { StringOrNumber } from "../types";
 
export const TabSelectedItems = types
  .model("TabSelectedItems", {
    all: false,
    list: types.optional(types.array(StringOrNumber), []),
  })
  .views((self) => ({
    get snapshot() {
      return {
        all: self.all,
        [self.listName]: Array.from(self.list),
      };
    },
 
    get listName() {
      return self.all ? "excluded" : "included";
    },
 
    get hasSelected() {
      return self.isAllSelected || self.isIndeterminate;
    },
 
    get isAllSelected() {
      return self.all && self.list.length === 0;
    },
 
    get isIndeterminate() {
      return self.list.length > 0;
    },
 
    get length() {
      return self.list.length;
    },
 
    get total() {
      if (self.all) {
        const totalCount = getRoot(self).dataStore.total ?? 0;
 
        return totalCount - self.length;
      }
      return self.length;
    },
 
    isSelected(id) {
      if (self.all) {
        return !self.list.includes(id);
      }
      return self.list.includes(id);
    },
  }))
  .actions((self) => ({
    afterCreate() {
      self._invokeChangeEvent();
    },
 
    toggleSelectedAll() {
      if (!self.all || !(self.all && self.isIndeterminate)) {
        self.all = !self.all;
      }
 
      self.list = [];
      self._invokeChangeEvent();
    },
 
    addItem(id) {
      self.list.push(id);
      self._invokeChangeEvent();
    },
 
    removeItem(id) {
      self.list.splice(self.list.indexOf(id), 1);
      self._invokeChangeEvent();
    },
 
    toggleItem(id) {
      if (self.list.includes(id)) {
        self.list.splice(self.list.indexOf(id), 1);
      } else {
        self.list.push(id);
      }
      self._invokeChangeEvent();
    },
 
    update(data) {
      self.all = data?.all ?? self.all;
      self.list = data?.[self.listName] ?? self.list;
      self._invokeChangeEvent();
    },
 
    clear() {
      self.all = false;
      self.list = [];
      self._invokeChangeEvent();
    },
 
    _invokeChangeEvent() {
      getRoot(self).SDK.invoke("taskSelectionChanged", self);
    },
  }))
  .preProcessSnapshot((sn) => {
    const { included, excluded, all } = sn ?? {};
    const result = { all, list: sn.list ?? (all ? excluded : included) };
 
    return result;
  });