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 <heikki.hellgren@op.fi>
This commit is contained in:
Heikki Hellgren
2024-01-19 13:38:53 +02:00
parent 4021ccce5e
commit 0b0c6b6dcb
4 changed files with 22 additions and 3 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-react': patch
---
Allow defining default output text to be shown
+1
View File
@@ -277,6 +277,7 @@ export type ScaffolderOutputText = {
title?: string;
icon?: string;
content?: string;
default?: boolean;
};
// @public
@@ -89,6 +89,7 @@ export type ScaffolderOutputText = {
title?: string;
icon?: string;
content?: string;
default?: boolean;
};
/** @public */
@@ -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<number | undefined>(
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,