import { getRoot, isAlive, types } from "mobx-state-tree"; import Types from "../core/Types"; import { FF_DEV_3391, FF_SIMPLE_INIT, isFF } from "../utils/feature-flags"; export const AnnotationMixin = types.model("AnnotationMixin", {}).views((self) => ({ get annotation() { // annotation should not be accessed before store is initialized if (isFF(FF_SIMPLE_INIT) && !window.STORE_INIT_OK) { console.error("LSF: annotation accessed before store is initialized", self); } if (!isAlive(self)) return null; if (isFF(FF_DEV_3391)) { const root = getRoot(self); // if that's a Tool (they live in separate tree) if (root === self) { if (self.control) { return self.control.annotation; } if (self.obj) { return self.obj.annotation; } return null; } // if annotation history item selected if (root.annotationStore?.selectedHistory) { return root.annotationStore.selectedHistory; } // return connected annotation, not the globally selected one return Types.getParentOfTypeString(self, "Annotation"); } const as = self.annotationStore; return as?.selectedHistory ?? as?.selected; }, get annotationOrHistoryItem() { return Types.getParentOfTypeString(self, "Annotation") ?? Types.getParentOfTypeString(self, "HistoryItem"); }, get annotationStore() { const root = getRoot(self); if (root === self) { if (self.control) { return getRoot(self.control).annotationStore; } if (self.obj) { return getRoot(self.obj).annotationStore; } return null; } return root.annotationStore; }, }));