From d63ab1924b6caa2aebdc7a7547d1607252d6bcee Mon Sep 17 00:00:00 2001 From: BennyKok Date: Sun, 31 Dec 2023 01:07:39 +0800 Subject: [PATCH] feat(web): paginated runs table, add loading page --- web/bun.lockb | Bin 448750 -> 451715 bytes web/package.json | 1 + web/src/app/(app)/api-keys/loading.tsx | 9 ++ web/src/app/(app)/machines/loading.tsx | 9 ++ .../[workflow_id]/@deployment/page.tsx | 25 ++++ .../workflows/[workflow_id]/@runs/page.tsx | 27 ++++ .../[workflow_id]/@workflow/loading.tsx | 11 ++ .../[workflow_id]/@workflow/page.tsx | 56 +++++++++ .../(app)/workflows/[workflow_id]/layout.tsx | 22 ++++ .../(app)/workflows/[workflow_id]/loading.tsx | 6 + .../(app)/workflows/[workflow_id]/page.tsx | 80 ------------ web/src/app/(app)/workflows/loading.tsx | 9 ++ web/src/components/LoadingWrapper.tsx | 37 ++++++ web/src/components/PaginationControl.tsx | 42 +++++++ web/src/components/RunsTable.tsx | 70 +++++++---- web/src/components/ui/pagination.tsx | 117 ++++++++++++++++++ web/src/components/ui/skeleton.tsx | 15 +++ web/src/server/findAllRuns.tsx | 34 ++++- 18 files changed, 465 insertions(+), 105 deletions(-) create mode 100644 web/src/app/(app)/api-keys/loading.tsx create mode 100644 web/src/app/(app)/machines/loading.tsx create mode 100644 web/src/app/(app)/workflows/[workflow_id]/@deployment/page.tsx create mode 100644 web/src/app/(app)/workflows/[workflow_id]/@runs/page.tsx create mode 100644 web/src/app/(app)/workflows/[workflow_id]/@workflow/loading.tsx create mode 100644 web/src/app/(app)/workflows/[workflow_id]/@workflow/page.tsx create mode 100644 web/src/app/(app)/workflows/[workflow_id]/layout.tsx create mode 100644 web/src/app/(app)/workflows/[workflow_id]/loading.tsx delete mode 100644 web/src/app/(app)/workflows/[workflow_id]/page.tsx create mode 100644 web/src/app/(app)/workflows/loading.tsx create mode 100644 web/src/components/LoadingWrapper.tsx create mode 100644 web/src/components/PaginationControl.tsx create mode 100644 web/src/components/ui/pagination.tsx create mode 100644 web/src/components/ui/skeleton.tsx diff --git a/web/bun.lockb b/web/bun.lockb index 5e71c92f6bb7bb47f719f687d7de7441a445789c..da357e6decfde015c88dd84378e54b47471c102c 100755 GIT binary patch delta 75931 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 +} diff --git a/web/src/app/(app)/machines/loading.tsx b/web/src/app/(app)/machines/loading.tsx new file mode 100644 index 0000000..9ff4783 --- /dev/null +++ b/web/src/app/(app)/machines/loading.tsx @@ -0,0 +1,9 @@ +"use client"; + +import { LoadingPageWrapper } from "@/components/LoadingWrapper"; +import { usePathname } from "next/navigation"; + +export default function Loading() { + const pathName = usePathname(); + return ; +} diff --git a/web/src/app/(app)/workflows/[workflow_id]/@deployment/page.tsx b/web/src/app/(app)/workflows/[workflow_id]/@deployment/page.tsx new file mode 100644 index 0000000..34eb1f0 --- /dev/null +++ b/web/src/app/(app)/workflows/[workflow_id]/@deployment/page.tsx @@ -0,0 +1,25 @@ +import { LoadingWrapper } from "@/components/LoadingWrapper"; +import { DeploymentsTable } from "@/components/RunsTable"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; + +export default async function Page({ + params, +}: { + params: { workflow_id: string }; +}) { + const workflow_id = params.workflow_id; + + return ( + + + Deployments + + + + + + + + + ); +} diff --git a/web/src/app/(app)/workflows/[workflow_id]/@runs/page.tsx b/web/src/app/(app)/workflows/[workflow_id]/@runs/page.tsx new file mode 100644 index 0000000..2843009 --- /dev/null +++ b/web/src/app/(app)/workflows/[workflow_id]/@runs/page.tsx @@ -0,0 +1,27 @@ +import { LoadingWrapper } from "@/components/LoadingWrapper"; +import { RunsTable } from "@/components/RunsTable"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; + +export default async function Page({ + params, + searchParams, +}: { + params: { workflow_id: string }; + searchParams: { [key: string]: string | string[] | undefined }; +}) { + const workflow_id = params.workflow_id; + + return ( + + + Run + + + + + + + + + ); +} diff --git a/web/src/app/(app)/workflows/[workflow_id]/@workflow/loading.tsx b/web/src/app/(app)/workflows/[workflow_id]/@workflow/loading.tsx new file mode 100644 index 0000000..175e6f8 --- /dev/null +++ b/web/src/app/(app)/workflows/[workflow_id]/@workflow/loading.tsx @@ -0,0 +1,11 @@ +import { LoadingPageWrapper } from "@/components/LoadingWrapper"; +import { Card } from "@/components/ui/card"; + +export default function Loading() { + // You can add any UI inside Loading, including a Skeleton. + return ( + + + + ); +} diff --git a/web/src/app/(app)/workflows/[workflow_id]/@workflow/page.tsx b/web/src/app/(app)/workflows/[workflow_id]/@workflow/page.tsx new file mode 100644 index 0000000..5ed3b8b --- /dev/null +++ b/web/src/app/(app)/workflows/[workflow_id]/@workflow/page.tsx @@ -0,0 +1,56 @@ +import { MachinesWSMain } from "@/components/MachinesWS"; +import { VersionDetails } from "@/components/VersionDetails"; +import { + CopyWorkflowVersion, + CreateDeploymentButton, + MachineSelect, + RunWorkflowButton, + VersionSelect, + ViewWorkflowDetailsButton, +} from "@/components/VersionSelect"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { getRelativeTime } from "@/lib/getRelativeTime"; +import { getMachines } from "@/server/curdMachine"; +import { findFirstTableWithVersion } from "@/server/findFirstTableWithVersion"; + +export default async function Page({ + params, +}: { + params: { workflow_id: string }; +}) { + const workflow_id = params.workflow_id; + + const workflow = await findFirstTableWithVersion(workflow_id); + const machines = await getMachines(); + + return ( + + + {workflow?.name} + + {getRelativeTime(workflow?.updated_at)} + + + + +
+ + + + + + +
+ + + +
+
+ ); +} diff --git a/web/src/app/(app)/workflows/[workflow_id]/layout.tsx b/web/src/app/(app)/workflows/[workflow_id]/layout.tsx new file mode 100644 index 0000000..7a2f06d --- /dev/null +++ b/web/src/app/(app)/workflows/[workflow_id]/layout.tsx @@ -0,0 +1,22 @@ +export default async function Layout({ + children, + deployment, + runs, + workflow, +}: { + children: React.ReactNode; + deployment: React.ReactNode; + runs: React.ReactNode; + workflow: React.ReactNode; +}) { + return ( +
+
+ {workflow} + {deployment} +
+ + {runs} +
+ ); +} diff --git a/web/src/app/(app)/workflows/[workflow_id]/loading.tsx b/web/src/app/(app)/workflows/[workflow_id]/loading.tsx new file mode 100644 index 0000000..372234d --- /dev/null +++ b/web/src/app/(app)/workflows/[workflow_id]/loading.tsx @@ -0,0 +1,6 @@ +import { LoadingPageWrapper } from "@/components/LoadingWrapper"; + +export default function Loading() { + // You can add any UI inside Loading, including a Skeleton. + return ; +} diff --git a/web/src/app/(app)/workflows/[workflow_id]/page.tsx b/web/src/app/(app)/workflows/[workflow_id]/page.tsx deleted file mode 100644 index e56113c..0000000 --- a/web/src/app/(app)/workflows/[workflow_id]/page.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { DeploymentsTable, RunsTable } from "../../../../components/RunsTable"; -import { findFirstTableWithVersion } from "../../../../server/findFirstTableWithVersion"; -import { MachinesWSMain } from "@/components/MachinesWS"; -import { VersionDetails } from "@/components/VersionDetails"; -import { - CopyWorkflowVersion, - CreateDeploymentButton, - MachineSelect, - RunWorkflowButton, - VersionSelect, - ViewWorkflowDetailsButton, -} from "@/components/VersionSelect"; -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { getRelativeTime } from "@/lib/getRelativeTime"; -import { getMachines } from "@/server/curdMachine"; - -export default async function Page({ - params, -}: { - params: { workflow_id: string }; -}) { - const workflow_id = params.workflow_id; - - const workflow = await findFirstTableWithVersion(workflow_id); - const machines = await getMachines(); - - return ( -
-
- - - {workflow?.name} - - {getRelativeTime(workflow?.updated_at)} - - - - -
- - - - - - -
- - - -
-
- - - Deployments - - - - - - -
- - - - Run - - - - - - -
- ); -} diff --git a/web/src/app/(app)/workflows/loading.tsx b/web/src/app/(app)/workflows/loading.tsx new file mode 100644 index 0000000..9ff4783 --- /dev/null +++ b/web/src/app/(app)/workflows/loading.tsx @@ -0,0 +1,9 @@ +"use client"; + +import { LoadingPageWrapper } from "@/components/LoadingWrapper"; +import { usePathname } from "next/navigation"; + +export default function Loading() { + const pathName = usePathname(); + return ; +} diff --git a/web/src/components/LoadingWrapper.tsx b/web/src/components/LoadingWrapper.tsx new file mode 100644 index 0000000..84b8fd5 --- /dev/null +++ b/web/src/components/LoadingWrapper.tsx @@ -0,0 +1,37 @@ +import { LoadingIcon } from "@/components/LoadingIcon"; +import { cn } from "@/lib/utils"; +import { Suspense } from "react"; + +export function LoadingWrapper(props: { + tag: string; + children?: React.ReactNode; +}) { + return ( + + Fetching {props.tag} + + } + > + {props.children} + + ); +} + +export function LoadingPageWrapper(props: { + tag: string; + children?: React.ReactNode; + className?: string; +}) { + return ( +
+ Fetching {props.tag} +
+ ); +} diff --git a/web/src/components/PaginationControl.tsx b/web/src/components/PaginationControl.tsx new file mode 100644 index 0000000..19825dd --- /dev/null +++ b/web/src/components/PaginationControl.tsx @@ -0,0 +1,42 @@ +import { + Pagination, + PaginationContent, + PaginationEllipsis, + PaginationItem, + PaginationLink, + PaginationNext, + PaginationPrevious, +} from "@/components/ui/pagination"; + +export function PaginationControl(props: { + totalPage: number; + currentPage: number; +}) { + return ( + + + 1 + ? `?page=${props.currentPage - 1}` + : `?page=${props.currentPage}` + } + /> + + {props.currentPage} + + + + + + + + ); +} diff --git a/web/src/components/RunsTable.tsx b/web/src/components/RunsTable.tsx index 75d61a3..8ac592f 100644 --- a/web/src/components/RunsTable.tsx +++ b/web/src/components/RunsTable.tsx @@ -1,5 +1,9 @@ -import { findAllDeployments, findAllRuns } from "../server/findAllRuns"; +import { + findAllDeployments, + findAllRunsWithCounts, +} from "../server/findAllRuns"; import { DeploymentDisplay } from "./DeploymentDisplay"; +import { PaginationControl } from "./PaginationControl"; import { RunDisplay } from "./RunDisplay"; import { Table, @@ -9,29 +13,51 @@ import { TableHeader, TableRow, } from "@/components/ui/table"; +import { parseAsInteger } from "next-usequerystate"; -export async function RunsTable(props: { workflow_id: string }) { - const allRuns = await findAllRuns(props.workflow_id); +const itemPerPage = 4; +const pageParser = parseAsInteger.withDefault(1); + +export async function RunsTable(props: { + workflow_id: string; + searchParams: { [key: string]: string | string[] | undefined }; +}) { + // await new Promise((resolve) => setTimeout(resolve, 5000)); + const page = pageParser.parseServerSide( + props.searchParams?.page ?? undefined + ); + const { allRuns, total } = await findAllRunsWithCounts({ + workflow_id: props.workflow_id, + limit: itemPerPage, + offset: (page - 1) * itemPerPage, + }); return ( -
- - A list of your recent runs. - - - Number - Machine - Time - Version - Live Status - Status - - - - {allRuns.map((run) => ( - - ))} - -
+
+
+ + {/* A list of your recent runs. */} + + + Number + Machine + Time + Version + Live Status + Status + + + + {allRuns.map((run) => ( + + ))} + +
+
+ +
); } diff --git a/web/src/components/ui/pagination.tsx b/web/src/components/ui/pagination.tsx new file mode 100644 index 0000000..5e5b375 --- /dev/null +++ b/web/src/components/ui/pagination.tsx @@ -0,0 +1,117 @@ +import type { ButtonProps } from "@/components/ui/button"; +import { buttonVariants } from "@/components/ui/button"; +import { cn } from "@/lib/utils"; +import { ChevronLeft, ChevronRight, MoreHorizontal } from "lucide-react"; +import Link from "next/link"; +import * as React from "react"; + +const Pagination = ({ className, ...props }: React.ComponentProps<"nav">) => ( +