From bc81bd1fc873cdccb25b963b8cf45f008ecf11dd Mon Sep 17 00:00:00 2001 From: Botzy Date: Tue, 1 Apr 2025 15:22:48 +0300 Subject: [PATCH] fix(GamepadProvider): prevent emitting more than one event handler at a time --- src/services/GamepadContext/GamepadProvider.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/services/GamepadContext/GamepadProvider.tsx b/src/services/GamepadContext/GamepadProvider.tsx index e60894c36..3b197d280 100644 --- a/src/services/GamepadContext/GamepadProvider.tsx +++ b/src/services/GamepadContext/GamepadProvider.tsx @@ -27,12 +27,20 @@ const GamepadProvider: React.FC<{ }, []); const off = useCallback((event: string, id: string) => { - eventHandlers.current.get(event)?.delete(id); + const handlersMap = eventHandlers.current.get(event); + handlersMap?.delete(id); + if (handlersMap?.size === 0) { + eventHandlers.current.delete(event); + } }, []); const emit = (event: string, data?: any) => { if (eventHandlers.current.has(event)) { - eventHandlers.current.get(event)!.forEach((callback) => callback(data)); + const handlersMap = eventHandlers.current.get(event)!; + const latestHandler = Array.from(handlersMap.values()).at(-1); + if (latestHandler) { + latestHandler(data); + } } };