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 (
- }
- component="div"
- color="primary"
- onClick={() => {
- if (index !== i) {
- setIndex?.(i);
- }
- }}
- variant={index === i ? 'outlined' : undefined}
- >
- {title}
-
+ showButton && (
+ }
+ component="div"
+ color="primary"
+ onClick={() => {
+ if (index !== i) {
+ setIndex?.(i);
+ }
+ }}
+ variant={index === i ? 'outlined' : undefined}
+ >
+ {title}
+
+ )
);
})}
>