-
Notifications
You must be signed in to change notification settings - Fork 1
feat: platform UI navigation & table optimization (complete) #900
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
0f721aa
94ae9e7
426f549
82ac432
5e98e48
0486f28
acf367d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -393,7 +393,7 @@ export function AppSidebar({ activeAppName, onAppChange }: { activeAppName: stri | |||||
| {/* Navigation Search */} | ||||||
| <SidebarGroup className="py-0"> | ||||||
| <SidebarGroupContent className="relative"> | ||||||
| <Search className="pointer-events-none absolute left-2 top-1/2 size-4 -translate-y-1/2 select-none opacity-50" /> | ||||||
| <Search className="pointer-events-none absolute left-2 top-1/2 size-4 -translate-y-1/2 select-none opacity-70" /> | ||||||
| <SidebarInput | ||||||
| placeholder="Search navigation..." | ||||||
| value={navSearchQuery} | ||||||
|
|
@@ -416,68 +416,68 @@ export function AppSidebar({ activeAppName, onAppChange }: { activeAppName: stri | |||||
| onReorder={handleReorder} | ||||||
| /> | ||||||
|
|
||||||
| {/* Record Favorites */} | ||||||
| {favorites.length > 0 && ( | ||||||
| {/* Recent Items (elevated position for quick access) */} | ||||||
| {recentItems.length > 0 && ( | ||||||
| <SidebarGroup> | ||||||
| <SidebarGroupLabel className="flex items-center gap-1.5"> | ||||||
| <Star className="h-3.5 w-3.5" /> | ||||||
| Favorites | ||||||
| <SidebarGroupLabel | ||||||
| className="flex items-center gap-1.5 cursor-pointer select-none" | ||||||
| onClick={() => setRecentExpanded(prev => !prev)} | ||||||
| > | ||||||
| <ChevronRight className={`h-3 w-3 transition-transform duration-150 ${recentExpanded ? 'rotate-90' : ''}`} /> | ||||||
| <Clock className="h-3.5 w-3.5" /> | ||||||
| Recent | ||||||
| </SidebarGroupLabel> | ||||||
|
Comment on lines
+422
to
429
|
||||||
| {recentExpanded && ( | ||||||
| <SidebarGroupContent> | ||||||
| <SidebarMenu> | ||||||
| {favorites.slice(0, 8).map(item => ( | ||||||
| {recentItems.slice(0, 5).map(item => ( | ||||||
| <SidebarMenuItem key={item.id}> | ||||||
| <SidebarMenuButton asChild tooltip={item.label}> | ||||||
| <Link to={item.href}> | ||||||
| <span className="text-muted-foreground"> | ||||||
| {item.type === 'dashboard' ? '📊' : item.type === 'report' ? '📈' : item.type === 'page' ? '📄' : '📋'} | ||||||
| {item.type === 'dashboard' ? '📊' : item.type === 'report' ? '📈' : '📄'} | ||||||
| </span> | ||||||
| <span className="truncate">{item.label}</span> | ||||||
| </Link> | ||||||
| </SidebarMenuButton> | ||||||
| <SidebarMenuAction | ||||||
| showOnHover | ||||||
| onClick={(e: any) => { e.stopPropagation(); removeFavorite(item.id); }} | ||||||
| aria-label={`Remove ${item.label} from favorites`} | ||||||
| > | ||||||
| <StarOff className="h-3 w-3" /> | ||||||
| </SidebarMenuAction> | ||||||
| </SidebarMenuItem> | ||||||
| ))} | ||||||
| </SidebarMenu> | ||||||
| </SidebarGroupContent> | ||||||
| )} | ||||||
| </SidebarGroup> | ||||||
| )} | ||||||
|
|
||||||
| {/* Recent Items (default collapsed) */} | ||||||
| {recentItems.length > 0 && ( | ||||||
| {/* Record Favorites */} | ||||||
| {favorites.length > 0 && ( | ||||||
| <SidebarGroup> | ||||||
| <SidebarGroupLabel | ||||||
| className="flex items-center gap-1.5 cursor-pointer select-none" | ||||||
| onClick={() => setRecentExpanded(prev => !prev)} | ||||||
| > | ||||||
| <ChevronRight className={`h-3 w-3 transition-transform duration-150 ${recentExpanded ? 'rotate-90' : ''}`} /> | ||||||
| <Clock className="h-3.5 w-3.5" /> | ||||||
| Recent | ||||||
| <SidebarGroupLabel className="flex items-center gap-1.5"> | ||||||
| <Star className="h-3.5 w-3.5" /> | ||||||
| Favorites | ||||||
| </SidebarGroupLabel> | ||||||
| {recentExpanded && ( | ||||||
| <SidebarGroupContent> | ||||||
| <SidebarMenu> | ||||||
| {recentItems.slice(0, 5).map(item => ( | ||||||
| {favorites.slice(0, 8).map(item => ( | ||||||
| <SidebarMenuItem key={item.id}> | ||||||
| <SidebarMenuButton asChild tooltip={item.label}> | ||||||
| <Link to={item.href}> | ||||||
| <span className="text-muted-foreground"> | ||||||
| {item.type === 'dashboard' ? '📊' : item.type === 'report' ? '📈' : '📄'} | ||||||
| {item.type === 'dashboard' ? '📊' : item.type === 'report' ? '📈' : item.type === 'page' ? '📄' : '📋'} | ||||||
| </span> | ||||||
| <span className="truncate">{item.label}</span> | ||||||
| </Link> | ||||||
| </SidebarMenuButton> | ||||||
| <SidebarMenuAction | ||||||
| showOnHover | ||||||
| onClick={(e: any) => { e.stopPropagation(); removeFavorite(item.id); }} | ||||||
|
||||||
| onClick={(e: any) => { e.stopPropagation(); removeFavorite(item.id); }} | |
| onClick={(e: React.MouseEvent<HTMLButtonElement>) => { e.stopPropagation(); removeFavorite(item.id); }} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ROADMAP entry still references a placeholder “Issue #XX”. Since this PR states it fixes #899, update this reference so the roadmap item is traceable (and keep the renderer helper names consistent with what’s actually implemented).