@backstage/plugin-scaffolder 1.28.0-next.2 → 1.28.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/dist/components/ActionsPage/ActionsPage.esm.js +8 -3
- package/dist/components/ActionsPage/ActionsPage.esm.js.map +1 -1
- package/dist/components/OngoingTask/OngoingTask.esm.js +17 -6
- package/dist/components/OngoingTask/OngoingTask.esm.js.map +1 -1
- package/package.json +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# @backstage/plugin-scaffolder
|
|
2
2
|
|
|
3
|
+
## 1.28.0-next.3
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 5d469c9: Added support for autocompletion of GitHub branches in scaffolder
|
|
8
|
+
- 8e67e4a: Added support for autocompletion to GithubRepoPicker component
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- 1e935f0: Added conditional rendering of `oneOf` output schemas on the Installed Actions page for scaffolder actions
|
|
13
|
+
- 65d7020: Use template title for ongoing task page header
|
|
14
|
+
- Updated dependencies
|
|
15
|
+
- @backstage/frontend-plugin-api@0.9.5-next.3
|
|
16
|
+
- @backstage/core-compat-api@0.3.6-next.3
|
|
17
|
+
- @backstage/plugin-scaffolder-react@1.14.5-next.3
|
|
18
|
+
- @backstage/catalog-client@1.9.1
|
|
19
|
+
- @backstage/catalog-model@1.7.3
|
|
20
|
+
- @backstage/core-components@0.16.4-next.1
|
|
21
|
+
- @backstage/core-plugin-api@1.10.4-next.0
|
|
22
|
+
- @backstage/errors@1.2.7
|
|
23
|
+
- @backstage/integration@1.16.1
|
|
24
|
+
- @backstage/integration-react@1.2.4-next.0
|
|
25
|
+
- @backstage/types@1.2.1
|
|
26
|
+
- @backstage/plugin-catalog-common@1.1.3
|
|
27
|
+
- @backstage/plugin-catalog-react@1.15.2-next.3
|
|
28
|
+
- @backstage/plugin-permission-react@0.4.31-next.0
|
|
29
|
+
- @backstage/plugin-scaffolder-common@1.5.9
|
|
30
|
+
|
|
3
31
|
## 1.28.0-next.2
|
|
4
32
|
|
|
5
33
|
### Patch Changes
|
|
@@ -193,11 +193,16 @@ const ActionPageContent = () => {
|
|
|
193
193
|
if (action.id.startsWith("legacy:")) {
|
|
194
194
|
return void 0;
|
|
195
195
|
}
|
|
196
|
-
const
|
|
196
|
+
const oneOfInput = renderTables(
|
|
197
197
|
"oneOf",
|
|
198
198
|
`${action.id}.input`,
|
|
199
199
|
action.schema?.input?.oneOf
|
|
200
200
|
);
|
|
201
|
+
const oneOfOutput = renderTables(
|
|
202
|
+
"oneOf",
|
|
203
|
+
`${action.id}.output`,
|
|
204
|
+
action.schema?.output?.oneOf
|
|
205
|
+
);
|
|
201
206
|
return /* @__PURE__ */ React.createElement(Box, { pb: 3, key: action.id }, /* @__PURE__ */ React.createElement(Box, { display: "flex", alignItems: "center" }, /* @__PURE__ */ React.createElement(
|
|
202
207
|
Typography,
|
|
203
208
|
{
|
|
@@ -216,9 +221,9 @@ const ActionPageContent = () => {
|
|
|
216
221
|
/* @__PURE__ */ React.createElement(LinkIcon, null)
|
|
217
222
|
)), action.description && /* @__PURE__ */ React.createElement(MarkdownContent, { content: action.description }), action.schema?.input && /* @__PURE__ */ React.createElement(Box, { pb: 2 }, /* @__PURE__ */ React.createElement(Typography, { variant: "h6", component: "h3" }, t("actionsPage.action.input")), renderTable(
|
|
218
223
|
formatRows(`${action.id}.input`, action?.schema?.input)
|
|
219
|
-
),
|
|
224
|
+
), oneOfInput), action.schema?.output && /* @__PURE__ */ React.createElement(Box, { pb: 2 }, /* @__PURE__ */ React.createElement(Typography, { variant: "h5", component: "h3" }, t("actionsPage.action.output")), renderTable(
|
|
220
225
|
formatRows(`${action.id}.output`, action?.schema?.output)
|
|
221
|
-
)), action.examples && /* @__PURE__ */ React.createElement(Accordion, null, /* @__PURE__ */ React.createElement(AccordionSummary, { expandIcon: /* @__PURE__ */ React.createElement(ExpandMoreIcon, null) }, /* @__PURE__ */ React.createElement(Typography, { variant: "h6", component: "h3" }, t("actionsPage.action.examples"))), /* @__PURE__ */ React.createElement(AccordionDetails, null, /* @__PURE__ */ React.createElement(Box, { pb: 2 }, /* @__PURE__ */ React.createElement(ExamplesTable, { examples: action.examples })))));
|
|
226
|
+
), oneOfOutput), action.examples && /* @__PURE__ */ React.createElement(Accordion, null, /* @__PURE__ */ React.createElement(AccordionSummary, { expandIcon: /* @__PURE__ */ React.createElement(ExpandMoreIcon, null) }, /* @__PURE__ */ React.createElement(Typography, { variant: "h6", component: "h3" }, t("actionsPage.action.examples"))), /* @__PURE__ */ React.createElement(AccordionDetails, null, /* @__PURE__ */ React.createElement(Box, { pb: 2 }, /* @__PURE__ */ React.createElement(ExamplesTable, { examples: action.examples })))));
|
|
222
227
|
}));
|
|
223
228
|
};
|
|
224
229
|
const ActionsPage = (props) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionsPage.esm.js","sources":["../../../src/components/ActionsPage/ActionsPage.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React, { Fragment, useEffect, useState } from 'react';\nimport useAsync from 'react-use/esm/useAsync';\nimport {\n Action,\n ActionExample,\n scaffolderApiRef,\n} from '@backstage/plugin-scaffolder-react';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Box from '@material-ui/core/Box';\nimport Collapse from '@material-ui/core/Collapse';\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableContainer from '@material-ui/core/TableContainer';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { JSONSchema7, JSONSchema7Definition } from 'json-schema';\nimport classNames from 'classnames';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\nimport LinkIcon from '@material-ui/icons/Link';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport TextField from '@material-ui/core/TextField';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport SearchIcon from '@material-ui/icons/Search';\n\nimport { useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport {\n CodeSnippet,\n Content,\n EmptyState,\n ErrorPanel,\n Header,\n Link,\n MarkdownContent,\n Page,\n Progress,\n} from '@backstage/core-components';\nimport Chip from '@material-ui/core/Chip';\nimport { ScaffolderPageContextMenu } from '@backstage/plugin-scaffolder-react/alpha';\nimport { useNavigate } from 'react-router-dom';\nimport {\n editRouteRef,\n rootRouteRef,\n scaffolderListTaskRouteRef,\n} from '../../routes';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { scaffolderTranslationRef } from '../../translation';\n\nconst useStyles = makeStyles(theme => ({\n code: {\n fontFamily: 'Menlo, monospace',\n padding: theme.spacing(1),\n backgroundColor:\n theme.palette.type === 'dark'\n ? theme.palette.grey[700]\n : theme.palette.grey[300],\n display: 'inline-block',\n borderRadius: 5,\n border: `1px solid ${theme.palette.grey[500]}`,\n position: 'relative',\n },\n\n codeRequired: {\n '&::after': {\n position: 'absolute',\n content: '\"*\"',\n top: 0,\n right: theme.spacing(0.5),\n fontWeight: 'bolder',\n color: theme.palette.error.light,\n },\n },\n link: {\n paddingLeft: theme.spacing(1),\n },\n}));\n\nconst ExamplesTable = (props: { examples: ActionExample[] }) => {\n return (\n <Grid container>\n {props.examples.map((example, index) => {\n return (\n <Fragment key={`example-${index}`}>\n <Grid item lg={3}>\n <Box padding={4}>\n <Typography>{example.description}</Typography>\n </Box>\n </Grid>\n <Grid item lg={9}>\n <Box padding={1}>\n <CodeSnippet\n text={example.example}\n showLineNumbers\n showCopyCodeButton\n language=\"yaml\"\n />\n </Box>\n </Grid>\n </Fragment>\n );\n })}\n </Grid>\n );\n};\n\nexport const ActionPageContent = () => {\n const api = useApi(scaffolderApiRef);\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n const classes = useStyles();\n const {\n loading,\n value = [],\n error,\n } = useAsync(async () => {\n return api.listActions();\n }, [api]);\n\n const [selectedAction, setSelectedAction] = useState<Action | null>(null);\n const [isExpanded, setIsExpanded] = useState<{ [key: string]: boolean }>({});\n\n useEffect(() => {\n if (value.length && window.location.hash) {\n document.querySelector(window.location.hash)?.scrollIntoView();\n }\n }, [value]);\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n return (\n <>\n <ErrorPanel error={error} />\n <EmptyState\n missing=\"info\"\n title={t('actionsPage.content.emptyState.title')}\n description={t('actionsPage.content.emptyState.description')}\n />\n </>\n );\n }\n\n const renderTable = (rows?: JSX.Element[]) => {\n if (!rows || rows.length < 1) {\n return (\n <Typography>{t('actionsPage.content.noRowsDescription')}</Typography>\n );\n }\n return (\n <TableContainer component={Paper}>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>{t('actionsPage.content.tableCell.name')}</TableCell>\n <TableCell>{t('actionsPage.content.tableCell.title')}</TableCell>\n <TableCell>\n {t('actionsPage.content.tableCell.description')}\n </TableCell>\n <TableCell>{t('actionsPage.content.tableCell.type')}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>{rows}</TableBody>\n </Table>\n </TableContainer>\n );\n };\n\n const getTypes = (properties: JSONSchema7) => {\n if (!properties.type) {\n return ['unknown'];\n }\n\n if (properties.type !== 'array') {\n return [properties.type].flat();\n }\n\n return [\n `${properties.type}(${\n (properties.items as JSONSchema7 | undefined)?.type ?? 'unknown'\n })`,\n ];\n };\n\n const formatRows = (parentId: string, input?: JSONSchema7) => {\n const properties = input?.properties;\n if (!properties) {\n return undefined;\n }\n\n return Object.entries(properties).map(entry => {\n const [key] = entry;\n const id = `${parentId}.${key}`;\n const props = entry[1] as unknown as JSONSchema7;\n const codeClassname = classNames(classes.code, {\n [classes.codeRequired]: input.required?.includes(key),\n });\n const types = getTypes(props);\n\n return (\n <React.Fragment key={id}>\n <TableRow key={id}>\n <TableCell>\n <div className={codeClassname}>{key}</div>\n </TableCell>\n <TableCell>{props.title}</TableCell>\n <TableCell>{props.description}</TableCell>\n <TableCell>\n {types.map(type =>\n type.includes('object') ? (\n <Chip\n label={type}\n key={type}\n icon={\n isExpanded[id] ? <ExpandLessIcon /> : <ExpandMoreIcon />\n }\n variant=\"outlined\"\n onClick={() =>\n setIsExpanded(prevState => {\n const state = { ...prevState };\n state[id] = !prevState[id];\n return state;\n })\n }\n />\n ) : (\n <Chip label={type} key={type} variant=\"outlined\" />\n ),\n )}\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell style={{ paddingBottom: 0, paddingTop: 0 }} colSpan={6}>\n <Collapse in={isExpanded[id]} timeout=\"auto\" unmountOnExit>\n <Box sx={{ margin: 1 }}>\n <Typography variant=\"h6\" component=\"div\">\n {key}\n </Typography>\n {renderTable(\n formatRows(\n id,\n props.type === 'array'\n ? ({\n properties:\n (props.items as JSONSchema7 | undefined)\n ?.properties ?? {},\n } as unknown as JSONSchema7 | undefined)\n : props,\n ),\n )}\n </Box>\n </Collapse>\n </TableCell>\n </TableRow>\n </React.Fragment>\n );\n });\n };\n\n const renderTables = (\n name: string,\n id: string,\n input?: JSONSchema7Definition[],\n ) => {\n if (!input) {\n return undefined;\n }\n\n return (\n <>\n <Typography variant=\"h6\" component=\"h4\">\n {name}\n </Typography>\n {input.map((i, index) => (\n <div key={index}>\n {renderTable(\n formatRows(`${id}.${index}`, i as unknown as JSONSchema7),\n )}\n </div>\n ))}\n </>\n );\n };\n\n return (\n <>\n <Box pb={3}>\n <Autocomplete\n id=\"actions-autocomplete\"\n options={value}\n loading={loading}\n getOptionLabel={option => option.id}\n renderInput={params => (\n <TextField\n {...params}\n aria-label={t('actionsPage.content.searchFieldPlaceholder')}\n placeholder={t('actionsPage.content.searchFieldPlaceholder')}\n variant=\"outlined\"\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n }}\n />\n )}\n onChange={(_event, option) => {\n setSelectedAction(option);\n }}\n fullWidth\n />\n </Box>\n {(selectedAction ? [selectedAction] : value).map(action => {\n if (action.id.startsWith('legacy:')) {\n return undefined;\n }\n\n const oneOf = renderTables(\n 'oneOf',\n `${action.id}.input`,\n action.schema?.input?.oneOf,\n );\n return (\n <Box pb={3} key={action.id}>\n <Box display=\"flex\" alignItems=\"center\">\n <Typography\n id={action.id.replaceAll(':', '-')}\n variant=\"h5\"\n component=\"h2\"\n className={classes.code}\n >\n {action.id}\n </Typography>\n <Link\n className={classes.link}\n to={`#${action.id.replaceAll(':', '-')}`}\n >\n <LinkIcon />\n </Link>\n </Box>\n {action.description && (\n <MarkdownContent content={action.description} />\n )}\n {action.schema?.input && (\n <Box pb={2}>\n <Typography variant=\"h6\" component=\"h3\">\n {t('actionsPage.action.input')}\n </Typography>\n {renderTable(\n formatRows(`${action.id}.input`, action?.schema?.input),\n )}\n {oneOf}\n </Box>\n )}\n {action.schema?.output && (\n <Box pb={2}>\n <Typography variant=\"h5\" component=\"h3\">\n {t('actionsPage.action.output')}\n </Typography>\n {renderTable(\n formatRows(`${action.id}.output`, action?.schema?.output),\n )}\n </Box>\n )}\n {action.examples && (\n <Accordion>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography variant=\"h6\" component=\"h3\">\n {t('actionsPage.action.examples')}\n </Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Box pb={2}>\n <ExamplesTable examples={action.examples} />\n </Box>\n </AccordionDetails>\n </Accordion>\n )}\n </Box>\n );\n })}\n </>\n );\n};\n\nexport type ActionsPageProps = {\n contextMenu?: {\n editor?: boolean;\n tasks?: boolean;\n create?: boolean;\n };\n};\n\nexport const ActionsPage = (props: ActionsPageProps) => {\n const navigate = useNavigate();\n const editorLink = useRouteRef(editRouteRef);\n const tasksLink = useRouteRef(scaffolderListTaskRouteRef);\n const createLink = useRouteRef(rootRouteRef);\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n const scaffolderPageContextMenuProps = {\n onEditorClicked:\n props?.contextMenu?.editor !== false\n ? () => navigate(editorLink())\n : undefined,\n onActionsClicked: undefined,\n onTasksClicked:\n props?.contextMenu?.tasks !== false\n ? () => navigate(tasksLink())\n : undefined,\n onCreateClicked:\n props?.contextMenu?.create !== false\n ? () => navigate(createLink())\n : undefined,\n };\n\n return (\n <Page themeId=\"home\">\n <Header\n pageTitleOverride={t('actionsPage.pageTitle')}\n title={t('actionsPage.title')}\n subtitle={t('actionsPage.subtitle')}\n >\n <ScaffolderPageContextMenu {...scaffolderPageContextMenuProps} />\n </Header>\n <Content>\n <ActionPageContent />\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ActionsPage.esm.js","sources":["../../../src/components/ActionsPage/ActionsPage.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React, { Fragment, useEffect, useState } from 'react';\nimport useAsync from 'react-use/esm/useAsync';\nimport {\n Action,\n ActionExample,\n scaffolderApiRef,\n} from '@backstage/plugin-scaffolder-react';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Box from '@material-ui/core/Box';\nimport Collapse from '@material-ui/core/Collapse';\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableContainer from '@material-ui/core/TableContainer';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { JSONSchema7, JSONSchema7Definition } from 'json-schema';\nimport classNames from 'classnames';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\nimport LinkIcon from '@material-ui/icons/Link';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport TextField from '@material-ui/core/TextField';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport SearchIcon from '@material-ui/icons/Search';\n\nimport { useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport {\n CodeSnippet,\n Content,\n EmptyState,\n ErrorPanel,\n Header,\n Link,\n MarkdownContent,\n Page,\n Progress,\n} from '@backstage/core-components';\nimport Chip from '@material-ui/core/Chip';\nimport { ScaffolderPageContextMenu } from '@backstage/plugin-scaffolder-react/alpha';\nimport { useNavigate } from 'react-router-dom';\nimport {\n editRouteRef,\n rootRouteRef,\n scaffolderListTaskRouteRef,\n} from '../../routes';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { scaffolderTranslationRef } from '../../translation';\n\nconst useStyles = makeStyles(theme => ({\n code: {\n fontFamily: 'Menlo, monospace',\n padding: theme.spacing(1),\n backgroundColor:\n theme.palette.type === 'dark'\n ? theme.palette.grey[700]\n : theme.palette.grey[300],\n display: 'inline-block',\n borderRadius: 5,\n border: `1px solid ${theme.palette.grey[500]}`,\n position: 'relative',\n },\n\n codeRequired: {\n '&::after': {\n position: 'absolute',\n content: '\"*\"',\n top: 0,\n right: theme.spacing(0.5),\n fontWeight: 'bolder',\n color: theme.palette.error.light,\n },\n },\n link: {\n paddingLeft: theme.spacing(1),\n },\n}));\n\nconst ExamplesTable = (props: { examples: ActionExample[] }) => {\n return (\n <Grid container>\n {props.examples.map((example, index) => {\n return (\n <Fragment key={`example-${index}`}>\n <Grid item lg={3}>\n <Box padding={4}>\n <Typography>{example.description}</Typography>\n </Box>\n </Grid>\n <Grid item lg={9}>\n <Box padding={1}>\n <CodeSnippet\n text={example.example}\n showLineNumbers\n showCopyCodeButton\n language=\"yaml\"\n />\n </Box>\n </Grid>\n </Fragment>\n );\n })}\n </Grid>\n );\n};\n\nexport const ActionPageContent = () => {\n const api = useApi(scaffolderApiRef);\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n const classes = useStyles();\n const {\n loading,\n value = [],\n error,\n } = useAsync(async () => {\n return api.listActions();\n }, [api]);\n\n const [selectedAction, setSelectedAction] = useState<Action | null>(null);\n const [isExpanded, setIsExpanded] = useState<{ [key: string]: boolean }>({});\n\n useEffect(() => {\n if (value.length && window.location.hash) {\n document.querySelector(window.location.hash)?.scrollIntoView();\n }\n }, [value]);\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n return (\n <>\n <ErrorPanel error={error} />\n <EmptyState\n missing=\"info\"\n title={t('actionsPage.content.emptyState.title')}\n description={t('actionsPage.content.emptyState.description')}\n />\n </>\n );\n }\n\n const renderTable = (rows?: JSX.Element[]) => {\n if (!rows || rows.length < 1) {\n return (\n <Typography>{t('actionsPage.content.noRowsDescription')}</Typography>\n );\n }\n return (\n <TableContainer component={Paper}>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>{t('actionsPage.content.tableCell.name')}</TableCell>\n <TableCell>{t('actionsPage.content.tableCell.title')}</TableCell>\n <TableCell>\n {t('actionsPage.content.tableCell.description')}\n </TableCell>\n <TableCell>{t('actionsPage.content.tableCell.type')}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>{rows}</TableBody>\n </Table>\n </TableContainer>\n );\n };\n\n const getTypes = (properties: JSONSchema7) => {\n if (!properties.type) {\n return ['unknown'];\n }\n\n if (properties.type !== 'array') {\n return [properties.type].flat();\n }\n\n return [\n `${properties.type}(${\n (properties.items as JSONSchema7 | undefined)?.type ?? 'unknown'\n })`,\n ];\n };\n\n const formatRows = (parentId: string, input?: JSONSchema7) => {\n const properties = input?.properties;\n if (!properties) {\n return undefined;\n }\n\n return Object.entries(properties).map(entry => {\n const [key] = entry;\n const id = `${parentId}.${key}`;\n const props = entry[1] as unknown as JSONSchema7;\n const codeClassname = classNames(classes.code, {\n [classes.codeRequired]: input.required?.includes(key),\n });\n const types = getTypes(props);\n\n return (\n <React.Fragment key={id}>\n <TableRow key={id}>\n <TableCell>\n <div className={codeClassname}>{key}</div>\n </TableCell>\n <TableCell>{props.title}</TableCell>\n <TableCell>{props.description}</TableCell>\n <TableCell>\n {types.map(type =>\n type.includes('object') ? (\n <Chip\n label={type}\n key={type}\n icon={\n isExpanded[id] ? <ExpandLessIcon /> : <ExpandMoreIcon />\n }\n variant=\"outlined\"\n onClick={() =>\n setIsExpanded(prevState => {\n const state = { ...prevState };\n state[id] = !prevState[id];\n return state;\n })\n }\n />\n ) : (\n <Chip label={type} key={type} variant=\"outlined\" />\n ),\n )}\n </TableCell>\n </TableRow>\n <TableRow>\n <TableCell style={{ paddingBottom: 0, paddingTop: 0 }} colSpan={6}>\n <Collapse in={isExpanded[id]} timeout=\"auto\" unmountOnExit>\n <Box sx={{ margin: 1 }}>\n <Typography variant=\"h6\" component=\"div\">\n {key}\n </Typography>\n {renderTable(\n formatRows(\n id,\n props.type === 'array'\n ? ({\n properties:\n (props.items as JSONSchema7 | undefined)\n ?.properties ?? {},\n } as unknown as JSONSchema7 | undefined)\n : props,\n ),\n )}\n </Box>\n </Collapse>\n </TableCell>\n </TableRow>\n </React.Fragment>\n );\n });\n };\n\n const renderTables = (\n name: string,\n id: string,\n input?: JSONSchema7Definition[],\n ) => {\n if (!input) {\n return undefined;\n }\n\n return (\n <>\n <Typography variant=\"h6\" component=\"h4\">\n {name}\n </Typography>\n {input.map((i, index) => (\n <div key={index}>\n {renderTable(\n formatRows(`${id}.${index}`, i as unknown as JSONSchema7),\n )}\n </div>\n ))}\n </>\n );\n };\n\n return (\n <>\n <Box pb={3}>\n <Autocomplete\n id=\"actions-autocomplete\"\n options={value}\n loading={loading}\n getOptionLabel={option => option.id}\n renderInput={params => (\n <TextField\n {...params}\n aria-label={t('actionsPage.content.searchFieldPlaceholder')}\n placeholder={t('actionsPage.content.searchFieldPlaceholder')}\n variant=\"outlined\"\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n }}\n />\n )}\n onChange={(_event, option) => {\n setSelectedAction(option);\n }}\n fullWidth\n />\n </Box>\n {(selectedAction ? [selectedAction] : value).map(action => {\n if (action.id.startsWith('legacy:')) {\n return undefined;\n }\n\n const oneOfInput = renderTables(\n 'oneOf',\n `${action.id}.input`,\n action.schema?.input?.oneOf,\n );\n const oneOfOutput = renderTables(\n 'oneOf',\n `${action.id}.output`,\n action.schema?.output?.oneOf,\n );\n return (\n <Box pb={3} key={action.id}>\n <Box display=\"flex\" alignItems=\"center\">\n <Typography\n id={action.id.replaceAll(':', '-')}\n variant=\"h5\"\n component=\"h2\"\n className={classes.code}\n >\n {action.id}\n </Typography>\n <Link\n className={classes.link}\n to={`#${action.id.replaceAll(':', '-')}`}\n >\n <LinkIcon />\n </Link>\n </Box>\n {action.description && (\n <MarkdownContent content={action.description} />\n )}\n {action.schema?.input && (\n <Box pb={2}>\n <Typography variant=\"h6\" component=\"h3\">\n {t('actionsPage.action.input')}\n </Typography>\n {renderTable(\n formatRows(`${action.id}.input`, action?.schema?.input),\n )}\n {oneOfInput}\n </Box>\n )}\n {action.schema?.output && (\n <Box pb={2}>\n <Typography variant=\"h5\" component=\"h3\">\n {t('actionsPage.action.output')}\n </Typography>\n {renderTable(\n formatRows(`${action.id}.output`, action?.schema?.output),\n )}\n {oneOfOutput}\n </Box>\n )}\n {action.examples && (\n <Accordion>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography variant=\"h6\" component=\"h3\">\n {t('actionsPage.action.examples')}\n </Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Box pb={2}>\n <ExamplesTable examples={action.examples} />\n </Box>\n </AccordionDetails>\n </Accordion>\n )}\n </Box>\n );\n })}\n </>\n );\n};\n\nexport type ActionsPageProps = {\n contextMenu?: {\n editor?: boolean;\n tasks?: boolean;\n create?: boolean;\n };\n};\n\nexport const ActionsPage = (props: ActionsPageProps) => {\n const navigate = useNavigate();\n const editorLink = useRouteRef(editRouteRef);\n const tasksLink = useRouteRef(scaffolderListTaskRouteRef);\n const createLink = useRouteRef(rootRouteRef);\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n const scaffolderPageContextMenuProps = {\n onEditorClicked:\n props?.contextMenu?.editor !== false\n ? () => navigate(editorLink())\n : undefined,\n onActionsClicked: undefined,\n onTasksClicked:\n props?.contextMenu?.tasks !== false\n ? () => navigate(tasksLink())\n : undefined,\n onCreateClicked:\n props?.contextMenu?.create !== false\n ? () => navigate(createLink())\n : undefined,\n };\n\n return (\n <Page themeId=\"home\">\n <Header\n pageTitleOverride={t('actionsPage.pageTitle')}\n title={t('actionsPage.title')}\n subtitle={t('actionsPage.subtitle')}\n >\n <ScaffolderPageContextMenu {...scaffolderPageContextMenuProps} />\n </Header>\n <Content>\n <ActionPageContent />\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -11,11 +11,13 @@ import { useRouteRef, useAnalytics, useApi } from '@backstage/core-plugin-api';
|
|
|
11
11
|
import qs from 'qs';
|
|
12
12
|
import { ContextMenu } from './ContextMenu.esm.js';
|
|
13
13
|
import { DefaultTemplateOutputs, TaskSteps, TaskLogStream } from '@backstage/plugin-scaffolder-react/alpha';
|
|
14
|
-
import { useAsync } from '@react-hookz/web';
|
|
14
|
+
import { useAsync as useAsync$1 } from '@react-hookz/web';
|
|
15
15
|
import { usePermission } from '@backstage/plugin-permission-react';
|
|
16
16
|
import { taskCancelPermission, taskReadPermission, taskCreatePermission } from '@backstage/plugin-scaffolder-common/alpha';
|
|
17
17
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
18
18
|
import { scaffolderTranslationRef } from '../../translation.esm.js';
|
|
19
|
+
import { entityPresentationApiRef } from '@backstage/plugin-catalog-react';
|
|
20
|
+
import useAsync from 'react-use/esm/useAsync';
|
|
19
21
|
|
|
20
22
|
const useStyles = makeStyles((theme) => ({
|
|
21
23
|
contentWrapper: {
|
|
@@ -43,6 +45,7 @@ const OngoingTask = (props) => {
|
|
|
43
45
|
const navigate = useNavigate();
|
|
44
46
|
const analytics = useAnalytics();
|
|
45
47
|
const scaffolderApi = useApi(scaffolderApiRef);
|
|
48
|
+
const entityPresentationApi = useApi(entityPresentationApiRef);
|
|
46
49
|
const taskStream = useTaskEventStream(taskId);
|
|
47
50
|
const classes = useStyles();
|
|
48
51
|
const steps = useMemo(
|
|
@@ -76,6 +79,13 @@ const OngoingTask = (props) => {
|
|
|
76
79
|
setButtonBarVisibleState(false);
|
|
77
80
|
}
|
|
78
81
|
}, [taskStream.error, taskStream.completed]);
|
|
82
|
+
const { value: presentation } = useAsync(async () => {
|
|
83
|
+
const templateEntityRef = taskStream.task?.spec.templateInfo?.entityRef;
|
|
84
|
+
if (!templateEntityRef) {
|
|
85
|
+
return void 0;
|
|
86
|
+
}
|
|
87
|
+
return entityPresentationApi.forEntity(templateEntityRef).promise;
|
|
88
|
+
}, [entityPresentationApi, taskStream.task?.spec.templateInfo?.entityRef]);
|
|
79
89
|
const activeStep = useMemo(() => {
|
|
80
90
|
for (let i = steps.length - 1; i >= 0; i--) {
|
|
81
91
|
if (steps[i].status !== "open") {
|
|
@@ -107,13 +117,13 @@ const OngoingTask = (props) => {
|
|
|
107
117
|
taskStream.task?.spec.templateInfo?.entity?.metadata,
|
|
108
118
|
templateRouteRef
|
|
109
119
|
]);
|
|
110
|
-
const [{ status: _ }, { execute: triggerRetry }] = useAsync(async () => {
|
|
120
|
+
const [{ status: _ }, { execute: triggerRetry }] = useAsync$1(async () => {
|
|
111
121
|
if (taskId) {
|
|
112
122
|
analytics.captureEvent("retried", "Template has been retried");
|
|
113
123
|
await scaffolderApi.retry?.(taskId);
|
|
114
124
|
}
|
|
115
125
|
});
|
|
116
|
-
const [{ status: cancelStatus }, { execute: triggerCancel }] = useAsync(
|
|
126
|
+
const [{ status: cancelStatus }, { execute: triggerCancel }] = useAsync$1(
|
|
117
127
|
async () => {
|
|
118
128
|
if (taskId) {
|
|
119
129
|
analytics.captureEvent("cancelled", "Template has been cancelled");
|
|
@@ -122,13 +132,14 @@ const OngoingTask = (props) => {
|
|
|
122
132
|
}
|
|
123
133
|
);
|
|
124
134
|
const Outputs = props.TemplateOutputsComponent ?? DefaultTemplateOutputs;
|
|
125
|
-
const templateName = taskStream.task?.spec.templateInfo?.entity?.metadata.name || "";
|
|
126
135
|
const cancelEnabled = !(taskStream.cancelled || taskStream.completed);
|
|
127
136
|
return /* @__PURE__ */ React.createElement(Page, { themeId: "website" }, /* @__PURE__ */ React.createElement(
|
|
128
137
|
Header,
|
|
129
138
|
{
|
|
130
|
-
pageTitleOverride:
|
|
131
|
-
|
|
139
|
+
pageTitleOverride: presentation ? t("ongoingTask.pageTitle.hasTemplateName", {
|
|
140
|
+
templateName: presentation.primaryTitle
|
|
141
|
+
}) : t("ongoingTask.pageTitle.noTemplateName"),
|
|
142
|
+
title: /* @__PURE__ */ React.createElement("div", null, t("ongoingTask.title"), " ", /* @__PURE__ */ React.createElement("code", null, presentation ? presentation.primaryTitle : "")),
|
|
132
143
|
subtitle: t("ongoingTask.subtitle", { taskId })
|
|
133
144
|
},
|
|
134
145
|
/* @__PURE__ */ React.createElement(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OngoingTask.esm.js","sources":["../../../src/components/OngoingTask/OngoingTask.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Content, ErrorPanel, Header, Page } from '@backstage/core-components';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport Paper from '@material-ui/core/Paper';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n ScaffolderTaskOutput,\n scaffolderApiRef,\n useTaskEventStream,\n} from '@backstage/plugin-scaffolder-react';\nimport { selectedTemplateRouteRef } from '../../routes';\nimport { useAnalytics, useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport qs from 'qs';\nimport { ContextMenu } from './ContextMenu';\nimport {\n DefaultTemplateOutputs,\n TaskLogStream,\n TaskSteps,\n} from '@backstage/plugin-scaffolder-react/alpha';\nimport { useAsync } from '@react-hookz/web';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport {\n taskCancelPermission,\n taskReadPermission,\n taskCreatePermission,\n} from '@backstage/plugin-scaffolder-common/alpha';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { scaffolderTranslationRef } from '../../translation';\n\nconst useStyles = makeStyles(theme => ({\n contentWrapper: {\n display: 'flex',\n flexDirection: 'column',\n },\n buttonBar: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'right',\n },\n cancelButton: {\n marginRight: theme.spacing(1),\n },\n retryButton: {\n marginRight: theme.spacing(1),\n },\n logsVisibilityButton: {\n marginRight: theme.spacing(1),\n },\n}));\n\n/**\n * @public\n */\nexport const OngoingTask = (props: {\n TemplateOutputsComponent?: React.ComponentType<{\n output?: ScaffolderTaskOutput;\n }>;\n}) => {\n // todo(blam): check that task Id actually exists, and that it's valid. otherwise redirect to something more useful.\n const { taskId } = useParams();\n const templateRouteRef = useRouteRef(selectedTemplateRouteRef);\n const navigate = useNavigate();\n const analytics = useAnalytics();\n const scaffolderApi = useApi(scaffolderApiRef);\n const taskStream = useTaskEventStream(taskId!);\n const classes = useStyles();\n const steps = useMemo(\n () =>\n taskStream.task?.spec.steps.map(step => ({\n ...step,\n ...taskStream?.steps?.[step.id],\n })) ?? [],\n [taskStream],\n );\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n const [logsVisible, setLogVisibleState] = useState(false);\n const [buttonBarVisible, setButtonBarVisibleState] = useState(true);\n\n // Used dummy string value for `resourceRef` since `allowed` field will always return `false` if `resourceRef` is `undefined`\n const { allowed: canCancelTask } = usePermission({\n permission: taskCancelPermission,\n });\n\n const { allowed: canReadTask } = usePermission({\n permission: taskReadPermission,\n });\n\n const { allowed: canCreateTask } = usePermission({\n permission: taskCreatePermission,\n });\n\n // Start Over endpoint requires user to have both read (to grab parameters) and create (to create new task) permissions\n const canStartOver = canReadTask && canCreateTask;\n\n useEffect(() => {\n if (taskStream.error) {\n setLogVisibleState(true);\n }\n }, [taskStream.error]);\n\n useEffect(() => {\n if (taskStream.completed && !taskStream.error) {\n setLogVisibleState(true);\n setButtonBarVisibleState(false);\n }\n }, [taskStream.error, taskStream.completed]);\n\n const activeStep = useMemo(() => {\n for (let i = steps.length - 1; i >= 0; i--) {\n if (steps[i].status !== 'open') {\n return i;\n }\n }\n\n return 0;\n }, [steps]);\n\n const isRetryableTask =\n taskStream.task?.spec.EXPERIMENTAL_recovery?.EXPERIMENTAL_strategy ===\n 'startOver';\n\n const canRetry = canReadTask && canCreateTask && isRetryableTask;\n\n const startOver = useCallback(() => {\n const { namespace, name } =\n taskStream.task?.spec.templateInfo?.entity?.metadata ?? {};\n\n const formData = taskStream.task?.spec.parameters ?? {};\n\n if (!namespace || !name) {\n return;\n }\n\n analytics.captureEvent('click', `Task has been started over`);\n\n navigate({\n pathname: templateRouteRef({\n namespace,\n templateName: name,\n }),\n search: `?${qs.stringify({ formData: JSON.stringify(formData) })}`,\n });\n }, [\n analytics,\n navigate,\n taskStream.task?.spec.parameters,\n taskStream.task?.spec.templateInfo?.entity?.metadata,\n templateRouteRef,\n ]);\n\n const [{ status: _ }, { execute: triggerRetry }] = useAsync(async () => {\n if (taskId) {\n analytics.captureEvent('retried', 'Template has been retried');\n await scaffolderApi.retry?.(taskId);\n }\n });\n\n const [{ status: cancelStatus }, { execute: triggerCancel }] = useAsync(\n async () => {\n if (taskId) {\n analytics.captureEvent('cancelled', 'Template has been cancelled');\n await scaffolderApi.cancelTask(taskId);\n }\n },\n );\n\n const Outputs = props.TemplateOutputsComponent ?? DefaultTemplateOutputs;\n\n const templateName =\n taskStream.task?.spec.templateInfo?.entity?.metadata.name || '';\n\n const cancelEnabled = !(taskStream.cancelled || taskStream.completed);\n\n return (\n <Page themeId=\"website\">\n <Header\n pageTitleOverride={\n templateName\n ? t('ongoingTask.pageTitle.hasTemplateName', { templateName })\n : t('ongoingTask.pageTitle.noTemplateName')\n }\n title={\n <div>\n {t('ongoingTask.title')} <code>{templateName}</code>\n </div>\n }\n subtitle={t('ongoingTask.subtitle', { taskId: taskId as string })}\n >\n <ContextMenu\n cancelEnabled={cancelEnabled}\n canRetry={canRetry}\n isRetryableTask={isRetryableTask}\n logsVisible={logsVisible}\n buttonBarVisible={buttonBarVisible}\n onStartOver={startOver}\n onRetry={triggerRetry}\n onToggleLogs={setLogVisibleState}\n onToggleButtonBar={setButtonBarVisibleState}\n taskId={taskId}\n />\n </Header>\n <Content className={classes.contentWrapper}>\n {taskStream.error ? (\n <Box paddingBottom={2}>\n <ErrorPanel\n error={taskStream.error}\n titleFormat=\"markdown\"\n title={taskStream.error.message}\n />\n </Box>\n ) : null}\n\n <Box paddingBottom={2}>\n <TaskSteps\n steps={steps}\n activeStep={activeStep}\n isComplete={taskStream.completed}\n isError={Boolean(taskStream.error)}\n />\n </Box>\n\n <Outputs output={taskStream.output} />\n\n {buttonBarVisible ? (\n <Box paddingBottom={2}>\n <Paper>\n <Box padding={2}>\n <div className={classes.buttonBar}>\n <Button\n className={classes.cancelButton}\n disabled={\n !cancelEnabled ||\n (cancelStatus !== 'not-executed' && !isRetryableTask) ||\n !canCancelTask\n }\n onClick={triggerCancel}\n data-testid=\"cancel-button\"\n >\n {t('ongoingTask.cancelButtonTitle')}\n </Button>\n {isRetryableTask && (\n <Button\n className={classes.retryButton}\n disabled={cancelEnabled || !canRetry}\n onClick={triggerRetry}\n data-testid=\"retry-button\"\n >\n {t('ongoingTask.retryButtonTitle')}\n </Button>\n )}\n <Button\n className={classes.logsVisibilityButton}\n color=\"primary\"\n variant=\"outlined\"\n onClick={() => setLogVisibleState(!logsVisible)}\n >\n {logsVisible\n ? t('ongoingTask.hideLogsButtonTitle')\n : t('ongoingTask.showLogsButtonTitle')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n disabled={cancelEnabled || !canStartOver}\n onClick={startOver}\n data-testid=\"start-over-button\"\n >\n {t('ongoingTask.startOverButtonTitle')}\n </Button>\n </div>\n </Box>\n </Paper>\n </Box>\n ) : null}\n\n {logsVisible ? (\n <Paper style={{ height: '100%' }}>\n <Box padding={2} height=\"100%\">\n <TaskLogStream logs={taskStream.stepLogs} />\n </Box>\n </Paper>\n ) : null}\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OngoingTask.esm.js","sources":["../../../src/components/OngoingTask/OngoingTask.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Content, ErrorPanel, Header, Page } from '@backstage/core-components';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport Paper from '@material-ui/core/Paper';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n scaffolderApiRef,\n ScaffolderTaskOutput,\n useTaskEventStream,\n} from '@backstage/plugin-scaffolder-react';\nimport { selectedTemplateRouteRef } from '../../routes';\nimport { useAnalytics, useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport qs from 'qs';\nimport { ContextMenu } from './ContextMenu';\nimport {\n DefaultTemplateOutputs,\n TaskLogStream,\n TaskSteps,\n} from '@backstage/plugin-scaffolder-react/alpha';\nimport { useAsync } from '@react-hookz/web';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport {\n taskCancelPermission,\n taskCreatePermission,\n taskReadPermission,\n} from '@backstage/plugin-scaffolder-common/alpha';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { scaffolderTranslationRef } from '../../translation';\nimport { entityPresentationApiRef } from '@backstage/plugin-catalog-react';\nimport { default as reactUseAsync } from 'react-use/esm/useAsync';\n\nconst useStyles = makeStyles(theme => ({\n contentWrapper: {\n display: 'flex',\n flexDirection: 'column',\n },\n buttonBar: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'right',\n },\n cancelButton: {\n marginRight: theme.spacing(1),\n },\n retryButton: {\n marginRight: theme.spacing(1),\n },\n logsVisibilityButton: {\n marginRight: theme.spacing(1),\n },\n}));\n\n/**\n * @public\n */\nexport const OngoingTask = (props: {\n TemplateOutputsComponent?: React.ComponentType<{\n output?: ScaffolderTaskOutput;\n }>;\n}) => {\n // todo(blam): check that task Id actually exists, and that it's valid. otherwise redirect to something more useful.\n const { taskId } = useParams();\n const templateRouteRef = useRouteRef(selectedTemplateRouteRef);\n const navigate = useNavigate();\n const analytics = useAnalytics();\n const scaffolderApi = useApi(scaffolderApiRef);\n const entityPresentationApi = useApi(entityPresentationApiRef);\n const taskStream = useTaskEventStream(taskId!);\n const classes = useStyles();\n const steps = useMemo(\n () =>\n taskStream.task?.spec.steps.map(step => ({\n ...step,\n ...taskStream?.steps?.[step.id],\n })) ?? [],\n [taskStream],\n );\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n const [logsVisible, setLogVisibleState] = useState(false);\n const [buttonBarVisible, setButtonBarVisibleState] = useState(true);\n\n // Used dummy string value for `resourceRef` since `allowed` field will always return `false` if `resourceRef` is `undefined`\n const { allowed: canCancelTask } = usePermission({\n permission: taskCancelPermission,\n });\n\n const { allowed: canReadTask } = usePermission({\n permission: taskReadPermission,\n });\n\n const { allowed: canCreateTask } = usePermission({\n permission: taskCreatePermission,\n });\n\n // Start Over endpoint requires user to have both read (to grab parameters) and create (to create new task) permissions\n const canStartOver = canReadTask && canCreateTask;\n\n useEffect(() => {\n if (taskStream.error) {\n setLogVisibleState(true);\n }\n }, [taskStream.error]);\n\n useEffect(() => {\n if (taskStream.completed && !taskStream.error) {\n setLogVisibleState(true);\n setButtonBarVisibleState(false);\n }\n }, [taskStream.error, taskStream.completed]);\n\n const { value: presentation } = reactUseAsync(async () => {\n const templateEntityRef = taskStream.task?.spec.templateInfo?.entityRef;\n if (!templateEntityRef) {\n return undefined;\n }\n return entityPresentationApi.forEntity(templateEntityRef).promise;\n }, [entityPresentationApi, taskStream.task?.spec.templateInfo?.entityRef]);\n\n const activeStep = useMemo(() => {\n for (let i = steps.length - 1; i >= 0; i--) {\n if (steps[i].status !== 'open') {\n return i;\n }\n }\n\n return 0;\n }, [steps]);\n\n const isRetryableTask =\n taskStream.task?.spec.EXPERIMENTAL_recovery?.EXPERIMENTAL_strategy ===\n 'startOver';\n\n const canRetry = canReadTask && canCreateTask && isRetryableTask;\n\n const startOver = useCallback(() => {\n const { namespace, name } =\n taskStream.task?.spec.templateInfo?.entity?.metadata ?? {};\n\n const formData = taskStream.task?.spec.parameters ?? {};\n\n if (!namespace || !name) {\n return;\n }\n\n analytics.captureEvent('click', `Task has been started over`);\n\n navigate({\n pathname: templateRouteRef({\n namespace,\n templateName: name,\n }),\n search: `?${qs.stringify({ formData: JSON.stringify(formData) })}`,\n });\n }, [\n analytics,\n navigate,\n taskStream.task?.spec.parameters,\n taskStream.task?.spec.templateInfo?.entity?.metadata,\n templateRouteRef,\n ]);\n\n const [{ status: _ }, { execute: triggerRetry }] = useAsync(async () => {\n if (taskId) {\n analytics.captureEvent('retried', 'Template has been retried');\n await scaffolderApi.retry?.(taskId);\n }\n });\n\n const [{ status: cancelStatus }, { execute: triggerCancel }] = useAsync(\n async () => {\n if (taskId) {\n analytics.captureEvent('cancelled', 'Template has been cancelled');\n await scaffolderApi.cancelTask(taskId);\n }\n },\n );\n\n const Outputs = props.TemplateOutputsComponent ?? DefaultTemplateOutputs;\n\n const cancelEnabled = !(taskStream.cancelled || taskStream.completed);\n\n return (\n <Page themeId=\"website\">\n <Header\n pageTitleOverride={\n presentation\n ? t('ongoingTask.pageTitle.hasTemplateName', {\n templateName: presentation.primaryTitle,\n })\n : t('ongoingTask.pageTitle.noTemplateName')\n }\n title={\n <div>\n {t('ongoingTask.title')}{' '}\n <code>{presentation ? presentation.primaryTitle : ''}</code>\n </div>\n }\n subtitle={t('ongoingTask.subtitle', { taskId: taskId as string })}\n >\n <ContextMenu\n cancelEnabled={cancelEnabled}\n canRetry={canRetry}\n isRetryableTask={isRetryableTask}\n logsVisible={logsVisible}\n buttonBarVisible={buttonBarVisible}\n onStartOver={startOver}\n onRetry={triggerRetry}\n onToggleLogs={setLogVisibleState}\n onToggleButtonBar={setButtonBarVisibleState}\n taskId={taskId}\n />\n </Header>\n <Content className={classes.contentWrapper}>\n {taskStream.error ? (\n <Box paddingBottom={2}>\n <ErrorPanel\n error={taskStream.error}\n titleFormat=\"markdown\"\n title={taskStream.error.message}\n />\n </Box>\n ) : null}\n\n <Box paddingBottom={2}>\n <TaskSteps\n steps={steps}\n activeStep={activeStep}\n isComplete={taskStream.completed}\n isError={Boolean(taskStream.error)}\n />\n </Box>\n\n <Outputs output={taskStream.output} />\n\n {buttonBarVisible ? (\n <Box paddingBottom={2}>\n <Paper>\n <Box padding={2}>\n <div className={classes.buttonBar}>\n <Button\n className={classes.cancelButton}\n disabled={\n !cancelEnabled ||\n (cancelStatus !== 'not-executed' && !isRetryableTask) ||\n !canCancelTask\n }\n onClick={triggerCancel}\n data-testid=\"cancel-button\"\n >\n {t('ongoingTask.cancelButtonTitle')}\n </Button>\n {isRetryableTask && (\n <Button\n className={classes.retryButton}\n disabled={cancelEnabled || !canRetry}\n onClick={triggerRetry}\n data-testid=\"retry-button\"\n >\n {t('ongoingTask.retryButtonTitle')}\n </Button>\n )}\n <Button\n className={classes.logsVisibilityButton}\n color=\"primary\"\n variant=\"outlined\"\n onClick={() => setLogVisibleState(!logsVisible)}\n >\n {logsVisible\n ? t('ongoingTask.hideLogsButtonTitle')\n : t('ongoingTask.showLogsButtonTitle')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n disabled={cancelEnabled || !canStartOver}\n onClick={startOver}\n data-testid=\"start-over-button\"\n >\n {t('ongoingTask.startOverButtonTitle')}\n </Button>\n </div>\n </Box>\n </Paper>\n </Box>\n ) : null}\n\n {logsVisible ? (\n <Paper style={{ height: '100%' }}>\n <Box padding={2} height=\"100%\">\n <TaskLogStream logs={taskStream.stepLogs} />\n </Box>\n </Paper>\n ) : null}\n </Content>\n </Page>\n );\n};\n"],"names":["reactUseAsync","useAsync"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/plugin-scaffolder",
|
|
3
|
-
"version": "1.28.0-next.
|
|
3
|
+
"version": "1.28.0-next.3",
|
|
4
4
|
"description": "The Backstage plugin that helps you create new things",
|
|
5
5
|
"backstage": {
|
|
6
6
|
"role": "frontend-plugin",
|
|
@@ -72,18 +72,18 @@
|
|
|
72
72
|
"dependencies": {
|
|
73
73
|
"@backstage/catalog-client": "1.9.1",
|
|
74
74
|
"@backstage/catalog-model": "1.7.3",
|
|
75
|
-
"@backstage/core-compat-api": "0.3.6-next.
|
|
75
|
+
"@backstage/core-compat-api": "0.3.6-next.3",
|
|
76
76
|
"@backstage/core-components": "0.16.4-next.1",
|
|
77
77
|
"@backstage/core-plugin-api": "1.10.4-next.0",
|
|
78
78
|
"@backstage/errors": "1.2.7",
|
|
79
|
-
"@backstage/frontend-plugin-api": "0.9.5-next.
|
|
79
|
+
"@backstage/frontend-plugin-api": "0.9.5-next.3",
|
|
80
80
|
"@backstage/integration": "1.16.1",
|
|
81
81
|
"@backstage/integration-react": "1.2.4-next.0",
|
|
82
82
|
"@backstage/plugin-catalog-common": "1.1.3",
|
|
83
|
-
"@backstage/plugin-catalog-react": "1.15.2-next.
|
|
83
|
+
"@backstage/plugin-catalog-react": "1.15.2-next.3",
|
|
84
84
|
"@backstage/plugin-permission-react": "0.4.31-next.0",
|
|
85
85
|
"@backstage/plugin-scaffolder-common": "1.5.9",
|
|
86
|
-
"@backstage/plugin-scaffolder-react": "1.14.5-next.
|
|
86
|
+
"@backstage/plugin-scaffolder-react": "1.14.5-next.3",
|
|
87
87
|
"@backstage/types": "1.2.1",
|
|
88
88
|
"@codemirror/language": "^6.0.0",
|
|
89
89
|
"@codemirror/legacy-modes": "^6.1.0",
|
|
@@ -117,10 +117,10 @@
|
|
|
117
117
|
"zod-to-json-schema": "^3.20.4"
|
|
118
118
|
},
|
|
119
119
|
"devDependencies": {
|
|
120
|
-
"@backstage/cli": "0.30.0-next.
|
|
120
|
+
"@backstage/cli": "0.30.0-next.3",
|
|
121
121
|
"@backstage/core-app-api": "1.15.5-next.0",
|
|
122
|
-
"@backstage/dev-utils": "1.1.7-next.
|
|
123
|
-
"@backstage/plugin-catalog": "1.27.0-next.
|
|
122
|
+
"@backstage/dev-utils": "1.1.7-next.3",
|
|
123
|
+
"@backstage/plugin-catalog": "1.27.0-next.3",
|
|
124
124
|
"@backstage/plugin-permission-common": "0.8.4",
|
|
125
125
|
"@backstage/test-utils": "1.7.5-next.0",
|
|
126
126
|
"@testing-library/dom": "^10.0.0",
|