Reorganize sidebar navigation with Analytics category

- Add new Analytics section at top with Dashboard and Payments
- Reorder Manage section: Scheduler, Resources, Staff, Customers,
  Media Gallery, Contracts, Time Blocks
- Remove Money section (Payments moved to Analytics)
- Keep staff-only items (My Schedule, My Availability) in separate section

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-23 22:35:24 -05:00
parent e4668f81c5
commit f71218cc77
2 changed files with 60 additions and 57 deletions

View File

@@ -12,11 +12,11 @@ import {
ClipboardList, ClipboardList,
Ticket, Ticket,
HelpCircle, HelpCircle,
Clock,
Plug, Plug,
FileSignature, FileSignature,
CalendarOff, CalendarOff,
Image, Image,
BarChart3,
} from 'lucide-react'; } from 'lucide-react';
import { Business, User } from '../types'; import { Business, User } from '../types';
import { useLogout } from '../hooks/useAuth'; import { useLogout } from '../hooks/useAuth';
@@ -119,8 +119,8 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
{/* Navigation */} {/* Navigation */}
<nav className="flex-1 px-3 space-y-6 overflow-y-auto pb-4"> <nav className="flex-1 px-3 space-y-6 overflow-y-auto pb-4">
{/* Core Features - Always visible */} {/* Analytics Section - Dashboard and Payments */}
<SidebarSection isCollapsed={isCollapsed}> <SidebarSection title={t('nav.sections.analytics', 'Analytics')} isCollapsed={isCollapsed}>
<SidebarItem <SidebarItem
to="/dashboard" to="/dashboard"
icon={LayoutDashboard} icon={LayoutDashboard}
@@ -128,55 +128,55 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
exact exact
/> />
{hasPermission('can_access_scheduler') && ( {hasPermission('can_access_payments') && (
<SidebarItem <SidebarItem
to="/dashboard/scheduler" to="/dashboard/payments"
icon={CalendarDays} icon={CreditCard}
label={t('nav.scheduler')} label={t('nav.payments')}
isCollapsed={isCollapsed}
/>
)}
{(isStaff && hasPermission('can_access_my_schedule')) && (
<SidebarItem
to="/dashboard/my-schedule"
icon={CalendarDays}
label={t('nav.mySchedule', 'My Schedule')}
isCollapsed={isCollapsed}
/>
)}
{(role === 'staff' || role === 'resource') && hasPermission('can_access_my_availability') && (
<SidebarItem
to="/dashboard/my-availability"
icon={CalendarOff}
label={t('nav.myAvailability', 'My Availability')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
disabled={!business.paymentsEnabled && role !== 'owner'}
/> />
)} )}
</SidebarSection> </SidebarSection>
{/* Manage Section - Show if user has any manage-related permission */} {/* Staff-only: My Schedule and My Availability */}
{(canViewManagementPages || {((isStaff && hasPermission('can_access_my_schedule')) ||
hasPermission('can_access_gallery') || ((role === 'staff' || role === 'resource') && hasPermission('can_access_my_availability'))) && (
hasPermission('can_access_customers') || <SidebarSection isCollapsed={isCollapsed}>
hasPermission('can_access_resources') || {(isStaff && hasPermission('can_access_my_schedule')) && (
hasPermission('can_access_staff') ||
hasPermission('can_access_contracts') ||
hasPermission('can_access_time_blocks')
) && (
<SidebarSection title={t('nav.sections.manage', 'Manage')} isCollapsed={isCollapsed}>
{hasPermission('can_access_gallery') && (
<SidebarItem <SidebarItem
to="/dashboard/gallery" to="/dashboard/my-schedule"
icon={Image} icon={CalendarDays}
label={t('nav.gallery', 'Media Gallery')} label={t('nav.mySchedule', 'My Schedule')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
/> />
)} )}
{hasPermission('can_access_customers') && ( {(role === 'staff' || role === 'resource') && hasPermission('can_access_my_availability') && (
<SidebarItem <SidebarItem
to="/dashboard/customers" to="/dashboard/my-availability"
icon={Users} icon={CalendarOff}
label={t('nav.customers')} label={t('nav.myAvailability', 'My Availability')}
isCollapsed={isCollapsed}
/>
)}
</SidebarSection>
)}
{/* Manage Section - Scheduler, Resources, Staff, Customers, Contracts, Time Blocks */}
{(hasPermission('can_access_scheduler') ||
hasPermission('can_access_resources') ||
hasPermission('can_access_staff') ||
hasPermission('can_access_customers') ||
hasPermission('can_access_contracts') ||
hasPermission('can_access_time_blocks') ||
hasPermission('can_access_gallery')
) && (
<SidebarSection title={t('nav.sections.manage', 'Manage')} isCollapsed={isCollapsed}>
{hasPermission('can_access_scheduler') && (
<SidebarItem
to="/dashboard/scheduler"
icon={CalendarDays}
label={t('nav.scheduler')}
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
/> />
)} )}
@@ -196,6 +196,22 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
isCollapsed={isCollapsed} isCollapsed={isCollapsed}
/> />
)} )}
{hasPermission('can_access_customers') && (
<SidebarItem
to="/dashboard/customers"
icon={Users}
label={t('nav.customers')}
isCollapsed={isCollapsed}
/>
)}
{hasPermission('can_access_gallery') && (
<SidebarItem
to="/dashboard/gallery"
icon={Image}
label={t('nav.gallery', 'Media Gallery')}
isCollapsed={isCollapsed}
/>
)}
{hasPermission('can_access_contracts') && canUse('contracts') && ( {hasPermission('can_access_contracts') && canUse('contracts') && (
<SidebarItem <SidebarItem
to="/dashboard/contracts" to="/dashboard/contracts"
@@ -216,8 +232,8 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
</SidebarSection> </SidebarSection>
)} )}
{/* Communicate Section - Tickets + Messages */} {/* Communicate Section - Messages + Tickets */}
{(canViewTickets || canSendMessages) && ( {(canSendMessages || canViewTickets) && (
<SidebarSection title={t('nav.sections.communicate', 'Communicate')} isCollapsed={isCollapsed}> <SidebarSection title={t('nav.sections.communicate', 'Communicate')} isCollapsed={isCollapsed}>
{canSendMessages && ( {canSendMessages && (
<SidebarItem <SidebarItem
@@ -238,19 +254,6 @@ const Sidebar: React.FC<SidebarProps> = ({ business, user, isCollapsed, toggleCo
</SidebarSection> </SidebarSection>
)} )}
{/* Money Section - Payments */}
{hasPermission('can_access_payments') && (
<SidebarSection title={t('nav.sections.money', 'Money')} isCollapsed={isCollapsed}>
<SidebarItem
to="/dashboard/payments"
icon={CreditCard}
label={t('nav.payments')}
isCollapsed={isCollapsed}
disabled={!business.paymentsEnabled && role !== 'owner'}
/>
</SidebarSection>
)}
{/* Extend Section - Automations */} {/* Extend Section - Automations */}
{hasPermission('can_access_automations') && ( {hasPermission('can_access_automations') && (
<SidebarSection title={t('nav.sections.extend', 'Extend')} isCollapsed={isCollapsed}> <SidebarSection title={t('nav.sections.extend', 'Extend')} isCollapsed={isCollapsed}>

View File

@@ -157,9 +157,9 @@
"timeBlocks": "Time Blocks", "timeBlocks": "Time Blocks",
"helpDocs": "Help & Docs", "helpDocs": "Help & Docs",
"sections": { "sections": {
"analytics": "Analytics",
"manage": "Manage", "manage": "Manage",
"communicate": "Communicate", "communicate": "Communicate",
"money": "Money",
"extend": "Extend" "extend": "Extend"
} }
}, },