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 ba7e2fb4685 feat: added toasters for permission denied (#57966)
(#58016)
ba7e2fb4685 is described below
commit ba7e2fb4685474afb131a517836e0c7bfd956253
Author: Aaron Wolmutt <[email protected]>
AuthorDate: Thu Dec 4 10:00:13 2025 -0600
feat: added toasters for permission denied (#57966) (#58016)
* feat: add http error validation and toasters for permission denied
* disable trigger dag button if the useTrigger hook returns an error
* fix lint
* ci: ran prek hooks
* ci: fix linting
* fix toaster error handling. added toaster error translations json
* removed error util. refactored to use generic error
* remove deleted utility import
* remove generic from triggerDag.toaster.error translation
---
.../src/airflow/ui/public/i18n/locales/en/components.json | 3 +++
.../airflow/ui/src/components/TriggerDag/TriggerDAGForm.tsx | 4 +++-
airflow-core/src/airflow/ui/src/queries/useTrigger.ts | 13 +++++++++++--
3 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/en/components.json
b/airflow-core/src/airflow/ui/public/i18n/locales/en/components.json
index 5b1183041a1..708aae38891 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/en/components.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/en/components.json
@@ -121,6 +121,9 @@
"selectLabel": "Single Run",
"title": "Trigger Dag",
"toaster": {
+ "error": {
+ "title": "Failed to Trigger DAG"
+ },
"success": {
"description": "Dag run has been successfully triggered.",
"title": "Dag Run Triggered"
diff --git
a/airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGForm.tsx
b/airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGForm.tsx
index 4531907e625..e0acebf30bb 100644
--- a/airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGForm.tsx
+++ b/airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGForm.tsx
@@ -188,7 +188,9 @@ const TriggerDAGForm = ({ dagDisplayName, dagId, isPaused,
onClose, open }: Trig
<Spacer />
<Button
colorPalette="brand"
- disabled={Boolean(errors.conf) || Boolean(errors.date) ||
formError || isPending}
+ disabled={
+ Boolean(errors.conf) || Boolean(errors.date) || formError ||
isPending || Boolean(errorTrigger)
+ }
onClick={() => void handleSubmit(onSubmit)()}
>
<FiPlay /> {translate("components:triggerDag.button")}
diff --git a/airflow-core/src/airflow/ui/src/queries/useTrigger.ts
b/airflow-core/src/airflow/ui/src/queries/useTrigger.ts
index 4d5213b2d5f..b0b0a3d41fd 100644
--- a/airflow-core/src/airflow/ui/src/queries/useTrigger.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useTrigger.ts
@@ -62,7 +62,12 @@ export const useTrigger = ({ dagId, onSuccessConfirm }: {
dagId: string; onSucce
}
};
- const onError = (_error: unknown) => {
+ const onError = (_error: Error) => {
+ toaster.create({
+ description: _error.message,
+ title: translate("triggerDag.toaster.error.title"),
+ type: "error",
+ });
setError(_error);
};
@@ -94,5 +99,9 @@ export const useTrigger = ({ dagId, onSuccessConfirm }: {
dagId: string; onSucce
});
};
- return { error, isPending, triggerDagRun };
+ return {
+ error,
+ isPending,
+ triggerDagRun,
+ };
};