From 809c4c0686b7a1e1e85e0d4678083e5f53f410c5 Mon Sep 17 00:00:00 2001 From: Paul Cowan Date: Mon, 12 Dec 2022 10:02:24 +0000 Subject: [PATCH] fix api-reports Signed-off-by: Paul Cowan --- .../components/SecurityTab/SecurityTab.tsx | 2 +- .../src/hooks/useCustomFieldExtensions.ts | 19 ++++++++-- plugins/scaffolder/api-report.md | 38 ++++++++++++++++--- plugins/scaffolder/src/components/Router.tsx | 11 +----- plugins/scaffolder/src/index.ts | 3 +- .../EmbeddedScaffolderWorkflow.tsx | 19 +++++++--- .../next/EmbeddedScaffolderWorkflow/index.ts | 5 ++- plugins/scaffolder/src/next/Router/index.ts | 2 +- .../scaffolder/src/next/Workflow/Workflow.tsx | 3 -- plugins/scaffolder/src/next/Workflow/index.ts | 2 +- plugins/scaffolder/src/next/index.ts | 3 ++ 11 files changed, 74 insertions(+), 33 deletions(-) diff --git a/packages/app/src/components/SecurityTab/SecurityTab.tsx b/packages/app/src/components/SecurityTab/SecurityTab.tsx index f2768a2a0e..3fc5a103f6 100644 --- a/packages/app/src/components/SecurityTab/SecurityTab.tsx +++ b/packages/app/src/components/SecurityTab/SecurityTab.tsx @@ -43,7 +43,7 @@ export function SecurityTab(): JSX.Element | null { description={` ## This is markdown - overriding the template description - `} + `} onComplete={onComplete} onError={onError} namespace="default" diff --git a/plugins/scaffolder-react/src/hooks/useCustomFieldExtensions.ts b/plugins/scaffolder-react/src/hooks/useCustomFieldExtensions.ts index 7e0aafd53f..9b794a3662 100644 --- a/plugins/scaffolder-react/src/hooks/useCustomFieldExtensions.ts +++ b/plugins/scaffolder-react/src/hooks/useCustomFieldExtensions.ts @@ -20,16 +20,19 @@ import { FIELD_EXTENSION_WRAPPER_KEY, } from '../extensions/keys'; +type Extension = Omit & { validation?: unknown } + /** * Hook that returns all custom field extensions from the current outlet. * @public */ export const useCustomFieldExtensions = < - TComponentDataType = FieldExtensionOptions, + TComponentDataType = FieldExtensionOptions >( outlet: React.ReactNode, + defaultScaffolderFieldExtensions: Extension[] = [] ) => { - return useElementFilter(outlet, elements => + const customFieldExtensions = useElementFilter(outlet, elements => elements .selectByComponentData({ key: FIELD_EXTENSION_WRAPPER_KEY, @@ -37,5 +40,15 @@ export const useCustomFieldExtensions = < .findComponentData({ key: FIELD_EXTENSION_KEY, }), - ); + ) as FieldExtensionOptions[]; + + return [ + ...customFieldExtensions, + ...defaultScaffolderFieldExtensions.filter( + ({ name }) => + !customFieldExtensions.some( + customFieldExtension => customFieldExtension.name === name, + ), + ), + ]; }; diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index db0fb7412a..e7c0fecb91 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -31,7 +31,11 @@ import { Observable } from '@backstage/types'; import { PathParams } from '@backstage/core-plugin-api'; import { PropsWithChildren } from 'react'; import { default as React_2 } from 'react'; +<<<<<<< HEAD import { ReactNode } from 'react'; +======= +import type { ReactNode } from 'react'; +>>>>>>> 1a12ad8e8d (fix api-reports) import { RouteRef } from '@backstage/core-plugin-api'; import { ScaffolderApi as ScaffolderApi_2 } from '@backstage/plugin-scaffolder-react'; import { ScaffolderDryRunOptions as ScaffolderDryRunOptions_2 } from '@backstage/plugin-scaffolder-react'; @@ -80,8 +84,29 @@ export type CustomFieldValidator = ( }, ) => void | Promise; +// @alpha +export function EmbeddedScaffolderWorkflow({ + namespace, + templateName, + customExtensionsElement, + frontPage, + finishPage, + onComplete, + onError, + title, + description, + ReviewStateWrapper, +}: EmbeddedScaffolderWorkflowProps): JSX.Element; + // @alpha (undocumented) -export const EmbeddableWorkflow: (props: WorkflowProps) => JSX.Element; +export type EmbeddedScaffolderWorkflowProps = Omit< + WorkflowProps, + 'customFieldExtensions' | 'onComplete' +> & { + customExtensionsElement?: React_2.ReactNode; + frontPage: ReactNode; + finishPage: ReactNode; +} & Partial>; // @public export const EntityNamePickerFieldExtension: FieldExtensionComponent< @@ -128,9 +153,9 @@ export type EntityPickerUiOptions = export const EntityTagsPickerFieldExtension: FieldExtensionComponent_2< string[], { - showCounts?: boolean | undefined; - kinds?: string[] | undefined; helperText?: string | undefined; + kinds?: string[] | undefined; + showCounts?: boolean | undefined; } >; @@ -138,9 +163,9 @@ export const EntityTagsPickerFieldExtension: FieldExtensionComponent_2< export const EntityTagsPickerFieldSchema: FieldSchema< string[], { - showCounts?: boolean | undefined; - kinds?: string[] | undefined; helperText?: string | undefined; + kinds?: string[] | undefined; + showCounts?: boolean | undefined; } >; @@ -564,6 +589,7 @@ export type TemplateParameterSchema = TemplateParameterSchema_2; // @public export const TemplateTypePicker: () => JSX.Element | null; +<<<<<<< HEAD <<<<<<< HEAD // @public @deprecated (undocumented) export const useTemplateSecrets: () => ScaffolderUseTemplateSecrets_2; @@ -573,6 +599,8 @@ export const useGetCustomFields: ( element: React_2.ReactNode, ) => NextFieldExtensionOptions[]; +======= +>>>>>>> 1a12ad8e8d (fix api-reports) // @public export const useTemplateSecrets: () => ScaffolderUseTemplateSecrets; diff --git a/plugins/scaffolder/src/components/Router.tsx b/plugins/scaffolder/src/components/Router.tsx index 6a2da406e0..ae14e7491b 100644 --- a/plugins/scaffolder/src/components/Router.tsx +++ b/plugins/scaffolder/src/components/Router.tsx @@ -93,16 +93,7 @@ export const Router = (props: RouterProps) => { const outlet = useOutlet(); const TaskPageElement = TaskPageComponent ?? TaskPage; - const customFieldExtensions = useCustomFieldExtensions(outlet); - const fieldExtensions = [ - ...customFieldExtensions, - ...DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS.filter( - ({ name }) => - !customFieldExtensions.some( - customFieldExtension => customFieldExtension.name === name, - ), - ), - ] as FieldExtensionOptions[]; + const fieldExtensions = useCustomFieldExtensions(outlet, DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS); // todo(blam): this should also be moved to a hook in -react const customLayouts = useElementFilter(outlet, elements => diff --git a/plugins/scaffolder/src/index.ts b/plugins/scaffolder/src/index.ts index ef6764d853..2f3cd6b385 100644 --- a/plugins/scaffolder/src/index.ts +++ b/plugins/scaffolder/src/index.ts @@ -46,9 +46,8 @@ export * from './deprecated'; /** next exports */ export { NextScaffolderPage } from './plugin'; export { - EmbeddableWorkflow, - useGetCustomFields, EmbeddedScaffolderWorkflow, + type EmbeddedScaffolderWorkflowProps, type WorkflowProps, type ReviewStateProps, type ParsedTemplateSchema, diff --git a/plugins/scaffolder/src/next/EmbeddedScaffolderWorkflow/EmbeddedScaffolderWorkflow.tsx b/plugins/scaffolder/src/next/EmbeddedScaffolderWorkflow/EmbeddedScaffolderWorkflow.tsx index 1daf3b4aab..04652ce54e 100644 --- a/plugins/scaffolder/src/next/EmbeddedScaffolderWorkflow/EmbeddedScaffolderWorkflow.tsx +++ b/plugins/scaffolder/src/next/EmbeddedScaffolderWorkflow/EmbeddedScaffolderWorkflow.tsx @@ -17,12 +17,15 @@ import React, { useState, useCallback } from 'react'; import type { ReactNode } from 'react'; import type { JsonValue } from '@backstage/types'; -import { EmbeddableWorkflow, WorkflowProps } from '../Workflow/Workflow'; -import { FormProps } from '@backstage/plugin-scaffolder-react'; -import { useGetCustomFields } from '../Router'; +import { EmbeddableWorkflow, type WorkflowProps } from '../Workflow/Workflow'; +import { FormProps, useCustomFieldExtensions } from '@backstage/plugin-scaffolder-react'; import { Box, Button } from '@material-ui/core'; +import { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from '../../extensions/default'; -type EmbeddedWorkflowProps = Omit< +/** + * @alpha + */ +export type EmbeddedScaffolderWorkflowProps = Omit< WorkflowProps, 'customFieldExtensions' | 'onComplete' > & { @@ -41,6 +44,10 @@ type DisplayComponents = Record; type OnCompleteArgs = Parameters[0]; +/** + * Allows the EmbeddableWorkflow to be called from outside of a normal scaffolder workflow + * @alpha + */ export function EmbeddedScaffolderWorkflow({ namespace, templateName, @@ -52,9 +59,9 @@ export function EmbeddedScaffolderWorkflow({ title, description, ReviewStateWrapper, -}: EmbeddedWorkflowProps): JSX.Element { +}: EmbeddedScaffolderWorkflowProps): JSX.Element { const [display, setDisplay] = useState('front'); - const fieldExtensions = useGetCustomFields(customExtensionsElement); + const fieldExtensions = useCustomFieldExtensions(customExtensionsElement, DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS); const startTemplate = useCallback(() => setDisplay('workflow'), []); diff --git a/plugins/scaffolder/src/next/EmbeddedScaffolderWorkflow/index.ts b/plugins/scaffolder/src/next/EmbeddedScaffolderWorkflow/index.ts index 06c230cbb2..3b646398d1 100644 --- a/plugins/scaffolder/src/next/EmbeddedScaffolderWorkflow/index.ts +++ b/plugins/scaffolder/src/next/EmbeddedScaffolderWorkflow/index.ts @@ -13,4 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { EmbeddedScaffolderWorkflow } from './EmbeddedScaffolderWorkflow'; +export { + EmbeddedScaffolderWorkflow, + type EmbeddedScaffolderWorkflowProps, +} from './EmbeddedScaffolderWorkflow'; diff --git a/plugins/scaffolder/src/next/Router/index.ts b/plugins/scaffolder/src/next/Router/index.ts index b4df375d1d..dac1db7b3a 100644 --- a/plugins/scaffolder/src/next/Router/index.ts +++ b/plugins/scaffolder/src/next/Router/index.ts @@ -13,5 +13,5 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { Router, useGetCustomFields } from './Router'; +export { Router } from './Router'; export type { NextRouterProps } from './Router'; diff --git a/plugins/scaffolder/src/next/Workflow/Workflow.tsx b/plugins/scaffolder/src/next/Workflow/Workflow.tsx index 6a3af93714..eaeac163a7 100644 --- a/plugins/scaffolder/src/next/Workflow/Workflow.tsx +++ b/plugins/scaffolder/src/next/Workflow/Workflow.tsx @@ -121,9 +121,6 @@ export const Workflow = ({ ); }; -/** - * @alpha - */ export const EmbeddableWorkflow = (props: WorkflowProps) => ( diff --git a/plugins/scaffolder/src/next/Workflow/index.ts b/plugins/scaffolder/src/next/Workflow/index.ts index ad4b5bed8d..55ac44a29c 100644 --- a/plugins/scaffolder/src/next/Workflow/index.ts +++ b/plugins/scaffolder/src/next/Workflow/index.ts @@ -13,4 +13,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { type WorkflowProps, Workflow, EmbeddableWorkflow } from './Workflow'; +export { EmbeddableWorkflow, type WorkflowProps } from './Workflow'; diff --git a/plugins/scaffolder/src/next/index.ts b/plugins/scaffolder/src/next/index.ts index 2885354633..c03e7f9aa4 100644 --- a/plugins/scaffolder/src/next/index.ts +++ b/plugins/scaffolder/src/next/index.ts @@ -19,3 +19,6 @@ export * from './TemplateWizardPage'; export * from './types'; export * from './routes'; export * from './Workflow'; +export * from './EmbeddedScaffolderWorkflow'; +export type { WorkflowProps } from './Workflow'; +