"use client" import { useEffect, useState } from "react" import { motion } from "motion/react" import { Monitor, Gamepad2, Loader2 } from "lucide-react" import { api } from "@/lib/eden" interface HardwareDevice { slug: string name: string deviceType: string } interface HardwareStepProps { value: string onChange: (slug: string) => void } export function HardwareStep({ value, onChange }: HardwareStepProps) { const [devices, setDevices] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) useEffect(() => { let cancelled = false async function fetchHardware() { try { setLoading(true) setError(null) const res = await api.performance.hardware.get() if (cancelled) return if (res.error) { setError("Failed to load hardware devices") setDevices([]) } else { setDevices(res.data?.data ?? []) } } catch { if (!cancelled) { setError("Failed to load hardware devices") setDevices([]) } } finally { if (!cancelled) { setLoading(false) } } } fetchHardware() return () => { cancelled = true } }, []) if (loading) { return (

Loading hardware devices...

) } if (error) { return (

{error}

) } return (

Select the hardware device you used to test this game.

*
{devices.map((device) => { const isSelected = device.slug === value const Icon = device.deviceType === "console" ? Gamepad2 : Monitor return ( onChange(device.slug)} whileHover={{ scale: 1.02 }} whileTap={{ scale: 0.98 }} className={`relative flex items-center gap-3 p-4 rounded-lg border transition-colors text-left cursor-pointer ${ isSelected ? "border-primary bg-primary/10 ring-2 ring-primary/50" : "border-border bg-text/5 hover:bg-text/10 hover:border-border-active" }`} >

{device.name}

{device.deviceType}

{isSelected && ( )}
) })}
{devices.length === 0 && (

No hardware devices available

)}
) }