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:
@@ -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}>
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user