import { observer } from "mobx-react"; import { types } from "mobx-state-tree"; import { IconMoveTool } from "@humansignal/icons"; import { Tool } from "../components/Toolbar/Tool"; import { AnnotationMixin } from "../mixins/AnnotationMixin"; import ToolMixin from "../mixins/Tool"; import { FF_LSDV_4930, isFF } from "../utils/feature-flags"; import BaseTool from "./Base"; const ToolView = observer(({ item }) => { return ( } label="Move" shortcut={item.shortcut} extraShortcuts={item.extraShortcuts} onClick={() => { item.manager.selectTool(item, !item.selected); }} /> ); }); const _Tool = types .model("SelectionTool", { shortcut: "tool:move", group: "control", }) .views((self) => { return { get viewClass() { return () => ; }, get useTransformer() { return true; }, }; }) .actions((self) => { let isSelecting = false; return { /** * Indicates that move tool always interacts with regions */ shouldSkipInteractions() { return false; }, notifyRegions(type, x, y) { for (const reg of self.obj.regs) { reg?.onSelection?.(type, x, y); } }, mousedownEv(ev, [x, y]) { isSelecting = true; self.obj.setSelectionStart({ x, y }); self.notifyRegions("start", x, y); }, mousemoveEv(ev, [x, y]) { if (!isSelecting) return; self.obj.setSelectionEnd({ x, y }); self.notifyRegions("move", x, y); }, mouseupEv(ev, [x, y]) { if (!isSelecting) return; self.obj.setSelectionEnd({ x, y }); const { regionsInSelectionArea } = self.obj; self.notifyRegions("end", x, y); self.obj.resetSelection(); if (ev.ctrlKey || ev.metaKey) { self.annotation.extendSelectionWith(regionsInSelectionArea); } else { self.annotation.selectAreas(regionsInSelectionArea); } isSelecting = false; }, clickEv(ev) { if (isFF(FF_LSDV_4930)) { isSelecting = false; self.obj.resetSelection(); if (!ev.ctrlKey && !ev.metaKey) { self.annotation.unselectAreas(); self.notifyRegions("reset"); } } }, }; }); const Selection = types.compose("MoveTool", ToolMixin, BaseTool, AnnotationMixin, _Tool); export { Selection };