import React, { useState, useEffect, useCallback, useRef } from 'react' import { ipcRenderer, IpcRendererEvent } from 'electron' export interface WindowControlsProps { disableMinimize?: boolean disableMaximize?: boolean disableClose?: boolean browserWindowId?: number } export const WindowControls: React.FC = ({ disableMaximize, disableMinimize, disableClose, browserWindowId, }) => { const [isMaximized, setIsMaximized] = useState(false) const remoteBrowserWindowId = useRef(browserWindowId) useEffect(() => { const onMaximimizeStateChange = ( event: IpcRendererEvent, isWindowMaximumized: boolean, targetBrowserWindowId: number ) => { if (targetBrowserWindowId === remoteBrowserWindowId.current) { setIsMaximized(isWindowMaximumized) } } ipcRenderer.on('electron-react-titlebar/maximunize/change', onMaximimizeStateChange) const updateRemoteBrowserWindowId = async () => { remoteBrowserWindowId.current = (await ipcRenderer.invoke( 'electron-react-titlebar/initialize', browserWindowId )) as number } updateRemoteBrowserWindowId().finally(() => null) return () => { ipcRenderer.removeListener('electron-react-titlebar/maximunize/change', onMaximimizeStateChange) } }, [browserWindowId]) const setMaximumize = useCallback(() => { ipcRenderer.send('electron-react-titlebar/maximumize/set', browserWindowId) }, [browserWindowId]) const setMinimumize = useCallback(() => { ipcRenderer.send('electron-react-titlebar/minimumize/set', browserWindowId) }, [browserWindowId]) const setClose = useCallback(() => { ipcRenderer.send('electron-react-titlebar/close', browserWindowId) }, [browserWindowId]) return (
) }