{t('GAMEPAD_SECTION_NAVIGATION')}
- L stick
+ {L_STICK}
{t('GAMEPAD_ACTION_NAVIGATE')}
- ✕
+ {CROSS}
{t('GAMEPAD_ACTION_SELECT')}
- ○
+ {CIRCLE}
{t('GAMEPAD_ACTION_BACK')}
- △
+ {TRIANGLE}
{t('GAMEPAD_ACTION_FULLSCREEN')}
- □
+ {SQUARE}
{t('GAMEPAD_ACTION_GUIDE')}
- L1
+ {L1}
{t('GAMEPAD_ACTION_PREV_TAB')}
- R1
+ {R1}
{t('GAMEPAD_ACTION_NEXT_TAB')}
@@ -91,28 +103,28 @@ const GamepadModal = ({ onClose }: Props) => {
{t('GAMEPAD_SECTION_PLAYER')}
- ✕
+ {CROSS}
{t('GAMEPAD_ACTION_PLAY_PAUSE')}
- L stick
- {'←'}
+ {L_STICK}
+ {LEFT}
{t('GAMEPAD_ACTION_SEEK_BACK')}
- L stick
- {'→'}
+ {L_STICK}
+ {RIGHT}
{t('GAMEPAD_ACTION_SEEK_FWD')}
- L stick
- {'↑'}
+ {L_STICK}
+ {UP}
{t('GAMEPAD_ACTION_VOL_UP')}
- L stick
- {'↓'}
+ {L_STICK}
+ {DOWN}
{t('GAMEPAD_ACTION_VOL_DOWN')}
diff --git a/src/services/GamepadContext/GamepadProvider.tsx b/src/services/GamepadContext/GamepadProvider.tsx
index d86517bfb..260aa16ce 100644
--- a/src/services/GamepadContext/GamepadProvider.tsx
+++ b/src/services/GamepadContext/GamepadProvider.tsx
@@ -52,37 +52,35 @@ const GamepadProvider: React.FC<{
}
};
- const onGamepadConnected = () => {
+ const onGamepadConnected = useCallback(() => {
// @ts-expect-error show() expects no arguments
toast.show({
type: 'info',
title: t('GAMEPAD_CONNECTED'),
timeout: 4000,
});
- };
+ }, [toast, t]);
- const onGamepadDisconnected = () => {
+ const onGamepadDisconnected = useCallback(() => {
// @ts-expect-error show() expects no arguments
toast.show({
type: 'info',
title: t('GAMEPAD_DISCONNECTED'),
timeout: 4000,
});
- };
+ }, [toast, t]);
useEffect(() => {
- if (enabled) {
- window.addEventListener('gamepadconnected', onGamepadConnected);
- window.addEventListener('gamepaddisconnected', onGamepadDisconnected);
- }
+ if (!enabled) return;
+
+ window.addEventListener('gamepadconnected', onGamepadConnected);
+ window.addEventListener('gamepaddisconnected', onGamepadDisconnected);
return () => {
- if (enabled) {
- window.removeEventListener('gamepadconnected', onGamepadConnected);
- window.removeEventListener('gamepaddisconnected', onGamepadDisconnected);
- }
+ window.removeEventListener('gamepadconnected', onGamepadConnected);
+ window.removeEventListener('gamepaddisconnected', onGamepadDisconnected);
};
- }, [enabled]);
+ }, [enabled, onGamepadConnected, onGamepadDisconnected]);
useEffect(() => {
if (onGuide) {
diff --git a/src/services/GamepadNavigation/useContentGamepadNavigation.tsx b/src/services/GamepadNavigation/useContentGamepadNavigation.tsx
index c9406f2fa..22162d77d 100644
--- a/src/services/GamepadNavigation/useContentGamepadNavigation.tsx
+++ b/src/services/GamepadNavigation/useContentGamepadNavigation.tsx
@@ -103,8 +103,8 @@ const useContentGamepadNavigation = (
elements[0].focus();
return;
}
- const isActiveSelectElement = [activeElement.classList].some((className) => /^select-input/.test(className.toString()));
- if (!isActiveSelectElement) {
+ const isSelect = Array.from(activeElement.classList).some((cls) => cls.startsWith('select-input'));
+ if (!isSelect) {
activeElement?.click();
}
};