'use client'; import { cn } from '@/lib/utils'; import { BookOpenText, Home, Search, SquarePen, Settings } from 'lucide-react'; import Link from 'next/link'; import { useSelectedLayoutSegments } from 'next/navigation'; import React, { useEffect, useMemo, useState, type ReactNode } from 'react'; import Layout from './Layout'; import SettingsDialog from './SettingsDialog'; export type Preferences = { isLibraryEnabled: boolean; isDiscoverEnabled: boolean; isCopilotEnabled: boolean; }; const VerticalIconContainer = ({ children }: { children: ReactNode }) => { return (
{children}
); }; const Sidebar = ({ children }: { children: React.ReactNode }) => { const segments = useSelectedLayoutSegments(); const [isSettingsOpen, setIsSettingsOpen] = useState(false); const [preferences, setPreferences] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { const fetchPreferences = async () => { setLoading(true); const res = await fetch( `${process.env.NEXT_PUBLIC_API_URL}/config/preferences`, { method: 'GET', headers: { 'Content-Type': 'application/json', }, }, ); const data = await res.json(); setPreferences(data); setLoading(false); }; fetchPreferences(); }, []); const navLinks = [ { icon: Home, href: '/', active: segments.length === 0 || segments.includes('c'), label: 'Home', show: true, }, { icon: Search, href: '/discover', active: segments.includes('discover'), label: 'Discover', show: preferences?.isDiscoverEnabled, }, { icon: BookOpenText, href: '/library', active: segments.includes('library'), label: 'Library', show: preferences?.isLibraryEnabled, }, ]; return loading ? (
) : (
{navLinks.map( (link, i) => link.show === true && ( {link.active && (
)} ), )} setIsSettingsOpen(!isSettingsOpen)} className="cursor-pointer" />
{navLinks.map((link, i) => ( {link.active && (
)}

{link.label}

))}
{children}
); }; export default Sidebar;