import React, { useState } from 'react'; import { Flex } from 'antd'; import { FormattedMessage } from 'react-intl'; import { useSelector } from 'react-redux'; import { DataState, getBtnAvailability, LocationKey, } from '@/domain/permissionMap'; import { RootState } from '@/states/store'; import { IconButton } from '@/components/IconButton'; import Icon from '@/components/Icon'; interface BusinessZoneProps { onMenuClick?: (key: string) => void; } function useItems(btnAvailability: Record) { return [ { key: 'patient_management', label: ( ), icon: 'Registration', disabled: !btnAvailability['patient_management'], children: [ { key: 'register', disabled: !btnAvailability['register'], label: ( ), icon: 'Registration', }, { key: 'worklist', disabled: !btnAvailability['worklist'], label: ( ), icon: 'Worklist', }, { key: 'historylist', disabled: !btnAvailability['historylist'], label: ( ), icon: 'Registration', }, { key: 'archivelist', disabled: !btnAvailability['archivelist'], label: ( ), icon: 'Registration', }, { key: 'bin', disabled: !btnAvailability['bin'], label: ( ), }, { key: 'outputlist', disabled: !btnAvailability['outputlist'], label: ( ), icon: 'Registration', }, ], }, // { // key: 'emergency', // icon: 'Emergency', // label: '急诊', // disabled: false, // }, { key: 'exam', disabled: (console.log(`我要看看exam对应的值:${!btnAvailability['exam']}`), !btnAvailability['exam']), label: ( ), icon: 'Exam', }, { type: 'divider', }, { key: 'process', disabled: (console.log( `我要看看[process]对应的值:${!btnAvailability['process']}` ), !btnAvailability['process']), label: ( ), icon: 'Process', }, { key: 'print', disabled: !btnAvailability['print'], label: ( ), icon: 'Output', }, ]; } const BusinessZone: React.FC = ({ onMenuClick }) => { // eslint-disable-next-line const currentKey = useSelector((state: RootState) => state.BusinessFlow.currentKey); console.log('Current Business Flow Key:', currentKey); const dataState: DataState = useSelector((state: RootState) => { if (currentKey === 'worklist') { return { hasSelection: state.workSelection.selectedIds.length > 0, hasExposedImage: state.bodyPositionList.exposureStatus === 'Half Exposed' || state.bodyPositionList.exposureStatus === 'Fully Exposed', }; } else if (currentKey === 'historylist') { return { hasSelection: state.historySelection.selectedIds.length > 0, hasExposedImage: state.bodyPositionList.exposureStatus === 'Half Exposed' || state.bodyPositionList.exposureStatus === 'Fully Exposed', }; } else if (currentKey === 'exam') { return { // hasSelection: state.historySelection.selectedIds.length > 0, hasExposedImage: state.bodyPositionList.exposureStatus === 'Half Exposed' || state.bodyPositionList.exposureStatus === 'Fully Exposed', }; } else { return {}; } }); const btnAvailability = getBtnAvailability( currentKey as LocationKey, dataState ); console.log('Button Availability:', btnAvailability); const items = useItems(btnAvailability); // const [visibleItems, setVisibleItems] = useState(items); const [floatingMenuVisible, setFloatingMenuVisible] = useState(false); // const businessZoneRef = useRef(null); // useEffect(() => { // const handleResize = () => { // if (businessZoneRef.current) { // const businessZoneHeight = businessZoneRef.current.offsetHeight; // const windowHeight = window.innerHeight; // const systemZoneHeight = 100; // Assuming SystemZone height is fixed // if (businessZoneHeight + systemZoneHeight > windowHeight) { // const visibleCount = Math.floor( // (windowHeight - systemZoneHeight) / 50 // ); // Assuming each button height is 50px // setVisibleItems(items.slice(0, visibleCount)); // } else { // setVisibleItems(items); // } // } // }; // window.addEventListener('resize', handleResize); // handleResize(); // Initial check // return () => { // window.removeEventListener('resize', handleResize); // }; // }, [items]); const handlePatientManagementClick = () => { setFloatingMenuVisible(!floatingMenuVisible); }; const buttonClassNameGenerator = ( itemkey: string, currentkey: string ): string => { const originalName = 'w-full max-w-full whitespace-nowrap overflow-hidden text-ellipsis min-w-0 truncate'; if (itemkey === currentkey) { return originalName + ' border border-red-500 '; } return originalName; }; useSelector((state: RootState) => state.permission.triggerPermissionCalc); return ( //
{items.map((item) => item.type === 'divider' ? (
) : ( <> onMenuClick?.(item.key ?? 'error') } iconSize={56} iconPlace="left" icon={ } style={{ //flex: 1, minWidth: 0, overflow: 'hidden', // 超出隐藏 textOverflow: 'ellipsis', // 超出用省略号 whiteSpace: 'nowrap', // 不换行 padding: '0px', minHeight: '1.5rem', }} className={buttonClassNameGenerator( item.key as string, currentKey )} disabled={item.disabled} > {item.label} {item.key === 'patient_management' && floatingMenuVisible && ( {item.children?.map((child) => ( } key={child.key} onClick={() => onMenuClick?.(child.key)} className={buttonClassNameGenerator( item.key as string, currentKey )} style={{ //flex: 1, minWidth: 0, overflow: 'hidden', // 超出隐藏 textOverflow: 'ellipsis', // 超出用省略号 whiteSpace: 'nowrap', // 不换行 padding: '0px', }} disabled={item.disabled} > {child.label} ))} )} ) )}
//
); }; export default BusinessZone;