itk-viewer-bootstrap-ui
Version:
[](https://badge.fury.io/js/itk-viewer-bootstrap-ui)  [ • 2 kB
JSX
import React, { useEffect, useRef } from 'react'
import { useSelector } from '@xstate/react'
import Button from 'react-bootstrap/Button'
import Image from 'react-bootstrap/Image'
import OverlayTrigger from 'react-bootstrap/OverlayTrigger'
import Tooltip from 'react-bootstrap/Tooltip'
import cn from 'classnames'
import { windowingIconDataUri } from '@itk-viewer/icons'
import applyContrastSensitiveStyleToElement from '../applyContrastSensitiveStyleToElement'
import '../style.css'
import getSelectedImageContext from './getSelectedImageContext'
function WindowLevelToggle(props) {
const { service } = props
const toggleWindowingButton = useRef(null)
const stateContext = useSelector(service, (state) => state.context)
const send = service.send
const name = stateContext.images.selectedName
const windowLevelEnabled = useSelector(
service,
(state) =>
state.context.images.actorContext.get(state.context.images.selectedName)
.windowLevelEnabled
)
const actorContext = useSelector(service, (state) =>
getSelectedImageContext(state)
)
useEffect(() => {
applyContrastSensitiveStyleToElement(
stateContext,
'invertibleButton',
toggleWindowingButton.current
)
stateContext.images.toggleWindowingButtonInput =
toggleWindowingButton.current
}, [])
const toggleWindowing = () => {
send({
type: 'WINDOW_LEVEL_TOGGLED',
data: {
name,
component: actorContext.selectedComponent
}
})
}
return (
<OverlayTrigger
transition={false}
overlay={<Tooltip>Toggle window/level interactor</Tooltip>}
>
<Button
className={cn('icon-button', {
checked: windowLevelEnabled
})}
onClick={() => {
toggleWindowing()
}}
variant="secondary"
ref={toggleWindowingButton}
>
<Image src={windowingIconDataUri}></Image>
</Button>
</OverlayTrigger>
)
}
export default WindowLevelToggle