From 0b0c6b6dcb4a80d10f1778653ca6bbba6348ea97 Mon Sep 17 00:00:00 2001 From: Heikki Hellgren Date: Fri, 19 Jan 2024 13:38:53 +0200 Subject: [PATCH] feat: allow defining the default text output in template the previous #22243 did not even work as the output.text is not defined when mounting the component. but this fixes that and also allows to define the default output text for scaffolder template. Signed-off-by: Heikki Hellgren --- .changeset/forty-cars-scream.md | 5 +++++ plugins/scaffolder-react/api-report.md | 1 + plugins/scaffolder-react/src/api/types.ts | 1 + .../TemplateOutputs/DefaultTemplateOutputs.tsx | 18 +++++++++++++++--- 4 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 .changeset/forty-cars-scream.md diff --git a/.changeset/forty-cars-scream.md b/.changeset/forty-cars-scream.md new file mode 100644 index 0000000000..284acc3c44 --- /dev/null +++ b/.changeset/forty-cars-scream.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-react': patch +--- + +Allow defining default output text to be shown diff --git a/plugins/scaffolder-react/api-report.md b/plugins/scaffolder-react/api-report.md index 8589078f1e..078d4a7415 100644 --- a/plugins/scaffolder-react/api-report.md +++ b/plugins/scaffolder-react/api-report.md @@ -277,6 +277,7 @@ export type ScaffolderOutputText = { title?: string; icon?: string; content?: string; + default?: boolean; }; // @public diff --git a/plugins/scaffolder-react/src/api/types.ts b/plugins/scaffolder-react/src/api/types.ts index 2adecdd0d2..fba198e515 100644 --- a/plugins/scaffolder-react/src/api/types.ts +++ b/plugins/scaffolder-react/src/api/types.ts @@ -89,6 +89,7 @@ export type ScaffolderOutputText = { title?: string; icon?: string; content?: string; + default?: boolean; }; /** @public */ diff --git a/plugins/scaffolder-react/src/next/components/TemplateOutputs/DefaultTemplateOutputs.tsx b/plugins/scaffolder-react/src/next/components/TemplateOutputs/DefaultTemplateOutputs.tsx index c105c5a571..d3811e5011 100644 --- a/plugins/scaffolder-react/src/next/components/TemplateOutputs/DefaultTemplateOutputs.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateOutputs/DefaultTemplateOutputs.tsx @@ -14,9 +14,12 @@ * limitations under the License. */ import { InfoCard, MarkdownContent } from '@backstage/core-components'; -import { ScaffolderTaskOutput } from '@backstage/plugin-scaffolder-react'; +import { + ScaffolderOutputText, + ScaffolderTaskOutput, +} from '@backstage/plugin-scaffolder-react'; import { Box, Paper } from '@material-ui/core'; -import React, { useMemo, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { LinkOutputs } from './LinkOutputs'; import { TextOutputs } from './TextOutputs'; @@ -30,9 +33,18 @@ export const DefaultTemplateOutputs = (props: { }) => { const { output } = props; const [textOutputIndex, setTextOutputIndex] = useState( - output?.text?.length ? 0 : undefined, + undefined, ); + useEffect(() => { + if (textOutputIndex === undefined && output?.text) { + const defaultIndex = output.text.findIndex( + (t: ScaffolderOutputText) => t.default, + ); + setTextOutputIndex(defaultIndex >= 0 ? defaultIndex : 0); + } + }, [textOutputIndex, output]); + const textOutput = useMemo( () => textOutputIndex !== undefined ? output?.text?.[textOutputIndex] : null,