diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx index 34a342619..36078309d 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam/route.tsx @@ -9,7 +9,7 @@ import { StopCircleIcon, } from "@heroicons/react/20/solid"; import type { Location } from "@remix-run/react"; -import { useLocation, useParams } from "@remix-run/react"; +import { useParams } from "@remix-run/react"; import { LoaderFunctionArgs } from "@remix-run/server-runtime"; import { Virtualizer } from "@tanstack/react-virtual"; import { @@ -64,7 +64,7 @@ import { useOrganization } from "~/hooks/useOrganizations"; import { useProject } from "~/hooks/useProject"; import { useReplaceLocation } from "~/hooks/useReplaceLocation"; import { Shortcut, useShortcutKeys } from "~/hooks/useShortcutKeys"; -import { Trace, TraceEvent, useTrace } from "~/hooks/useTrace"; +import { TraceEvent, useTrace } from "~/hooks/useTrace"; import { useUser } from "~/hooks/useUser"; import { RunPresenter } from "~/presenters/v3/RunPresenter.server"; import { getResizableSnapshot } from "~/services/resizablePanel.server"; @@ -80,7 +80,6 @@ import { } from "~/utils/pathBuilder"; import { useCurrentPlan } from "../_app.orgs.$organizationSlug/route"; import { SpanView } from "../resources.orgs.$organizationSlug.projects.v3.$projectParam.runs.$runParam.spans.$spanParam/route"; -import { useOptimisticLocation } from "~/hooks/useOptimisticLocation"; const resizableSettings = { parent: { @@ -146,12 +145,7 @@ function getSpanId(location: Location): string | undefined { export default function Page() { const { run, resizable } = useTypedLoaderData(); - const appOrigin = useAppOrigin(); - const { isUpToDate, trace } = useTrace({ - origin: appOrigin, - traceId: run.traceId, - spanId: run.spanId, - }); + const user = useUser(); const organization = useOrganization(); const project = useProject(); @@ -159,17 +153,14 @@ export default function Page() { const { location, replaceSearchParam } = useReplaceLocation(); const selectedSpanId = getSpanId(location); + const inspectorSpanId = selectedSpanId + ? selectedSpanId + : run.logsDeletedAt + ? run.spanId + : undefined; + const usernameForEnv = user.id !== run.environment.userId ? run.environment.userName : undefined; - const initialLoad = !isUpToDate && !trace; - - let inspectorSpanId = selectedSpanId; - if (!inspectorSpanId) { - if (initialLoad || !trace) { - inspectorSpanId = run.spanId; - } - } - return ( <> @@ -262,20 +253,13 @@ export default function Page() { min={resizableSettings.parent.main.min} > }> - {() => - initialLoad ? ( - - ) : trace ? ( - - ) : ( - - ) - } + {() => ( + + )} @@ -289,7 +273,7 @@ export default function Page() { replaceSearchParam("span") : undefined} + closePanel={!run.logsDeletedAt ? () => replaceSearchParam("span") : undefined} /> ) : null} @@ -300,20 +284,45 @@ export default function Page() { ); } +function View({ resizable, run }: LoaderData) {} + type TraceData = { run: LoaderData["run"]; - trace: Trace; selectedSpanId: string | undefined; replaceSearchParam: (key: string, value?: string) => void; }; -function TraceView({ run, trace, selectedSpanId, replaceSearchParam }: TraceData) { - const { events, parentRunFriendlyId, duration, rootSpanStatus, rootStartedAt } = trace; +function TraceView({ run, selectedSpanId, replaceSearchParam }: TraceData) { + const appOrigin = useAppOrigin(); + const { isUpToDate, trace } = useTrace({ + origin: appOrigin, + traceId: run.traceId, + spanId: run.spanId, + }); const changeToSpan = useDebounce((selectedSpan: string) => { replaceSearchParam("span", selectedSpan); }, 250); + if (!isUpToDate) { + return ; + } + + if (!trace) { + return ; + } + + const initialLoad = !isUpToDate && !trace; + + let inspectorSpanId = selectedSpanId; + if (!inspectorSpanId) { + if (initialLoad || !trace) { + inspectorSpanId = run.spanId; + } + } + + const { events, parentRunFriendlyId, duration, rootSpanStatus, rootStartedAt } = trace; + return (
- + Loading logs