Bin
2025-12-17 21f0498f62ada55651f4d232327e15fc47f498b1
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
import { types } from "mobx-state-tree";
import Constants from "../../core/Constants";
import { CommentMode } from "./LinkingModes/CommentMode";
import { RelationMode } from "./LinkingModes/RelationMode";
 
export const CREATE_RELATION_MODE = RelationMode.key;
export const LINK_COMMENT_MODE = CommentMode.key;
 
const LinkingModeUnion = types.union(CommentMode.model, RelationMode.model);
 
export const LinkingModes = types
  .model("LinkingModes", {
    linkingModes: types.optional(types.map(LinkingModeUnion), () => ({
      [RelationMode.key]: RelationMode.model.create({}),
      [CommentMode.key]: CommentMode.model.create({}),
    })),
  })
  .volatile((self) => {
    return {
      linkingMode: false,
    };
  })
  .views((self) => ({
    get currentLinkingMode() {
      return self.linkingMode && self.linkingModes.has(self.linkingMode)
        ? self.linkingModes.get(self.linkingMode)
        : null;
    },
    get isLinkingMode() {
      return !!self.linkingMode;
    },
    // @deprecated
    get relationMode() {
      console.warn("`relationMode` is deprecated. Use `isLinkingMode` instead.");
      return self.isLinkingMode;
    },
  }))
  .actions((self) => {
    return {
      startLinkingMode(linkingModeName, obj) {
        if (self.isLinkingMode) {
          self.stopLinkingMode();
        }
        self.linkingMode = linkingModeName;
        if (!self.currentLinkingMode) {
          self.linkingMode = false;
          return;
        }
        self.currentLinkingMode.start(obj);
 
        document.body.style.cursor = Constants.CHOOSE_CURSOR;
      },
 
      stopLinkingMode() {
        document.body.style.cursor = Constants.DEFAULT_CURSOR;
 
        if (self.currentLinkingMode) {
          self.currentLinkingMode.stop();
        }
 
        self.linkingMode = false;
      },
 
      addLinkedRegion(region) {
        if (self.currentLinkingMode) {
          self.currentLinkingMode.addLinkedRegion?.(region);
        }
      },
 
      addLinkedResult(region) {
        if (self.currentLinkingMode) {
          self.currentLinkingMode.addLinkedResult?.(region);
        }
      },
 
      // @deprecated Use `startLinkingMode(CREATE_RELATION_MODE, obj)` instead
      startRelationMode(obj) {
        console.warn("`startRelationMode` is deprecated. Use `startLinkingMode(CREATE_RELATION_MODE, obj)` instead.");
        self.startLinkingMode(RelationMode.key, obj);
      },
      // @deprecated Use `stopLinkingMode` instead
      stopRelationMode() {
        console.warn("`stopRelationMode` is deprecated. Use `stopLinkingMode` instead.");
        self.stopLinkingMode();
      },
    };
  });