fix(GamepadProvider): prevent emitting more than one event handler at a time

This commit is contained in:
Botzy 2025-04-01 15:22:48 +03:00
parent 9c34a23888
commit bc81bd1fc8

View file

@ -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);
}
}
};