Skip to content

Commit 48c70af

Browse files
authored
Merge pull request #30 from BioNGFF/fix/label-controller
fix controller for standalone label
2 parents cd1c44d + 3a07762 commit 48c70af

File tree

2 files changed

+63
-47
lines changed

2 files changed

+63
-47
lines changed

viewer/src/components/Controller/Controller.jsx

Lines changed: 62 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import Checkbox from '@mui/material/Checkbox';
66
import Divider from '@mui/material/Divider';
77
import FormControlLabel from '@mui/material/FormControlLabel';
88
import FormGroup from '@mui/material/FormGroup';
9-
import Grid from '@mui/material/Grid';
109
import Stack from '@mui/material/Stack';
1110

1211
import { AxisSliders } from './AxisSliders';
@@ -16,6 +15,7 @@ import { OpacitySlider } from './OpacitySlider';
1615
export const Controller = ({
1716
sourceData,
1817
layerStates,
18+
isLabel,
1919
resetViewState,
2020
toggleVisibility,
2121
setLayerOpacity,
@@ -30,62 +30,78 @@ export const Controller = ({
3030
return (
3131
<React.Fragment key={layerState.layerProps.id}>
3232
<p>Source {index}</p>
33-
<FormControlLabel
34-
key={layerState.layerProps.id}
35-
label={layerState.layerProps.id}
36-
control={
37-
<Checkbox
38-
label={layerState.id}
39-
checked={layerState.on}
40-
icon={<VisibilityOffIcon />}
41-
checkedIcon={<VisibilityIcon />}
42-
onChange={() => toggleVisibility(index)}
43-
/>
44-
}
45-
/>
46-
<AxisSliders
47-
{...sourceData[index]}
48-
selections={layerState.layerProps.selections}
49-
onChange={(selections) => setLayerSelections(index, selections)}
50-
/>
51-
<OpacitySlider
52-
value={layerState.layerProps.opacity}
53-
onChange={(e, value) => setLayerOpacity(index, null, value)}
54-
/>
55-
<Divider>Channels</Divider>
56-
<ChannelControllers
57-
{...sourceData[index]}
58-
{...layerState}
59-
toggleChannelVisibility={(i) => toggleChannelVisibility(index, i)}
60-
setChannelContrast={(i, contrast) =>
61-
setChannelContrast(index, i, contrast)
62-
}
63-
/>
64-
{layerState.labels?.length && <Divider>Labels</Divider>}
65-
{layerState.labels?.map((label, i) => (
66-
<React.Fragment key={label.layerProps.id}>
67-
{i > 0 && <Divider />}
33+
{!isLabel[index] && (
34+
<>
6835
<FormControlLabel
69-
key={label.layerProps.id}
70-
label={`${label.layerProps.id} (label)`}
36+
key={layerState.layerProps.id}
37+
label={layerState.layerProps.id}
7138
control={
7239
<Checkbox
73-
label={label.layerProps.id}
74-
checked={label.on}
40+
label={layerState.id}
41+
checked={layerState.on}
7542
icon={<VisibilityOffIcon />}
7643
checkedIcon={<VisibilityIcon />}
77-
onChange={() => toggleVisibility(index, label.layerProps.id)}
44+
onChange={() => toggleVisibility(index)}
7845
/>
7946
}
8047
/>
48+
<AxisSliders
49+
{...sourceData[index]}
50+
selections={layerState.layerProps.selections}
51+
onChange={(selections) => setLayerSelections(index, selections)}
52+
/>
8153
<OpacitySlider
82-
value={label.layerProps.opacity}
83-
onChange={(e, value) =>
84-
setLayerOpacity(index, label.layerProps.id, value)
54+
value={layerState.layerProps.opacity}
55+
onChange={(e, value) => setLayerOpacity(index, null, value)}
56+
/>
57+
<Divider>Channels</Divider>
58+
<ChannelControllers
59+
{...sourceData[index]}
60+
{...layerState}
61+
toggleChannelVisibility={(i) => toggleChannelVisibility(index, i)}
62+
setChannelContrast={(i, contrast) =>
63+
setChannelContrast(index, i, contrast)
8564
}
8665
/>
87-
</React.Fragment>
88-
))}
66+
</>
67+
)}
68+
{layerState.labels?.length && <Divider>Labels</Divider>}
69+
{layerState.labels?.map((label, i) => {
70+
// if standalone label visibility is from image layer
71+
const { id, on } = isLabel[index]
72+
? {
73+
id: null,
74+
on: layerState.on,
75+
}
76+
: {
77+
id: label.layerProps.id,
78+
on: label.on,
79+
};
80+
return (
81+
<React.Fragment key={label.layerProps.id}>
82+
{i > 0 && <Divider />}
83+
<FormControlLabel
84+
key={label.layerProps.id}
85+
label={`${label.layerProps.id} (label)`}
86+
control={
87+
<Checkbox
88+
label={label.layerProps.id}
89+
checked={on}
90+
icon={<VisibilityOffIcon />}
91+
checkedIcon={<VisibilityIcon />}
92+
onChange={() => toggleVisibility(index, id)}
93+
/>
94+
}
95+
/>
96+
<OpacitySlider
97+
value={label.layerProps.opacity}
98+
onChange={(_e, value) =>
99+
setLayerOpacity(index, label.layerProps.id, value)
100+
}
101+
/>
102+
</React.Fragment>
103+
);
104+
})}
89105
</React.Fragment>
90106
);
91107
});

viewer/src/components/Viewer.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ export const Viewer = ({
9090
if (layerState?.layerProps?.loader || layerState?.layerProps?.loaders) {
9191
const { on } = layerState;
9292
if (isLabel?.[index]) {
93-
// @TODO: fix how controller lists layers
9493
return [
9594
new MultiscaleImageLayer({
9695
...layerState.layerProps,
@@ -352,6 +351,7 @@ export const Viewer = ({
352351
<Controller
353352
sourceData={sourceData}
354353
layerStates={layerStates}
354+
isLabel={isLabel}
355355
resetViewState={resetViewState}
356356
toggleVisibility={toggleVisibility}
357357
setLayerOpacity={setLayerOpacity}

0 commit comments

Comments
 (0)