From 51bbece433482db15fc963e77485451bb60f25a2 Mon Sep 17 00:00:00 2001 From: Jos Craw Date: Sat, 7 Aug 2021 00:38:30 +1200 Subject: [PATCH 1/5] feat: added support for ui schema on array items Signed-off-by: Jos Craw --- .../scaffolder/src/components/MultistepJsonForm/schema.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/scaffolder/src/components/MultistepJsonForm/schema.ts b/plugins/scaffolder/src/components/MultistepJsonForm/schema.ts index ee2dbce406..71a60fdd48 100644 --- a/plugins/scaffolder/src/components/MultistepJsonForm/schema.ts +++ b/plugins/scaffolder/src/components/MultistepJsonForm/schema.ts @@ -26,7 +26,7 @@ function extractUiSchema(schema: JsonObject, uiSchema: JsonObject) { return; } - const { properties, anyOf, oneOf, allOf, dependencies } = schema; + const { properties, items, anyOf, oneOf, allOf, dependencies } = schema; for (const propName in schema) { if (!schema.hasOwnProperty(propName)) { @@ -55,6 +55,12 @@ function extractUiSchema(schema: JsonObject, uiSchema: JsonObject) { } } + if (isObject(items)) { + const innerUiSchema = {}; + uiSchema.items = innerUiSchema; + extractUiSchema(items, innerUiSchema); + } + if (Array.isArray(anyOf)) { for (const schemaNode of anyOf) { if (!isObject(schemaNode)) { From 67f80c74f6683dc8b51981c37e373d4bb9c188a5 Mon Sep 17 00:00:00 2001 From: Jos Craw Date: Sat, 7 Aug 2021 00:45:12 +1200 Subject: [PATCH 2/5] added changeset Signed-off-by: Jos Craw --- .changeset/perfect-colts-crash.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/perfect-colts-crash.md diff --git a/.changeset/perfect-colts-crash.md b/.changeset/perfect-colts-crash.md new file mode 100644 index 0000000000..78c07003b1 --- /dev/null +++ b/.changeset/perfect-colts-crash.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': minor +--- + +Added UI Schema support for array items eg. support EntityPicker within an array field From cfe17f43a435a92a9041303691fa0b510d8baedb Mon Sep 17 00:00:00 2001 From: Jos Craw Date: Sat, 7 Aug 2021 01:02:09 +1200 Subject: [PATCH 3/5] chore: added tests Signed-off-by: Jos Craw --- .../MultistepJsonForm/schema.test.ts | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/plugins/scaffolder/src/components/MultistepJsonForm/schema.test.ts b/plugins/scaffolder/src/components/MultistepJsonForm/schema.test.ts index b51d01f719..ef6b582021 100644 --- a/plugins/scaffolder/src/components/MultistepJsonForm/schema.test.ts +++ b/plugins/scaffolder/src/components/MultistepJsonForm/schema.test.ts @@ -346,4 +346,68 @@ describe('transformSchemaToProps', () => { uiSchema: expectedUiSchema, }); }); + + it('transforms schema with array items', () => { + const inputSchema = { + type: 'object', + properties: { + person: { + type: 'array', + items: { + type: 'object', + properties: { + name: { + type: 'string', + }, + address: { + type: 'string', + 'ui:widget': 'textarea', + }, + }, + }, + }, + accountNumber: { + type: 'number', + }, + }, + }; + const expectedSchema = { + type: 'object', + properties: { + person: { + type: 'array', + items: { + type: 'object', + properties: { + name: { + type: 'string', + }, + address: { + type: 'string', + }, + }, + }, + }, + accountNumber: { + type: 'number', + }, + }, + }; + const expectedUiSchema = { + accountNumber: {}, + person: { + items: { + name: {}, + address: { + 'ui:widget': 'textarea', + }, + }, + }, + }; + + expect(transformSchemaToProps(inputSchema)).toEqual({ + schema: expectedSchema, + uiSchema: expectedUiSchema, + }); + }); }); From 7894421f14dc4031c7ac2896fb9e7182ec0f7125 Mon Sep 17 00:00:00 2001 From: Jos Craw Date: Sat, 7 Aug 2021 01:07:56 +1200 Subject: [PATCH 4/5] chore: changed minor version to patch Signed-off-by: Jos Craw --- .changeset/{perfect-colts-crash.md => green-ducks-tan.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .changeset/{perfect-colts-crash.md => green-ducks-tan.md} (71%) diff --git a/.changeset/perfect-colts-crash.md b/.changeset/green-ducks-tan.md similarity index 71% rename from .changeset/perfect-colts-crash.md rename to .changeset/green-ducks-tan.md index 78c07003b1..9c8620e739 100644 --- a/.changeset/perfect-colts-crash.md +++ b/.changeset/green-ducks-tan.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-scaffolder': minor +'@backstage/plugin-scaffolder': patch --- Added UI Schema support for array items eg. support EntityPicker within an array field From 95a9308bb31f8f260aeb3b0cb5cf979cf24f8074 Mon Sep 17 00:00:00 2001 From: Jos Craw Date: Sat, 7 Aug 2021 01:11:50 +1200 Subject: [PATCH 5/5] chore: changed eg. to support markdown linter Signed-off-by: Jos Craw --- .changeset/green-ducks-tan.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/green-ducks-tan.md b/.changeset/green-ducks-tan.md index 9c8620e739..e096bfeb36 100644 --- a/.changeset/green-ducks-tan.md +++ b/.changeset/green-ducks-tan.md @@ -2,4 +2,4 @@ '@backstage/plugin-scaffolder': patch --- -Added UI Schema support for array items eg. support EntityPicker within an array field +Added UI Schema support for array items for example, support EntityPicker within an array field