From a734d3a31a381031170db416d98cab6ce8910c7a Mon Sep 17 00:00:00 2001 From: Eric McDaniel Date: Wed, 29 May 2024 12:26:59 -0400 Subject: [PATCH] show action result on status hover --- core/actions/_lib/runActionInstance.ts | 1 + core/actions/api/serverAction.ts | 24 ++++++++++++------- core/app/c/[communitySlug]/SideNav.tsx | 2 +- .../actions/getActionRunsTableColumns.tsx | 24 +++++++++++++++---- .../[communitySlug]/activity/actions/page.tsx | 1 + core/kysely/types/public/ActionRuns.ts | 2 ++ core/kysely/types/public/PublicSchema.ts | 4 ++-- .../migration.sql | 8 +++++++ core/prisma/schema.prisma | 1 + 9 files changed, 52 insertions(+), 15 deletions(-) create mode 100644 core/prisma/migrations/20240529160343_record_action_rsult/migration.sql diff --git a/core/actions/_lib/runActionInstance.ts b/core/actions/_lib/runActionInstance.ts index c42a14330..ed56dc38f 100644 --- a/core/actions/_lib/runActionInstance.ts +++ b/core/actions/_lib/runActionInstance.ts @@ -153,6 +153,7 @@ export async function runActionInstance(args: RunActionInstanceArgs) { pub_id: args.pubId, user_id: "userId" in args ? args.userId : null, status: "error" in result ? ActionRunStatus.failure : ActionRunStatus.success, + result, config: actionInstanceResult.value.config, params: args, event: "userId" in args ? undefined : args.event, diff --git a/core/actions/api/serverAction.ts b/core/actions/api/serverAction.ts index feebdac09..8f36349e4 100644 --- a/core/actions/api/serverAction.ts +++ b/core/actions/api/serverAction.ts @@ -1,17 +1,18 @@ "use server"; -import { revalidateTag } from "next/cache"; +import { revalidateTag, unstable_cache } from "next/cache"; import { db } from "~/kysely/database"; import { UsersId } from "~/kysely/types/public/Users"; import { getLoginData } from "~/lib/auth/loginData"; +import { defineServerAction } from "~/lib/server/defineServerAction"; import { ActionInstanceRunResult, RunActionInstanceArgs, runActionInstance as runActionInstanceInner, } from "../_lib/runActionInstance"; -export const runActionInstance = async function runActionInstance( +export const runActionInstance = defineServerAction(async function runActionInstance( args: Omit ): Promise { const user = await getLoginData(); @@ -24,11 +25,18 @@ export const runActionInstance = async function runActionInstance( // Retrieve the pub's community id in order to revalidate the next server // cache after the action is run. - const pub = await db - .selectFrom("pubs") - .select(["community_id as communityId"]) - .where("id", "=", args.pubId) - .executeTakeFirst(); + const pub = await unstable_cache( + async () => + db + .selectFrom("pubs") + .select(["community_id as communityId"]) + .where("id", "=", args.pubId) + .executeTakeFirst(), + [args.pubId], + { + revalidate: 60 * 60 * 24 * 7, + } + )(); const result = await runActionInstanceInner({ ...args, @@ -44,4 +52,4 @@ export const runActionInstance = async function runActionInstance( } return result; -}; +}); diff --git a/core/app/c/[communitySlug]/SideNav.tsx b/core/app/c/[communitySlug]/SideNav.tsx index 6393167b5..ecd092958 100644 --- a/core/app/c/[communitySlug]/SideNav.tsx +++ b/core/app/c/[communitySlug]/SideNav.tsx @@ -51,7 +51,7 @@ const Links = ({ } + icon={} /> )} diff --git a/core/app/c/[communitySlug]/activity/actions/getActionRunsTableColumns.tsx b/core/app/c/[communitySlug]/activity/actions/getActionRunsTableColumns.tsx index 661041cd0..64896f602 100644 --- a/core/app/c/[communitySlug]/activity/actions/getActionRunsTableColumns.tsx +++ b/core/app/c/[communitySlug]/activity/actions/getActionRunsTableColumns.tsx @@ -6,6 +6,7 @@ import { Event } from "@prisma/client"; import { Badge } from "ui/badge"; import { DataTableColumnHeader } from "ui/data-table"; +import { HoverCard, HoverCardContent, HoverCardTrigger } from "ui/hover-card"; import { PubTitle } from "~/app/components/PubTitle"; @@ -19,6 +20,7 @@ export type ActionRun = { values: { field: { slug: string }; value: unknown }[] | Record; createdAt: Date; } | null; + result: unknown; } & ( | { event: Event; @@ -83,15 +85,29 @@ export const getActionRunsTableColumns = () => { header: ({ column }) => , accessorKey: "status", - cell: ({ getValue }) => { + cell: ({ row, getValue }) => { + let badge: React.ReactNode; switch (getValue()) { case "success": - return success; + badge = success; + break; case "failure": - return failure; + badge = failure; + break; default: - return unknown; + badge = unknown; + break; } + return ( + + {badge} + +
+								{JSON.stringify(row.original.result, null, 2)}
+							
+
+
+ ); }, }, ] as const satisfies ColumnDef[]; diff --git a/core/app/c/[communitySlug]/activity/actions/page.tsx b/core/app/c/[communitySlug]/activity/actions/page.tsx index 363f507d6..0cbb533f0 100644 --- a/core/app/c/[communitySlug]/activity/actions/page.tsx +++ b/core/app/c/[communitySlug]/activity/actions/page.tsx @@ -47,6 +47,7 @@ export default async function Page({ "action_runs.event", "action_runs.params", "action_runs.status", + "action_runs.result", "action_runs.created_at as createdAt", jsonObjectFrom( eb diff --git a/core/kysely/types/public/ActionRuns.ts b/core/kysely/types/public/ActionRuns.ts index 99698a6c1..0e8e09474 100644 --- a/core/kysely/types/public/ActionRuns.ts +++ b/core/kysely/types/public/ActionRuns.ts @@ -37,6 +37,8 @@ export default interface ActionRunsTable { created_at: ColumnType; updated_at: ColumnType; + + result: ColumnType; } export type ActionRuns = Selectable; diff --git a/core/kysely/types/public/PublicSchema.ts b/core/kysely/types/public/PublicSchema.ts index 27c5d082c..ab99ae32c 100644 --- a/core/kysely/types/public/PublicSchema.ts +++ b/core/kysely/types/public/PublicSchema.ts @@ -31,6 +31,8 @@ import { type default as StagesTable } from "./Stages"; import { type default as UsersTable } from "./Users"; export default interface PublicSchema { + action_runs: ActionRunsTable; + _prisma_migrations: PrismaMigrationsTable; users: UsersTable; @@ -84,6 +86,4 @@ export default interface PublicSchema { PubsInStages: PubsInStagesTable; rules: RulesTable; - - action_runs: ActionRunsTable; } diff --git a/core/prisma/migrations/20240529160343_record_action_rsult/migration.sql b/core/prisma/migrations/20240529160343_record_action_rsult/migration.sql new file mode 100644 index 000000000..7cf7daa6a --- /dev/null +++ b/core/prisma/migrations/20240529160343_record_action_rsult/migration.sql @@ -0,0 +1,8 @@ +/* + Warnings: + + - Added the required column `result` to the `action_runs` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE "action_runs" ADD COLUMN "result" JSONB NOT NULL; diff --git a/core/prisma/schema.prisma b/core/prisma/schema.prisma index 569ad8edf..05fe69666 100644 --- a/core/prisma/schema.prisma +++ b/core/prisma/schema.prisma @@ -363,6 +363,7 @@ model ActionRun { event Event? params Json? status ActionRunStatus + result Json user User? @relation(fields: [userId], references: [id]) userId String? @map(name: "user_id") createdAt DateTime @default(now()) @map(name: "created_at")