-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathEditTabs.js
More file actions
90 lines (84 loc) · 2.41 KB
/
EditTabs.js
File metadata and controls
90 lines (84 loc) · 2.41 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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import { Paper, Tab, Tabs } from '@mui/material';
import { useSelector } from '@xstate/react';
import { useEffect } from 'react';
import { useLabelMode, useSpots } from '../ProjectContext';
const tabKeybinds = {
segment: ['b', 'e', 'k', 'g', 'w', 'q'], // Remove 'm', 'x', and 't' so we can use it for cellTypes
cells: ['Backspace', 'r', 's'],
};
function EditTabs() {
const labelMode = useLabelMode();
const value = useSelector(labelMode, (state) => {
return state.matches('editSegment')
? 0
: state.matches('editSegmentSam')
? 1
: state.matches('editCells')
? 2
: state.matches('editDivisions')
? 3
: state.matches('editCellTypes')
? 4
: state.matches('editSpots')
? 5
: false;
});
const handleChange = (event, newValue) => {
switch (newValue) {
case 0:
labelMode.send('EDIT_SEGMENT');
break;
case 1:
labelMode.send('EDIT_SEGMENT_SAM');
break;
case 2:
labelMode.send('EDIT_CELLS');
break;
case 3:
labelMode.send('EDIT_DIVISIONS');
break;
case 4:
labelMode.send('EDIT_CELLTYPES');
break;
case 5:
labelMode.send('EDIT_SPOTS');
break;
default:
break;
}
};
useEffect(() => {
const listener = (event) => {
if (tabKeybinds.segment.includes(event.key)) {
labelMode.send('EDIT_SEGMENT');
} else if (tabKeybinds.cells.includes(event.key)) {
labelMode.send('EDIT_CELLS');
}
};
document.addEventListener('keydown', listener);
return () => {
document.removeEventListener('keydown', listener);
};
}, [labelMode]);
const spots = useSelector(useSpots(), (state) => state.context.spots);
return (
<Paper square>
<Tabs
orientation='vertical'
value={value}
indicatorColor='primary'
textColor='primary'
onChange={handleChange}
variant='scrollable'
>
<Tab sx={{ p: 0.5, minHeight: 0 }} label='Segment' />
<Tab sx={{ p: 0.5, minHeight: 0 }} label='Segment-CellSAM' />
<Tab sx={{ p: 0.5, minHeight: 0 }} label='Cells' />
<Tab sx={{ p: 0.5, minHeight: 0 }} label='Divisions' />
<Tab sx={{ p: 0.5, minHeight: 0 }} label='Cell Types' />
{spots && <Tab sx={{ p: 0.5, minHeight: 0 }} label='Spots' />}
</Tabs>
</Paper>
);
}
export default EditTabs;