From fa28d4e6dfcbee2bc8695b7b24289a401df96acd Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 4 Nov 2023 23:02:34 +0100 Subject: [PATCH 1/2] frontend-app-api: no longer error on invalid disabled inputs Signed-off-by: Patrik Oldsberg --- .changeset/selfish-flies-kneel.md | 5 +++++ .../frontend-app-api/src/tree/instantiateAppNodeTree.test.ts | 3 ++- packages/frontend-app-api/src/tree/instantiateAppNodeTree.ts | 4 +++- 3 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 .changeset/selfish-flies-kneel.md diff --git a/.changeset/selfish-flies-kneel.md b/.changeset/selfish-flies-kneel.md new file mode 100644 index 0000000000..0f13f11d11 --- /dev/null +++ b/.changeset/selfish-flies-kneel.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-app-api': patch +--- + +No longer throw error on invalid input if the child is disabled. diff --git a/packages/frontend-app-api/src/tree/instantiateAppNodeTree.test.ts b/packages/frontend-app-api/src/tree/instantiateAppNodeTree.test.ts index 2f4a112166..ff244b53f4 100644 --- a/packages/frontend-app-api/src/tree/instantiateAppNodeTree.test.ts +++ b/packages/frontend-app-api/src/tree/instantiateAppNodeTree.test.ts @@ -167,7 +167,8 @@ describe('instantiateAppNodeTree', () => { { ...makeSpec(simpleExtension), id: 'child-node', - attachTo: { id: 'root-node', input: 'test' }, + // Using an invalid input should not be an error when disabled + attachTo: { id: 'root-node', input: 'invalid' }, disabled: true, }, ]); diff --git a/packages/frontend-app-api/src/tree/instantiateAppNodeTree.ts b/packages/frontend-app-api/src/tree/instantiateAppNodeTree.ts index b6e4179867..912bafaab4 100644 --- a/packages/frontend-app-api/src/tree/instantiateAppNodeTree.ts +++ b/packages/frontend-app-api/src/tree/instantiateAppNodeTree.ts @@ -176,7 +176,9 @@ export function instantiateAppNodeTree(rootNode: AppNode): void { } return [{ id: child.spec.id, instance: childInstance }]; }); - instantiatedAttachments.set(input, instantiatedChildren); + if (instantiatedChildren.length > 0) { + instantiatedAttachments.set(input, instantiatedChildren); + } } (node as Mutable).instance = createAppNodeInstance({ From fdc348d5d30a98b52d8a756daba29d616418da93 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 4 Nov 2023 23:04:21 +0100 Subject: [PATCH 2/2] frontend-app-api: make createApp options optional Signed-off-by: Patrik Oldsberg --- .changeset/healthy-dancers-dream.md | 5 +++++ packages/frontend-app-api/api-report.md | 2 +- packages/frontend-app-api/src/wiring/createApp.tsx | 8 ++++---- 3 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 .changeset/healthy-dancers-dream.md diff --git a/.changeset/healthy-dancers-dream.md b/.changeset/healthy-dancers-dream.md new file mode 100644 index 0000000000..6a9869f03a --- /dev/null +++ b/.changeset/healthy-dancers-dream.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-app-api': patch +--- + +The options parameter of `createApp` is now optional. diff --git a/packages/frontend-app-api/api-report.md b/packages/frontend-app-api/api-report.md index 11c9ac03c5..3d6d936018 100644 --- a/packages/frontend-app-api/api-report.md +++ b/packages/frontend-app-api/api-report.md @@ -27,7 +27,7 @@ export type AppRouteBinder = < ) => void; // @public (undocumented) -export function createApp(options: { +export function createApp(options?: { features?: (BackstagePlugin | ExtensionOverrides)[]; configLoader?: () => Promise; bindRoutes?(context: { bind: AppRouteBinder }): void; diff --git a/packages/frontend-app-api/src/wiring/createApp.tsx b/packages/frontend-app-api/src/wiring/createApp.tsx index d726773fd3..ef37b695df 100644 --- a/packages/frontend-app-api/src/wiring/createApp.tsx +++ b/packages/frontend-app-api/src/wiring/createApp.tsx @@ -222,7 +222,7 @@ function deduplicateFeatures( } /** @public */ -export function createApp(options: { +export function createApp(options?: { features?: (BackstagePlugin | ExtensionOverrides)[]; configLoader?: () => Promise; bindRoutes?(context: { bind: AppRouteBinder }): void; @@ -240,11 +240,11 @@ export function createApp(options: { ); const discoveredFeatures = getAvailableFeatures(config); - const loadedFeatures = (await options.featureLoader?.({ config })) ?? []; + const loadedFeatures = (await options?.featureLoader?.({ config })) ?? []; const allFeatures = deduplicateFeatures([ ...discoveredFeatures, ...loadedFeatures, - ...(options.features ?? []), + ...(options?.features ?? []), ]); const tree = createAppTree({ @@ -268,7 +268,7 @@ export function createApp(options: {