From 44171e98300f81e559c0220e93006ff7fba71a08 Mon Sep 17 00:00:00 2001 From: Eric McDaniel Date: Thu, 23 May 2024 14:41:49 -0400 Subject: [PATCH] Fix query; cleanup --- core/actions/_lib/runActionInstance.ts | 4 -- .../_lib/runActionInstanceServerAction.ts | 26 ---------- core/actions/api/server.ts | 1 - core/actions/api/serverAction.ts | 47 +++++++++++++++++++ core/app/c/[communitySlug]/SideNav.tsx | 21 ++++----- .../activity/actions/ActionRunsTable.tsx | 4 +- .../[communitySlug]/activity/actions/page.tsx | 23 ++++----- .../panel/StagePanelPubsRunActionButton.tsx | 4 +- core/app/components/DataTable.tsx | 32 +++++++------ core/pages/api/v0/[...ts-rest].ts | 2 - packages/ui/src/icon.tsx | 1 + 11 files changed, 86 insertions(+), 79 deletions(-) delete mode 100644 core/actions/_lib/runActionInstanceServerAction.ts create mode 100644 core/actions/api/serverAction.ts diff --git a/core/actions/_lib/runActionInstance.ts b/core/actions/_lib/runActionInstance.ts index c34bb8a7a..c42a14330 100644 --- a/core/actions/_lib/runActionInstance.ts +++ b/core/actions/_lib/runActionInstance.ts @@ -97,8 +97,6 @@ const _runActionInstance = async ( stageId: actionInstance.stageId, }); - revalidateTag(`community-stages_${pub.communityId}`); - return result; } catch (error) { captureException(error); @@ -161,8 +159,6 @@ export async function runActionInstance(args: RunActionInstanceArgs) { }) .execute(); - revalidateTag(`action_runs_${pubResult.value.communityId}`); - return result; } diff --git a/core/actions/_lib/runActionInstanceServerAction.ts b/core/actions/_lib/runActionInstanceServerAction.ts deleted file mode 100644 index 359d86c63..000000000 --- a/core/actions/_lib/runActionInstanceServerAction.ts +++ /dev/null @@ -1,26 +0,0 @@ -"use server"; - -import { UsersId } from "~/kysely/types/public/Users"; -import { getLoginData } from "~/lib/auth/loginData"; -import { - ActionInstanceRunResult, - RunActionInstanceArgs, - runActionInstance as runActionInstanceInner, -} from "./runActionInstance"; - -export const runActionInstanceServerAction = async function runActionInstance( - args: Omit -): Promise { - const user = await getLoginData(); - - if (!user) { - return { - error: "Not logged in", - }; - } - - return runActionInstanceInner({ - ...args, - userId: user.id as UsersId, - }); -}; diff --git a/core/actions/api/server.ts b/core/actions/api/server.ts index 0d6efc049..2cdfd98fc 100644 --- a/core/actions/api/server.ts +++ b/core/actions/api/server.ts @@ -1,2 +1 @@ export { runActionInstance, runInstancesForEvent } from "../_lib/runActionInstance"; -export { runActionInstanceServerAction } from "../_lib/runActionInstanceServerAction"; diff --git a/core/actions/api/serverAction.ts b/core/actions/api/serverAction.ts new file mode 100644 index 000000000..feebdac09 --- /dev/null +++ b/core/actions/api/serverAction.ts @@ -0,0 +1,47 @@ +"use server"; + +import { revalidateTag } from "next/cache"; + +import { db } from "~/kysely/database"; +import { UsersId } from "~/kysely/types/public/Users"; +import { getLoginData } from "~/lib/auth/loginData"; +import { + ActionInstanceRunResult, + RunActionInstanceArgs, + runActionInstance as runActionInstanceInner, +} from "../_lib/runActionInstance"; + +export const runActionInstance = async function runActionInstance( + args: Omit +): Promise { + const user = await getLoginData(); + + if (!user) { + return { + error: "Not logged in", + }; + } + + // 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 result = await runActionInstanceInner({ + ...args, + userId: user.id as UsersId, + }); + + if (pub !== undefined) { + // Because an action can move a pub to a different stage, we need to + // revalidate the community stage cache. + revalidateTag(`community-stages_${pub.communityId}`); + // Revalidate the community action runs cache for the action activity table. + revalidateTag(`community-action-runs_${pub.communityId}`); + } + + return result; +}; diff --git a/core/app/c/[communitySlug]/SideNav.tsx b/core/app/c/[communitySlug]/SideNav.tsx index 85ef1ef9c..6393167b5 100644 --- a/core/app/c/[communitySlug]/SideNav.tsx +++ b/core/app/c/[communitySlug]/SideNav.tsx @@ -1,5 +1,5 @@ import { Button } from "ui/button"; -import { Menu } from "ui/icon"; +import { Activity, Menu } from "ui/icon"; import { Sheet, SheetContent, SheetTrigger } from "ui/sheet"; import type { CommunityData } from "./layout"; @@ -47,18 +47,13 @@ const Links = ({ icon={} /> )} - - {/* } - /> - } - count={8} - /> */} + {isAdmin && ( + } + /> + )} ); }; diff --git a/core/app/c/[communitySlug]/activity/actions/ActionRunsTable.tsx b/core/app/c/[communitySlug]/activity/actions/ActionRunsTable.tsx index d02beb6f6..9a4dc5245 100644 --- a/core/app/c/[communitySlug]/activity/actions/ActionRunsTable.tsx +++ b/core/app/c/[communitySlug]/activity/actions/ActionRunsTable.tsx @@ -7,7 +7,5 @@ import { ActionRun, getActionRunsTableColumns } from "./getActionRunsTableColumn export const ActionRunsTable = ({ actionRuns }: { actionRuns: ActionRun[] }) => { const actionRunsColumns = getActionRunsTableColumns(); - return ( - - ); + return ; }; diff --git a/core/app/c/[communitySlug]/activity/actions/page.tsx b/core/app/c/[communitySlug]/activity/actions/page.tsx index 763fdd0f9..363f507d6 100644 --- a/core/app/c/[communitySlug]/activity/actions/page.tsx +++ b/core/app/c/[communitySlug]/activity/actions/page.tsx @@ -13,14 +13,10 @@ import { ActionRun } from "./getActionRunsTableColumns"; export default async function Page({ params: { communitySlug }, - searchParams, }: { params: { communitySlug: string; }; - searchParams: { - page?: string; - }; }) { const community = await findCommunityBySlug(communitySlug); @@ -37,8 +33,6 @@ export default async function Page({ return null; } - const page = searchParams.page ? parseInt(searchParams.page, 10) : 1; - const limit = 20; const actionRuns = (await unstable_cache( () => db @@ -46,7 +40,7 @@ export default async function Page({ .where("stages.community_id", "=", community.id) .innerJoin("action_instances", "stages.id", "action_instances.stage_id") .innerJoin("action_runs", "action_instances.id", "action_runs.action_instance_id") - .innerJoin("users", "action_runs.user_id", "users.id") + .leftJoin("users", "action_runs.user_id", "users.id") .select((eb) => [ "action_runs.id", "action_runs.config", @@ -81,14 +75,17 @@ export default async function Page({ ).as("user"), ]) .orderBy("action_runs.created_at", "desc") - .limit(limit) - .offset(page * limit - limit) .execute(), [community.id], - { tags: [`action_runs_${community.id}`] } + { tags: [`community-action-runs_${community.id}`] } )()) as ActionRun[]; - logger.info("Action runs", actionRuns); - - return ; + return ( + <> +
+

Action Activity

+
+ + + ); } diff --git a/core/app/c/[communitySlug]/stages/manage/components/panel/StagePanelPubsRunActionButton.tsx b/core/app/c/[communitySlug]/stages/manage/components/panel/StagePanelPubsRunActionButton.tsx index 5fade1191..ea737773d 100644 --- a/core/app/c/[communitySlug]/stages/manage/components/panel/StagePanelPubsRunActionButton.tsx +++ b/core/app/c/[communitySlug]/stages/manage/components/panel/StagePanelPubsRunActionButton.tsx @@ -14,7 +14,7 @@ import { toast } from "ui/use-toast"; import type { ActionInstances, ActionInstancesId } from "~/kysely/types/public/ActionInstances"; import type { PubsId } from "~/kysely/types/public/Pubs"; import { getActionByName } from "~/actions/api"; -import { runActionInstanceServerAction } from "~/actions/api/server"; +import { runActionInstance } from "~/actions/api/serverAction"; import { useServerAction } from "~/lib/serverActions"; export const StagePanelPubsRunActionButton = ({ @@ -24,7 +24,7 @@ export const StagePanelPubsRunActionButton = ({ actionInstance: ActionInstances; pub: Pub; }) => { - const runAction = useServerAction(runActionInstanceServerAction); + const runAction = useServerAction(runActionInstance); const [isPending, startTransition] = useTransition(); diff --git a/core/app/components/DataTable.tsx b/core/app/components/DataTable.tsx index 4d610d6d5..0a1923147 100644 --- a/core/app/components/DataTable.tsx +++ b/core/app/components/DataTable.tsx @@ -20,7 +20,7 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "u interface DataTableProps { columns: ColumnDef[]; data: TData[]; - searchBy: string; + searchBy?: string; } export function DataTable({ @@ -51,20 +51,22 @@ export function DataTable({ return (
-
- - - table.getColumn(`${searchBy}`)?.setFilterValue(event.target.value) - } - className="max-w-sm" - /> -
+ {searchBy && ( +
+ + + table.getColumn(`${searchBy}`)?.setFilterValue(event.target.value) + } + className="max-w-sm" + /> +
+ )}
diff --git a/core/pages/api/v0/[...ts-rest].ts b/core/pages/api/v0/[...ts-rest].ts index 24c6472f5..7ea379277 100644 --- a/core/pages/api/v0/[...ts-rest].ts +++ b/core/pages/api/v0/[...ts-rest].ts @@ -11,7 +11,6 @@ import { compareAPIKeys, getBearerToken } from "~/lib/auth/api"; import { env } from "~/lib/env/env.mjs"; import { _getPubType, - BadRequestError, createPub, deletePub, generateSignedAssetUploadUrl, @@ -19,7 +18,6 @@ import { getIntegrationInstanceState, getMembers, getPub, - getPubType, getSuggestedMembers, setIntegrationInstanceConfig, setIntegrationInstanceState, diff --git a/packages/ui/src/icon.tsx b/packages/ui/src/icon.tsx index f7ed43cca..df845f7cc 100644 --- a/packages/ui/src/icon.tsx +++ b/packages/ui/src/icon.tsx @@ -1,4 +1,5 @@ export { + Activity, Calendar, BadgeCheck, Check,