diff --git a/package.json b/package.json index a0de99bfad..da8f193d3a 100644 --- a/package.json +++ b/package.json @@ -93,5 +93,8 @@ "node ./scripts/check-docs-quality" ] }, - "packageManager": "yarn@3.2.3" + "packageManager": "yarn@3.2.3", + "volta": { + "node": "14.19.3" + } } diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx index 9969a0fcdc..7e49ad5087 100644 --- a/packages/app/src/App.tsx +++ b/packages/app/src/App.tsx @@ -105,7 +105,10 @@ import { ApacheAirflowPage } from '@backstage/plugin-apache-airflow'; import { RequirePermission } from '@backstage/plugin-permission-react'; import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common'; import { PlaylistIndexPage } from '@backstage/plugin-playlist'; -import { Customlayout } from './components/scaffolder/customScaffolderLayouts'; +import { + AnotherCustomlayout, + CustomLayout, +} from './components/scaffolder/customScaffolderLayouts'; const app = createApp({ apis, @@ -222,7 +225,8 @@ const routes = ( - + + diff --git a/packages/app/src/components/scaffolder/customScaffolderLayouts.tsx b/packages/app/src/components/scaffolder/customScaffolderLayouts.tsx index 0fd4bed2d0..065a1ca780 100644 --- a/packages/app/src/components/scaffolder/customScaffolderLayouts.tsx +++ b/packages/app/src/components/scaffolder/customScaffolderLayouts.tsx @@ -35,9 +35,34 @@ const ALayout: ObjectFieldTemplate = ({ properties, description }) => { ); }; -export const Customlayout = scaffolderPlugin.provide( +const AnotherCustomLayout: ObjectFieldTemplate = ({ + properties, + description, +}) => { + // eslint-disable-next-line no-console + return ( +
+

ANOTHER CUSTOM LAYOUT!!!!!

+
+ {properties.map(prop => ( +
{prop.content}
+ ))} +
+ {description} +
+ ); +}; + +export const CustomLayout = scaffolderPlugin.provide( createScaffolderLayout({ name: 'CustomLayout', component: ALayout, }), ); + +export const AnotherCustomlayout = scaffolderPlugin.provide( + createScaffolderLayout({ + name: 'AnotherCustomLayout', + component: AnotherCustomLayout, + }), +); diff --git a/packages/app/src/components/scaffolder/defaultPreviewTemplate.ts b/packages/app/src/components/scaffolder/defaultPreviewTemplate.ts index db0725591c..53805265ed 100644 --- a/packages/app/src/components/scaffolder/defaultPreviewTemplate.ts +++ b/packages/app/src/components/scaffolder/defaultPreviewTemplate.ts @@ -34,6 +34,7 @@ parameters: allowedKinds: - Group - title: Choose a location + ui:ObjectFieldTemplate: 'AnotherCustomLayout' required: - repoUrl properties: diff --git a/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx b/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx index c4384c2d04..c2050fe703 100644 --- a/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx +++ b/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx @@ -155,20 +155,6 @@ export const MultistepJsonForm = (props: Props) => { : filteredStep.schema.required; } - const layoutName = - filteredStep.schema['ui:ObjectFieldTemplate'] ?? - DEFAULT_SCAFFOLDER_LAYOUT.name; - - const LayoutComponent = layouts.find( - layout => layout.name === layoutName, - )?.component; - - if (!LayoutComponent) { - throw new Error(`no step layout found for ${layoutName}`); - } - - filteredStep.schema['ui:ObjectFieldTemplate'] = LayoutComponent as any; - return filteredStep; }; @@ -208,6 +194,22 @@ export const MultistepJsonForm = (props: Props) => { <> {steps.map(({ title, schema, ...formProps }, index) => { + const schemaProps = transformSchemaToProps(schema); + + const layoutName = + schemaProps.uiSchema?.['ui:ObjectFieldTemplate'] ?? + DEFAULT_SCAFFOLDER_LAYOUT.name; + + delete schemaProps.uiSchema?.['ui:ObjectFieldTemplate']; + + const LayoutComponent = layouts.find( + layout => layout.name === layoutName, + )?.component; + + if (!LayoutComponent) { + throw new Error(`no step layout found for ${layoutName}`); + } + return ( {
{ if (e.errors.length === 0) handleNext(); }} {...formProps} - {...transformSchemaToProps(schema)} + {...schemaProps} >