From 7cc9dcd9f35d31b82af031f1e71124308ef14a2f Mon Sep 17 00:00:00 2001 From: mvdbeek Date: Mon, 13 Jul 2026 12:44:15 +0200 Subject: [PATCH] Make file source form alerts template configurable --- .../packages/api-client/src/schema/schema.ts | 15 +++++++++++ .../FileSources/Instances/CreateForm.vue | 25 +++++++++---------- .../Instances/useGithubRepositoryOptions.ts | 14 ++++++++++- doc/source/admin/data.md | 6 +++++ .../templates/examples/production_github.yml | 14 +++++++++++ lib/galaxy/files/templates/models.py | 22 ++++++++++++++++ test/unit/files/test_template_models.py | 5 ++++ 7 files changed, 87 insertions(+), 14 deletions(-) diff --git a/client/packages/api-client/src/schema/schema.ts b/client/packages/api-client/src/schema/schema.ts index 895494a3b38..dff3e9becc7 100644 --- a/client/packages/api-client/src/schema/schema.ts +++ b/client/packages/api-client/src/schema/schema.ts @@ -13138,10 +13138,25 @@ export interface components { }; /** FileSourceTemplateSummaries */ FileSourceTemplateSummaries: components["schemas"]["FileSourceTemplateSummary"][]; + /** FileSourceTemplateAlert */ + FileSourceTemplateAlert: { + /** Condition */ + condition?: string | null; + /** Content */ + content: string; + /** + * Variant + * @default info + * @enum {string} + */ + variant?: "primary" | "secondary" | "success" | "danger" | "warning" | "info" | "light" | "dark"; + }; /** FileSourceTemplateSummary */ FileSourceTemplateSummary: { /** Description */ description: string | null; + /** Form Alerts */ + form_alerts?: components["schemas"]["FileSourceTemplateAlert"][] | null; /** * Hidden * @default false diff --git a/client/src/components/FileSources/Instances/CreateForm.vue b/client/src/components/FileSources/Instances/CreateForm.vue index d6b0567310f..137ebd0da74 100644 --- a/client/src/components/FileSources/Instances/CreateForm.vue +++ b/client/src/components/FileSources/Instances/CreateForm.vue @@ -7,6 +7,8 @@ import { useConfigurationTemplateCreation } from "@/components/ConfigTemplates/u import { useGithubRepositoryOptions } from "./useGithubRepositoryOptions"; +import ConfigurationMarkdown from "@/components/ObjectStore/ConfigurationMarkdown.vue"; + const createUrl = "/api/file_source_instances"; const createTestUrl = "/api/file_source_instances/test"; @@ -27,12 +29,19 @@ function onFormChange(incoming: Record) { formData.value = incoming; } -const { dynamicOptions, isRepositoryPicker, noRepositoriesFound } = useGithubRepositoryOptions( +const { alertConditions, dynamicOptions } = useGithubRepositoryOptions( toRef(props, "template"), toRef(props, "uuid"), formData, ); +const formAlerts = computed(() => { + const activeConditions = new Set(alertConditions.value); + return (props.template.form_alerts ?? []).filter( + (alert) => !alert.condition || activeConditions.has(alert.condition), + ); +}); + const { ActionSummary, error, inputs, InstanceForm, onSubmit, submitTitle, loadingMessage, testRunning, testResults } = useConfigurationTemplateCreation( "file source", @@ -47,18 +56,8 @@ const { ActionSummary, error, inputs, InstanceForm, onSubmit, submitTitle, loadi