Merge pull request #14700 from alexrybch/validator-form-data

added formData to validation function
This commit is contained in:
Ben Lambert
2022-12-19 13:25:45 +01:00
committed by GitHub
4 changed files with 19 additions and 2 deletions
+15
View File
@@ -0,0 +1,15 @@
---
'@backstage/plugin-scaffolder': patch
---
Form data is now passed to validator functions in 'next' scaffolder, so it's now possible to perform validation for fields that depend on other field values. This is something that we discourage due to the coupling that it creates, but is sometimes still the most sensible solution.
```typescript jsx
export const myCustomValidation = (
value: string,
validation: FieldValidation,
{ apiHolder, formData }: { apiHolder: ApiHolder; formData: JsonObject },
) => {
// validate
};
```
+1
View File
@@ -224,6 +224,7 @@ export type NextCustomFieldValidator<TFieldReturnValue> = (
field: FieldValidation_2,
context: {
apiHolder: ApiHolder;
formData: JsonObject;
},
) => void | Promise<void>;
+2 -1
View File
@@ -23,6 +23,7 @@ import {
} from '@rjsf/utils';
import { PropsWithChildren } from 'react';
import { JSONSchema7 } from 'json-schema';
import { JsonObject } from '@backstage/types';
/**
* Field validation type for Custom Field Extensions.
@@ -100,7 +101,7 @@ export interface NextFieldExtensionComponentProps<
export type NextCustomFieldValidator<TFieldReturnValue> = (
data: TFieldReturnValue,
field: FieldValidationV5,
context: { apiHolder: ApiHolder },
context: { apiHolder: ApiHolder; formData: JsonObject },
) => void | Promise<void>;
/**
@@ -42,7 +42,7 @@ export const createAsyncValidators = (
if (validator) {
const fieldValidation = createFieldValidation();
try {
await validator(value, fieldValidation, context);
await validator(value, fieldValidation, { ...context, formData });
} catch (ex) {
fieldValidation.addError(ex.message);
}