feat(ui): reconcile backup UI changes with current routing and interaction features

This commit is contained in:
Dotta
2026-03-02 16:44:03 -06:00
parent 83be94361c
commit 8ee063c4e5
69 changed files with 1591 additions and 666 deletions

View File

@@ -1,26 +1,160 @@
import { Skeleton } from "@/components/ui/skeleton";
interface PageSkeletonProps {
variant?: "list" | "detail";
variant?:
| "list"
| "issues-list"
| "detail"
| "dashboard"
| "approvals"
| "costs"
| "inbox"
| "org-chart";
}
export function PageSkeleton({ variant = "list" }: PageSkeletonProps) {
if (variant === "dashboard") {
return (
<div className="space-y-6">
<Skeleton className="h-32 w-full border border-border" />
<div className="grid grid-cols-2 gap-2 xl:grid-cols-4">
{Array.from({ length: 4 }).map((_, i) => (
<Skeleton key={i} className="h-24 w-full" />
))}
</div>
<div className="grid grid-cols-2 gap-4 lg:grid-cols-4">
{Array.from({ length: 4 }).map((_, i) => (
<Skeleton key={i} className="h-44 w-full" />
))}
</div>
<div className="grid gap-4 md:grid-cols-2">
<Skeleton className="h-72 w-full" />
<Skeleton className="h-72 w-full" />
</div>
</div>
);
}
if (variant === "approvals") {
return (
<div className="space-y-4">
<div className="flex items-center justify-between">
<Skeleton className="h-9 w-44" />
</div>
<div className="grid gap-3">
{Array.from({ length: 3 }).map((_, i) => (
<Skeleton key={i} className="h-36 w-full" />
))}
</div>
</div>
);
}
if (variant === "costs") {
return (
<div className="space-y-6">
<div className="flex flex-wrap items-center gap-2">
{Array.from({ length: 6 }).map((_, i) => (
<Skeleton key={i} className="h-9 w-28" />
))}
</div>
<Skeleton className="h-40 w-full" />
<div className="grid gap-4 md:grid-cols-2">
<Skeleton className="h-72 w-full" />
<Skeleton className="h-72 w-full" />
</div>
</div>
);
}
if (variant === "inbox") {
return (
<div className="space-y-6">
<div className="flex items-center justify-between">
<Skeleton className="h-9 w-56" />
<Skeleton className="h-8 w-40" />
</div>
<div className="space-y-5">
{Array.from({ length: 3 }).map((_, section) => (
<div key={section} className="space-y-2">
<Skeleton className="h-4 w-40" />
<div className="space-y-1 border border-border">
{Array.from({ length: 3 }).map((_, row) => (
<Skeleton key={row} className="h-14 w-full rounded-none" />
))}
</div>
</div>
))}
</div>
</div>
);
}
if (variant === "org-chart") {
return (
<div className="space-y-4">
<Skeleton className="h-[calc(100vh-4rem)] w-full rounded-lg border border-border" />
</div>
);
}
if (variant === "detail") {
return (
<div className="space-y-6">
<div className="space-y-2">
<Skeleton className="h-4 w-24" />
<Skeleton className="h-8 w-64" />
<Skeleton className="h-4 w-full max-w-md" />
<div className="space-y-3">
<Skeleton className="h-3 w-64" />
<div className="flex items-center gap-2">
<Skeleton className="h-6 w-6" />
<Skeleton className="h-6 w-6" />
<Skeleton className="h-7 w-48" />
</div>
<Skeleton className="h-4 w-40" />
</div>
<div className="space-y-3">
<Skeleton className="h-10 w-full" />
<Skeleton className="h-32 w-full" />
</div>
<div className="space-y-2">
<Skeleton className="h-4 w-32" />
<Skeleton className="h-20 w-full" />
<Skeleton className="h-20 w-full" />
<div className="flex items-center gap-2">
<Skeleton className="h-8 w-24" />
<Skeleton className="h-8 w-24" />
<Skeleton className="h-8 w-24" />
</div>
<Skeleton className="h-24 w-full" />
<Skeleton className="h-24 w-full" />
</div>
</div>
);
}
if (variant === "issues-list") {
return (
<div className="space-y-4">
<div className="flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between">
<Skeleton className="h-9 w-64" />
<div className="flex items-center gap-2">
<Skeleton className="h-8 w-16" />
<Skeleton className="h-8 w-16" />
<Skeleton className="h-8 w-16" />
<Skeleton className="h-8 w-24" />
</div>
</div>
<div className="space-y-2">
<Skeleton className="h-4 w-40" />
<div className="space-y-1">
{Array.from({ length: 8 }).map((_, i) => (
<Skeleton key={i} className="h-11 w-full rounded-none" />
))}
</div>
</div>
</div>
);
@@ -28,14 +162,17 @@ export function PageSkeleton({ variant = "list" }: PageSkeletonProps) {
return (
<div className="space-y-4">
<div className="flex items-center justify-between">
<Skeleton className="h-6 w-32" />
<Skeleton className="h-8 w-24" />
<div className="flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between">
<Skeleton className="h-9 w-44" />
<div className="flex items-center gap-2">
<Skeleton className="h-8 w-20" />
<Skeleton className="h-8 w-24" />
</div>
</div>
<Skeleton className="h-10 w-full max-w-sm" />
<div className="space-y-1">
{Array.from({ length: 8 }).map((_, i) => (
<Skeleton key={i} className="h-10 w-full" />
{Array.from({ length: 7 }).map((_, i) => (
<Skeleton key={i} className="h-11 w-full rounded-none" />
))}
</div>
</div>