import React, { useState, useEffect } from 'react'; import Box from '@mui/material/Box'; import Drawer from '@mui/material/Drawer'; import List from '@mui/material/List'; import Divider from '@mui/material/Divider'; import ListItem from '@mui/material/ListItem'; import ListItemButton from '@mui/material/ListItemButton'; import ListItemIcon from '@mui/material/ListItemIcon'; import ListItemText from '@mui/material/ListItemText'; import { Logout, Feedback, Help, History, AccountCircle, ArrowBack, ChevronRight, } from '@mui/icons-material'; import configObj from '@samagra-x/stencil-config-manager'; import { NewLanguagePicker } from '../language-picker'; type Link = { label: string; icon: string; route: string; }; type Language = { name: string; value: string; }; type SidebarPropsBase = { isOpen: boolean; onToggle: () => void; showProfileIcon?: boolean; showLangSwitcher?: boolean; profileText?: string; links: Link[]; handleLogOutButton: () => void; style?: SidebarStyle }; type SidebarPropsWithLangSwitcher = SidebarPropsBase & { showLangSwitcher: true; languages: Language[]; activeLanguage: string; handleLanguageClick: () => void; }; type SidebarPropsWithoutLangSwitcher = SidebarPropsBase & { showLangSwitcher?: false; languages?: never; activeLanguage?: never; handleLanguageClick?: never; }; type SidebarStyle = { drawer?: React.CSSProperties; list?: React.CSSProperties; listItem?: React.CSSProperties; listItemButton?: React.CSSProperties; profileText?: React.CSSProperties; languagePicker?: React.CSSProperties; }; type SidebarProps = SidebarPropsWithLangSwitcher | SidebarPropsWithoutLangSwitcher & { style?: SidebarStyle; }; export const Sidebar = ({ isOpen, onToggle }: { isOpen: boolean; onToggle: () => void }) => { const [config, setConfig] = useState<{ showLangSwitcher: boolean; languages: { code: string; label: string }[]; showProfileIcon: boolean; profileText: string; links: { label: string; icon: string; route: string }[]; showLogoutButton: boolean; logoutButtonLabel: string; } | null>(null); const [activeLanguage, setActiveLanguage] = useState('en'); useEffect(() => { if (configObj && configObj.component && configObj.component.sidebar) { setConfig(configObj.component.sidebar); } }, []); const handleLanguageClick = (langCode: string) => { setActiveLanguage(langCode); onToggle(); }; // useEffect(() => { // console.log(activeLanguage, 'ankit') // setLocale(activeLanguage) // }, [activeLanguage]) const handleItemClick = () => { onToggle(); }; return (
{config && ( {config.showLangSwitcher && (
{config.languages.map((lang, index) => ( ))}
)} {config.showProfileIcon && ( )} {config.links.map((link, index) => (
{getIconComponent(link.icon)}
))} {config.showLogoutButton && ( )}
)}
); }; const getIconComponent = (iconName: string) => { switch (iconName) { case 'HistoryIcon': return ; case 'HelpIcon': return ; case 'FeedbackIcon': return ; default: return null; } }; export default Sidebar; const NewSidebar: React.FC = ({ isOpen, onToggle, showProfileIcon = false, showLangSwitcher = false, profileText, links = [], handleLogOutButton, languages, activeLanguage, handleLanguageClick, style = {}, }) => { const handleItemClick = () => { onToggle(); }; return (
{showLangSwitcher && ( {languages && ( )} )} {showProfileIcon && ( )} {links.map((link, index) => (
{link.icon}
))}
); }; export { NewSidebar };