import React, { useEffect, useState } from 'react'; import { Location } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { CalendarDaysIcon, InboxIcon, ListBulletIcon, ClockIcon, CalendarIcon, } from '@heroicons/react/24/solid'; import { PlusCircleIcon } from '@heroicons/react/24/outline'; import { useStore } from '../../store/useStore'; import { loadInboxItemsToStore } from '../../utils/inboxService'; import { getFeatureFlags, FeatureFlags } from '../../utils/featureFlags'; interface SidebarNavProps { handleNavClick: (path: string, title: string, icon: JSX.Element) => void; location: Location; isDarkMode: boolean; openTaskModal: () => void; } const SidebarNav: React.FC = ({ handleNavClick, location, openTaskModal, }) => { const { t } = useTranslation(); const store = useStore(); const [featureFlags, setFeatureFlags] = useState({ backups: false, calendar: false, habits: false, }); const inboxItemsCount = store.inboxStore.pagination.total; useEffect(() => { loadInboxItemsToStore(false).catch(console.error); const fetchFlags = async () => { const flags = await getFeatureFlags(); setFeatureFlags(flags); }; fetchFlags(); }, []); const allNavLinks = [ { path: '/inbox', title: t('sidebar.inbox', 'Inbox'), icon: , }, { path: '/today', title: t('sidebar.today', 'Today'), icon: , query: 'type=today', }, { path: '/upcoming?status=active', title: t('sidebar.upcoming', 'Upcoming'), icon: , }, { path: '/calendar', title: t('sidebar.calendar', 'Calendar'), icon: , featureFlag: 'calendar', }, { path: '/tasks?status=active', title: t('sidebar.allTasks', 'All Tasks'), icon: , query: 'status=active', }, ]; const navLinks = allNavLinks.filter((link) => { if (link.featureFlag) { return featureFlags[link.featureFlag as keyof FeatureFlags]; } return true; }); const isActive = (path: string, query?: string) => { if (path === '/inbox' || path === '/today' || path === '/calendar') { const isPathMatch = location.pathname === path; return isPathMatch ? 'bg-gray-200 dark:bg-gray-700 text-gray-900 dark:text-white' : 'text-gray-700 dark:text-gray-300'; } if (path.startsWith('/upcoming')) { const isPathMatch = location.pathname === '/upcoming'; return isPathMatch ? 'bg-gray-200 dark:bg-gray-700 text-gray-900 dark:text-white' : 'text-gray-700 dark:text-gray-300'; } const isPathMatch = location.pathname === '/tasks'; const isQueryMatch = query ? location.search.includes(query) : location.search === ''; return isPathMatch && isQueryMatch ? 'bg-gray-200 dark:bg-gray-700 text-gray-900 dark:text-white' : 'text-gray-700 dark:text-gray-300'; }; return (
    {navLinks.map((link) => (
  • ))}
); }; export default SidebarNav;