UNPKG

itk-viewer-material-ui

Version:

[![npm version](https://badge.fury.io/js/itk-viewer-material-ui.svg)](https://badge.fury.io/js/itk-viewer-material-ui)

91 lines (85 loc) 2.42 kB
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