Skip to content

Commit d797cc0

Browse files
committed
Adds a combo-button for viewing/downloading logs
1 parent 9b431a0 commit d797cc0

File tree

1 file changed

+44
-20
lines changed
  • apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam.spans.$spanParam

1 file changed

+44
-20
lines changed

apps/webapp/app/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam.spans.$spanParam/route.tsx

Lines changed: 44 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import {
22
ArrowPathIcon,
3+
ArrowRightIcon,
34
BookOpenIcon,
45
CheckIcon,
6+
ChevronUpIcon,
57
ClockIcon,
68
CloudArrowDownIcon,
79
EnvelopeIcon,
@@ -30,9 +32,14 @@ import { CopyableText } from "~/components/primitives/CopyableText";
3032
import { DateTime, DateTimeAccurate } from "~/components/primitives/DateTime";
3133
import { Header2, Header3 } from "~/components/primitives/Headers";
3234
import { Paragraph } from "~/components/primitives/Paragraph";
35+
import {
36+
Popover,
37+
PopoverContent,
38+
PopoverMenuItem,
39+
PopoverTrigger,
40+
} from "~/components/primitives/Popover";
3341
import * as Property from "~/components/primitives/PropertyTable";
3442
import { Spinner } from "~/components/primitives/Spinner";
35-
import { toast } from "sonner";
3643
import {
3744
Table,
3845
TableBody,
@@ -44,7 +51,6 @@ import {
4451
import { TabButton, TabContainer } from "~/components/primitives/Tabs";
4552
import { TextLink } from "~/components/primitives/TextLink";
4653
import { InfoIconTooltip, SimpleTooltip } from "~/components/primitives/Tooltip";
47-
import { ToastUI } from "~/components/primitives/Toast";
4854
import { RunTimeline, RunTimelineEvent, SpanTimeline } from "~/components/run/RunTimeline";
4955
import { PacketDisplay } from "~/components/runs/v3/PacketDisplay";
5056
import { RunIcon } from "~/components/runs/v3/RunIcon";
@@ -67,6 +73,7 @@ import { useHasAdminAccess } from "~/hooks/useUser";
6773
import { redirectWithErrorMessage } from "~/models/message.server";
6874
import { type Span, SpanPresenter, type SpanRun } from "~/presenters/v3/SpanPresenter.server";
6975
import { logger } from "~/services/logger.server";
76+
import { requireUserId } from "~/services/session.server";
7077
import { cn } from "~/utils/cn";
7178
import { formatCurrencyAccurate } from "~/utils/numberFormatter";
7279
import {
@@ -84,11 +91,10 @@ import {
8491
v3SpanParamsSchema,
8592
} from "~/utils/pathBuilder";
8693
import { createTimelineSpanEventsFromSpanEvents } from "~/utils/timelineSpanEvents";
87-
import { CompleteWaitpointForm } from "../resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.waitpoints.$waitpointFriendlyId.complete/route";
88-
import { requireUserId } from "~/services/session.server";
8994
import type { SpanOverride } from "~/v3/eventRepository/eventRepository.types";
95+
import { type action as resetIdempotencyKeyAction } from "../resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam.idempotencyKey.reset";
9096
import { RealtimeStreamViewer } from "../resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam.streams.$streamKey/route";
91-
import { action as resetIdempotencyKeyAction } from "../resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam.idempotencyKey.reset";
97+
import { CompleteWaitpointForm } from "../resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.waitpoints.$waitpointFriendlyId.complete/route";
9298

9399
export const loader = async ({ request, params }: LoaderFunctionArgs) => {
94100
const userId = await requireUserId(request);
@@ -312,7 +318,7 @@ function RunBody({
312318
const resetFetcher = useTypedFetcher<typeof resetIdempotencyKeyAction>();
313319

314320
return (
315-
<div className="grid h-full max-h-full grid-rows-[2.5rem_2rem_1fr_3.25rem] overflow-hidden bg-background-bright">
321+
<div className="grid h-full max-h-full grid-rows-[2.5rem_2rem_1fr_minmax(3.25rem,auto)] overflow-hidden bg-background-bright">
316322
<div className="flex items-center justify-between gap-2 overflow-x-hidden px-3 pr-2">
317323
<div className="flex items-center gap-1 overflow-x-hidden">
318324
<RunIcon
@@ -962,7 +968,7 @@ function RunBody({
962968
)}
963969
</div>
964970
</div>
965-
<div className="flex items-center justify-between gap-2 border-t border-grid-dimmed px-2">
971+
<div className="flex items-center flex-wrap py-2 justify-between gap-2 border-t border-grid-dimmed px-2">
966972
<div className="flex items-center gap-4">
967973
{run.friendlyId !== runParam && (
968974
<LinkButton
@@ -982,28 +988,46 @@ function RunBody({
982988
)}
983989
<AdminDebugRun friendlyId={run.friendlyId} />
984990
</div>
985-
<div className="flex items-center gap-4">
991+
<div className="flex items-center">
986992
{run.logsDeletedAt === null ? (
987-
<>
993+
<div className="flex">
988994
<LinkButton
989995
to={`${v3LogsPath(organization, project, environment)}?runId=${runParam}&from=${
990996
new Date(run.createdAt).getTime() - 60000
991997
}`}
992998
variant="secondary/medium"
999+
className="rounded-r-none border-r-0"
9931000
>
9941001
View logs
9951002
</LinkButton>
996-
<LinkButton
997-
to={v3RunDownloadLogsPath({ friendlyId: runParam })}
998-
LeadingIcon={CloudArrowDownIcon}
999-
leadingIconClassName="text-indigo-400"
1000-
variant="secondary/medium"
1001-
target="_blank"
1002-
download
1003-
>
1004-
Download logs
1005-
</LinkButton>
1006-
</>
1003+
<Popover>
1004+
<PopoverTrigger asChild>
1005+
<Button
1006+
variant="secondary/medium"
1007+
className="rounded-l-none border-l-charcoal-700 px-1.5"
1008+
>
1009+
<ChevronUpIcon className="size-4 transition group-hover/button:text-text-bright" />
1010+
</Button>
1011+
</PopoverTrigger>
1012+
<PopoverContent className="min-w-[140px] p-1" align="end">
1013+
<PopoverMenuItem
1014+
to={`${v3LogsPath(organization, project, environment)}?runId=${runParam}&from=${
1015+
new Date(run.createdAt).getTime() - 60000
1016+
}`}
1017+
title="View logs"
1018+
icon={ArrowRightIcon}
1019+
leadingIconClassName="text-blue-500"
1020+
/>
1021+
<PopoverMenuItem
1022+
to={v3RunDownloadLogsPath({ friendlyId: runParam })}
1023+
title="Download logs"
1024+
icon={CloudArrowDownIcon}
1025+
leadingIconClassName="text-indigo-500"
1026+
openInNewTab
1027+
/>
1028+
</PopoverContent>
1029+
</Popover>
1030+
</div>
10071031
) : null}
10081032
</div>
10091033
</div>

0 commit comments

Comments
 (0)