-
Notifications
You must be signed in to change notification settings - Fork 95
Expand file tree
/
Copy pathactions.ts
More file actions
69 lines (56 loc) · 2.18 KB
/
actions.ts
File metadata and controls
69 lines (56 loc) · 2.18 KB
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
import { useToolStore } from '../store/tools';
import { Tools } from '../store/tools/types';
import { useRectangleStore } from '../store/tools/rectangles';
import { useRulerStore } from '../store/tools/rulers';
import { usePolygonStore } from '../store/tools/polygons';
import { Action } from '../constants';
import { useKeyboardShortcutsStore } from '../store/keyboard-shortcuts';
import { useDatasetStore } from '../store/datasets';
const applyLabelOffset = (offset: number) => () => {
const toolToStore = {
[Tools.Rectangle]: useRectangleStore(),
[Tools.Ruler]: useRulerStore(),
[Tools.Polygon]: usePolygonStore(),
};
const toolStore = useToolStore();
// @ts-ignore - toolToStore may not have keys of all tools
const activeToolStore = toolToStore[toolStore.currentTool];
if (!activeToolStore) return;
const labels = Object.entries(activeToolStore.labels);
const activeLabelIndex = labels.findIndex(
([name]) => name === activeToolStore.activeLabel
);
const [nextLabel] = labels.at((activeLabelIndex + offset) % labels.length)!;
activeToolStore.setActiveLabel(nextLabel);
};
const setTool = (tool: Tools) => () => {
useToolStore().setCurrentTool(tool);
};
const showKeyboardShortcuts = () => {
const keyboardStore = useKeyboardShortcutsStore();
keyboardStore.settingsOpen = !keyboardStore.settingsOpen;
};
const changeNextImage = () => () => {
useDatasetStore().changeNextImage();
};
const changePreviousImage = () => () => {
useDatasetStore().changePreviousImage();
};
export const ACTION_TO_FUNC = {
windowLevel: setTool(Tools.WindowLevel),
pan: setTool(Tools.Pan),
zoom: setTool(Tools.Zoom),
ruler: setTool(Tools.Ruler),
paint: setTool(Tools.Paint),
rectangle: setTool(Tools.Rectangle),
crosshairs: setTool(Tools.Crosshairs),
crop: setTool(Tools.Crop),
polygon: setTool(Tools.Polygon),
select: setTool(Tools.Select),
decrementLabel: applyLabelOffset(-1),
incrementLabel: applyLabelOffset(1),
changeNextImage: changeNextImage(),
changePreviousImage: changePreviousImage(),
mergeNewPolygon: () => {}, // acts as a modifier key rather than immediate effect, so no-op
showKeyboardShortcuts,
} as const satisfies Record<Action, () => void>;