mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-08 08:53:51 +00:00
43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
import { useCallback, useEffect } from 'react';
|
|
import { useNavigate } from 'react-router-dom';
|
|
|
|
import { addDialog } from '../stores/dialogStore';
|
|
|
|
const isElectron = window.process?.type === 'renderer';
|
|
const ipcRenderer = isElectron ? window.require('electron').ipcRenderer : null;
|
|
|
|
export function useElectronEvent() {
|
|
const sendToElectron = useCallback((channel: string, args?: string | Record<string, unknown>) => {
|
|
if (isElectron && ipcRenderer) {
|
|
ipcRenderer.send(channel, args);
|
|
}
|
|
}, []);
|
|
|
|
return { isElectron, sendToElectron };
|
|
}
|
|
|
|
export function useElectronListener() {
|
|
const navigate = useNavigate();
|
|
const { isElectron } = useElectronEvent();
|
|
|
|
// listen to requests to change the editor location
|
|
useEffect(() => {
|
|
if (isElectron) {
|
|
ipcRenderer.on('request-editor-location', (_event: unknown, location: string) => {
|
|
navigate(location, { relative: 'route' });
|
|
});
|
|
|
|
ipcRenderer.on('dialog', (_event: unknown, dialog: string) => {
|
|
if (dialog === 'welcome') {
|
|
addDialog('welcome');
|
|
}
|
|
});
|
|
}
|
|
|
|
// Clean the listener after the component is dismounted
|
|
return () => {
|
|
ipcRenderer?.removeAllListeners();
|
|
};
|
|
}, [isElectron, navigate]);
|
|
}
|