itk-viewer-material-ui
Version:
[](https://badge.fury.io/js/itk-viewer-material-ui)
78 lines (69 loc) • 2.19 kB
JSX
import React, { useEffect, useRef } from 'react'
import { useActor } from '@xstate/react'
import { Slider } from '@mui/material'
import MapWeightSelector from './MapWeightSelector'
import '../style.css'
function LabelMapWeightWidget(props) {
const { service } = props
const labelImageWeightUIGroup = useRef(null)
const weightSlider = useRef(null)
const [state, send] = useActor(service)
const name = state.context.images.selectedName
const actorContext = state.context.images.actorContext.get(name)
useEffect(() => {
state.context.images.labelImageWeightUIGroup =
labelImageWeightUIGroup.current
state.context.uiGroups.set(
'labelImageWeights',
labelImageWeightUIGroup.current
)
state.context.images.labelImageWeightSlider = weightSlider.current
actorContext.labelImageToggleWeight = 1.0
}, [])
useEffect(() => {
sliderValue()
}, [actorContext.selectedLabel])
const weightChanged = (val) => {
const labelImageWeights = actorContext.labelImageWeights
if (actorContext.selectedLabel === 'all') {
for (const label of labelImageWeights.keys()) {
labelImageWeights.set(label, val)
}
actorContext.labelImageToggleWeight = val
} else {
labelImageWeights.set(actorContext.selectedLabel, val)
}
send({
type: 'LABEL_IMAGE_WEIGHTS_CHANGED',
data: { name, labelImageWeights }
})
}
const sliderValue = () => {
const labelImageWeights = actorContext.labelImageWeights
if (actorContext.selectedLabel === 'all') {
return actorContext.labelImageToggleWeight
} else {
return labelImageWeights.get(actorContext.selectedLabel)
}
}
return (
<div ref={labelImageWeightUIGroup} className="uiGroup">
<div className="uiRow">
<MapWeightSelector {...props} />
<Slider
ref={weightSlider}
className="slider"
min={0}
max={1}
value={sliderValue()}
step={0.05}
onChange={(_e, val) => {
weightChanged(val)
}}
style={{ marginLeft: '5px' }}
/>
</div>
</div>
)
}
export default LabelMapWeightWidget