From 6b546b84fc22bb62b5ce125ae61fdd72eca220c5 Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Fri, 7 Feb 2025 13:42:56 +0000 Subject: [PATCH] Remove v2 event list --- .../app/components/navigation/SideMenu.tsx | 8 - .../presenters/EventListPresenter.server.ts | 169 ------------------ .../route.tsx | 13 +- .../route.tsx | 87 --------- apps/webapp/app/utils/pathBuilder.ts | 2 +- 5 files changed, 2 insertions(+), 277 deletions(-) delete mode 100644 apps/webapp/app/presenters/EventListPresenter.server.ts delete mode 100644 apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.events._index/route.tsx diff --git a/apps/webapp/app/components/navigation/SideMenu.tsx b/apps/webapp/app/components/navigation/SideMenu.tsx index 2c3c5228f5..e028342868 100644 --- a/apps/webapp/app/components/navigation/SideMenu.tsx +++ b/apps/webapp/app/components/navigation/SideMenu.tsx @@ -6,7 +6,6 @@ import { ChartBarIcon, ClockIcon, CreditCardIcon, - CursorArrowRaysIcon, IdentificationIcon, KeyIcon, RectangleStackIcon, @@ -38,7 +37,6 @@ import { organizationTeamPath, personalAccessTokensPath, projectEnvironmentsPath, - projectEventsPath, projectHttpEndpointsPath, projectPath, projectRunsPath, @@ -451,12 +449,6 @@ function V2ProjectSideMenu({ to={projectTriggersPath(organization, project)} data-action="triggers" /> - >; - -export class EventListPresenter { - #prismaClient: PrismaClient; - - constructor(prismaClient: PrismaClient = prisma) { - this.#prismaClient = prismaClient; - } - - public async call({ - userId, - organizationSlug, - projectSlug, - filterEnvironment, - direction = "forward", - cursor, - pageSize = DEFAULT_PAGE_SIZE, - from, - to, - }: EventListOptions) { - const directionMultiplier = direction === "forward" ? 1 : -1; - - // Find the organization that the user is a member of - const organization = await this.#prismaClient.organization.findFirstOrThrow({ - select: { - id: true, - }, - where: { - slug: organizationSlug, - members: { some: { userId } }, - }, - }); - - const project = await this.#prismaClient.project.findFirstOrThrow({ - select: { - id: true, - }, - where: { - slug: projectSlug, - organizationId: organization.id, - }, - }); - - const events = await this.#prismaClient.eventRecord.findMany({ - select: { - id: true, - name: true, - deliverAt: true, - deliveredAt: true, - isTest: true, - createdAt: true, - cancelledAt: true, - environment: { - select: { - type: true, - slug: true, - orgMember: { - select: { - user: { - select: { - id: true, - name: true, - displayName: true, - }, - }, - }, - }, - }, - }, - runs: { - select: { - id: true, - }, - }, - }, - where: { - internal: false, - name: { - notIn: ["trigger.scheduled", "dev.trigger.scheduled"], - }, - projectId: project.id, - organizationId: organization.id, - environment: filterEnvironment ? { type: filterEnvironment } : undefined, - createdAt: { - gte: from ? new Date(from).toISOString() : undefined, - lte: to ? new Date(to).toISOString() : undefined, - }, - }, - orderBy: [{ id: "desc" }], - //take an extra record to tell if there are more - take: directionMultiplier * (pageSize + 1), - //skip the cursor if there is one - skip: cursor ? 1 : 0, - cursor: cursor - ? { - id: cursor, - } - : undefined, - }); - - const hasMore = events.length > pageSize; - - //get cursors for next and previous pages - let next: string | undefined; - let previous: string | undefined; - switch (direction) { - case "forward": - previous = cursor ? events.at(0)?.id : undefined; - if (hasMore) { - next = events[pageSize - 1]?.id; - } - break; - case "backward": - if (hasMore) { - previous = events[1]?.id; - next = events[pageSize]?.id; - } else { - next = events[pageSize - 1]?.id; - } - break; - } - - const eventsToReturn = - direction === "backward" && hasMore - ? events.slice(1, pageSize + 1) - : events.slice(0, pageSize); - - return { - events: eventsToReturn.map((event) => ({ - id: event.id, - name: event.name, - deliverAt: event.deliverAt, - deliveredAt: event.deliveredAt, - createdAt: event.createdAt, - cancelledAt: event.cancelledAt, - isTest: event.isTest, - environment: { - type: event.environment.type, - slug: event.environment.slug, - userId: event.environment.orgMember?.user.id, - userName: getUsername(event.environment.orgMember?.user), - }, - runs: event.runs.length, - })), - pagination: { - next, - previous, - }, - }; - } -} diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.events.$eventParam/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.events.$eventParam/route.tsx index 0e5101f7d6..b488ae4315 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.events.$eventParam/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.events.$eventParam/route.tsx @@ -3,7 +3,6 @@ import { LoaderFunctionArgs } from "@remix-run/server-runtime"; import { typedjson, useTypedLoaderData } from "remix-typedjson"; import { EventDetail } from "~/components/event/EventDetail"; import { PageBody, PageContainer } from "~/components/layout/AppLayout"; -import { NavBar, PageTitle } from "~/components/primitives/PageHeader"; import { RunsFilters } from "~/components/runs/RunFilters"; import { RunListSearchSchema } from "~/components/runs/RunStatuses"; import { RunsTable } from "~/components/runs/RunsTable"; @@ -13,7 +12,7 @@ import { useUser } from "~/hooks/useUser"; import { EventPresenter } from "~/presenters/EventPresenter.server"; import { RunListPresenter } from "~/presenters/RunListPresenter.server"; import { requireUserId } from "~/services/session.server"; -import { EventParamSchema, projectEventsPath, projectPath } from "~/utils/pathBuilder"; +import { EventParamSchema, projectPath } from "~/utils/pathBuilder"; import { ListPagination } from "../../components/ListPagination"; export const loader = async ({ request, params }: LoaderFunctionArgs) => { @@ -69,16 +68,6 @@ export default function Page() { return ( - - - -
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.events._index/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.events._index/route.tsx deleted file mode 100644 index 53d7155b34..0000000000 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.events._index/route.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import { useNavigation } from "@remix-run/react"; -import { LoaderFunctionArgs } from "@remix-run/server-runtime"; -import { typedjson, useTypedLoaderData } from "remix-typedjson"; -import { EventListSearchSchema } from "~/components/events/EventStatuses"; -import { EventsFilters } from "~/components/events/EventsFilters"; -import { EventsTable } from "~/components/events/EventsTable"; -import { PageBody, PageContainer } from "~/components/layout/AppLayout"; -import { LinkButton } from "~/components/primitives/Buttons"; -import { NavBar, PageAccessories, PageTitle } from "~/components/primitives/PageHeader"; -import { useOrganization } from "~/hooks/useOrganizations"; -import { useProject } from "~/hooks/useProject"; -import { useUser } from "~/hooks/useUser"; -import { EventListPresenter } from "~/presenters/EventListPresenter.server"; -import { requireUserId } from "~/services/session.server"; -import { ProjectParamSchema, docsPath, projectPath } from "~/utils/pathBuilder"; -import { ListPagination } from "../../components/ListPagination"; -import { BookOpenIcon } from "@heroicons/react/20/solid"; - -export const loader = async ({ request, params }: LoaderFunctionArgs) => { - const userId = await requireUserId(request); - const { projectParam, organizationSlug } = ProjectParamSchema.parse(params); - - const url = new URL(request.url); - const s = Object.fromEntries(url.searchParams.entries()); - const searchParams = EventListSearchSchema.parse(s); - - const presenter = new EventListPresenter(); - const list = await presenter.call({ - userId, - filterEnvironment: searchParams.environment, - projectSlug: projectParam, - organizationSlug, - direction: searchParams.direction, - cursor: searchParams.cursor, - from: searchParams.from, - to: searchParams.to, - pageSize: 25, - }); - - return typedjson({ - list, - }); -}; - -export default function Page() { - const { list } = useTypedLoaderData(); - const navigation = useNavigation(); - const isLoading = navigation.state !== "idle"; - const organization = useOrganization(); - const project = useProject(); - const user = useUser(); - - return ( - - - - - - Event documentation - - - - - -
-
- - -
- - -
-
-
- ); -} diff --git a/apps/webapp/app/utils/pathBuilder.ts b/apps/webapp/app/utils/pathBuilder.ts index cdc213bfcf..aa5a9915b3 100644 --- a/apps/webapp/app/utils/pathBuilder.ts +++ b/apps/webapp/app/utils/pathBuilder.ts @@ -252,7 +252,7 @@ export function projectTriggersPath(organization: OrgForPath, project: ProjectFo return `${projectPath(organization, project)}/triggers`; } -export function projectEventsPath(organization: OrgForPath, project: ProjectForPath) { +function projectEventsPath(organization: OrgForPath, project: ProjectForPath) { return `${projectPath(organization, project)}/events`; }