itk-viewer-material-ui
Version:
[](https://badge.fury.io/js/itk-viewer-material-ui)
91 lines (85 loc) • 2.42 kB
JSX
import React, { useEffect, useRef } from 'react'
import { useActor } from '@xstate/react'
import { Icon, MenuItem, Select, Tooltip } from '@mui/material'
import { blendModeIconDataUri } from 'itk-viewer-icons'
import applyContrastSensitiveStyleToElement from '../applyContrastSensitiveStyleToElement'
import '../style.css'
function BlendModeSelector(props) {
const { service } = props
const blendModeDiv = useRef(null)
const blendModeSelector = useRef(null)
const blendModeIcon = useRef(null)
const [state, send] = useActor(service)
useEffect(() => {
applyContrastSensitiveStyleToElement(
state.context,
'invertibleButton',
blendModeIcon.current
)
state.context.images.blendModeDiv = blendModeIcon.current
state.context.images.blendModeSelector = blendModeSelector.current
}, [])
const selectionChanged = (event) => {
const value = parseInt(event.target.value)
state.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: state.context.images.selectedName,
blendMode: mode
}
})
}
return (
<div ref={blendModeDiv} className="blendSelector">
<Tooltip
ref={blendModeIcon}
title="Blend mode"
PopperProps={{
anchorEl: blendModeIcon.current,
disablePortal: true,
keepMounted: true
}}
>
<Icon className="blendModeButton">
<img src={blendModeIconDataUri} />
</Icon>
</Tooltip>
<Select
ref={blendModeSelector}
className="selector"
defaultValue={0}
onChange={(event) => {
selectionChanged(event)
}}
MenuProps={{
anchorEl: blendModeSelector.current,
disablePortal: true,
keepMounted: true,
classes: { paper: 'blendMenu' }
}}
>
<MenuItem value={0}>Composite</MenuItem>
<MenuItem value={1}>Maximum</MenuItem>
<MenuItem value={2}>Minimum</MenuItem>
<MenuItem value={3}>Average</MenuItem>
</Select>
</div>
)
}
export default BlendModeSelector