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,
+  };
 };

Reply via email to