import React, { useState, ReactNode } from 'react'; import { NavLink, Outlet } from 'react-router-dom'; import { useTheme } from '../contexts/ThemeContext'; import { Theme, NavItem } from '../types'; import { useOrg } from '../contexts/OrgContext'; import { useAuth } from '../contexts/AuthContext'; import FigmaSidebar from './figma/Sidebar'; // ========== ICONS ========== export const CompanyWikiIcon = ({ className }: { className?: string }) => ( ); export const SubmissionsIcon = ({ className }: { className?: string }) => ( ); export const ReportsIcon = ({ className }: { className?: string }) => ( ); export const ChatIcon = ({ className }: { className?: string }) => ( ); export const HelpIcon = ({ className }: { className?: string }) => ( ); export const SettingsIcon = ({ className }: { className?: string }) => ( ); export const CopyIcon = ({ className }: { className?: string }) => ( ); export const PlusIcon = ({ className }: { className?: string }) => ( ); export const ChevronDownIcon = ({ className }: { className?: string }) => ( ); export const UploadIcon = ({ className }: { className?: string }) => ( ); export const CheckIcon = ({ className }: { className?: string }) => ( ); export const WarningIcon = ({ className }: { className?: string }) => ( ); export const DownloadIcon = ({ className }: { className?: string }) => ( ); export const MinusIcon = ({ className }: { className?: string }) => ( ); export const SunIcon = ({ className }: { className?: string }) => ( ); export const MoonIcon = ({ className }: { className?: string }) => ( ); export const SystemIcon = ({ className }: { className?: string }) => ( ); export const SendIcon = ({ className }: { className?: string }) => ( ); const NAV_ITEMS: NavItem[] = [ { href: '/company-wiki', label: 'Company Wiki', icon: CompanyWikiIcon }, { href: '/submissions', label: 'Submissions', icon: SubmissionsIcon }, { href: '/reports', label: 'Reports', icon: ReportsIcon }, { href: '/chat', label: 'Chat', icon: ChatIcon }, { href: '/help', label: 'Help', icon: HelpIcon }, ]; const BOTTOM_NAV_ITEMS: NavItem[] = [ { href: '/settings', label: 'Settings', icon: SettingsIcon } ]; // ========== LAYOUT COMPONENTS ========== const Sidebar = () => { const { org, issueInviteViaApi } = useOrg(); const { signOutUser } = useAuth(); const [showInviteModal, setShowInviteModal] = useState(false); const [inviteForm, setInviteForm] = useState({ name: '', email: '', role: '', department: '' }); const [inviteLink, setInviteLink] = useState(''); const [emailLink, setEmailLink] = useState(''); const commonLinkClasses = "flex items-center w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors duration-200"; const activeClass = "bg-[--sidebar-active-bg] text-[--sidebar-active-text]"; const inactiveClass = "text-[--sidebar-text] hover:bg-[--sidebar-active-bg] hover:text-[--sidebar-active-text]"; const handleInvite = async () => { try { const result = await issueInviteViaApi({ name: inviteForm.name, email: inviteForm.email, role: inviteForm.role, department: inviteForm.department }); setInviteLink(result.inviteLink); setEmailLink(result.emailLink); setInviteForm({ name: '', email: '', role: '', department: '' }); } catch (error) { console.error('Failed to invite employee:', error); } }; const copyToClipboard = (text: string) => { navigator.clipboard.writeText(text); }; const renderNavItems = (items: NavItem[]) => items.map(item => (