UNPKG

itk-viewer-bootstrap-ui

Version:

[![npm version](https://badge.fury.io/js/itk-viewer-bootstrap-ui.svg)](https://badge.fury.io/js/itk-viewer-bootstrap-ui) ![react-bootstrap version](https://img.shields.io/badge/React%20Bootstap-%3E=1.6.1-brightgreen.svg) [![Documentation Status](https://r

88 lines (82 loc) 2.44 kB
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