From 71af0a23b0ee674c20ed7ecab81c188261d134d7 Mon Sep 17 00:00:00 2001 From: Sebastien Cloiseau Date: Wed, 30 Jul 2025 21:49:26 +0200 Subject: [PATCH] fix: prevent keyboard handlers stack mutation during iteration --- src/hooks/useGlobalKey.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/hooks/useGlobalKey.ts b/src/hooks/useGlobalKey.ts index 242d343..fcb082a 100644 --- a/src/hooks/useGlobalKey.ts +++ b/src/hooks/useGlobalKey.ts @@ -1,5 +1,5 @@ -import { useEffect } from "react"; import { sendGTMEvent } from "@next/third-parties/google"; +import { useEffect } from "react"; type KeyboardKey = KeyboardEvent["key"]; @@ -28,7 +28,7 @@ export function useGlobalKeyCallback() { if (!(lowerKey in allHandlersStacks)) return; if (shouldHandleAsNativeEvent(event)) return; const handlersStack = allHandlersStacks[lowerKey]; - for (let handler of handlersStack.reverse()) { + for (let handler of [...handlersStack].reverse()) { if (handler()) { event.preventDefault(); event.stopPropagation(); @@ -63,7 +63,9 @@ export const useCallbackOnKey = ({ return () => { if (!isDisabled) { const index = allHandlersStacks[lowerKey].indexOf(handler); - allHandlersStacks[lowerKey].splice(index, 1); + if (index > -1) { + allHandlersStacks[lowerKey].splice(index, 1); + } } }; }, [key, handler, isDisabled]);