diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ar/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/ar/components.json index 824f5522217ff..a8ae01cff8b37 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/ar/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/ar/components.json @@ -52,7 +52,6 @@ }, "close": "إغلاق", "configForm": { - "advancedOptions": "خيارات متقدمة", "configJson": "تكوين JSON", "invalidJson": "تنسيق JSON غير صالح: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ca/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/ca/components.json index ad29c45cf6361..41830dab0591a 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/ca/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/ca/components.json @@ -52,7 +52,6 @@ }, "close": "Tancar", "configForm": { - "advancedOptions": "Opcions avançades", "configJson": "Configuració JSON", "invalidJson": "Format JSON no vàlid: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/de/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/de/components.json index 1d16a2e92d1fe..d7cd7a3d9c215 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/de/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/de/components.json @@ -52,7 +52,6 @@ }, "close": "Schließen", "configForm": { - "advancedOptions": "Erweiterte Optionen", "configJson": "JSON der Konfiguration", "invalidJson": "Ungültiges JSON Format: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/el/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/el/components.json index 8e460d27ec195..fcbb839d761a1 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/el/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/el/components.json @@ -41,7 +41,6 @@ }, "close": "Κλείσιμο", "configForm": { - "advancedOptions": "Προχωρημένες Επιλογές", "configJson": "Ρυθμίσεις JSON", "invalidJson": "Μη έγκυρη μορφή JSON: {{errorMessage}}" }, 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 53fa5e0b26178..166cb001e991c 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 @@ -52,7 +52,6 @@ }, "close": "Close", "configForm": { - "advancedOptions": "Advanced Options", "configJson": "Configuration JSON", "invalidJson": "Invalid JSON format: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/es/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/es/components.json index 3719117068d7e..10dc6289bb42a 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/es/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/es/components.json @@ -52,7 +52,6 @@ }, "close": "Cerrar", "configForm": { - "advancedOptions": "Opciones Avanzadas", "configJson": "Configuración JSON", "invalidJson": "Formato JSON inválido: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/fr/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/fr/components.json index 3f225bb4426e5..24735e62c669e 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/fr/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/fr/components.json @@ -54,7 +54,6 @@ }, "close": "Fermer", "configForm": { - "advancedOptions": "Options avancées", "configJson": "Configuration JSON", "invalidJson": "Format JSON invalide : {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/he/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/he/components.json index 3557c62b95ecb..8c6512f7deebb 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/he/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/he/components.json @@ -42,7 +42,6 @@ }, "close": "סגור", "configForm": { - "advancedOptions": "אפשרויות מתקדמות", "configJson": "הגדרות JSON", "invalidJson": "מבנה ה-JSON אינו תקין: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/hi/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/hi/components.json index 6bf4842b87deb..7dcc757cbb12a 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/hi/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/hi/components.json @@ -41,7 +41,6 @@ }, "close": "बंद करें", "configForm": { - "advancedOptions": "उन्नत विकल्प", "configJson": "विन्यास JSON", "invalidJson": "अमान्य JSON प्रारूप: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/hu/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/hu/components.json index 37492be488ccb..a94e63c0c9d09 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/hu/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/hu/components.json @@ -41,7 +41,6 @@ }, "close": "Bezárás", "configForm": { - "advancedOptions": "Speciális beállítások", "configJson": "Konfiguráció JSON", "invalidJson": "Érvénytelen JSON formátum: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/it/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/it/components.json index 1b502a0243b39..3bca1603286d5 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/it/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/it/components.json @@ -39,7 +39,6 @@ }, "close": "Chiudi", "configForm": { - "advancedOptions": "Opzioni Avanzate", "configJson": "Configurazione JSON", "invalidJson": "Formato JSON non valido: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ja/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/ja/components.json index db075c8704f75..202a3513395e3 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/ja/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/ja/components.json @@ -37,7 +37,6 @@ }, "close": "閉じる", "configForm": { - "advancedOptions": "詳細設定", "configJson": "JSON の設定", "invalidJson": "無効な JSON 形式: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ko/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/ko/components.json index ebac3d747afc0..a0f02ab00ea93 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/ko/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/ko/components.json @@ -52,7 +52,6 @@ }, "close": "닫기", "configForm": { - "advancedOptions": "고급 옵션", "configJson": "구성 JSON", "invalidJson": "잘못된 JSON 형식: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/nl/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/nl/components.json index db5b5f9b10e0a..7f8d3320a849e 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/nl/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/nl/components.json @@ -41,7 +41,6 @@ }, "close": "Sluiten", "configForm": { - "advancedOptions": "Geavanceerde opties", "configJson": "Configuratie JSON", "invalidJson": "Ongeldig JSON formaat: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pl/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/pl/components.json index 35bbf943f4fc1..c2bd078a7d1c0 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/pl/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/pl/components.json @@ -56,7 +56,6 @@ }, "close": "Zamknij", "configForm": { - "advancedOptions": "Zaawansowane opcje", "configJson": "Konfiguracja JSON", "invalidJson": "Nieprawidłowy format JSON: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pt/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/pt/components.json index e952b5a62de92..da5cf1e798572 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/pt/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/components.json @@ -40,7 +40,6 @@ }, "close": "Fechar", "configForm": { - "advancedOptions": "Opções Avançadas", "configJson": "Configuração JSON", "invalidJson": "Formato JSON inválido: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/ru/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/ru/components.json index c53b27bc72374..2bdc71f6ebf0f 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/ru/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/ru/components.json @@ -43,7 +43,6 @@ }, "close": "Закрыть", "configForm": { - "advancedOptions": "Расширенные параметры", "configJson": "Конфигурация JSON", "invalidJson": "Некорректный формат JSON: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/th/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/th/components.json index d5c04cda8ba69..a595296d15298 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/th/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/th/components.json @@ -37,7 +37,6 @@ }, "close": "ปิด", "configForm": { - "advancedOptions": "ตัวเลือกขั้นสูง", "configJson": "การตั้งค่า JSON", "invalidJson": "รูปแบบ JSON ไม่ถูกต้อง: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/tr/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/tr/components.json index d2db8b1736b9a..c92f6f7a4dd46 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/tr/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/tr/components.json @@ -41,7 +41,6 @@ }, "close": "Kapat", "configForm": { - "advancedOptions": "Gelişmiş Seçenekler", "configJson": "Yapılandırma JSON", "invalidJson": "Geçersiz JSON formatı: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/zh-CN/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/zh-CN/components.json index e87b2f58988d7..b42fbb9bfbd61 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/zh-CN/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/zh-CN/components.json @@ -52,7 +52,6 @@ }, "close": "关闭", "configForm": { - "advancedOptions": "高级选项", "configJson": "配置 JSON", "invalidJson": "无效的 JSON 格式:{{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/components.json b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/components.json index 2f554e05e8e32..68081b0bc55c4 100644 --- a/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/components.json +++ b/airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/components.json @@ -52,7 +52,6 @@ }, "close": "關閉", "configForm": { - "advancedOptions": "進階選項", "configJson": "設定 JSON", "invalidJson": "無效的 JSON 格式: {{errorMessage}}" }, diff --git a/airflow-core/src/airflow/ui/src/components/ActionAccordion/ActionAccordion.tsx b/airflow-core/src/airflow/ui/src/components/ActionAccordion/ActionAccordion.tsx index 768b148325f0c..0e4010b7d697c 100644 --- a/airflow-core/src/airflow/ui/src/components/ActionAccordion/ActionAccordion.tsx +++ b/airflow-core/src/airflow/ui/src/components/ActionAccordion/ActionAccordion.tsx @@ -16,9 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -import type { ChangeEvent } from "react"; - -import { Box, Editable, Text, VStack } from "@chakra-ui/react"; +import { Box, Field, Heading, Stack, Text, VStack } from "@chakra-ui/react"; import { useTranslation } from "react-i18next"; import type { @@ -29,7 +27,7 @@ import type { import { Accordion } from "src/system-components"; -import ReactMarkdown from "src/components/ReactMarkdown"; +import EditableMarkdown from "src/components/TriggerDag/EditableMarkdown"; import { formatNumber } from "src/utils"; @@ -97,91 +95,61 @@ const ActionAccordion = ({ affectedTasks, groupByRunId = false, note, selection, const shouldGroup = groupByRunId && runGroups !== undefined && runGroups.size > 1; return ( - + {showTaskSection ? ( - - - - {translate("dags:runAndTaskActions.affectedTasks.title", { - count: affectedTasks.total_entries ?? 0, - })} - - - - - {shouldGroup ? ( - - {[...runGroups.entries()].map(([runId, tis]) => ( - - - - {translate("runId")}: {runId}{" "} - - ({formatNumber(tis.length, i18n.language)}) - + + + {translate("dags:runAndTaskActions.affectedTasks.title", { + count: affectedTasks.total_entries ?? 0, + })} + + + {shouldGroup ? ( + + {[...runGroups.entries()].map(([runId, tis]) => ( + + + + {translate("runId")}: {runId}{" "} + + ({formatNumber(tis.length, i18n.language)}) - - - - - - ))} - - ) : ( - - )} - - - + + + + + + + ))} + + ) : ( + + )} + + ) : undefined} - - - {translate("note.label")} - - - ) => setNote(event.target.value)} - value={note ?? ""} - > - - {Boolean(note) ? ( - {note} - ) : ( - {translate("note.placeholder")} - )} - - - - - - + + + + {translate("note.label")} + + + + + + + ); }; diff --git a/airflow-core/src/airflow/ui/src/components/ConfigForm.tsx b/airflow-core/src/airflow/ui/src/components/ConfigForm.tsx index 1d92a01e3cc25..753cea8f3699e 100644 --- a/airflow-core/src/airflow/ui/src/components/ConfigForm.tsx +++ b/airflow-core/src/airflow/ui/src/components/ConfigForm.tsx @@ -18,7 +18,7 @@ */ import type { ReactNode, Dispatch, SetStateAction } from "react"; -import { Box, Field } from "@chakra-ui/react"; +import { Field, Stack, Text } from "@chakra-ui/react"; import { type Control, type FieldValues, type Path, Controller } from "react-hook-form"; import { useTranslation } from "react-i18next"; @@ -84,48 +84,43 @@ const ConfigForm = ({ }; return ( - + - - - {translate("configForm.advancedOptions")} - - - - {children} - } - render={({ field }) => ( - - {translate("configForm.configJson")} - { - field.onChange(validateAndPrettifyJson(field.value)); - }} - onChange={field.onChange} - value={field.value} - /> - {Boolean(errors.conf) ? {errors.conf} : undefined} - - )} - /> - - - - + + {children} + + + + + {translate("configForm.configJson")} + + + + } + render={({ field }) => ( + + { + field.onChange(validateAndPrettifyJson(field.value)); + }} + onChange={field.onChange} + value={field.value} + /> + {Boolean(errors.conf) ? {errors.conf} : undefined} + + )} + /> + + + + + ); }; diff --git a/airflow-core/src/airflow/ui/src/components/FlexibleForm/FlexibleForm.tsx b/airflow-core/src/airflow/ui/src/components/FlexibleForm/FlexibleForm.tsx index dcfab434ab45b..e9c197445fe66 100644 --- a/airflow-core/src/airflow/ui/src/components/FlexibleForm/FlexibleForm.tsx +++ b/airflow-core/src/airflow/ui/src/components/FlexibleForm/FlexibleForm.tsx @@ -18,11 +18,9 @@ */ import { useEffect, useState, type ReactNode } from "react"; -import { Icon, Stack, StackSeparator, Text } from "@chakra-ui/react"; +import { Heading, Icon, Stack, StackSeparator, Text } from "@chakra-ui/react"; import { MdError } from "react-icons/md"; -import { Accordion } from "src/system-components"; - import type { ParamsSpec, ParamSpec } from "src/queries/useDagParams"; import { useParamStore } from "src/queries/useParamStore"; @@ -40,14 +38,14 @@ const FlatSection = ({ readonly title: string; }) => ( - + {title} {hasError ? ( ) : undefined} - + {children} ); @@ -78,7 +76,6 @@ export type FlexibleFormProps = { readonly isHITL?: boolean; readonly key?: string; readonly namespace?: string; - readonly noAccordion?: boolean; readonly setError: (error: boolean) => void; readonly subHeader?: string; }; @@ -90,7 +87,6 @@ export const FlexibleForm = ({ initialParamsDict, isHITL, namespace = "default", - noAccordion, setError, subHeader, }: FlexibleFormProps) => { @@ -137,132 +133,51 @@ export const FlexibleForm = ({ setError(Boolean(error) || newSectionError.size > 0); }; - if (noAccordion) { - return Object.keys(params).length > 0 ? ( - <> - {Object.entries(params).map(([, secParam]) => { - const currentSection = secParam.schema.section ?? flexibleFormDefaultSection; - - if (processedSections.has(currentSection)) { - return undefined; - } - processedSections.set(currentSection, true); - - return ( - - {Boolean(subHeader) ? ( - - {subHeader} - - ) : undefined} - }> - {Boolean(flexFormDescription) ? ( - {flexFormDescription} - ) : undefined} - {Object.entries(params) - .filter( - ([, param]) => - param.schema.section === currentSection || - (currentSection === flexibleFormDefaultSection && !Boolean(param.schema.section)), - ) - .map(([name]) => ( - - ))} - - - ); - })} - - ) : isHITL ? ( - - {Boolean(flexFormDescription) ? {flexFormDescription} : undefined} - - ) : undefined; - } - return Object.keys(params).length > 0 ? ( - Object.entries(params).map(([, secParam]) => { - const currentSection = secParam.schema.section ?? flexibleFormDefaultSection; + <> + {Object.entries(params).map(([, secParam]) => { + const currentSection = secParam.schema.section ?? flexibleFormDefaultSection; - if (processedSections.has(currentSection)) { - return undefined; - } else { + if (processedSections.has(currentSection)) { + return undefined; + } processedSections.set(currentSection, true); return ( - div:nth-of-type(1)": { - overflow: "visible", - }, - }} + - - {currentSection} - {sectionError.get(currentSection) ? ( - - - + {Boolean(subHeader) ? ( + + {subHeader} + + ) : undefined} + }> + {Boolean(flexFormDescription) ? ( + {flexFormDescription} ) : undefined} - - - - - {Boolean(subHeader) ? ( - - {subHeader} - - ) : undefined} - }> - {Boolean(flexFormDescription) ? ( - {flexFormDescription} - ) : undefined} - {Object.entries(params) - .filter( - ([, param]) => - param.schema.section === currentSection || - (currentSection === flexibleFormDefaultSection && !Boolean(param.schema.section)), - ) - .map(([name]) => ( - - ))} - - - - + {Object.entries(params) + .filter( + ([, param]) => + param.schema.section === currentSection || + (currentSection === flexibleFormDefaultSection && !Boolean(param.schema.section)), + ) + .map(([name]) => ( + + ))} + + ); - } - }) + })} + ) : isHITL ? ( - - - - {flexibleFormDefaultSection} - - {sectionError.get(flexibleFormDefaultSection) ? ( - - - - ) : undefined} - - - - - }> - {Boolean(flexFormDescription) ? {flexFormDescription} : undefined} - - - - + + {Boolean(flexFormDescription) ? {flexFormDescription} : undefined} + ) : undefined; }; diff --git a/airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGAdvancedOptions.tsx b/airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGAdvancedOptions.tsx index d5512579093f0..d7eaa9e5bea27 100644 --- a/airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGAdvancedOptions.tsx +++ b/airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGAdvancedOptions.tsx @@ -75,9 +75,15 @@ const TriggerDAGAdvancedOptions = ({ control, isPartitioned }: TriggerDAGAdvance control={control} name="note" render={({ field }) => ( - - {translate("note.dagRun")} - + + + + {translate("note.dagRun")} + + + + + )} /> diff --git a/airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGForm.test.tsx b/airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGForm.test.tsx index aed518453e6d4..73ebbbf76e073 100644 --- a/airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGForm.test.tsx +++ b/airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGForm.test.tsx @@ -43,10 +43,7 @@ vi.mock("react-i18next", () => ({ useTranslation: () => ({ i18n: { language: "en" }, // eslint-disable-next-line id-length - t: (translationKey: string) => - ({ - "configForm.advancedOptions": "Advanced Options", - })[translationKey] ?? translationKey, + t: (translationKey: string) => translationKey, }), })); @@ -184,8 +181,6 @@ describe("TriggerDAGForm", () => { { wrapper: Wrapper }, ); - fireEvent.click(screen.getByText("Advanced Options")); - await waitFor(() => { const configJson = screen.getByLabelText("Configuration JSON"); @@ -197,7 +192,7 @@ describe("TriggerDAGForm", () => { }); }); - it("syncs Advanced Options JSON after Run Parameters edits in prefilled re-trigger mode", async () => { + it("syncs the Configuration JSON after Run Parameters edits in prefilled re-trigger mode", async () => { const { container } = render( { } fireEvent.change(messageField, { target: { value: "Updated message" } }); - fireEvent.click(screen.getByText("Advanced Options")); await waitFor(() => { const configJson = screen.getByLabelText("Configuration JSON"); @@ -257,8 +251,6 @@ describe("TriggerDAGForm", () => { { wrapper: Wrapper }, ); - fireEvent.click(screen.getByText("Advanced Options")); - await waitFor(() => expect(screen.getByText("runId")).toBeInTheDocument()); expect(screen.queryByText("dagRun.partitionKey")).not.toBeInTheDocument(); }); @@ -278,8 +270,6 @@ describe("TriggerDAGForm", () => { { wrapper: Wrapper }, ); - fireEvent.click(screen.getByText("Advanced Options")); - await waitFor(() => expect(screen.getByText("dagRun.partitionKey")).toBeInTheDocument()); expect(screen.getByText("components:triggerDag.partitionKeyHelp")).toBeInTheDocument(); }); diff --git a/airflow-core/src/airflow/ui/src/pages/Connections/ConnectionForm.test.tsx b/airflow-core/src/airflow/ui/src/pages/Connections/ConnectionForm.test.tsx index 66714c35844db..52eaf1e2d70ec 100644 --- a/airflow-core/src/airflow/ui/src/pages/Connections/ConnectionForm.test.tsx +++ b/airflow-core/src/airflow/ui/src/pages/Connections/ConnectionForm.test.tsx @@ -93,29 +93,23 @@ describe("ConnectionForm", () => { i18n.addResourceBundle("en", "admin", adminLocale, true, true); }); - it("titles the provider fields section after the connection type and opens it by default", () => { + it("titles the provider fields section after the connection type", () => { mockUseConnectionTypeMeta.mockReturnValue(loadedMeta); render(renderForm(), { wrapper: Wrapper }); - expect(screen.getByRole("button", { name: "Pydantic AI Fields" })).toHaveAttribute( - "aria-expanded", - "true", - ); - expect(screen.getByRole("button", { name: "Standard Fields" })).toHaveAttribute("aria-expanded", "true"); + expect(screen.getByRole("heading", { name: "Pydantic AI Fields" })).toBeInTheDocument(); + expect(screen.getByRole("heading", { name: "Standard Fields" })).toBeInTheDocument(); }); - it("keeps the saved extra and opens the section when hook metadata loads after the form mounts", () => { + it("keeps the saved extra and shows the section when hook metadata loads after the form mounts", () => { mockUseConnectionTypeMeta.mockReturnValue(pendingMeta); const { rerender } = render(renderForm(), { wrapper: Wrapper }); mockUseConnectionTypeMeta.mockReturnValue(loadedMeta); rerender(renderForm()); - expect(screen.getByRole("button", { name: "Pydantic AI Fields" })).toHaveAttribute( - "aria-expanded", - "true", - ); + expect(screen.getByRole("heading", { name: "Pydantic AI Fields" })).toBeInTheDocument(); expect(document.querySelector("#element_model")).toHaveValue("openai:gpt-5"); }); }); diff --git a/airflow-core/src/airflow/ui/src/pages/Connections/ConnectionForm.tsx b/airflow-core/src/airflow/ui/src/pages/Connections/ConnectionForm.tsx index d1ad9354bac03..54dc6be1dbb75 100644 --- a/airflow-core/src/airflow/ui/src/pages/Connections/ConnectionForm.tsx +++ b/airflow-core/src/airflow/ui/src/pages/Connections/ConnectionForm.tsx @@ -18,7 +18,7 @@ */ import { useEffect, useState } from "react"; -import { Input, Button, Box, Spacer, HStack, Field, Stack, VStack, Spinner } from "@chakra-ui/react"; +import { Input, Button, Box, Spacer, HStack, Field, Heading, Stack, VStack, Spinner } from "@chakra-ui/react"; import { Select } from "chakra-react-select"; import { useForm, Controller } from "react-hook-form"; import { useTranslation } from "react-i18next"; @@ -210,57 +210,49 @@ const ConnectionForm = ({ /> {selectedConnType && !isMetaPending ? ( - - - {translate("connections.form.standardFields")} - - - - + + + {translate("connections.form.standardFields")} + + - - - {translate("connections.form.extraFieldsJson")} - - - ( - - { - field.onChange(validateAndPrettifyJson(field.value)); - field.onBlur(); - }} - onChange={field.onChange} - value={field.value} - /> - {Boolean(errors.conf) ? {errors.conf} : undefined} - {isEditMode ? ( - - {translate("connections.form.helperTextForRedactedFields")} - - ) : undefined} - - )} - /> - - - + + + + {translate("connections.form.extraFieldsJson")} + + + ( + + { + field.onChange(validateAndPrettifyJson(field.value)); + field.onBlur(); + }} + onChange={field.onChange} + value={field.value} + /> + {Boolean(errors.conf) ? {errors.conf} : undefined} + {isEditMode ? ( + + {translate("connections.form.helperTextForRedactedFields")} + + ) : undefined} + + )} + /> + + + + ) : undefined} {multiTeamEnabled ? : undefined} diff --git a/airflow-core/src/airflow/ui/src/pages/Connections/ConnectionStandardFields.tsx b/airflow-core/src/airflow/ui/src/pages/Connections/ConnectionStandardFields.tsx index f4408cdc149bb..313269a36f099 100644 --- a/airflow-core/src/airflow/ui/src/pages/Connections/ConnectionStandardFields.tsx +++ b/airflow-core/src/airflow/ui/src/pages/Connections/ConnectionStandardFields.tsx @@ -36,7 +36,7 @@ const StandardFields = ({ control, standardFields }: StandardFieldsProps) => { const [showPassword, setShowPassword] = useState(false); return ( - + {Object.entries(standardFields).map(([key, fields]) => { if (Boolean(fields.hidden)) { return undefined; diff --git a/airflow-core/src/airflow/ui/src/pages/HITLTaskInstances/HITLResponseForm.tsx b/airflow-core/src/airflow/ui/src/pages/HITLTaskInstances/HITLResponseForm.tsx index bae3b02eba501..1e896b0955b6b 100644 --- a/airflow-core/src/airflow/ui/src/pages/HITLTaskInstances/HITLResponseForm.tsx +++ b/airflow-core/src/airflow/ui/src/pages/HITLTaskInstances/HITLResponseForm.tsx @@ -125,7 +125,6 @@ export const HITLResponseForm = ({ hitlDetail, namespace = "hitl", onResponded } isHITL key={hitlDetail.subject} namespace={namespace} - noAccordion setError={setErrors} />