import React from 'react'; import { useTranslation } from 'react-i18next'; import { Link, useLocation } from 'react-router-dom'; import { LayoutDashboard, CalendarDays, Settings, Users, CreditCard, MessageSquare, LogOut, ClipboardList, Ticket, HelpCircle, Plug, FileSignature, CalendarOff, Image, BarChart3, ShoppingCart, Package, } from 'lucide-react'; import { Business, User } from '../types'; import { useLogout } from '../hooks/useAuth'; import { usePlanFeatures } from '../hooks/usePlanFeatures'; import { useEntitlements, FEATURE_CODES } from '../hooks/useEntitlements'; import SmoothScheduleLogo from './SmoothScheduleLogo'; import UnfinishedBadge from './ui/UnfinishedBadge'; import { SidebarSection, SidebarItem, SidebarDivider, } from './navigation/SidebarComponents'; interface SidebarProps { business: Business; user: User; isCollapsed: boolean; toggleCollapse: () => void; } const Sidebar: React.FC = ({ business, user, isCollapsed, toggleCollapse }) => { const { t } = useTranslation(); const { role } = user; const logoutMutation = useLogout(); const { canUse } = usePlanFeatures(); const { hasFeature } = useEntitlements(); // Helper to check if user has a specific staff permission // Owners always have all permissions // Staff members check their effective_permissions (role + user overrides) const hasPermission = (permissionKey: string): boolean => { if (role === 'owner') { return true; } if (role === 'staff') { // Check effective_permissions which combines user overrides and staff role return user.effective_permissions?.[permissionKey] === true; } return false; }; // Admin/management access is based on effective permissions for staff const canViewAdminPages = role === 'owner' || hasPermission('can_access_staff'); const canViewManagementPages = role === 'owner' || hasPermission('can_access_scheduler'); const isStaff = role === 'staff'; const canViewSettings = role === 'owner' || hasPermission('can_access_settings'); const canViewTickets = hasPermission('can_access_tickets'); const canSendMessages = hasPermission('can_access_messages') || user.can_send_messages === true; const handleSignOut = () => { logoutMutation.mutate(); }; return (
{/* Header / Logo */} {/* Navigation */} {/* User Section */}
{!isCollapsed && ( {t('nav.smoothSchedule')} )}
); }; export default Sidebar;