import { useRef } from "react"; import { useFocusable, FocusContext, } from "@noriginmedia/norigin-spatial-navigation"; import { ChevronRight, Joystick } from "lucide-react"; import { GamePadButtonCode, useShortcuts } from "@/mainview/scripts/shortcuts"; import { scrollIntoNearestParent, useDragScroll } from "@/mainview/scripts/utils"; import FocusDots from "../FocusDots"; import { Router } from "@/mainview"; import { StoreEmulatorCard } from "./StoreEmulatorCard"; import { FOCUS_KEYS } from "@/mainview/scripts/types"; import { FrontEndEmulator } from "@/shared/constants"; function SeeAllCard (data: { id: string; onAction: () => void; onFocus?: (details: { node: HTMLElement, instant: boolean; }) => void; }) { const { ref, focusKey } = useFocusable({ focusKey: data.id, onFocus: (_l, _p, details) => data.onFocus?.({ node: ref.current, instant: details.instant }), onEnterPress: data.onAction }); useShortcuts(focusKey, () => [{ button: GamePadButtonCode.A, label: "See All", action: data.onAction }], []); return
See All Emulators
; } export function EmulatorsSection (data: { id: string; emulators: FrontEndEmulator[]; onSelect?: (id: string, focusKey: string) => void; header?: any; } & FocusParams) { const { ref, focusKey } = useFocusable({ focusKey: FOCUS_KEYS.EMULATOR_SECTION(data.id), trackChildren: true, onFocus: (_l, _p, details) => data.onFocus?.(focusKey, ref.current, details) }); const containerRef = useRef(null); useDragScroll(containerRef); return (
{data.header ?? <>

Recommended Emulators

}
{data.emulators?.map((em) => ( data.onSelect?.(em.name, focusKey)} onFocus={({ node, details }) => { scrollIntoNearestParent(node, { behavior: details.instant ? 'instant' : 'smooth' }); }} /> ))} Router.navigate({ to: '/store/tab/emulators' })} onFocus={({ node, instant }) => scrollIntoNearestParent(node, { behavior: instant ? 'instant' : 'smooth' })} />
{!!data.emulators && FOCUS_KEYS.EMULATOR_CARD(e.name))} />}
); }