import { types } from "mobx-state-tree"; import { isDefined } from "../../utils/utilities"; /** * This mixin is created as a definition of the interface of object-tags that should be able to work with valueList parameter * The first entity of it is Multi-Image Segmentation case */ const MultiItemObjectBase = types .model({ valuelist: types.maybeNull(types.string), }) .extend((self) => { /* Validation */ if (self.isObjectTag !== true) { throw new Error("The MultiItemObjectBase mixin should be used only for object-tags"); } return {}; }) .views((self) => ({ get isMultiItem() { return isDefined(self.valuelist); }, /** * An index of the last item for multi-items object-tag */ get maxItemIndex() { throw new Error("MultiItemMixin needs to implement maxItemIndex getter in views"); }, /** * An index of currently selected object-tag item */ get currentItemIndex() { throw new Error("MultiItemMixin needs to implement currentItemIndex getter in views"); }, /** * A list of regions related to the current object item */ get regs() { if (self.isMultiItem) { return self.allRegs.filter((r) => (r.item_index ?? 0) === self.currentItemIndex); } return self.allRegs; }, })); export default MultiItemObjectBase;