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