itk-viewer-material-ui
Version:
[](https://badge.fury.io/js/itk-viewer-material-ui)
81 lines (72 loc) • 2.11 kB
JSX
import React, { useEffect, useRef } from 'react'
import { useActor } from '@xstate/react'
import { Tabs, Tab, FormControlLabel, Checkbox } from '@mui/material'
import '../style.css'
function ComponentSelector(props) {
const { service } = props
const [state, send] = useActor(service)
const componentRow = useRef(null)
const componentSelector = useRef(null)
const name = state.context.images.selectedName
const actorContext = state.context.images.actorContext.get(name)
const components = actorContext.image?.imageType.components
useEffect(() => {
state.context.images.componentRow = componentRow.current
state.context.images.componentSelector = componentSelector.current
}, [])
const changeComponentVisibility = (_e, idx) => {
send({
type: 'SELECT_IMAGE_COMPONENT',
data: { name, component: idx }
})
}
const toggleSelectedComponents = (idx) => {
send({
type: 'IMAGE_COMPONENT_VISIBILITY_CHANGED',
data: {
name,
component: idx,
visibility: !actorContext.componentVisibilities[idx]
}
})
}
const showSelector = () => {
if (components > 1 && actorContext.independentComponents) {
return ''
}
return 'hidden'
}
return (
<div
ref={componentRow}
className={`uiRow ${showSelector()}`}
style={{ marginBottom: '0px' }}
>
<Tabs
value={actorContext.selectedComponent}
onChange={changeComponentVisibility}
>
{[...Array(components).keys()].map((idx) => (
<Tab
key={idx}
label={
<FormControlLabel
control={
<Checkbox
checked={actorContext.componentVisibilities[idx]}
onChange={() => {
toggleSelectedComponents(idx)
}}
className="componentCheckbox"
/>
}
label={idx + 1}
/>
}
/>
))}
</Tabs>
</div>
)
}
export default ComponentSelector