This is an automated email from the ASF dual-hosted git repository.
bbovenzi pushed a commit to branch v3-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/v3-1-test by this push:
new 883cd40c986 Manually backport fix reset pagination (#61169)
883cd40c986 is described below
commit 883cd40c9869e3416881e4358096c6e397c10e65
Author: Brent Bovenzi <[email protected]>
AuthorDate: Wed Jan 28 12:25:22 2026 -0500
Manually backport fix reset pagination (#61169)
---
.../src/airflow/ui/src/pages/AssetsList/AssetsList.tsx | 11 ++++++-----
.../airflow/ui/src/pages/Connections/Connections.tsx | 11 +++++------
.../ui/src/pages/Dag/Tasks/TaskFilters/TaskFilters.tsx | 6 ++++--
.../src/airflow/ui/src/pages/DagsList/DagsList.tsx | 17 +++++++++++++----
airflow-core/src/airflow/ui/src/pages/Pools/Pools.tsx | 9 +++++----
.../src/airflow/ui/src/pages/Variables/Variables.tsx | 11 +++++------
6 files changed, 38 insertions(+), 27 deletions(-)
diff --git a/airflow-core/src/airflow/ui/src/pages/AssetsList/AssetsList.tsx
b/airflow-core/src/airflow/ui/src/pages/AssetsList/AssetsList.tsx
index f45520c765a..669708397fb 100644
--- a/airflow-core/src/airflow/ui/src/pages/AssetsList/AssetsList.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/AssetsList/AssetsList.tsx
@@ -31,7 +31,7 @@ import { ExpandCollapseButtons } from
"src/components/ExpandCollapseButtons";
import RenderedJsonField from "src/components/RenderedJsonField";
import { SearchBar } from "src/components/SearchBar";
import Time from "src/components/Time";
-import { SearchParamsKeys } from "src/constants/searchParams";
+import { SearchParamsKeys, type SearchParamsKeysType } from
"src/constants/searchParams";
import { CreateAssetEvent } from "src/pages/Asset/CreateAssetEvent";
import { DependencyPopover } from "./DependencyPopover";
@@ -112,13 +112,13 @@ const createColumns = (
},
];
-const NAME_PATTERN_PARAM = SearchParamsKeys.NAME_PATTERN;
+const { NAME_PATTERN, OFFSET }: SearchParamsKeysType = SearchParamsKeys;
export const AssetsList = () => {
const { t: translate } = useTranslation(["assets", "common"]);
const [searchParams, setSearchParams] = useSearchParams();
- const namePattern = searchParams.get(NAME_PATTERN_PARAM) ?? "";
+ const namePattern = searchParams.get(NAME_PATTERN) ?? "";
const { setTableURLState, tableURLState } = useTableURLState();
const { pagination, sorting } = tableURLState;
@@ -142,10 +142,11 @@ export const AssetsList = () => {
sorting,
});
if (value) {
- searchParams.set(NAME_PATTERN_PARAM, value);
+ searchParams.set(NAME_PATTERN, value);
} else {
- searchParams.delete(NAME_PATTERN_PARAM);
+ searchParams.delete(NAME_PATTERN);
}
+ searchParams.delete(OFFSET);
setSearchParams(searchParams);
};
diff --git a/airflow-core/src/airflow/ui/src/pages/Connections/Connections.tsx
b/airflow-core/src/airflow/ui/src/pages/Connections/Connections.tsx
index 2ce24264d89..f6a56708637 100644
--- a/airflow-core/src/airflow/ui/src/pages/Connections/Connections.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Connections/Connections.tsx
@@ -127,10 +127,8 @@ export const Connections = () => {
const { t: translate } = useTranslation(["admin", "common"]);
const { setTableURLState, tableURLState } = useTableURLState();
const [searchParams, setSearchParams] = useSearchParams();
- const { NAME_PATTERN: NAME_PATTERN_PARAM }: SearchParamsKeysType =
SearchParamsKeys;
- const [connectionIdPattern, setConnectionIdPattern] = useState(
- searchParams.get(NAME_PATTERN_PARAM) ?? undefined,
- );
+ const { NAME_PATTERN, OFFSET }: SearchParamsKeysType = SearchParamsKeys;
+ const [connectionIdPattern, setConnectionIdPattern] =
useState(searchParams.get(NAME_PATTERN) ?? undefined);
useConnectionTypeMeta(); // Pre-fetch connection type metadata
const { pagination, sorting } = tableURLState;
@@ -163,14 +161,15 @@ export const Connections = () => {
const handleSearchChange = (value: string) => {
if (value) {
- searchParams.set(NAME_PATTERN_PARAM, value);
+ searchParams.set(NAME_PATTERN, value);
} else {
- searchParams.delete(NAME_PATTERN_PARAM);
+ searchParams.delete(NAME_PATTERN);
}
setTableURLState({
pagination: { ...pagination, pageIndex: 0 },
sorting,
});
+ searchParams.delete(OFFSET);
setSearchParams(searchParams);
setConnectionIdPattern(value);
};
diff --git
a/airflow-core/src/airflow/ui/src/pages/Dag/Tasks/TaskFilters/TaskFilters.tsx
b/airflow-core/src/airflow/ui/src/pages/Dag/Tasks/TaskFilters/TaskFilters.tsx
index 3abd8b9e238..a5cdcd8ad65 100644
---
a/airflow-core/src/airflow/ui/src/pages/Dag/Tasks/TaskFilters/TaskFilters.tsx
+++
b/airflow-core/src/airflow/ui/src/pages/Dag/Tasks/TaskFilters/TaskFilters.tsx
@@ -23,12 +23,13 @@ import { useSearchParams } from "react-router-dom";
import type { TaskCollectionResponse } from "openapi/requests";
import { SearchBar } from "src/components/SearchBar.tsx";
import { ResetButton } from "src/components/ui";
-import { SearchParamsKeys } from "src/constants/searchParams.ts";
+import { SearchParamsKeys, type SearchParamsKeysType } from
"src/constants/searchParams.ts";
import { AttrSelectFilter } from
"src/pages/Dag/Tasks/TaskFilters/AttrSelectFilter.tsx";
import { AttrSelectFilterMulti } from
"src/pages/Dag/Tasks/TaskFilters/AttrSelectFilterMulti.tsx";
export const TaskFilters = ({ tasksData }: { readonly tasksData:
TaskCollectionResponse | undefined }) => {
- const { MAPPED, NAME_PATTERN, OPERATOR, RETRIES, TRIGGER_RULE } =
SearchParamsKeys;
+ const { MAPPED, NAME_PATTERN, OFFSET, OPERATOR, RETRIES, TRIGGER_RULE }:
SearchParamsKeysType =
+ SearchParamsKeys;
const { t: translate } = useTranslation("tasks");
const [searchParams, setSearchParams] = useSearchParams();
const selectedOperators = searchParams.getAll(OPERATOR);
@@ -85,6 +86,7 @@ export const TaskFilters = ({ tasksData }: { readonly
tasksData: TaskCollectionR
} else {
searchParams.delete(NAME_PATTERN);
}
+ searchParams.delete(OFFSET);
setSearchParams(searchParams);
};
diff --git a/airflow-core/src/airflow/ui/src/pages/DagsList/DagsList.tsx
b/airflow-core/src/airflow/ui/src/pages/DagsList/DagsList.tsx
index 748cf5772bb..1855a32d421 100644
--- a/airflow-core/src/airflow/ui/src/pages/DagsList/DagsList.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/DagsList/DagsList.tsx
@@ -45,7 +45,7 @@ import { NeedsReviewBadge } from
"src/components/NeedsReviewBadge";
import { SearchBar } from "src/components/SearchBar";
import { TogglePause } from "src/components/TogglePause";
import TriggerDAGButton from "src/components/TriggerDag/TriggerDAGButton";
-import { SearchParamsKeys } from "src/constants/searchParams";
+import { SearchParamsKeys, type SearchParamsKeysType } from
"src/constants/searchParams";
import { DagsLayout } from "src/layouts/DagsLayout";
import { useConfig } from "src/queries/useConfig";
import { useDags } from "src/queries/useDags";
@@ -181,8 +181,17 @@ const createColumns = (
},
];
-const { FAVORITE, LAST_DAG_RUN_STATE, NAME_PATTERN, NEEDS_REVIEW, OWNERS,
PAUSED, TAGS, TAGS_MATCH_MODE } =
- SearchParamsKeys;
+const {
+ FAVORITE,
+ LAST_DAG_RUN_STATE,
+ NAME_PATTERN,
+ NEEDS_REVIEW,
+ OFFSET,
+ OWNERS,
+ PAUSED,
+ TAGS,
+ TAGS_MATCH_MODE,
+}: SearchParamsKeysType = SearchParamsKeys;
const cardDef: CardDef<DAGWithLatestDagRunsResponse> = {
card: ({ row }) => <DagCard dag={row} />,
@@ -231,7 +240,7 @@ export const DagsList = () => {
} else {
searchParams.delete(NAME_PATTERN);
}
- searchParams.delete("offset");
+ searchParams.delete(OFFSET);
setSearchParams(searchParams);
};
diff --git a/airflow-core/src/airflow/ui/src/pages/Pools/Pools.tsx
b/airflow-core/src/airflow/ui/src/pages/Pools/Pools.tsx
index c72311ca2b4..6643e92f901 100644
--- a/airflow-core/src/airflow/ui/src/pages/Pools/Pools.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Pools/Pools.tsx
@@ -53,8 +53,8 @@ export const Pools = () => {
],
});
const [searchParams, setSearchParams] = useSearchParams();
- const { NAME_PATTERN: NAME_PATTERN_PARAM }: SearchParamsKeysType =
SearchParamsKeys;
- const [poolNamePattern, setPoolNamePattern] =
useState(searchParams.get(NAME_PATTERN_PARAM) ?? undefined);
+ const { NAME_PATTERN, OFFSET }: SearchParamsKeysType = SearchParamsKeys;
+ const [poolNamePattern, setPoolNamePattern] =
useState(searchParams.get(NAME_PATTERN) ?? undefined);
const { setTableURLState, tableURLState } = useTableURLState();
const { pagination, sorting } = tableURLState;
@@ -70,10 +70,11 @@ export const Pools = () => {
const handleSearchChange = (value: string) => {
if (value) {
- searchParams.set(NAME_PATTERN_PARAM, value);
+ searchParams.set(NAME_PATTERN, value);
} else {
- searchParams.delete(NAME_PATTERN_PARAM);
+ searchParams.delete(NAME_PATTERN);
}
+ searchParams.delete(OFFSET);
setSearchParams(searchParams);
setPoolNamePattern(value);
};
diff --git a/airflow-core/src/airflow/ui/src/pages/Variables/Variables.tsx
b/airflow-core/src/airflow/ui/src/pages/Variables/Variables.tsx
index c6457fd50d1..fdea3be2383 100644
--- a/airflow-core/src/airflow/ui/src/pages/Variables/Variables.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Variables/Variables.tsx
@@ -117,10 +117,8 @@ export const Variables = () => {
sorting: [{ desc: false, id: "key" }],
}); // To make multiselection smooth
const [searchParams, setSearchParams] = useSearchParams();
- const { NAME_PATTERN: NAME_PATTERN_PARAM }: SearchParamsKeysType =
SearchParamsKeys;
- const [variableKeyPattern, setVariableKeyPattern] = useState(
- searchParams.get(NAME_PATTERN_PARAM) ?? undefined,
- );
+ const { NAME_PATTERN, OFFSET }: SearchParamsKeysType = SearchParamsKeys;
+ const [variableKeyPattern, setVariableKeyPattern] =
useState(searchParams.get(NAME_PATTERN) ?? undefined);
const [selectedVariables, setSelectedVariables] = useState<Record<string,
string | undefined>>({});
const { pagination, sorting } = tableURLState;
const [sort] = sorting;
@@ -153,14 +151,15 @@ export const Variables = () => {
const handleSearchChange = (value: string) => {
if (value) {
- searchParams.set(NAME_PATTERN_PARAM, value);
+ searchParams.set(NAME_PATTERN, value);
} else {
- searchParams.delete(NAME_PATTERN_PARAM);
+ searchParams.delete(NAME_PATTERN);
}
setTableURLState({
pagination: { ...pagination, pageIndex: 0 },
sorting,
});
+ searchParams.delete(OFFSET);
setSearchParams(searchParams);
setVariableKeyPattern(value);
};