diff --git a/ui/components/Sidebar.tsx b/ui/components/Sidebar.tsx
index cc2097d..546e2fd 100644
--- a/ui/components/Sidebar.tsx
+++ b/ui/components/Sidebar.tsx
@@ -4,10 +4,16 @@ 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, { useState, type ReactNode } from 'react';
+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}
@@ -18,6 +24,31 @@ 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 = [
{
@@ -25,22 +56,44 @@ const Sidebar = ({ children }: { children: React.ReactNode }) => {
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 (
+ return loading ? (
+
+ ) : (
@@ -48,23 +101,26 @@ const Sidebar = ({ children }: { children: React.ReactNode }) => {
- {navLinks.map((link, i) => (
-
-
- {link.active && (
-
- )}
-
- ))}
+ {navLinks.map(
+ (link, i) =>
+ link.show === true && (
+
+
+ {link.active && (
+
+ )}
+
+ ),
+ )}