From ac1b09f7a10b1218ec051f74721fb48151db6610 Mon Sep 17 00:00:00 2001 From: Arunavo Ray Date: Fri, 29 Aug 2025 19:08:39 +0530 Subject: [PATCH] UI updates --- src/components/layout/Header.tsx | 39 ++++-- src/components/layout/MainLayout.tsx | 33 ++++- src/components/layout/Sidebar.tsx | 132 ++++++++++++++---- .../repositories/RepositoryTable.tsx | 16 +-- 4 files changed, 176 insertions(+), 44 deletions(-) diff --git a/src/components/layout/Header.tsx b/src/components/layout/Header.tsx index f2daea7..f06ec71 100644 --- a/src/components/layout/Header.tsx +++ b/src/components/layout/Header.tsx @@ -7,7 +7,7 @@ import { toast } from "sonner"; import { Skeleton } from "@/components/ui/skeleton"; import { useLiveRefresh } from "@/hooks/useLiveRefresh"; import { useConfigStatus } from "@/hooks/useConfigStatus"; -import { Menu, LogOut } from "lucide-react"; +import { Menu, LogOut, PanelRightOpen, PanelRightClose } from "lucide-react"; import { DropdownMenu, DropdownMenuContent, @@ -19,9 +19,12 @@ interface HeaderProps { currentPage?: "dashboard" | "repositories" | "organizations" | "configuration" | "activity-log"; onNavigate?: (page: string) => void; onMenuClick: () => void; + onToggleCollapse?: () => void; + isSidebarCollapsed?: boolean; + isSidebarOpen?: boolean; } -export function Header({ currentPage, onNavigate, onMenuClick }: HeaderProps) { +export function Header({ currentPage, onNavigate, onMenuClick, onToggleCollapse, isSidebarCollapsed, isSidebarOpen }: HeaderProps) { const { user, logout, isLoading } = useAuth(); const { isLiveEnabled, toggleLive } = useLiveRefresh(); const { isFullyConfigured, isLoading: configLoading } = useConfigStatus(); @@ -63,18 +66,38 @@ export function Header({ currentPage, onNavigate, onMenuClick }: HeaderProps) { return (
-
- {/* Hamburger Menu Button - Mobile Only */} +
+ {/* Sidebar Toggle - Mobile uses slide-in, Medium uses collapse */} + {/* Sidebar Collapse Toggle - Only on medium screens (768px - 1280px) */} + + ); + + // Wrap in tooltip when collapsed on medium screens + if (isCollapsed) { + return ( + + + + {button} + + + {link.label} + + + + ); + } + + return button; })}
-
-
-

Need Help?

-

- Check out the documentation for help with setup and configuration. -

- - Documentation - - +
+
+
+

Need Help?

+

+ Check out the documentation for help with setup and configuration. +

+ + Documentation + + +
+ {/* Icon-only help button for collapsed state on medium screens */} + + + + + + + + + Documentation + + + +
+
+
-
diff --git a/src/components/repositories/RepositoryTable.tsx b/src/components/repositories/RepositoryTable.tsx index 8c8ab02..2471e80 100644 --- a/src/components/repositories/RepositoryTable.tsx +++ b/src/components/repositories/RepositoryTable.tsx @@ -5,7 +5,7 @@ import { FlipHorizontal, GitFork, RefreshCw, RotateCcw, Star, Lock, Ban, Check, import { SiGithub, SiGitea } from "react-icons/si"; import type { Repository } from "@/lib/db/schema"; import { Button } from "@/components/ui/button"; -import { formatDate, getStatusColor } from "@/lib/utils"; +import { formatDate, formatLastSyncTime, getStatusColor } from "@/lib/utils"; import type { FilterParams } from "@/types/filter"; import { Skeleton } from "@/components/ui/skeleton"; import { useGiteaConfig } from "@/hooks/useGiteaConfig"; @@ -242,7 +242,7 @@ export default function RepositoryTable({ {repo.status} - {repo.lastMirrored ? formatDate(repo.lastMirrored) : "Never mirrored"} + {formatLastSyncTime(repo.lastMirrored)}
@@ -410,7 +410,7 @@ export default function RepositoryTable({
-
+
Repository
Owner
@@ -437,7 +437,7 @@ export default function RepositoryTable({
-
+
@@ -530,7 +530,7 @@ export default function RepositoryTable({ aria-label="Select all repositories" />
-
+
Repository
Owner
@@ -588,7 +588,7 @@ export default function RepositoryTable({
{/* Repository */} -
+
{repo.name} @@ -629,9 +629,7 @@ export default function RepositoryTable({ {/* Last Mirrored */}

- {repo.lastMirrored - ? formatDate(new Date(repo.lastMirrored)) - : "Never"} + {formatLastSyncTime(repo.lastMirrored)}