itk-viewer-bootstrap-ui
Version:
[](https://badge.fury.io/js/itk-viewer-bootstrap-ui)  [ • 2.44 kB
JSX
import React, { useEffect, useRef } from 'react'
import { useSelector } from '@xstate/react'
import { blendModeIconDataUri } from '@itk-viewer/icons'
import applyContrastSensitiveStyleToElement from '../applyContrastSensitiveStyleToElement'
import Image from 'react-bootstrap/Image'
import Form from 'react-bootstrap/Form'
import OverlayTrigger from 'react-bootstrap/OverlayTrigger'
import Tooltip from 'react-bootstrap/Tooltip'
import '../style.css'
function BlendModeSelector(props) {
const { service } = props
const send = service.send
const blendModeDiv = useRef(null)
const blendModeSelector = useRef(null)
const blendModeIcon = useRef(null)
const selectedName = useSelector(
service,
(state) => state.context.images.selectedName
)
const stateContext = useSelector(service, (state) => state.context)
useEffect(() => {
applyContrastSensitiveStyleToElement(
stateContext,
'invertibleButton',
blendModeIcon.current
)
service.machine.context.images.blendModeDiv = blendModeIcon.current
service.machine.context.images.blendModeSelector = blendModeSelector.current
}, [])
const selectionChanged = (event) => {
const value = parseInt(event.target.value)
service.machine.context.images.blendModeSelector.value = value
let mode = 'blendmode'
switch (value) {
case 0:
mode = 'Composite'
break
case 1:
mode = 'Maximum'
break
case 2:
mode = 'Minimum'
break
case 3:
mode = 'Average'
break
}
send({
type: 'IMAGE_BLEND_MODE_CHANGED',
data: {
name: selectedName,
blendMode: mode
}
})
}
return (
<div ref={blendModeDiv} className="blendSelector">
<OverlayTrigger
transition={false}
overlay={<Tooltip>Blend mode</Tooltip>}
>
<div className="icon-image">
<Image src={blendModeIconDataUri}></Image>
</div>
</OverlayTrigger>
<Form.Control
as="select"
ref={blendModeSelector}
className="selector blendMenu"
onChange={(event) => {
selectionChanged(event)
}}
>
<option value={0}>Composite</option>
<option value={1}>Maximum</option>
<option value={2}>Minimum</option>
<option value={3}>Average</option>
</Form.Control>
</div>
)
}
export default BlendModeSelector