itk-viewer-material-ui
Version:
[](https://badge.fury.io/js/itk-viewer-material-ui)
67 lines (61 loc) • 1.87 kB
JSX
import React, { useEffect, useRef } from 'react'
import { useActor } from '@xstate/react'
import { Icon, Slider, Tooltip } from '@mui/material'
import { sampleDistanceIconDataUri } from 'itk-viewer-icons'
import applyContrastSensitiveStyleToElement from '../applyContrastSensitiveStyleToElement'
import '../style.css'
function SampleDistanceSlider(props) {
const { service } = props
const spacingDiv = useRef(null)
const spacingElement = useRef(null)
const [state, send] = useActor(service)
const name = state.context.images.selectedName
const actorContext = state.context.images.actorContext.get(name)
useEffect(() => {
applyContrastSensitiveStyleToElement(
state.context,
'invertibleButton',
spacingDiv.current
)
state.context.images.volumeSampleDistanceDiv = spacingDiv.current
state.context.images.volumeSampleDistanceSlider = spacingElement.current
}, [])
const spacingChanged = (val) => {
send({
type: 'IMAGE_VOLUME_SAMPLE_DISTANCE_CHANGED',
data: {
name: state.context.images.selectedName,
volumeSampleDistance: val
}
})
}
return (
<div className="iconWithSlider">
<Tooltip
ref={spacingDiv}
title="Volume sample distance"
PopperProps={{
anchorEl: spacingDiv.current,
disablePortal: true,
keepMounted: true
}}
>
<Icon className="sampleDistanceButton" style={{ margin: '0 10px 0 0' }}>
<img src={sampleDistanceIconDataUri} />
</Icon>
</Tooltip>
<Slider
ref={spacingElement}
className="slider"
min={0}
max={1}
value={actorContext.volumeSampleDistance}
step={0.01}
onChange={(_e, val) => {
spacingChanged(val)
}}
/>
</div>
)
}
export default SampleDistanceSlider