Skip to content
Snippets Groups Projects
Commit ca7ed9f6 authored by Loïc Correnson's avatar Loïc Correnson
Browse files

Merge branch 'feature/dome/emitter-hook' into 'master'

[dome] useEmitter hook

See merge request frama-c/frama-c!3749
parents 763e1262 39c2232d
No related branches found
No related tags found
No related merge requests found
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
*/ */
import _ from 'lodash'; import _ from 'lodash';
import Emitter from 'events';
import React from 'react'; import React from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import { AppContainer } from 'react-hot-loader'; import { AppContainer } from 'react-hot-loader';
...@@ -176,6 +177,21 @@ export function useEvent<A>( ...@@ -176,6 +177,21 @@ export function useEvent<A>(
}, [evt, callback]); }, [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 // --- Application Events
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
...@@ -186,13 +202,13 @@ export function useEvent<A>( ...@@ -186,13 +202,13 @@ export function useEvent<A>(
the window frame is resized. the window frame is resized.
You can use it for your own components as an easy-to-use global You can use it for your own components as an easy-to-use global
re-render event. re-render event.
*/ */
export const update = new Event('dome.update'); export const update = new Event('dome.update');
/** /**
Dome reload event. Dome reload event.
It is emitted when the entire window is reloaded. It is emitted when the entire window is reloaded.
*/ */
export const reload = new Event('dome.reload'); export const reload = new Event('dome.reload');
ipcRenderer.on('dome.ipc.reload', () => reload.emit()); ipcRenderer.on('dome.ipc.reload', () => reload.emit());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment