diff --git a/public/app/features/provisioning/Wizard/FinishStep.tsx b/public/app/features/provisioning/Wizard/FinishStep.tsx index 5414c1929e2..30a4749faaf 100644 --- a/public/app/features/provisioning/Wizard/FinishStep.tsx +++ b/public/app/features/provisioning/Wizard/FinishStep.tsx @@ -12,7 +12,12 @@ import { getGitProviderFields } from './fields'; import { WizardFormData } from './types'; export const FinishStep = memo(function FinishStep() { - const { register, watch, setValue } = useFormContext(); + const { + register, + watch, + setValue, + formState: { errors }, + } = useFormContext(); const settings = useGetFrontendSettingsQuery(); const [type, readOnly] = watch(['repository.type', 'repository.readOnly']); @@ -42,6 +47,8 @@ export const FinishStep = memo(function FinishStep() { 'How often to sync changes from the repository' )} required + error={errors?.repository?.sync?.intervalSeconds?.message} + invalid={!!errors?.repository?.sync?.intervalSeconds?.message} > { 'bitbucket.url', 'git.branch', 'git.url', + 'sync.intervalSeconds', ]; + + const nestedFieldMap: Record = { + 'sync.intervalSeconds': 'repository.sync.intervalSeconds', + }; + const fieldMap: Record = { path: 'repository.path', branch: 'repository.branch', @@ -37,6 +43,12 @@ export const getFormErrors = (errors: ErrorDetails[]): FormErrorTuple => { if (error.field) { const cleanField = error.field.replace('spec.', ''); if (fieldsToValidate.includes(cleanField)) { + // Check for direct nested field mapping first + if (cleanField in nestedFieldMap) { + return [nestedFieldMap[cleanField], { message: error.detail || `Invalid ${cleanField}` }]; + } + + // Fall back to simple field mapping for non-nested fields const fieldParts = cleanField.split('.'); const lastPart = fieldParts[fieldParts.length - 1];