From b3874b4b61c8575c6e3dc743c1b3bff8481bc677 Mon Sep 17 00:00:00 2001 From: Oskar Otwinowski Date: Fri, 12 Dec 2025 11:08:12 +0000 Subject: [PATCH 1/2] fix(ui): respect rootOnlyDefault, disable adjacent run navigation in inspector views - Add disableAdjacentRows prop to TaskRunsTable component to control table state encoding - Pass rootOnlyDefault prop from loader to TaskRunsTable for proper state management - Disable adjacent run navigation in schedule, waitpoint, and other inspector views - Preserve adjacent run navigation on main runs list page with rootOnly filter support --- apps/webapp/app/components/runs/v3/TaskRunsTable.tsx | 10 +++++++++- .../route.tsx | 1 + .../route.tsx | 1 + .../route.tsx | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/webapp/app/components/runs/v3/TaskRunsTable.tsx b/apps/webapp/app/components/runs/v3/TaskRunsTable.tsx index c0ae8d2f62..0a709acdb7 100644 --- a/apps/webapp/app/components/runs/v3/TaskRunsTable.tsx +++ b/apps/webapp/app/components/runs/v3/TaskRunsTable.tsx @@ -56,6 +56,7 @@ import { TaskRunStatusCombo, } from "./TaskRunStatus"; import { useOptimisticLocation } from "~/hooks/useOptimisticLocation"; +import { useSearchParams } from "~/hooks/useSearchParam"; type RunsTableProps = { total: number; @@ -63,9 +64,11 @@ type RunsTableProps = { filters: NextRunListAppliedFilters; showJob?: boolean; runs: NextRunListItem[]; + rootOnlyDefault?: boolean; isLoading?: boolean; allowSelection?: boolean; variant?: TableVariant; + disableAdjacentRows?: boolean; }; export function TaskRunsTable({ @@ -73,6 +76,8 @@ export function TaskRunsTable({ hasFilters, filters, runs, + rootOnlyDefault, + disableAdjacentRows = false, isLoading = false, allowSelection = false, variant = "dimmed", @@ -82,8 +87,11 @@ export function TaskRunsTable({ const checkboxes = useRef<(HTMLInputElement | null)[]>([]); const { has, hasAll, select, deselect, toggle } = useSelectedItems(allowSelection); const { isManagedCloud } = useFeatures(); + const { value } = useSearchParams(); const location = useOptimisticLocation(); - const tableStateParam = encodeURIComponent(location.search ? `${location.search}&rt=1` : "rt=1"); + const rootOnly = value("rootOnly") ? `` : `rootOnly=${rootOnlyDefault}`; + const search = rootOnly ? `${rootOnly}&${location.search}` : location.search; + const tableStateParam = disableAdjacentRows ? '' : encodeURIComponent(search); const showCompute = isManagedCloud; diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx index 8f80124707..9f8cf278be 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs._index/route.tsx @@ -298,6 +298,7 @@ function RunsList({ runs={list.runs} isLoading={isLoading} allowSelection + rootOnlyDefault={rootOnlyDefault} /> )} diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules.$scheduleParam/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules.$scheduleParam/route.tsx index a11a2a7f9d..f4e663b1b7 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules.$scheduleParam/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.schedules.$scheduleParam/route.tsx @@ -318,6 +318,7 @@ export default function Page() { runs={schedule.runs} isLoading={false} variant="bright" + disableAdjacentRows />
diff --git a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.waitpoints.tokens.$waitpointParam/route.tsx b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.waitpoints.tokens.$waitpointParam/route.tsx index 263baed23d..48b842d34d 100644 --- a/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.waitpoints.tokens.$waitpointParam/route.tsx +++ b/apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.waitpoints.tokens.$waitpointParam/route.tsx @@ -126,6 +126,7 @@ export default function Page() { runs={waitpoint.connectedRuns} isLoading={false} variant="bright" + disableAdjacentRows />
From 44e9f88bc35e55638704ef5e45d075aca130bafe Mon Sep 17 00:00:00 2001 From: Oskar Otwinowski Date: Fri, 12 Dec 2025 11:35:16 +0000 Subject: [PATCH 2/2] chore(webapp): Add a comment to stop code rabbit from going rabid --- apps/webapp/app/components/runs/v3/TaskRunsTable.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/webapp/app/components/runs/v3/TaskRunsTable.tsx b/apps/webapp/app/components/runs/v3/TaskRunsTable.tsx index 0a709acdb7..14cdf5a67b 100644 --- a/apps/webapp/app/components/runs/v3/TaskRunsTable.tsx +++ b/apps/webapp/app/components/runs/v3/TaskRunsTable.tsx @@ -91,6 +91,7 @@ export function TaskRunsTable({ const location = useOptimisticLocation(); const rootOnly = value("rootOnly") ? `` : `rootOnly=${rootOnlyDefault}`; const search = rootOnly ? `${rootOnly}&${location.search}` : location.search; + /** TableState has to be encoded as a separate URI component, so it's merged under one, 'tableState' param */ const tableStateParam = disableAdjacentRows ? '' : encodeURIComponent(search); const showCompute = isManagedCloud;