import styles from '@/components/Operation/index.module.scss' import ImageUrl from '@/utils/package/imageUrl'; import { useEffect, useState, memo } from "react"; type OperationKeyType = 'minimize' | 'quit' | 'maximize' | 'unmaximize' | 'hide' | 'show'; type OperationType = { icon: string; key: OperationKeyType; title: string; onClick: Function; show: boolean; } const Operation: React.FC = () => { const [_windowSize, setWindowSize] = useState({ width: window.innerWidth, height: window.innerHeight, }); const [operationList, setOperationList] = useState([{ icon: ImageUrl.icon17, key: 'minimize', title: '最小化', onClick: (key: OperationKeyType) => { window.electron.setViewStatus(key) }, show: true, }, { icon: ImageUrl.icon20, key: 'maximize', title: '最大化', onClick: (key: OperationKeyType) => { window.electron.setViewStatus(key) }, show: true, }, { icon: ImageUrl.icon19, key: 'unmaximize', title: '还原大小', onClick: (key: OperationKeyType) => { window.electron.setViewStatus(key) }, show: false, }, { icon: ImageUrl.icon18, key: 'quit', title: '关闭', onClick: (key: OperationKeyType) => { if (location.hash.indexOf('/meeting') === -1) { window.electron.setViewStatus(key) } else { window.electron.quit(false) } }, show: true, },]) useEffect(() => { getIsMaximized() const handleResize = () => { setWindowSize({ width: window.innerWidth, height: window.innerHeight, }); getIsMaximized() }; window.addEventListener('resize', handleResize); return () => { window.removeEventListener('resize', handleResize); }; }, []); const getIsMaximized = (): void => { window.electron.getIsMaximized().then((res: boolean) => { changeOperationList(res ? 'maximize' : 'unmaximize') }) } const changeOperationList = (str: OperationKeyType): void => { const newOperationList = [...operationList] const unmaximize = newOperationList.find((item: OperationType) => item.key === 'unmaximize') as OperationType; const maximize = newOperationList.find((item: OperationType) => item.key === 'maximize') as OperationType; unmaximize.show = str === 'maximize' ? true : false; maximize.show = str === 'maximize' ? false : true; setOperationList(newOperationList) } return ( <>
{ operationList.map((item: OperationType, index: number) => { return (item.show ?
item.onClick(item.key)}>
: null ) }) }
) } export default memo(Operation)