From 83fb62d4dfd8fea3ee8375248b11c6ee2cbccaf2 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Mon, 4 Aug 2025 19:54:59 +0300 Subject: [PATCH] fix(react/dialogs): listener leak in modal --- apps/client/src/widgets/react/Modal.tsx | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/apps/client/src/widgets/react/Modal.tsx b/apps/client/src/widgets/react/Modal.tsx index 96b00af2e..0ae9541f9 100644 --- a/apps/client/src/widgets/react/Modal.tsx +++ b/apps/client/src/widgets/react/Modal.tsx @@ -28,14 +28,23 @@ export default function Modal({ children, className, size, title, footer, onShow if (onShown || onHidden) { useEffect(() => { const modalElement = modalRef.current; - if (modalElement) { + if (!modalElement) { + return; + } + if (onShown) { + modalElement.addEventListener("shown.bs.modal", onShown); + } + if (onHidden) { + modalElement.addEventListener("hidden.bs.modal", onHidden); + } + return () => { if (onShown) { - modalElement.addEventListener("shown.bs.modal", onShown); + modalElement.removeEventListener("shown.bs.modal", onShown); } if (onHidden) { - modalElement.addEventListener("hidden.bs.modal", onHidden); + modalElement.removeEventListener("hidden.bs.modal", onHidden); } - } + }; }); }