import React, { useState, useEffect } from "react"; import { useLocation, useNavigate } from "react-router-dom"; import { useTheme } from "@/contexts/ThemeContext"; import { useLanguage } from "@/contexts/LanguageContext"; import { Settings, ChevronDown } from "lucide-react"; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/components/ui/collapsible"; import { ScrollArea } from "@/components/ui/scroll-area"; import { settingsMenuItems } from "./navigationData"; interface SettingsPanelProps { collapsed: boolean; } export const SettingsPanel: React.FC = ({ collapsed }) => { const { theme } = useTheme(); const { t } = useLanguage(); const location = useLocation(); const navigate = useNavigate(); const [activeSettingsItem, setActiveSettingsItem] = useState("general"); const [settingsPanelOpen, setSettingsPanelOpen] = useState(false); // Update active settings item based on URL useEffect(() => { if (location.pathname === '/settings') { const params = new URLSearchParams(location.search); const panel = params.get('panel'); if (panel) { setActiveSettingsItem(panel); } } }, [location]); const handleSettingsItemClick = (item: string) => { setActiveSettingsItem(item); }; const handleMenuItemClick = (path: string, event: React.MouseEvent) => { event.preventDefault(); event.stopPropagation(); // Use navigate instead of window.location to prevent full page reload navigate(path, { replace: false }); }; const getMenuItemClasses = (isActive: boolean) => { return `p-2 ${isActive ? theme === 'dark' ? 'bg-[#1a1a1a]' : 'bg-sidebar-accent' : `hover:${theme === 'dark' ? 'bg-[#1a1a1a]' : 'bg-sidebar-accent'}`} rounded-lg flex items-center`; }; if (collapsed) { const mainIconSize = "h-6 w-6"; return (
handleMenuItemClick('/settings', e)} className="cursor-pointer" >
); } return (
{t("settingPanel")}
{settingsMenuItems.map((item) => (
{ handleMenuItemClick(`/settings?panel=${item.id}`, e); handleSettingsItemClick(item.id); }} > {t(item.translationKey)}
))}
); };