import React, { useEffect, useState, useCallback } from 'react'; import PropTypes from 'prop-types'; import { LayoutSelector as OHIFLayoutSelector, ToolbarButton, LayoutPreset } from '@ohif/ui'; const defaultCommonPresets = [ { icon: 'layout-common-1x1', commandOptions: { numRows: 1, numCols: 1, }, }, { icon: 'layout-common-1x2', commandOptions: { numRows: 1, numCols: 2, }, }, { icon: 'layout-common-2x2', commandOptions: { numRows: 2, numCols: 2, }, }, { icon: 'layout-common-2x3', commandOptions: { numRows: 2, numCols: 3, }, }, ]; const _areSelectorsValid = (hp, displaySets, hangingProtocolService) => { if (!hp.displaySetSelectors || Object.values(hp.displaySetSelectors).length === 0) { return true; } return hangingProtocolService.areRequiredSelectorsValid( Object.values(hp.displaySetSelectors), displaySets[0] ); }; const generateAdvancedPresets = ({ servicesManager }: withAppTypes) => { const { hangingProtocolService, viewportGridService, displaySetService } = servicesManager.services; const hangingProtocols = Array.from(hangingProtocolService.protocols.values()); const viewportId = viewportGridService.getActiveViewportId(); if (!viewportId) { return []; } const displaySetInsaneUIDs = viewportGridService.getDisplaySetsUIDsForViewport(viewportId); if (!displaySetInsaneUIDs) { return []; } const displaySets = displaySetInsaneUIDs.map(uid => displaySetService.getDisplaySetByUID(uid)); return hangingProtocols .map(hp => { if (!hp.isPreset) { return null; } const areValid = _areSelectorsValid(hp, displaySets, hangingProtocolService); return { icon: hp.icon, title: hp.name, commandOptions: { protocolId: hp.id, }, disabled: !areValid, }; }) .filter(preset => preset !== null); }; function ToolbarLayoutSelectorWithServices({ commandsManager, servicesManager, ...props }: withAppTypes) { const [isDisabled, setIsDisabled] = useState(false); const handleMouseEnter = () => { setIsDisabled(false); }; const onSelection = useCallback(props => { commandsManager.run({ commandName: 'setViewportGridLayout', commandOptions: { ...props }, }); setIsDisabled(true); }, []); const onSelectionPreset = useCallback(props => { commandsManager.run({ commandName: 'setHangingProtocol', commandOptions: { ...props }, }); setIsDisabled(true); }, []); return (
Hover to select
rows and columns
Click to apply