import { useState, useEffect } from 'react'; import { useQuery } from '@tanstack/react-query'; import { Link, useLocation, useNavigate } from 'react-router-dom'; import { useAuth } from '../context/AuthContext'; import { rommApiClient } from '../api/client'; import { FocusContext } from '@noriginmedia/norigin-spatial-navigation'; import { useFocusableAutoScroll } from '../hooks/useFocusableAutoScroll'; export const Sidebar = () => { const { logout } = useAuth(); const { data: user } = useQuery({ queryKey: ['currentUser'], queryFn: () => rommApiClient.fetchCurrentUser() }); const [imgError, setImgError] = useState(false); const location = useLocation(); const navigate = useNavigate(); // Create physical bounding box for Sidebar natively mapping navigation paths const { ref: containerRef, focusKey: sidebarFocusKey } = useFocusableAutoScroll(); const fallbackName = user?.username || "Admin"; const avatarFallback = `https://ui-avatars.com/api/?name=${encodeURIComponent(fallbackName)}&background=2563eb&color=fff&bold=true`; const avatarUrl = !imgError && user?.avatarUrl ? user.avatarUrl : avatarFallback; const NavItem = ({ path, icon, label, autoFocus }: { path: string, icon: string, label: string, autoFocus?: boolean }) => { const isActive = location.pathname === path || (path !== '/' && location.pathname.startsWith(path)); const { ref, focused, focusSelf } = useFocusableAutoScroll({ onEnterPress: () => navigate(path), }); useEffect(() => { if (autoFocus) { focusSelf(); } }, [autoFocus, focusSelf]); return ( {icon} {label} ); }; return ( ); };