+
setIsDocsOpen(true)}>
{icon}
@@ -50,7 +50,7 @@ const DisplayMarkdownButton = ({
>
-
+
{header}
@@ -60,7 +60,7 @@ const DisplayMarkdownButton = ({
-
+
);
};
diff --git a/airflow-core/src/airflow/ui/src/components/HITLReview/HITLReviewModal.tsx b/airflow-core/src/airflow/ui/src/components/HITLReview/HITLReviewModal.tsx
index 6da3e60f71d48..aa111315186ad 100644
--- a/airflow-core/src/airflow/ui/src/components/HITLReview/HITLReviewModal.tsx
+++ b/airflow-core/src/airflow/ui/src/components/HITLReview/HITLReviewModal.tsx
@@ -24,7 +24,7 @@ import { FiInfo } from "react-icons/fi";
import type { HITLDetail } from "openapi/requests/types.gen.ts";
import { HITLReviewDetail } from "src/components/HITLReview/HITLReviewDetail.tsx";
-import { Tooltip } from "src/components/ui";
+import { Modal, Tooltip } from "src/components/ui";
import { ButtonGroupToggle } from "src/components/ui/ButtonGroupToggle";
import { Dialog } from "src/components/ui/Dialog";
@@ -78,19 +78,10 @@ export const HITLReviewModal = ({
};
return (
- {
- if (!event.open) {
- handleClose();
- }
- }}
- open={open}
- scrollBehavior="inside"
- unmountOnExit
- >
-
-
+
{translate("requiredAction_other")}
@@ -114,42 +105,49 @@ export const HITLReviewModal = ({
) : undefined}
-
-
-
-
-
-
-
- {shouldShowCompletedHitl && selectedFilter === HITLReviewFilterMode.ALL ? (
-
- ) : null}
-
-
-
-
-
-
-
-
-
+ ),
+ }}
+ lazyMount
+ onOpenChange={(event) => {
+ if (!event.open) {
+ handleClose();
+ }
+ }}
+ open={open}
+ scrollBehavior="inside"
+ unmountOnExit
+ >
+
+
+
+
+ {shouldShowCompletedHitl && selectedFilter === HITLReviewFilterMode.ALL ? (
+
+ ) : null}
+
+
+
+
+
+
+
);
};
diff --git a/airflow-core/src/airflow/ui/src/components/KeyboardShortcuts/KeyboardShortcutsModal.tsx b/airflow-core/src/airflow/ui/src/components/KeyboardShortcuts/KeyboardShortcutsModal.tsx
index 6ff477c626c30..dd5c1b5880af3 100644
--- a/airflow-core/src/airflow/ui/src/components/KeyboardShortcuts/KeyboardShortcutsModal.tsx
+++ b/airflow-core/src/airflow/ui/src/components/KeyboardShortcuts/KeyboardShortcutsModal.tsx
@@ -20,10 +20,10 @@ import { Box, Flex, HStack, Heading, Kbd, Text, VStack } from "@chakra-ui/react"
import { useState } from "react";
import { useTranslation } from "react-i18next";
-import { Dialog } from "src/components/ui";
+import { Modal } from "src/components/ui";
import {
- SHORTCUT_CATEGORIES,
SHORTCUTS,
+ SHORTCUT_CATEGORIES,
type ShortcutEntry,
useShortcutRegistry,
} from "src/context/keyboardShortcuts";
@@ -67,40 +67,40 @@ export const KeyboardShortcutsModal = () => {
const groups = buildGroups(shortcuts);
return (
- setOpen(event.open)} open={open} size="md">
-
- {translate("shortcuts.title")}
-
-
- {groups.length === 0 ? (
- {translate("shortcuts.empty")}
- ) : (
-
- {groups.map(({ category, items }) => (
-
-
- {translate(`shortcuts.categories.${category}`)}
-
-
- {items.map((entry) => (
-
- {entry.description}
-
- {entry.keys.map((combo) => (
-
- {formatShortcutCombo(combo, metaKey)}
-
- ))}
-
-
- ))}
-
-
- ))}
-
- )}
-
-
-
+ setOpen(event.open)}
+ open={open}
+ size="md"
+ title={translate("shortcuts.title")}
+ >
+ {groups.length === 0 ? (
+ {translate("shortcuts.empty")}
+ ) : (
+
+ {groups.map(({ category, items }) => (
+
+
+ {translate(`shortcuts.categories.${category}`)}
+
+
+ {items.map((entry) => (
+
+ {entry.description}
+
+ {entry.keys.map((combo) => (
+
+ {formatShortcutCombo(combo, metaKey)}
+
+ ))}
+
+
+ ))}
+
+
+ ))}
+
+ )}
+
);
};
diff --git a/airflow-core/src/airflow/ui/src/components/MarkAs/Run/MarkRunAsDialog.tsx b/airflow-core/src/airflow/ui/src/components/MarkAs/Run/MarkRunAsDialog.tsx
index 8a0112a2d9f16..b1f463690403d 100644
--- a/airflow-core/src/airflow/ui/src/components/MarkAs/Run/MarkRunAsDialog.tsx
+++ b/airflow-core/src/airflow/ui/src/components/MarkAs/Run/MarkRunAsDialog.tsx
@@ -16,14 +16,14 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { Button, Flex, Heading, VStack } from "@chakra-ui/react";
+import { Button } from "@chakra-ui/react";
import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import type { DagRunMutableStates, DAGRunResponse } from "openapi/requests/types.gen";
import { ActionAccordion } from "src/components/ActionAccordion";
import { StateBadge } from "src/components/StateBadge";
-import { Dialog } from "src/components/ui";
+import { Modal } from "src/components/ui";
import { usePatchDagRun } from "src/queries/usePatchDagRun";
type Props = {
@@ -53,7 +53,22 @@ const MarkRunAsDialog = ({ dagRun, onClose, open, state }: Props) => {
const { isPending, mutate } = usePatchDagRun({ dagId, dagRunId, onSuccess: handleClose });
return (
- {
+ mutate({
+ dagId,
+ dagRunId,
+ requestBody: { note, state },
+ });
+ }}
+ >
+ {translate("modal.confirm")}
+
+ }
lazyMount
onOpenChange={(details) => {
if (!details.open) {
@@ -61,42 +76,18 @@ const MarkRunAsDialog = ({ dagRun, onClose, open, state }: Props) => {
}
}}
open={open}
+ title={
+ <>
+ {translate("dags:runAndTaskActions.markAs.title", {
+ state,
+ type: translate("dagRun_one"),
+ })}
+ : {dagRunId}
+ >
+ }
>
-
-
-
-
- {translate("dags:runAndTaskActions.markAs.title", {
- state,
- type: translate("dagRun_one"),
- })}
- : {dagRunId}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
);
};
diff --git a/airflow-core/src/airflow/ui/src/components/MarkAs/TaskGroup/MarkTaskGroupAsDialog.tsx b/airflow-core/src/airflow/ui/src/components/MarkAs/TaskGroup/MarkTaskGroupAsDialog.tsx
index fbaeefcb1bb89..f2c0b5626479d 100644
--- a/airflow-core/src/airflow/ui/src/components/MarkAs/TaskGroup/MarkTaskGroupAsDialog.tsx
+++ b/airflow-core/src/airflow/ui/src/components/MarkAs/TaskGroup/MarkTaskGroupAsDialog.tsx
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { Button, Flex, Heading, VStack } from "@chakra-ui/react";
+import { Button, Flex } from "@chakra-ui/react";
import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { useParams } from "react-router-dom";
@@ -25,7 +25,7 @@ import type { LightGridTaskInstanceSummary, TaskInstanceState } from "openapi/re
import { ActionAccordion } from "src/components/ActionAccordion";
import { StateBadge } from "src/components/StateBadge";
import Time from "src/components/Time";
-import { Dialog } from "src/components/ui";
+import { Modal } from "src/components/ui";
import SegmentedControl from "src/components/ui/SegmentedControl";
import { usePatchTaskGroup } from "src/queries/usePatchTaskGroup";
import { usePatchTaskGroupDryRun } from "src/queries/usePatchTaskGroupDryRun";
@@ -92,7 +92,29 @@ const MarkTaskGroupAsDialog = ({ groupTaskInstance, onClose, open, state }: Prop
};
return (
- {
+ mutate({
+ dagId,
+ dagRunId: runId,
+ groupId,
+ requestBody: {
+ include_downstream: downstream,
+ include_future: future,
+ include_past: past,
+ include_upstream: upstream,
+ new_state: state,
+ note,
+ },
+ });
+ }}
+ >
+ {translate("modal.confirm")}
+
+ }
lazyMount
onOpenChange={(details) => {
if (!details.open) {
@@ -100,78 +122,47 @@ const MarkTaskGroupAsDialog = ({ groupTaskInstance, onClose, open, state }: Prop
}
}}
open={open}
+ title={
+ <>
+
+ {translate("dags:runAndTaskActions.markAs.title", {
+ state,
+ type: translate("taskGroup_one"),
+ })}
+ :
+ {" "}
+ {groupTaskInstance.task_display_name} {" "}
+
+ >
+ }
>
-
-
-
-
-
- {translate("dags:runAndTaskActions.markAs.title", {
- state,
- type: translate("taskGroup_one"),
- })}
- :
- {" "}
- {groupTaskInstance.task_display_name} {" "}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
);
};
diff --git a/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsDialog.tsx b/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsDialog.tsx
index dc1919a54a559..80f56244913d3 100644
--- a/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsDialog.tsx
+++ b/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsDialog.tsx
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { Button, Flex, Heading, VStack } from "@chakra-ui/react";
+import { Button, Flex } from "@chakra-ui/react";
import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
@@ -24,7 +24,7 @@ import type { TaskInstanceResponse, TaskInstanceState } from "openapi/requests/t
import { ActionAccordion } from "src/components/ActionAccordion";
import { StateBadge } from "src/components/StateBadge";
import Time from "src/components/Time";
-import { Dialog } from "src/components/ui";
+import { Modal } from "src/components/ui";
import SegmentedControl from "src/components/ui/SegmentedControl";
import { useMarkTaskInstanceDefaultOptions } from "src/hooks/useUserSettings";
import { usePatchTaskInstance } from "src/queries/usePatchTaskInstance";
@@ -97,7 +97,30 @@ const MarkTaskInstanceAsDialog = ({ onClose, open, state, taskInstance }: Props)
};
return (
- {
+ mutate({
+ dagId,
+ dagRunId,
+ mapIndex,
+ requestBody: {
+ include_downstream: downstream,
+ include_future: future,
+ include_past: past,
+ include_upstream: upstream,
+ new_state: state,
+ note,
+ },
+ taskId,
+ });
+ }}
+ >
+ {translate("modal.confirm")}
+
+ }
lazyMount
onOpenChange={(details) => {
if (!details.open) {
@@ -105,81 +128,46 @@ const MarkTaskInstanceAsDialog = ({ onClose, open, state, taskInstance }: Props)
}
}}
open={open}
+ title={
+ <>
+ {translate("dags:runAndTaskActions.markAs.title", {
+ state,
+ type: translate("taskInstance_one"),
+ })}
+ : {taskInstance.task_display_name} {" "}
+
+ >
+ }
>
-
-
-
-
-
- {translate("dags:runAndTaskActions.markAs.title", {
- state,
- type: translate("taskInstance_one"),
- })}
- :
- {" "}
- {taskInstance.task_display_name} {" "}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
);
};
diff --git a/airflow-core/src/airflow/ui/src/components/MarkdownModal.tsx b/airflow-core/src/airflow/ui/src/components/MarkdownModal.tsx
index 80288a37d3fa4..7078d3dce5f28 100644
--- a/airflow-core/src/airflow/ui/src/components/MarkdownModal.tsx
+++ b/airflow-core/src/airflow/ui/src/components/MarkdownModal.tsx
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { Box, Button, Flex, Heading, HStack, Text, Textarea, VStack } from "@chakra-ui/react";
+import { Box, Button, Flex, HStack, Text, Textarea, VStack } from "@chakra-ui/react";
import type { ChangeEvent } from "react";
import { useRef, useState } from "react";
import { useTranslation } from "react-i18next";
@@ -25,7 +25,7 @@ import { FiEdit, FiEye } from "react-icons/fi";
import NoteIcon from "src/components/NoteIcon";
import ReactMarkdown from "src/components/ReactMarkdown";
import { Dialog } from "src/components/ui";
-import { ResizableWrapper, MARKDOWN_DIALOG_STORAGE_KEY } from "src/components/ui/ResizableWrapper";
+import { MARKDOWN_DIALOG_STORAGE_KEY, ResizableWrapper } from "src/components/ui/ResizableWrapper";
export const MAX_NOTE_LENGTH = 1000;
@@ -104,9 +104,9 @@ const MarkdownModal = ({
minSize={{ height: 600, width: 800 }}
storageKey={MARKDOWN_DIALOG_STORAGE_KEY}
>
-
- {header}
-
+
+ {header}
+
@@ -127,7 +127,7 @@ const MarkdownModal = ({
)}
-