From 86a4a0f72ddd2378dc55433ac83ae650f5c3e22d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Tr=C3=AD?= Date: Tue, 17 May 2022 14:52:00 +0700 Subject: [PATCH] [Scaffolder] Get data of other fields in Form from a custom field MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allows to use e.g. ``` const CustomFieldExtensionComponent(props: FieldExtensionComponentProps) => { const { formContext } = props; .... }; const CustomFieldExtension = scaffolderPlugin.provide( createScaffolderFieldExtension({ name: ..., component: CustomFieldExtensionComponent, validation: .... }) ); ``` Signed-off-by: Minh TrĂ­ --- .changeset/scaffolder-form-context.md | 21 +++++++++++++++++++ .../writing-custom-field-extensions.md | 17 +++++++++++++++ .../MultistepJsonForm/MultistepJsonForm.tsx | 1 + 3 files changed, 39 insertions(+) create mode 100644 .changeset/scaffolder-form-context.md diff --git a/.changeset/scaffolder-form-context.md b/.changeset/scaffolder-form-context.md new file mode 100644 index 0000000000..08295c6b85 --- /dev/null +++ b/.changeset/scaffolder-form-context.md @@ -0,0 +1,21 @@ +--- +'@backstage/plugin-scaffolder': minor +--- + +Get data of other fields in Form from a custom field in template Scaffolder. +following: + +```tsx +const CustomFieldExtensionComponent(props: FieldExtensionComponentProps) => { + const { formContext } = props; + ... +}; + +const CustomFieldExtension = scaffolderPlugin.provide( + createScaffolderFieldExtension({ + name: ..., + component: CustomFieldExtensionComponent, + validation: ... + }) +); +``` diff --git a/docs/features/software-templates/writing-custom-field-extensions.md b/docs/features/software-templates/writing-custom-field-extensions.md index 8618e04781..5fe3349285 100644 --- a/docs/features/software-templates/writing-custom-field-extensions.md +++ b/docs/features/software-templates/writing-custom-field-extensions.md @@ -161,3 +161,20 @@ spec: description: My custom name for the component ui:field: MyCustomExtension ``` + +## Get data of other fields in Form from a Custom Field Extension + +```tsx +const CustomFieldExtensionComponent(props: FieldExtensionComponentProps) => { + const { formContext } = props; + ... +}; + +const CustomFieldExtension = scaffolderPlugin.provide( + createScaffolderFieldExtension({ + name: ..., + component: CustomFieldExtensionComponent, + validation: ... + }) +); +``` diff --git a/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx b/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx index a868c50d7a..8db409ed38 100644 --- a/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx +++ b/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx @@ -198,6 +198,7 @@ export const MultistepJsonForm = (props: Props) => { widgets={widgets} noHtml5Validate formData={formData} + formContext={formData} onChange={onChange} onSubmit={e => { if (e.errors.length === 0) handleNext();