This is an automated email from the ASF dual-hosted git repository.
guanmingchiu 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 141b0a015e0 [v3-1-test] 56058: Removing refresh state consumption for
Dag header (#58389) (#58692)
141b0a015e0 is described below
commit 141b0a015e052c7d3609fadaac298977d816fd27
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Mon Dec 1 14:44:46 2025 +0800
[v3-1-test] 56058: Removing refresh state consumption for Dag header
(#58389) (#58692)
* 56058: Removing refresh state consumption for Dag header
* Updated formatting
* 56058: Removed spinner from all headers
---------
(cherry picked from commit c7a9f79d8f403f905f39bb77950f7811220ca8e9)
Co-authored-by: Vivek Nanda <[email protected]>
Co-authored-by: Vivek Nanda <[email protected]>
---
airflow-core/src/airflow/ui/src/components/HeaderCard.tsx | 6 ++----
airflow-core/src/airflow/ui/src/pages/Asset/Header.tsx | 10 ++--------
airflow-core/src/airflow/ui/src/pages/Dag/Dag.tsx | 8 +-------
airflow-core/src/airflow/ui/src/pages/Dag/Header.tsx | 3 ---
.../ui/src/pages/GroupTaskInstance/GroupTaskInstance.tsx | 10 +---------
.../src/airflow/ui/src/pages/GroupTaskInstance/Header.tsx | 9 +--------
.../src/airflow/ui/src/pages/MappedTaskInstance/Header.tsx | 9 +--------
.../ui/src/pages/MappedTaskInstance/MappedTaskInstance.tsx | 9 +--------
airflow-core/src/airflow/ui/src/pages/Run/Header.tsx | 9 +--------
airflow-core/src/airflow/ui/src/pages/Run/Run.tsx | 7 +------
airflow-core/src/airflow/ui/src/pages/TaskInstance/Header.tsx | 9 +--------
.../src/airflow/ui/src/pages/TaskInstance/TaskInstance.tsx | 5 +----
12 files changed, 13 insertions(+), 81 deletions(-)
diff --git a/airflow-core/src/airflow/ui/src/components/HeaderCard.tsx
b/airflow-core/src/airflow/ui/src/components/HeaderCard.tsx
index 964b860e598..1899e1f8564 100644
--- a/airflow-core/src/airflow/ui/src/components/HeaderCard.tsx
+++ b/airflow-core/src/airflow/ui/src/components/HeaderCard.tsx
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { Box, Flex, GridItem, Heading, HStack, Spinner } from
"@chakra-ui/react";
+import { Box, Flex, GridItem, Heading, HStack } from "@chakra-ui/react";
import type { ReactNode } from "react";
import { useTranslation } from "react-i18next";
@@ -27,14 +27,13 @@ import { StateBadge } from "src/components/StateBadge";
type Props = {
readonly actions?: ReactNode;
readonly icon: ReactNode;
- readonly isRefreshing?: boolean;
readonly state?: TaskInstanceState | null;
readonly stats: Array<{ label: string; value: ReactNode | string }>;
readonly subTitle?: ReactNode | string;
readonly title: ReactNode | string;
};
-export const HeaderCard = ({ actions, icon, isRefreshing, state, stats,
subTitle, title }: Props) => {
+export const HeaderCard = ({ actions, icon, state, stats, subTitle, title }:
Props) => {
const { t: translate } = useTranslation();
return (
@@ -47,7 +46,6 @@ export const HeaderCard = ({ actions, icon, isRefreshing,
state, stats, subTitle
{state === undefined ? undefined : (
<StateBadge state={state}>{state ?
translate(`common:states.${state}`) : undefined}</StateBadge>
)}
- {isRefreshing ? <Spinner /> : <div />}
</Flex>
<HStack gap={1}>{actions}</HStack>
</Flex>
diff --git a/airflow-core/src/airflow/ui/src/pages/Asset/Header.tsx
b/airflow-core/src/airflow/ui/src/pages/Asset/Header.tsx
index e6ec78df6fd..b2268720e29 100644
--- a/airflow-core/src/airflow/ui/src/pages/Asset/Header.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Asset/Header.tsx
@@ -24,13 +24,7 @@ import { HeaderCard } from "src/components/HeaderCard";
import { DependencyPopover } from "../AssetsList/DependencyPopover";
-export const Header = ({
- asset,
- isRefreshing,
-}: {
- readonly asset?: AssetResponse;
- readonly isRefreshing?: boolean;
-}) => {
+export const Header = ({ asset }: { readonly asset?: AssetResponse }) => {
const { t: translate } = useTranslation("assets");
const stats = [
@@ -45,5 +39,5 @@ export const Header = ({
},
];
- return <HeaderCard icon={<FiDatabase />} isRefreshing={isRefreshing}
stats={stats} title={asset?.name} />;
+ return <HeaderCard icon={<FiDatabase />} stats={stats} title={asset?.name}
/>;
};
diff --git a/airflow-core/src/airflow/ui/src/pages/Dag/Dag.tsx
b/airflow-core/src/airflow/ui/src/pages/Dag/Dag.tsx
index c7bb74e6835..3ba287faffd 100644
--- a/airflow-core/src/airflow/ui/src/pages/Dag/Dag.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Dag/Dag.tsx
@@ -106,13 +106,7 @@ export const Dag = () => {
return (
<ReactFlowProvider>
<DetailsLayout error={error ?? runsError} isLoading={isLoading ||
isLoadingRuns} tabs={displayTabs}>
- <Header
- dag={dag}
- isRefreshing={
- latestRun ? Boolean(isStatePending(latestRun.state) &&
Boolean(refetchInterval)) : false
- }
- latestRunInfo={latestRun ?? undefined}
- />
+ <Header dag={dag} latestRunInfo={latestRun ?? undefined} />
</DetailsLayout>
</ReactFlowProvider>
);
diff --git a/airflow-core/src/airflow/ui/src/pages/Dag/Header.tsx
b/airflow-core/src/airflow/ui/src/pages/Dag/Header.tsx
index 8d55c0f0c39..84913f45fd7 100644
--- a/airflow-core/src/airflow/ui/src/pages/Dag/Header.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Dag/Header.tsx
@@ -50,11 +50,9 @@ type LatestRunInfo = {
export const Header = ({
dag,
- isRefreshing,
latestRunInfo,
}: {
readonly dag?: DAGDetailsResponse;
- readonly isRefreshing?: boolean;
readonly latestRunInfo?: LatestRunInfo;
}) => {
const { t: translate } = useTranslation(["common", "dag"]);
@@ -156,7 +154,6 @@ export const Header = ({
)
}
icon={<DagIcon />}
- isRefreshing={isRefreshing}
stats={stats}
subTitle={
dag !== undefined && (
diff --git
a/airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/GroupTaskInstance.tsx
b/airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/GroupTaskInstance.tsx
index feedee26b33..a4efef77265 100644
---
a/airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/GroupTaskInstance.tsx
+++
b/airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/GroupTaskInstance.tsx
@@ -23,7 +23,6 @@ import { useParams } from "react-router-dom";
import { DetailsLayout } from "src/layouts/Details/DetailsLayout";
import { useGridTiSummaries } from "src/queries/useGridTISummaries.ts";
-import { isStatePending, useAutoRefresh } from "src/utils";
import { Header } from "./Header";
@@ -33,19 +32,12 @@ export const GroupTaskInstance = () => {
const { data: gridTISummaries } = useGridTiSummaries({ dagId, runId });
const taskInstance = gridTISummaries?.task_instances.find((ti) => ti.task_id
=== groupId);
- const refetchInterval = useAutoRefresh({ dagId });
-
const tabs = [{ icon: <MdOutlineTask />, label:
translate("tabs.taskInstances"), value: "" }];
return (
<ReactFlowProvider>
<DetailsLayout tabs={tabs}>
- {taskInstance === undefined ? undefined : (
- <Header
- isRefreshing={Boolean(isStatePending(taskInstance.state) &&
Boolean(refetchInterval))}
- taskInstance={taskInstance}
- />
- )}
+ {taskInstance === undefined ? undefined : <Header
taskInstance={taskInstance} />}
</DetailsLayout>
</ReactFlowProvider>
);
diff --git a/airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/Header.tsx
b/airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/Header.tsx
index 9fc14c76f5d..16731d4de4c 100644
--- a/airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/Header.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/GroupTaskInstance/Header.tsx
@@ -27,13 +27,7 @@ import { HeaderCard } from "src/components/HeaderCard";
import Time from "src/components/Time";
import { getDuration } from "src/utils";
-export const Header = ({
- isRefreshing,
- taskInstance,
-}: {
- readonly isRefreshing?: boolean;
- readonly taskInstance: LightGridTaskInstanceSummary;
-}) => {
+export const Header = ({ taskInstance }: { readonly taskInstance:
LightGridTaskInstanceSummary }) => {
const { t: translate } = useTranslation();
const entries: Array<{ label: string; value: number | ReactNode | string }>
= [];
@@ -62,7 +56,6 @@ export const Header = ({
<HeaderCard
actions={<ClearTaskInstanceButton groupTaskInstance={taskInstance}
isHotkeyEnabled withText={true} />}
icon={<MdOutlineTask />}
- isRefreshing={isRefreshing}
state={taskInstance.state}
stats={stats}
subTitle={<Time datetime={taskInstance.min_start_date} />}
diff --git
a/airflow-core/src/airflow/ui/src/pages/MappedTaskInstance/Header.tsx
b/airflow-core/src/airflow/ui/src/pages/MappedTaskInstance/Header.tsx
index c62e8fed0e5..88d6bb122b6 100644
--- a/airflow-core/src/airflow/ui/src/pages/MappedTaskInstance/Header.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/MappedTaskInstance/Header.tsx
@@ -26,13 +26,7 @@ import { HeaderCard } from "src/components/HeaderCard";
import Time from "src/components/Time";
import { getDuration } from "src/utils";
-export const Header = ({
- isRefreshing,
- taskInstance,
-}: {
- readonly isRefreshing?: boolean;
- readonly taskInstance: LightGridTaskInstanceSummary;
-}) => {
+export const Header = ({ taskInstance }: { readonly taskInstance:
LightGridTaskInstanceSummary }) => {
const { t: translate } = useTranslation();
const entries: Array<{ label: string; value: number | ReactNode | string }>
= [];
let taskCount: number = 0;
@@ -62,7 +56,6 @@ export const Header = ({
<Box>
<HeaderCard
icon={<MdOutlineTask />}
- isRefreshing={isRefreshing}
state={taskInstance.state}
stats={stats}
subTitle={<Time datetime={taskInstance.min_start_date} />}
diff --git
a/airflow-core/src/airflow/ui/src/pages/MappedTaskInstance/MappedTaskInstance.tsx
b/airflow-core/src/airflow/ui/src/pages/MappedTaskInstance/MappedTaskInstance.tsx
index 378b386e87f..6c231c35bcd 100644
---
a/airflow-core/src/airflow/ui/src/pages/MappedTaskInstance/MappedTaskInstance.tsx
+++
b/airflow-core/src/airflow/ui/src/pages/MappedTaskInstance/MappedTaskInstance.tsx
@@ -23,13 +23,11 @@ import { useParams } from "react-router-dom";
import { DetailsLayout } from "src/layouts/Details/DetailsLayout";
import { useGridTiSummaries } from "src/queries/useGridTISummaries.ts";
-import { isStatePending, useAutoRefresh } from "src/utils";
import { Header } from "./Header";
export const MappedTaskInstance = () => {
const { dagId = "", runId = "", taskId = "" } = useParams();
- const refetchInterval = useAutoRefresh({ dagId });
const { t: translate } = useTranslation("dag");
const { data: gridTISummaries } = useGridTiSummaries({ dagId, runId });
@@ -47,12 +45,7 @@ export const MappedTaskInstance = () => {
return (
<ReactFlowProvider>
<DetailsLayout tabs={tabs}>
- {taskInstance === undefined ? undefined : (
- <Header
- isRefreshing={Boolean(isStatePending(taskInstance.state) &&
Boolean(refetchInterval))}
- taskInstance={taskInstance}
- />
- )}
+ {taskInstance === undefined ? undefined : <Header
taskInstance={taskInstance} />}
</DetailsLayout>
</ReactFlowProvider>
);
diff --git a/airflow-core/src/airflow/ui/src/pages/Run/Header.tsx
b/airflow-core/src/airflow/ui/src/pages/Run/Header.tsx
index d95ddab0ceb..cb90867721c 100644
--- a/airflow-core/src/airflow/ui/src/pages/Run/Header.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Run/Header.tsx
@@ -35,13 +35,7 @@ import { SearchParamsKeys } from
"src/constants/searchParams";
import { usePatchDagRun } from "src/queries/usePatchDagRun";
import { getDuration, useContainerWidth } from "src/utils";
-export const Header = ({
- dagRun,
- isRefreshing,
-}: {
- readonly dagRun: DAGRunResponse;
- readonly isRefreshing?: boolean;
-}) => {
+export const Header = ({ dagRun }: { readonly dagRun: DAGRunResponse }) => {
const { t: translate } = useTranslation();
const [note, setNote] = useState<string | null>(dagRun.note);
@@ -93,7 +87,6 @@ export const Header = ({
</>
}
icon={<FiBarChart />}
- isRefreshing={isRefreshing}
state={dagRun.state}
stats={[
...(dagRun.logical_date === null
diff --git a/airflow-core/src/airflow/ui/src/pages/Run/Run.tsx
b/airflow-core/src/airflow/ui/src/pages/Run/Run.tsx
index eb97b8bf5c9..2ec4fb8fc6c 100644
--- a/airflow-core/src/airflow/ui/src/pages/Run/Run.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Run/Run.tsx
@@ -71,12 +71,7 @@ export const Run = () => {
return (
<ReactFlowProvider>
<DetailsLayout error={error} isLoading={isLoading} tabs={displayTabs}>
- {dagRun === undefined ? undefined : (
- <Header
- dagRun={dagRun}
- isRefreshing={Boolean(isStatePending(dagRun.state) &&
Boolean(refetchInterval))}
- />
- )}
+ {dagRun === undefined ? undefined : <Header dagRun={dagRun} />}
</DetailsLayout>
</ReactFlowProvider>
);
diff --git a/airflow-core/src/airflow/ui/src/pages/TaskInstance/Header.tsx
b/airflow-core/src/airflow/ui/src/pages/TaskInstance/Header.tsx
index 2238a33029b..dfa18973120 100644
--- a/airflow-core/src/airflow/ui/src/pages/TaskInstance/Header.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/TaskInstance/Header.tsx
@@ -32,13 +32,7 @@ import Time from "src/components/Time";
import { usePatchTaskInstance } from "src/queries/usePatchTaskInstance";
import { renderDuration, useContainerWidth } from "src/utils";
-export const Header = ({
- isRefreshing,
- taskInstance,
-}: {
- readonly isRefreshing?: boolean;
- readonly taskInstance: TaskInstanceResponse;
-}) => {
+export const Header = ({ taskInstance }: { readonly taskInstance:
TaskInstanceResponse }) => {
const { t: translate } = useTranslation();
const containerRef = useRef<HTMLDivElement>();
const containerWidth = useContainerWidth(containerRef);
@@ -127,7 +121,6 @@ export const Header = ({
</>
}
icon={<MdOutlineTask />}
- isRefreshing={isRefreshing}
state={taskInstance.state}
stats={stats}
title={`${taskInstance.task_display_name}${taskInstance.map_index > -1
? ` [${taskInstance.rendered_map_index ?? taskInstance.map_index}]` : ""}`}
diff --git
a/airflow-core/src/airflow/ui/src/pages/TaskInstance/TaskInstance.tsx
b/airflow-core/src/airflow/ui/src/pages/TaskInstance/TaskInstance.tsx
index 11f67d3df18..94183cb536f 100644
--- a/airflow-core/src/airflow/ui/src/pages/TaskInstance/TaskInstance.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/TaskInstance/TaskInstance.tsx
@@ -116,10 +116,7 @@ export const TaskInstance = () => {
{translate("common:noItemsFound", { modelName:
translate("common:taskInstance_one") })}
</Heading>
) : (
- <Header
- isRefreshing={Boolean(isStatePending(taskInstance.state) &&
Boolean(refetchInterval))}
- taskInstance={taskInstance}
- />
+ <Header taskInstance={taskInstance} />
)}
</DetailsLayout>
</ReactFlowProvider>