diff --git a/apps/client/src/widgets/react/hooks.tsx b/apps/client/src/widgets/react/hooks.tsx index aa75ea61b..8071c962e 100644 --- a/apps/client/src/widgets/react/hooks.tsx +++ b/apps/client/src/widgets/react/hooks.tsx @@ -15,49 +15,31 @@ import { RefObject, VNode } from "preact"; import { Tooltip } from "bootstrap"; import { CSSProperties } from "preact/compat"; -/** - * Allows a React component to listen to Trilium's legacy event system. - * - * The handler works by registering the event listener on the parent legacy component. - * - * @param eventName the event to listen on. - * @param handler the callback to be invoked when the event is triggered. - */ export function useTriliumEvent(eventName: T, handler: (data: EventData) => void) { const parentComponent = useContext(ParentComponent)!; - useEffect(() => { - parentComponent.registerHandler(eventName, handler); - return (() => parentComponent.removeHandler(eventName, handler)); - }, [ eventName, handler, parentComponent ]) + parentComponent.registerHandler(eventName, handler); + return (() => parentComponent.removeHandler(eventName, handler)); } -/** - * Similar to {@link useTriliumEvent}, but listens to multiple events at once. - * - * @param eventNames the events to listen on. - * @param handler the callback to be invoked when one of the events is triggered. The name of the event is provided as the second argument. - */ export function useTriliumEvents(eventNames: T[], handler: (data: EventData, eventName: T) => void) { const parentComponent = useContext(ParentComponent)!; - useEffect(() => { - const handlers: ({ eventName: T, callback: (data: EventData) => void })[] = []; - - for (const eventName of eventNames) { - handlers.push({ eventName, callback: (data) => { - handler(data, eventName); - }}) - } - + const handlers: ({ eventName: T, callback: (data: EventData) => void })[] = []; + + for (const eventName of eventNames) { + handlers.push({ eventName, callback: (data) => { + handler(data, eventName); + }}) + } + + for (const { eventName, callback } of handlers) { + parentComponent.registerHandler(eventName, callback); + } + + return (() => { for (const { eventName, callback } of handlers) { - parentComponent.registerHandler(eventName, callback); + parentComponent.removeHandler(eventName, callback); } - - return (() => { - for (const { eventName, callback } of handlers) { - parentComponent.removeHandler(eventName, callback); - } - }); - }, [ eventNames, handler, parentComponent ]); + }); } export function useSpacedUpdate(callback: () => void | Promise, interval = 1000) {