This is an automated email from the ASF dual-hosted git repository.
bbovenzi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 2b7b3d64285 update some icons and add dag import error to dagslist
(#46251)
2b7b3d64285 is described below
commit 2b7b3d64285353bb206c0c082ea4d643a8611fb8
Author: Brent Bovenzi <[email protected]>
AuthorDate: Wed Jan 29 16:11:05 2025 -0500
update some icons and add dag import error to dagslist (#46251)
* update some icons and add dag import error to dagslist'
* Swap dag parse icon from folder to file
---
airflow/ui/src/components/ParseDag.tsx | 4 +-
airflow/ui/src/components/StateIcon.tsx | 8 ++-
airflow/ui/src/pages/DagsList/DagsList.tsx | 10 ++--
.../src/pages/Dashboard/Stats/DAGImportErrors.tsx | 58 +++++++++++++++-------
.../pages/Dashboard/Stats/DAGImportErrorsModal.tsx | 6 ++-
5 files changed, 57 insertions(+), 29 deletions(-)
diff --git a/airflow/ui/src/components/ParseDag.tsx
b/airflow/ui/src/components/ParseDag.tsx
index 7fd71c83f9c..dbfe635b81f 100644
--- a/airflow/ui/src/components/ParseDag.tsx
+++ b/airflow/ui/src/components/ParseDag.tsx
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { FiRefreshCw } from "react-icons/fi";
+import { AiOutlineFileSync } from "react-icons/ai";
import { Button } from "src/components/ui";
import { useDagParsing } from "src/queries/useDagParsing.ts";
@@ -31,7 +31,7 @@ const ParseDag = ({ dagId, fileToken }: Props) => {
return (
<Button loading={isPending} onClick={() => mutate({ fileToken })}
variant="outline">
- <FiRefreshCw height={5} width={5} />
+ <AiOutlineFileSync height={5} width={5} />
Reparse Dag
</Button>
);
diff --git a/airflow/ui/src/components/StateIcon.tsx
b/airflow/ui/src/components/StateIcon.tsx
index 4102cae75df..aff4a74ae14 100644
--- a/airflow/ui/src/components/StateIcon.tsx
+++ b/airflow/ui/src/components/StateIcon.tsx
@@ -19,17 +19,15 @@
import type { IconBaseProps } from "react-icons";
import {
FiActivity,
- FiAlertCircle,
FiAlertOctagon,
FiCalendar,
FiCheckCircle,
- FiCircle,
FiRepeat,
FiSkipForward,
FiSlash,
FiWatch,
} from "react-icons/fi";
-import { LuCalendarSync, LuRedo2 } from "react-icons/lu";
+import { LuCalendarSync, LuCircleDashed, LuCircleFadingArrowUp, LuRedo2 } from
"react-icons/lu";
import { PiQueue } from "react-icons/pi";
import type { TaskInstanceState } from "openapi/requests/types.gen";
@@ -63,8 +61,8 @@ export const StateIcon = ({ state, ...rest }: Props) => {
case "up_for_retry":
return <LuRedo2 {...rest} />;
case "upstream_failed":
- return <FiAlertCircle {...rest} />;
+ return <LuCircleFadingArrowUp {...rest} />;
default:
- return <FiCircle {...rest} />;
+ return <LuCircleDashed {...rest} />;
}
};
diff --git a/airflow/ui/src/pages/DagsList/DagsList.tsx
b/airflow/ui/src/pages/DagsList/DagsList.tsx
index b642fa21df4..7829738030d 100644
--- a/airflow/ui/src/pages/DagsList/DagsList.tsx
+++ b/airflow/ui/src/pages/DagsList/DagsList.tsx
@@ -45,6 +45,7 @@ import { useConfig } from "src/queries/useConfig";
import { useDags } from "src/queries/useDags";
import { pluralize } from "src/utils";
+import { DAGImportErrors } from "../Dashboard/Stats/DAGImportErrors";
import { DagCard } from "./DagCard";
import { DagTags } from "./DagTags";
import { DagsFilters } from "./DagsFilters";
@@ -223,9 +224,12 @@ export const DagsList = () => {
/>
<DagsFilters />
<HStack justifyContent="space-between">
- <Heading py={3} size="md">
- {pluralize("Dag", data.total_entries)}
- </Heading>
+ <HStack>
+ <Heading py={3} size="md">
+ {pluralize("Dag", data.total_entries)}
+ </Heading>
+ <DAGImportErrors iconOnly />
+ </HStack>
{display === "card" ? (
<SortSelect handleSortChange={handleSortChange} orderBy={orderBy}
/>
) : undefined}
diff --git a/airflow/ui/src/pages/Dashboard/Stats/DAGImportErrors.tsx
b/airflow/ui/src/pages/Dashboard/Stats/DAGImportErrors.tsx
index 64be02293a5..0f90d6638d3 100644
--- a/airflow/ui/src/pages/Dashboard/Stats/DAGImportErrors.tsx
+++ b/airflow/ui/src/pages/Dashboard/Stats/DAGImportErrors.tsx
@@ -16,18 +16,22 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { Box, Text, Button, useDisclosure, Skeleton, Badge } from
"@chakra-ui/react";
+import { Box, Text, Button, useDisclosure, Skeleton } from "@chakra-ui/react";
import { FiChevronRight } from "react-icons/fi";
+import { LuFileWarning } from "react-icons/lu";
import { useImportErrorServiceGetImportErrors } from "openapi/queries";
import { ErrorAlert } from "src/components/ErrorAlert";
+import { StateBadge } from "src/components/StateBadge";
+import { pluralize } from "src/utils";
import { DAGImportErrorsModal } from "./DAGImportErrorsModal";
-export const DAGImportErrors = () => {
+export const DAGImportErrors = ({ iconOnly = false }: { readonly iconOnly?:
boolean }) => {
const { onClose, onOpen, open } = useDisclosure();
const { data, error, isLoading } = useImportErrorServiceGetImportErrors();
+
const importErrorsCount = data?.total_entries ?? 0;
const importErrors = data?.import_errors ?? [];
@@ -36,25 +40,43 @@ export const DAGImportErrors = () => {
}
return (
- <Box alignItems="center" display="flex" gap={2}>
+ <Box alignItems="center" display="flex" maxH="10px">
<ErrorAlert error={error} />
{importErrorsCount > 0 && (
- <Button
- alignItems="center"
- borderRadius="md"
- display="flex"
- gap={2}
- onClick={onOpen}
- variant="outline"
- >
- <Badge colorPalette="failed">{importErrorsCount}</Badge>
- <Box alignItems="center" display="flex" gap={1}>
- <Text fontWeight="bold">Dag Import Errors</Text>
- <FiChevronRight />
- </Box>
- </Button>
+ <>
+ {iconOnly ? (
+ <StateBadge
+ as={Button}
+ colorPalette="failed"
+ height={7}
+ onClick={onOpen}
+ title={pluralize("Dag Import Error", importErrorsCount)}
+ >
+ <LuFileWarning size="0.5rem" />
+ {importErrorsCount}
+ </StateBadge>
+ ) : (
+ <Button
+ alignItems="center"
+ borderRadius="md"
+ display="flex"
+ gap={2}
+ onClick={onOpen}
+ variant="outline"
+ >
+ <StateBadge colorPalette="failed">
+ <LuFileWarning />
+ {importErrorsCount}
+ </StateBadge>
+ <Box alignItems="center" display="flex" gap={1}>
+ <Text fontWeight="bold">Dag Import Errors</Text>
+ <FiChevronRight />
+ </Box>
+ </Button>
+ )}
+ <DAGImportErrorsModal importErrors={importErrors} onClose={onClose}
open={open} />
+ </>
)}
- <DAGImportErrorsModal importErrors={importErrors} onClose={onClose}
open={open} />
</Box>
);
};
diff --git a/airflow/ui/src/pages/Dashboard/Stats/DAGImportErrorsModal.tsx
b/airflow/ui/src/pages/Dashboard/Stats/DAGImportErrorsModal.tsx
index c5083e46319..6dfc6cc52a0 100644
--- a/airflow/ui/src/pages/Dashboard/Stats/DAGImportErrorsModal.tsx
+++ b/airflow/ui/src/pages/Dashboard/Stats/DAGImportErrorsModal.tsx
@@ -18,6 +18,7 @@
*/
import { Heading, Text, HStack, Input } from "@chakra-ui/react";
import { useEffect, useState } from "react";
+import { LuFileWarning } from "react-icons/lu";
import { PiFilePy } from "react-icons/pi";
import type { ImportErrorResponse } from "openapi/requests/types.gen";
@@ -60,7 +61,10 @@ export const DAGImportErrorsModal:
React.FC<ImportDAGErrorModalProps> = ({ impor
<Dialog.Root onOpenChange={onOpenChange} open={open}
scrollBehavior="inside" size="xl">
<Dialog.Content backdrop>
<Dialog.Header>
- <Heading size="xl">Dag Import Errors</Heading>
+ <HStack fontSize="xl">
+ <LuFileWarning />
+ <Heading>Dag Import Errors</Heading>
+ </HStack>
<Input
mt={4}
onChange={(event) => setSearchQuery(event.target.value)}