refactor: simplify sidebar for copilot-first navigation
- Add "New Session" button at top of rail and pinned mode - Replace Work → History, Know → Flows, add Scripts as own icon - Remove Help/Guides/Feedback from sidebar rail - Remove Maintenance from flow sub-items - Remove Step Library from pinned Knowledge section - Remove FlowPilot Analytics and Rocket icon - Rename "Active Sessions" → "Session History" - Rename "Flows" → "Guided Flows" in pinned mode Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,10 +2,10 @@ import { useCallback, useEffect, useRef, useState, type PointerEvent as ReactPoi
|
|||||||
import { Link, useLocation } from 'react-router-dom'
|
import { Link, useLocation } from 'react-router-dom'
|
||||||
import type { LucideIcon } from 'lucide-react'
|
import type { LucideIcon } from 'lucide-react'
|
||||||
import {
|
import {
|
||||||
LayoutGrid, Clock, AlertTriangle, GitBranch, Layers, Code2, Wand2,
|
LayoutGrid, Clock, AlertTriangle, GitBranch, Code2, Wand2,
|
||||||
ListChecks, Download, BarChart3, Rocket,
|
ListChecks, Download, BarChart3,
|
||||||
Settings, Pin, PinOff,
|
Settings, Pin, PinOff,
|
||||||
Zap, Database, HelpCircle,
|
Plus, History, FileText,
|
||||||
} from 'lucide-react'
|
} from 'lucide-react'
|
||||||
import { cn } from '@/lib/utils'
|
import { cn } from '@/lib/utils'
|
||||||
import { useUserPreferencesStore } from '@/store/userPreferencesStore'
|
import { useUserPreferencesStore } from '@/store/userPreferencesStore'
|
||||||
@@ -71,44 +71,40 @@ export function Sidebar() {
|
|||||||
matchPaths: ['/'],
|
matchPaths: ['/'],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
href: '/sessions', icon: Zap, label: 'Work', shortLabel: 'Work',
|
href: '/sessions', icon: History, label: 'History', shortLabel: 'History',
|
||||||
badge: (stats?.active_count || 0) + (stats?.escalation_count || 0) || undefined,
|
badge: stats?.active_count || undefined,
|
||||||
matchPaths: ['/sessions', '/escalations', '/pilot'],
|
matchPaths: ['/sessions', '/escalations', '/pilot'],
|
||||||
children: [
|
children: [
|
||||||
{ href: '/sessions', label: 'Active Sessions', count: stats?.active_count || undefined },
|
{ href: '/sessions', label: 'Session History', count: stats?.active_count || undefined },
|
||||||
{ href: '/escalations', label: 'Escalations', count: stats?.escalation_count || undefined },
|
{ href: '/escalations', label: 'Escalations', count: stats?.escalation_count || undefined },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
href: '/trees', icon: Database, label: 'Knowledge', shortLabel: 'Know',
|
href: '/trees', icon: GitBranch, label: 'Flows', shortLabel: 'Flows',
|
||||||
badge: stats?.tree_counts.total || undefined,
|
badge: stats?.tree_counts.total || undefined,
|
||||||
matchPaths: ['/trees', '/flows', '/my-trees', '/step-library', '/scripts', '/script-builder', '/review-queue'],
|
matchPaths: ['/trees', '/flows', '/my-trees', '/step-library', '/review-queue'],
|
||||||
children: [
|
children: [
|
||||||
{ href: '/trees', label: 'All Flows', count: stats?.tree_counts.total || undefined },
|
{ href: '/trees', label: 'Guided Flows', count: stats?.tree_counts.total || undefined },
|
||||||
{ href: '/trees?type=troubleshooting', label: 'Troubleshooting', count: stats?.tree_counts.troubleshooting || undefined },
|
{ href: '/trees?type=troubleshooting', label: 'Troubleshooting', count: stats?.tree_counts.troubleshooting || undefined },
|
||||||
{ href: '/trees?type=procedural', label: 'Projects', count: stats?.tree_counts.procedural || undefined },
|
{ href: '/trees?type=procedural', label: 'Projects', count: stats?.tree_counts.procedural || undefined },
|
||||||
{ href: '/trees?type=maintenance', label: 'Maintenance', count: stats?.tree_counts.maintenance || undefined },
|
|
||||||
{ href: '/step-library', label: 'Step Library' },
|
{ href: '/step-library', label: 'Step Library' },
|
||||||
{ href: '/scripts', label: 'Scripts' },
|
|
||||||
{ href: '/script-builder', label: 'Script Builder' },
|
|
||||||
{ href: '/review-queue', label: 'Review Queue' },
|
{ href: '/review-queue', label: 'Review Queue' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
href: '/scripts', icon: FileText, label: 'Scripts', shortLabel: 'Scripts',
|
||||||
|
matchPaths: ['/scripts', '/script-builder'],
|
||||||
|
children: [
|
||||||
|
{ href: '/scripts', label: 'Script Library' },
|
||||||
|
{ href: '/script-builder', label: 'Script Builder' },
|
||||||
|
],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
href: '/analytics', icon: BarChart3, label: 'Insights', shortLabel: 'Data',
|
href: '/analytics', icon: BarChart3, label: 'Insights', shortLabel: 'Data',
|
||||||
matchPaths: ['/analytics', '/shares'],
|
matchPaths: ['/analytics', '/shares'],
|
||||||
children: [
|
children: [
|
||||||
{ href: '/shares', label: 'Exports' },
|
|
||||||
{ href: '/analytics', label: 'Analytics' },
|
{ href: '/analytics', label: 'Analytics' },
|
||||||
{ href: '/analytics/flowpilot', label: 'FlowPilot Analytics' },
|
{ href: '/shares', label: 'Exports' },
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
href: '/guides', icon: HelpCircle, label: 'Help', shortLabel: 'Help',
|
|
||||||
matchPaths: ['/guides', '/feedback'],
|
|
||||||
children: [
|
|
||||||
{ href: '/guides', label: 'User Guides' },
|
|
||||||
{ href: '/feedback', label: 'Feedback' },
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
@@ -119,7 +115,7 @@ export function Sidebar() {
|
|||||||
title: 'RESOLVE',
|
title: 'RESOLVE',
|
||||||
items: [
|
items: [
|
||||||
{ href: '/', icon: LayoutGrid, label: 'Dashboard', shortLabel: 'Dash' },
|
{ href: '/', icon: LayoutGrid, label: 'Dashboard', shortLabel: 'Dash' },
|
||||||
{ href: '/sessions', icon: Clock, label: 'Active Sessions', shortLabel: 'Sessions', badge: stats?.active_count || undefined, matchPaths: ['/sessions'] },
|
{ href: '/sessions', icon: Clock, label: 'Session History', shortLabel: 'History', badge: stats?.active_count || undefined, matchPaths: ['/sessions'] },
|
||||||
{ href: '/escalations', icon: AlertTriangle, label: 'Escalations', shortLabel: 'Escal', badge: stats?.escalation_count || undefined },
|
{ href: '/escalations', icon: AlertTriangle, label: 'Escalations', shortLabel: 'Escal', badge: stats?.escalation_count || undefined },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
@@ -127,17 +123,15 @@ export function Sidebar() {
|
|||||||
title: 'KNOWLEDGE',
|
title: 'KNOWLEDGE',
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
href: '/trees', icon: GitBranch, label: 'Flows', shortLabel: 'Flows',
|
href: '/trees', icon: GitBranch, label: 'Guided Flows', shortLabel: 'Flows',
|
||||||
badge: stats?.tree_counts.total || undefined,
|
badge: stats?.tree_counts.total || undefined,
|
||||||
matchPaths: ['/trees', '/flows', '/my-trees'],
|
matchPaths: ['/trees', '/flows', '/my-trees'],
|
||||||
children: [
|
children: [
|
||||||
{ href: '/trees', label: 'All Flows' },
|
{ href: '/trees', label: 'All Flows' },
|
||||||
{ href: '/trees?type=troubleshooting', label: 'Troubleshooting', count: stats?.tree_counts.troubleshooting || undefined },
|
{ href: '/trees?type=troubleshooting', label: 'Troubleshooting', count: stats?.tree_counts.troubleshooting || undefined },
|
||||||
{ href: '/trees?type=procedural', label: 'Projects', count: stats?.tree_counts.procedural || undefined },
|
{ href: '/trees?type=procedural', label: 'Projects', count: stats?.tree_counts.procedural || undefined },
|
||||||
{ href: '/trees?type=maintenance', label: 'Maintenance', count: stats?.tree_counts.maintenance || undefined },
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{ href: '/step-library', icon: Layers, label: 'Step Library', shortLabel: 'Steps' },
|
|
||||||
{ href: '/scripts', icon: Code2, label: 'Scripts', shortLabel: 'Scripts' },
|
{ href: '/scripts', icon: Code2, label: 'Scripts', shortLabel: 'Scripts' },
|
||||||
{ href: '/script-builder', icon: Wand2, label: 'Script Builder', shortLabel: 'Builder' },
|
{ href: '/script-builder', icon: Wand2, label: 'Script Builder', shortLabel: 'Builder' },
|
||||||
{ href: '/review-queue', icon: ListChecks, label: 'Review Queue', shortLabel: 'Review' },
|
{ href: '/review-queue', icon: ListChecks, label: 'Review Queue', shortLabel: 'Review' },
|
||||||
@@ -146,9 +140,8 @@ export function Sidebar() {
|
|||||||
{
|
{
|
||||||
title: 'INSIGHTS',
|
title: 'INSIGHTS',
|
||||||
items: [
|
items: [
|
||||||
{ href: '/shares', icon: Download, label: 'Exports', shortLabel: 'Export' },
|
|
||||||
{ href: '/analytics', icon: BarChart3, label: 'Analytics', shortLabel: 'Stats' },
|
{ href: '/analytics', icon: BarChart3, label: 'Analytics', shortLabel: 'Stats' },
|
||||||
{ href: '/analytics/flowpilot', icon: Rocket, label: 'FlowPilot Analytics', shortLabel: 'FPilot' },
|
{ href: '/shares', icon: Download, label: 'Exports', shortLabel: 'Export' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
@@ -370,6 +363,17 @@ export function Sidebar() {
|
|||||||
style={{ background: 'var(--color-bg-sidebar)', borderRight: '1px solid var(--color-border-default)' }}
|
style={{ background: 'var(--color-bg-sidebar)', borderRight: '1px solid var(--color-border-default)' }}
|
||||||
onWheel={handleWheel}
|
onWheel={handleWheel}
|
||||||
>
|
>
|
||||||
|
{/* New Session button */}
|
||||||
|
<div className="px-3 pt-3 pb-1">
|
||||||
|
<Link
|
||||||
|
to="/"
|
||||||
|
className="flex items-center justify-center gap-2 w-full rounded-lg bg-primary/15 py-2.5 text-sm font-semibold text-primary hover:bg-primary/25 transition-colors"
|
||||||
|
>
|
||||||
|
<Plus size={16} strokeWidth={2} />
|
||||||
|
New Session
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
|
||||||
{/* Pinned sidebar content */}
|
{/* Pinned sidebar content */}
|
||||||
<div className="px-3 py-2 space-y-0.5">
|
<div className="px-3 py-2 space-y-0.5">
|
||||||
{sections.map((section, si) => (
|
{sections.map((section, si) => (
|
||||||
@@ -416,8 +420,20 @@ export function Sidebar() {
|
|||||||
style={{ background: 'var(--color-bg-sidebar)', borderRight: '1px solid var(--color-border-default)', width: '72px' }}
|
style={{ background: 'var(--color-bg-sidebar)', borderRight: '1px solid var(--color-border-default)', width: '72px' }}
|
||||||
onWheel={handleWheel}
|
onWheel={handleWheel}
|
||||||
>
|
>
|
||||||
{/* Grouped nav items */}
|
{/* New Session button */}
|
||||||
<div className="flex flex-col items-center w-full px-1 pt-4 space-y-1.5">
|
<div className="w-full px-2 pt-4 pb-2">
|
||||||
|
<Link
|
||||||
|
to="/"
|
||||||
|
className="flex flex-col items-center justify-center w-full rounded-lg bg-primary/15 py-2.5 text-primary hover:bg-primary/25 transition-colors"
|
||||||
|
title="New Session"
|
||||||
|
>
|
||||||
|
<Plus size={20} strokeWidth={2} />
|
||||||
|
<span className="mt-1 text-[0.5625rem] font-sans font-semibold">New</span>
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Nav items */}
|
||||||
|
<div className="flex flex-col items-center w-full px-1 space-y-1.5">
|
||||||
{railGroups.map((item, i) => renderRailItem(item, `rail-${i}`))}
|
{railGroups.map((item, i) => renderRailItem(item, `rail-${i}`))}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user