diff --git a/.changeset/brown-cycles-beg.md b/.changeset/brown-cycles-beg.md new file mode 100644 index 0000000000..78e6e3e73f --- /dev/null +++ b/.changeset/brown-cycles-beg.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-react': patch +--- + +Adds an option to hide text output buttons diff --git a/plugins/scaffolder-react/src/api/types.ts b/plugins/scaffolder-react/src/api/types.ts index 8e4d989a55..6284e8dcaa 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; + showButton?: boolean; default?: boolean; }; diff --git a/plugins/scaffolder-react/src/next/components/TemplateOutputs/DefaultTemplateOutputs.test.tsx b/plugins/scaffolder-react/src/next/components/TemplateOutputs/DefaultTemplateOutputs.test.tsx index 7ec3b0867c..d0849f6027 100644 --- a/plugins/scaffolder-react/src/next/components/TemplateOutputs/DefaultTemplateOutputs.test.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateOutputs/DefaultTemplateOutputs.test.tsx @@ -78,4 +78,22 @@ describe('', () => { expect(queryByTestId('output-box')).toBeNull(); expect(queryByTestId('text-output-box')).toBeNull(); }); + it('should not render the link output box when output only contains text with showButton set to false', async () => { + const output = { + text: [ + { title: 'Text 1', content: 'Hello, **world**!', showButton: false }, + { title: 'Text 2', content: 'Hello, **mars**!', showButton: false }, + ], + }; + const { queryByTestId } = await renderInTestApp( + , + { + mountedRoutes: { + '/catalog/:namespace/:kind/:name': entityRouteRef, + }, + }, + ); + + expect(queryByTestId('output-box')).toBeNull(); + }); }); diff --git a/plugins/scaffolder-react/src/next/components/TemplateOutputs/DefaultTemplateOutputs.tsx b/plugins/scaffolder-react/src/next/components/TemplateOutputs/DefaultTemplateOutputs.tsx index 70f3b1fa59..9788d194ae 100644 --- a/plugins/scaffolder-react/src/next/components/TemplateOutputs/DefaultTemplateOutputs.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateOutputs/DefaultTemplateOutputs.tsx @@ -56,7 +56,9 @@ export const DefaultTemplateOutputs = (props: { return null; } - const emptyOutput = Object.keys(output).length === 0; + const emptyOutput = + (output.links || []).length === 0 && + Object.values(output.text || {}).filter(o => o.showButton).length === 0; return ( <> diff --git a/plugins/scaffolder-react/src/next/components/TemplateOutputs/TextOutputs.tsx b/plugins/scaffolder-react/src/next/components/TemplateOutputs/TextOutputs.tsx index 5da1dab476..373db4d632 100644 --- a/plugins/scaffolder-react/src/next/components/TemplateOutputs/TextOutputs.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateOutputs/TextOutputs.tsx @@ -39,23 +39,25 @@ export const TextOutputs = (props: { <> {text .filter(({ content }) => content !== undefined) - .map(({ title, icon }, i) => { + .map(({ title, icon, showButton = true }, i) => { const Icon = iconResolver(icon); return ( - + showButton && ( + + ) ); })}