import { createPortal } from 'react-dom'; import { NavLink } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { Settings, HardDriveDownload } from 'lucide-react'; import { useSidebarStore } from '../store/sidebarStore'; import { useAuthStore } from '../store/authStore'; import { useOfflineStore } from '../store/offlineStore'; import { ALL_NAV_ITEMS } from '../config/navItems'; const BOTTOM_NAV_ROUTES = new Set(['/', '/albums', '/now-playing']); export default function MobileMoreOverlay({ onClose }: { onClose: () => void }) { const { t } = useTranslation(); const sidebarItems = useSidebarStore(s => s.items); const randomNavMode = useAuthStore(s => s.randomNavMode); const serverId = useAuthStore(s => s.activeServerId ?? ''); const showLuckyMixMenu = useAuthStore(s => s.showLuckyMixMenu); const audiomuseByServer = useAuthStore(s => s.audiomuseNavidromeByServer); const offlineAlbums = useOfflineStore(s => s.albums); const hasOfflineContent = Object.values(offlineAlbums).some(a => a.serverId === serverId); const luckyMixAvailable = randomNavMode === 'separate' && showLuckyMixMenu && Boolean(serverId && audiomuseByServer[serverId]); const items = sidebarItems .filter(cfg => { if (!cfg?.visible) return false; const item = ALL_NAV_ITEMS[cfg.id]; if (!item) return false; if (BOTTOM_NAV_ROUTES.has(item.to)) return false; if (randomNavMode === 'hub' && (cfg.id === 'randomMix' || cfg.id === 'randomAlbums')) return false; if (randomNavMode === 'separate' && cfg.id === 'randomPicker') return false; if (cfg.id === 'luckyMix' && !luckyMixAvailable) return false; return true; }) .map(cfg => ALL_NAV_ITEMS[cfg.id]); return createPortal( <>