From 8d6df46bafe9042e0552dac0e210b90d9cf6e124 Mon Sep 17 00:00:00 2001 From: kudlajz Date: Tue, 17 Sep 2024 17:07:44 +0200 Subject: [PATCH] Remove the listener when component is unmounted --- .../coverage/components/CoverageElement.tsx | 12 ++++++------ .../slate-editor/src/modules/events/EventsEditor.ts | 8 ++++++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/slate-editor/src/extensions/coverage/components/CoverageElement.tsx b/packages/slate-editor/src/extensions/coverage/components/CoverageElement.tsx index 9ba51fd07..79afea370 100644 --- a/packages/slate-editor/src/extensions/coverage/components/CoverageElement.tsx +++ b/packages/slate-editor/src/extensions/coverage/components/CoverageElement.tsx @@ -60,14 +60,14 @@ export function CoverageElement({ } } - function handleCoverageUpdated({ coverage }: { coverage: Pick}) { - if (element.coverage.id === coverage.id) { - loadCoverage(); + useEffect(() => { + function handleCoverageUpdated({ coverage }: { coverage: Pick}) { + if (element.coverage.id === coverage.id) { + loadCoverage(); + } } - } - useEffect(() => { - EventsEditor.addEventListener(editor, 'coverage-updated', handleCoverageUpdated); + return EventsEditor.addEventListener(editor, 'coverage-updated', handleCoverageUpdated); }, []); return ( diff --git a/packages/slate-editor/src/modules/events/EventsEditor.ts b/packages/slate-editor/src/modules/events/EventsEditor.ts index 01096c87d..4045996c6 100644 --- a/packages/slate-editor/src/modules/events/EventsEditor.ts +++ b/packages/slate-editor/src/modules/events/EventsEditor.ts @@ -1,4 +1,6 @@ +import type { RemoveListener } from '@prezly/events'; import { Events } from '@prezly/events'; +import { noop } from '@technically/lodash'; import { Editor } from 'slate'; import { EVENTS_PROPERTY } from './constants'; @@ -10,10 +12,12 @@ export abstract class EventsEditor { editor: Editor, event: Event, listener: EditorEventHandlers[Event], - ): void { + ): RemoveListener { if (EventsEditor.isEventsEditor(editor)) { - editor[EVENTS_PROPERTY].addEventListener(event, listener); + return editor[EVENTS_PROPERTY].addEventListener(event, listener); } + + return noop; } static dispatchEvent(