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 (
{