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,