import { useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { setIsAppFocused } from '../state/ducks/section'; import { getIsAppFocused } from '../state/selectors/section'; import { ipcRenderer } from 'electron'; /** * This custom hook should be called on the top of the app only once. * It sets up a listener for events from main_node.ts and update the global redux state with the focused state. */ export function useAppIsFocused() { const dispatch = useDispatch(); const isFocusedFromStore = useSelector(getIsAppFocused); const ipcCallback = (_event: unknown, isFocused: unknown) => { if (isFocusedFromStore !== isFocused) { dispatch(setIsAppFocused(Boolean(isFocused))); } }; useEffect(() => { ipcRenderer.on('set-window-focus', ipcCallback); return () => { ipcRenderer.removeListener('set-window-focus', ipcCallback); }; }); return isFocusedFromStore; }