From 39c2232db5a3ad427b7335889e73dddb7ac5b319 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr> Date: Thu, 12 May 2022 16:20:51 +0200 Subject: [PATCH] [dome] useEmitter hook --- ivette/src/dome/renderer/dome.tsx | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/ivette/src/dome/renderer/dome.tsx b/ivette/src/dome/renderer/dome.tsx index 7fb76ae8e9d..9ad53344c66 100644 --- a/ivette/src/dome/renderer/dome.tsx +++ b/ivette/src/dome/renderer/dome.tsx @@ -42,6 +42,7 @@ */ import _ from 'lodash'; +import Emitter from 'events'; import React from 'react'; import ReactDOM from 'react-dom'; import { AppContainer } from 'react-hot-loader'; @@ -176,6 +177,21 @@ export function useEvent<A>( }, [evt, callback]); } +/** Custom React Hook on Node Emitters. */ +export function useEmitter( + emitter: undefined | null | Emitter, + event: undefined | null | string, + callback: () => void, +) { + return React.useEffect((): (undefined | (() => void)) => { + if (emitter && event) { + emitter.on(event, callback); + return () => emitter.off(event, callback); + } + return undefined; + }, [emitter, event, callback]); +} + // -------------------------------------------------------------------------- // --- Application Events // -------------------------------------------------------------------------- @@ -186,13 +202,13 @@ export function useEvent<A>( the window frame is resized. You can use it for your own components as an easy-to-use global re-render event. -*/ + */ export const update = new Event('dome.update'); /** Dome reload event. It is emitted when the entire window is reloaded. -*/ + */ export const reload = new Event('dome.reload'); ipcRenderer.on('dome.ipc.reload', () => reload.emit()); -- GitLab