import React, { useState, useEffect, useCallback, useRef } from 'react'; import { ipcRenderer, IpcRendererEvent } from 'electron'; export interface WindowControlsProps { disableMinimize?: boolean; disableMaximize?: boolean; browserWindowId?: number; } export const WindowControls: React.FC = ({ disableMaximize, disableMinimize, 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; }; // eslint-disable-next-line promise/catch-or-return 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 (
{/* eslint-disable-next-line react/button-has-type */} {/* eslint-disable-next-line react/button-has-type */} {/* eslint-disable-next-line react/button-has-type */}
); };