@backstage/plugin-scaffolder 1.34.1 → 1.34.2-next.1
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 +43 -0
- package/dist/components/ActionsPage/ActionsPage.esm.js +1 -1
- package/dist/components/ActionsPage/ActionsPage.esm.js.map +1 -1
- package/dist/components/ListTasksPage/ListTasksPage.esm.js +1 -1
- package/dist/components/ListTasksPage/ListTasksPage.esm.js.map +1 -1
- package/dist/components/Router/Router.esm.js +1 -1
- package/dist/components/Router/Router.esm.js.map +1 -1
- package/dist/components/TemplatingExtensionsPage/TemplatingExtensionsPage.esm.js +6 -5
- package/dist/components/TemplatingExtensionsPage/TemplatingExtensionsPage.esm.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/plugins/scaffolder/package.json.esm.js +1 -1
- package/package.json +25 -25
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,48 @@
|
|
|
1
1
|
# @backstage/plugin-scaffolder
|
|
2
2
|
|
|
3
|
+
## 1.34.2-next.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies
|
|
8
|
+
- @backstage/integration@1.18.1-next.1
|
|
9
|
+
- @backstage/core-components@0.18.2-next.1
|
|
10
|
+
- @backstage/core-plugin-api@1.11.1-next.0
|
|
11
|
+
- @backstage/integration-react@1.2.11-next.1
|
|
12
|
+
- @backstage/plugin-permission-react@0.4.37-next.0
|
|
13
|
+
- @backstage/plugin-techdocs-react@1.3.4-next.1
|
|
14
|
+
- @backstage/core-compat-api@0.5.3-next.1
|
|
15
|
+
- @backstage/plugin-catalog-react@1.21.2-next.1
|
|
16
|
+
- @backstage/plugin-scaffolder-react@1.19.2-next.1
|
|
17
|
+
- @backstage/frontend-plugin-api@0.12.1-next.1
|
|
18
|
+
- @backstage/plugin-scaffolder-common@1.7.2-next.1
|
|
19
|
+
- @backstage/plugin-catalog-common@1.1.6-next.0
|
|
20
|
+
- @backstage/catalog-client@1.12.0
|
|
21
|
+
|
|
22
|
+
## 1.34.2-next.0
|
|
23
|
+
|
|
24
|
+
### Patch Changes
|
|
25
|
+
|
|
26
|
+
- e0ffe84: Add missing `templatingExtensions` option to RouterProps.contextMenu to allow global control across scaffolder pages
|
|
27
|
+
- Updated dependencies
|
|
28
|
+
- @backstage/plugin-catalog-react@1.21.2-next.0
|
|
29
|
+
- @backstage/core-components@0.18.2-next.0
|
|
30
|
+
- @backstage/integration@1.18.1-next.0
|
|
31
|
+
- @backstage/core-compat-api@0.5.3-next.0
|
|
32
|
+
- @backstage/plugin-scaffolder-react@1.19.2-next.0
|
|
33
|
+
- @backstage/frontend-plugin-api@0.12.1-next.0
|
|
34
|
+
- @backstage/integration-react@1.2.11-next.0
|
|
35
|
+
- @backstage/plugin-techdocs-react@1.3.4-next.0
|
|
36
|
+
- @backstage/plugin-scaffolder-common@1.7.2-next.0
|
|
37
|
+
- @backstage/catalog-client@1.12.0
|
|
38
|
+
- @backstage/catalog-model@1.7.5
|
|
39
|
+
- @backstage/core-plugin-api@1.11.0
|
|
40
|
+
- @backstage/errors@1.2.7
|
|
41
|
+
- @backstage/types@1.2.2
|
|
42
|
+
- @backstage/plugin-catalog-common@1.1.5
|
|
43
|
+
- @backstage/plugin-permission-react@0.4.36
|
|
44
|
+
- @backstage/plugin-techdocs-common@0.1.1
|
|
45
|
+
|
|
3
46
|
## 1.34.1
|
|
4
47
|
|
|
5
48
|
### Patch Changes
|
|
@@ -188,7 +188,7 @@ const ActionsPage = (props) => {
|
|
|
188
188
|
onActionsClicked: void 0,
|
|
189
189
|
onTasksClicked: props?.contextMenu?.tasks !== false ? () => navigate(tasksLink()) : void 0,
|
|
190
190
|
onCreateClicked: props?.contextMenu?.create !== false ? () => navigate(createLink()) : void 0,
|
|
191
|
-
onTemplatingExtensionsClicked: () => navigate(templatingExtensionsLink())
|
|
191
|
+
onTemplatingExtensionsClicked: props?.contextMenu?.templatingExtensions !== false ? () => navigate(templatingExtensionsLink()) : void 0
|
|
192
192
|
};
|
|
193
193
|
return /* @__PURE__ */ jsxs(Page, { themeId: "home", children: [
|
|
194
194
|
/* @__PURE__ */ jsx(
|
|
@@ -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 { useEffect, useState } from 'react';\nimport useAsync from 'react-use/esm/useAsync';\nimport { Action, scaffolderApiRef } 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 Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\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 Content,\n EmptyState,\n ErrorPanel,\n Header,\n Link,\n MarkdownContent,\n Page,\n Progress,\n} from '@backstage/core-components';\nimport { ScaffolderPageContextMenu } from '@backstage/plugin-scaffolder-react/alpha';\nimport { useNavigate } from 'react-router-dom';\nimport {\n editRouteRef,\n rootRouteRef,\n scaffolderListTaskRouteRef,\n templatingExtensionsRouteRef,\n} from '../../routes';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { scaffolderTranslationRef } from '../../translation';\nimport { Expanded, RenderSchema, SchemaRenderContext } from '../RenderSchema';\nimport { ScaffolderUsageExamplesTable } from '../ScaffolderUsageExamplesTable';\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\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 expanded = useState<Expanded>({});\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 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 const partialSchemaRenderContext: Omit<\n SchemaRenderContext,\n 'parentId'\n > = {\n classes,\n expanded,\n headings: [<Typography variant=\"h6\" component=\"h4\" />],\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 <RenderSchema\n strategy=\"properties\"\n context={{\n parentId: `${action.id}.input`,\n ...partialSchemaRenderContext,\n }}\n schema={action?.schema?.input}\n />\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 <RenderSchema\n strategy=\"properties\"\n context={{\n parentId: `${action.id}.output`,\n ...partialSchemaRenderContext,\n }}\n schema={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 <ScaffolderUsageExamplesTable 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 templatingExtensionsLink = useRouteRef(templatingExtensionsRouteRef);\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 onTemplatingExtensionsClicked: () => navigate(templatingExtensionsLink()),\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 { useEffect, useState } from 'react';\nimport useAsync from 'react-use/esm/useAsync';\nimport { Action, scaffolderApiRef } 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 Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\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 Content,\n EmptyState,\n ErrorPanel,\n Header,\n Link,\n MarkdownContent,\n Page,\n Progress,\n} from '@backstage/core-components';\nimport { ScaffolderPageContextMenu } from '@backstage/plugin-scaffolder-react/alpha';\nimport { useNavigate } from 'react-router-dom';\nimport {\n editRouteRef,\n rootRouteRef,\n scaffolderListTaskRouteRef,\n templatingExtensionsRouteRef,\n} from '../../routes';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { scaffolderTranslationRef } from '../../translation';\nimport { Expanded, RenderSchema, SchemaRenderContext } from '../RenderSchema';\nimport { ScaffolderUsageExamplesTable } from '../ScaffolderUsageExamplesTable';\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\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 expanded = useState<Expanded>({});\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 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 const partialSchemaRenderContext: Omit<\n SchemaRenderContext,\n 'parentId'\n > = {\n classes,\n expanded,\n headings: [<Typography variant=\"h6\" component=\"h4\" />],\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 <RenderSchema\n strategy=\"properties\"\n context={{\n parentId: `${action.id}.input`,\n ...partialSchemaRenderContext,\n }}\n schema={action?.schema?.input}\n />\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 <RenderSchema\n strategy=\"properties\"\n context={{\n parentId: `${action.id}.output`,\n ...partialSchemaRenderContext,\n }}\n schema={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 <ScaffolderUsageExamplesTable 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 templatingExtensions?: 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 templatingExtensionsLink = useRouteRef(templatingExtensionsRouteRef);\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 onTemplatingExtensionsClicked:\n props?.contextMenu?.templatingExtensions !== false\n ? () => navigate(templatingExtensionsLink())\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":";;;;;;;;;;;;;;;;;;;;;;;;;;AAuDA,MAAM,SAAA,GAAY,WAAW,CAAA,KAAA,MAAU;AAAA,EACrC,IAAA,EAAM;AAAA,IACJ,UAAA,EAAY,kBAAA;AAAA,IACZ,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IACxB,eAAA,EACE,KAAA,CAAM,OAAA,CAAQ,IAAA,KAAS,MAAA,GACnB,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,GACtB,KAAA,CAAM,OAAA,CAAQ,KAAK,GAAG,CAAA;AAAA,IAC5B,OAAA,EAAS,cAAA;AAAA,IACT,YAAA,EAAc,CAAA;AAAA,IACd,QAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,IAC5C,QAAA,EAAU;AAAA,GACZ;AAAA,EAEA,YAAA,EAAc;AAAA,IACZ,UAAA,EAAY;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAS,KAAA;AAAA,MACT,GAAA,EAAK,CAAA;AAAA,MACL,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAAA,MACxB,UAAA,EAAY,QAAA;AAAA,MACZ,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM;AAAA;AAC7B,GACF;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA;AAEhC,CAAA,CAAE,CAAA;AAEK,MAAM,oBAAoB,MAAM;AACrC,EAAA,MAAM,GAAA,GAAM,OAAO,gBAAgB,CAAA;AACnC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,QAAQ,EAAC;AAAA,IACT;AAAA,GACF,GAAI,SAAS,YAAY;AACvB,IAAA,OAAO,IAAI,WAAA,EAAY;AAAA,EACzB,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAwB,IAAI,CAAA;AACxE,EAAA,MAAM,QAAA,GAAW,QAAA,CAAmB,EAAE,CAAA;AAEtC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,KAAA,CAAM,MAAA,IAAU,MAAA,CAAO,QAAA,CAAS,IAAA,EAAM;AACxC,MAAA,QAAA,CAAS,aAAA,CAAc,MAAA,CAAO,QAAA,CAAS,IAAI,GAAG,cAAA,EAAe;AAAA,IAC/D;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,2BAAQ,QAAA,EAAA,EAAS,CAAA;AAAA,EACnB;AAEA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,cAAW,KAAA,EAAc,CAAA;AAAA,sBAC1B,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,MAAA;AAAA,UACR,KAAA,EAAO,EAAE,sCAAsC,CAAA;AAAA,UAC/C,WAAA,EAAa,EAAE,4CAA4C;AAAA;AAAA;AAC7D,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,GAAA,EAAA,EAAI,IAAI,CAAA,EACP,QAAA,kBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,sBAAA;AAAA,QACH,OAAA,EAAS,KAAA;AAAA,QACT,OAAA;AAAA,QACA,cAAA,EAAgB,YAAU,MAAA,CAAO,EAAA;AAAA,QACjC,aAAa,CAAA,MAAA,qBACX,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACE,GAAG,MAAA;AAAA,YACJ,YAAA,EAAY,EAAE,4CAA4C,CAAA;AAAA,YAC1D,WAAA,EAAa,EAAE,4CAA4C,CAAA;AAAA,YAC3D,OAAA,EAAQ,UAAA;AAAA,YACR,UAAA,EAAY;AAAA,cACV,GAAG,MAAA,CAAO,UAAA;AAAA,cACV,gCACE,GAAA,CAAC,cAAA,EAAA,EAAe,UAAS,OAAA,EACvB,QAAA,kBAAA,GAAA,CAAC,cAAW,CAAA,EACd;AAAA;AAEJ;AAAA,SACF;AAAA,QAEF,QAAA,EAAU,CAAC,MAAA,EAAQ,MAAA,KAAW;AAC5B,UAAA,iBAAA,CAAkB,MAAM,CAAA;AAAA,QAC1B,CAAA;AAAA,QACA,SAAA,EAAS;AAAA;AAAA,KACX,EACF,CAAA;AAAA,IAAA,CACE,iBAAiB,CAAC,cAAc,CAAA,GAAI,KAAA,EAAO,IAAI,CAAA,MAAA,KAAU;AACzD,MAAA,IAAI,MAAA,CAAO,EAAA,CAAG,UAAA,CAAW,SAAS,CAAA,EAAG;AACnC,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,MAAM,0BAAA,GAGF;AAAA,QACF,OAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA,EAAU,iBAAC,GAAA,CAAC,UAAA,EAAA,EAAW,SAAQ,IAAA,EAAK,SAAA,EAAU,MAAK,CAAE;AAAA,OACvD;AACA,MAAA,uBACE,IAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,CAAA,EACP,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,GAAA,EAAA,EAAI,OAAA,EAAQ,MAAA,EAAO,UAAA,EAAW,QAAA,EAC7B,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAI,MAAA,CAAO,EAAA,CAAG,UAAA,CAAW,KAAK,GAAG,CAAA;AAAA,cACjC,OAAA,EAAQ,IAAA;AAAA,cACR,SAAA,EAAU,IAAA;AAAA,cACV,WAAW,OAAA,CAAQ,IAAA;AAAA,cAElB,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,WACV;AAAA,0BACA,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,WAAW,OAAA,CAAQ,IAAA;AAAA,cACnB,IAAI,CAAA,CAAA,EAAI,MAAA,CAAO,GAAG,UAAA,CAAW,GAAA,EAAK,GAAG,CAAC,CAAA,CAAA;AAAA,cAEtC,8BAAC,QAAA,EAAA,EAAS;AAAA;AAAA;AACZ,SAAA,EACF,CAAA;AAAA,QACC,OAAO,WAAA,oBACN,GAAA,CAAC,eAAA,EAAA,EAAgB,OAAA,EAAS,OAAO,WAAA,EAAa,CAAA;AAAA,QAE/C,OAAO,MAAA,EAAQ,KAAA,oBACd,IAAA,CAAC,GAAA,EAAA,EAAI,IAAI,CAAA,EACP,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,cAAW,OAAA,EAAQ,IAAA,EAAK,WAAU,IAAA,EAChC,QAAA,EAAA,CAAA,CAAE,0BAA0B,CAAA,EAC/B,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,QAAA,EAAS,YAAA;AAAA,cACT,OAAA,EAAS;AAAA,gBACP,QAAA,EAAU,CAAA,EAAG,MAAA,CAAO,EAAE,CAAA,MAAA,CAAA;AAAA,gBACtB,GAAG;AAAA,eACL;AAAA,cACA,MAAA,EAAQ,QAAQ,MAAA,EAAQ;AAAA;AAAA;AAC1B,SAAA,EACF,CAAA;AAAA,QAED,OAAO,MAAA,EAAQ,MAAA,oBACd,IAAA,CAAC,GAAA,EAAA,EAAI,IAAI,CAAA,EACP,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,cAAW,OAAA,EAAQ,IAAA,EAAK,WAAU,IAAA,EAChC,QAAA,EAAA,CAAA,CAAE,2BAA2B,CAAA,EAChC,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,QAAA,EAAS,YAAA;AAAA,cACT,OAAA,EAAS;AAAA,gBACP,QAAA,EAAU,CAAA,EAAG,MAAA,CAAO,EAAE,CAAA,OAAA,CAAA;AAAA,gBACtB,GAAG;AAAA,eACL;AAAA,cACA,MAAA,EAAQ,QAAQ,MAAA,EAAQ;AAAA;AAAA;AAC1B,SAAA,EACF,CAAA;AAAA,QAED,MAAA,CAAO,QAAA,oBACN,IAAA,CAAC,SAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,gBAAA,EAAA,EAAiB,UAAA,kBAAY,GAAA,CAAC,cAAA,EAAA,EAAe,GAC5C,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EAAK,SAAA,EAAU,IAAA,EAChC,QAAA,EAAA,CAAA,CAAE,6BAA6B,GAClC,CAAA,EACF,CAAA;AAAA,0BACA,GAAA,CAAC,gBAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,CAAA,EACP,QAAA,kBAAA,GAAA,CAAC,4BAAA,EAAA,EAA6B,QAAA,EAAU,MAAA,CAAO,QAAA,EAAU,CAAA,EAC3D,CAAA,EACF;AAAA,SAAA,EACF;AAAA,OAAA,EAAA,EA9Da,OAAO,EAgExB,CAAA;AAAA,IAEJ,CAAC;AAAA,GAAA,EACH,CAAA;AAEJ;AAWO,MAAM,WAAA,GAAc,CAAC,KAAA,KAA4B;AACtD,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,UAAA,GAAa,YAAY,YAAY,CAAA;AAC3C,EAAA,MAAM,SAAA,GAAY,YAAY,0BAA0B,CAAA;AACxD,EAAA,MAAM,UAAA,GAAa,YAAY,YAAY,CAAA;AAC3C,EAAA,MAAM,wBAAA,GAA2B,YAAY,4BAA4B,CAAA;AACzE,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,8BAAA,GAAiC;AAAA,IACrC,eAAA,EACE,OAAO,WAAA,EAAa,MAAA,KAAW,QAC3B,MAAM,QAAA,CAAS,UAAA,EAAY,CAAA,GAC3B,MAAA;AAAA,IACN,gBAAA,EAAkB,MAAA;AAAA,IAClB,cAAA,EACE,OAAO,WAAA,EAAa,KAAA,KAAU,QAC1B,MAAM,QAAA,CAAS,SAAA,EAAW,CAAA,GAC1B,MAAA;AAAA,IACN,eAAA,EACE,OAAO,WAAA,EAAa,MAAA,KAAW,QAC3B,MAAM,QAAA,CAAS,UAAA,EAAY,CAAA,GAC3B,MAAA;AAAA,IACN,6BAAA,EACE,OAAO,WAAA,EAAa,oBAAA,KAAyB,QACzC,MAAM,QAAA,CAAS,wBAAA,EAA0B,CAAA,GACzC;AAAA,GACR;AAEA,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,MAAA,EACZ,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,iBAAA,EAAmB,EAAE,uBAAuB,CAAA;AAAA,QAC5C,KAAA,EAAO,EAAE,mBAAmB,CAAA;AAAA,QAC5B,QAAA,EAAU,EAAE,sBAAsB,CAAA;AAAA,QAElC,QAAA,kBAAA,GAAA,CAAC,yBAAA,EAAA,EAA2B,GAAG,8BAAA,EAAgC;AAAA;AAAA,KACjE;AAAA,oBACA,GAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,iBAAA,EAAA,EAAkB,CAAA,EACrB;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -131,7 +131,7 @@ const ListTasksPage = (props) => {
|
|
|
131
131
|
onActionsClicked: props?.contextMenu?.actions !== false ? () => navigate(actionsLink()) : void 0,
|
|
132
132
|
onTasksClicked: void 0,
|
|
133
133
|
onCreateClicked: props?.contextMenu?.create !== false ? () => navigate(createLink()) : void 0,
|
|
134
|
-
onTemplatingExtensionsClicked: () => navigate(templatingExtensionsLink())
|
|
134
|
+
onTemplatingExtensionsClicked: props?.contextMenu?.templatingExtensions !== false ? () => navigate(templatingExtensionsLink()) : void 0
|
|
135
135
|
};
|
|
136
136
|
return /* @__PURE__ */ jsxs(Page, { themeId: "home", children: [
|
|
137
137
|
/* @__PURE__ */ jsx(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListTasksPage.esm.js","sources":["../../../src/components/ListTasksPage/ListTasksPage.tsx"],"sourcesContent":["/*\n * Copyright 2022 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 {\n Content,\n EmptyState,\n ErrorPanel,\n Header,\n Link,\n Page,\n Progress,\n Table,\n} from '@backstage/core-components';\nimport { useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport { CatalogFilterLayout } from '@backstage/plugin-catalog-react';\nimport useAsync from 'react-use/esm/useAsync';\nimport { useState } from 'react';\nimport {\n scaffolderApiRef,\n ScaffolderTask,\n} from '@backstage/plugin-scaffolder-react';\nimport { OwnerListPicker } from './OwnerListPicker';\nimport {\n CreatedAtColumn,\n OwnerEntityColumn,\n TaskStatusColumn,\n TemplateTitleColumn,\n} from './columns';\nimport {\n actionsRouteRef,\n editRouteRef,\n rootRouteRef,\n templatingExtensionsRouteRef,\n} from '../../routes';\nimport { ScaffolderPageContextMenu } from '@backstage/plugin-scaffolder-react/alpha';\nimport { useNavigate } from 'react-router-dom';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { scaffolderTranslationRef } from '../../translation';\n\nexport interface MyTaskPageProps {\n initiallySelectedFilter?: 'owned' | 'all';\n contextMenu?: {\n editor?: boolean;\n actions?: boolean;\n create?: boolean;\n };\n}\n\nconst ListTaskPageContent = (props: MyTaskPageProps) => {\n const { initiallySelectedFilter = 'owned' } = props;\n const { t } = useTranslationRef(scaffolderTranslationRef);\n const [limit, setLimit] = useState(5);\n const [page, setPage] = useState(0);\n\n const scaffolderApi = useApi(scaffolderApiRef);\n const rootLink = useRouteRef(rootRouteRef);\n\n const [ownerFilter, setOwnerFilter] = useState(initiallySelectedFilter);\n const { value, loading, error } = useAsync(() => {\n if (scaffolderApi.listTasks) {\n return scaffolderApi.listTasks?.({\n filterByOwnership: ownerFilter,\n limit,\n offset: page * limit,\n });\n }\n\n // eslint-disable-next-line no-console\n console.warn(\n 'listTasks is not implemented in the scaffolderApi, please make sure to implement this method.',\n );\n\n return Promise.resolve({ tasks: [], totalTasks: 0 });\n }, [scaffolderApi, ownerFilter, limit, page]);\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n return (\n <CatalogFilterLayout>\n <CatalogFilterLayout.Filters>\n <OwnerListPicker\n filter={ownerFilter}\n onSelectOwner={id => setOwnerFilter(id)}\n />\n </CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>\n <ErrorPanel error={error} />\n <EmptyState\n missing=\"info\"\n title={t('listTaskPage.content.emptyState.title')}\n description={t('listTaskPage.content.emptyState.description')}\n />\n </CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n );\n }\n\n return (\n <CatalogFilterLayout>\n <CatalogFilterLayout.Filters>\n <OwnerListPicker\n filter={ownerFilter}\n onSelectOwner={id => setOwnerFilter(id)}\n />\n </CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>\n <Table<ScaffolderTask>\n onRowsPerPageChange={pageSize => {\n setPage(0);\n setLimit(pageSize);\n }}\n onPageChange={newPage => setPage(newPage)}\n options={{ pageSize: limit, emptyRowsWhenPaging: false }}\n data={value?.tasks ?? []}\n page={page}\n totalCount={value?.totalTasks ?? 0}\n title={t('listTaskPage.content.tableTitle')}\n columns={[\n {\n title: t('listTaskPage.content.tableCell.taskID'),\n field: 'id',\n render: row => (\n <Link to={`${rootLink()}/tasks/${row.id}`}>{row.id}</Link>\n ),\n },\n {\n title: t('listTaskPage.content.tableCell.template'),\n field: 'spec.templateInfo.entity.metadata.title',\n render: row => (\n <TemplateTitleColumn\n entityRef={row.spec.templateInfo?.entityRef}\n />\n ),\n },\n {\n title: t('listTaskPage.content.tableCell.created'),\n field: 'createdAt',\n render: row => <CreatedAtColumn createdAt={row.createdAt} />,\n },\n {\n title: t('listTaskPage.content.tableCell.owner'),\n field: 'createdBy',\n render: row => (\n <OwnerEntityColumn entityRef={row.spec?.user?.ref} />\n ),\n },\n {\n title: t('listTaskPage.content.tableCell.status'),\n field: 'status',\n render: row => <TaskStatusColumn status={row.status} />,\n },\n ]}\n />\n </CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n );\n};\n\nexport const ListTasksPage = (props: MyTaskPageProps) => {\n const navigate = useNavigate();\n const editorLink = useRouteRef(editRouteRef);\n const actionsLink = useRouteRef(actionsRouteRef);\n const createLink = useRouteRef(rootRouteRef);\n const { t } = useTranslationRef(scaffolderTranslationRef);\n const templatingExtensionsLink = useRouteRef(templatingExtensionsRouteRef);\n\n const scaffolderPageContextMenuProps = {\n onEditorClicked:\n props?.contextMenu?.editor !== false\n ? () => navigate(editorLink())\n : undefined,\n onActionsClicked:\n props?.contextMenu?.actions !== false\n ? () => navigate(actionsLink())\n : undefined,\n onTasksClicked: undefined,\n onCreateClicked:\n props?.contextMenu?.create !== false\n ? () => navigate(createLink())\n : undefined,\n onTemplatingExtensionsClicked: () => navigate(templatingExtensionsLink()),\n };\n return (\n <Page themeId=\"home\">\n <Header\n pageTitleOverride={t('listTaskPage.pageTitle')}\n title={t('listTaskPage.title')}\n subtitle={t('listTaskPage.subtitle')}\n >\n <ScaffolderPageContextMenu {...scaffolderPageContextMenuProps} />\n </Header>\n <Content>\n <ListTaskPageContent {...props} />\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListTasksPage.esm.js","sources":["../../../src/components/ListTasksPage/ListTasksPage.tsx"],"sourcesContent":["/*\n * Copyright 2022 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 {\n Content,\n EmptyState,\n ErrorPanel,\n Header,\n Link,\n Page,\n Progress,\n Table,\n} from '@backstage/core-components';\nimport { useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport { CatalogFilterLayout } from '@backstage/plugin-catalog-react';\nimport useAsync from 'react-use/esm/useAsync';\nimport { useState } from 'react';\nimport {\n scaffolderApiRef,\n ScaffolderTask,\n} from '@backstage/plugin-scaffolder-react';\nimport { OwnerListPicker } from './OwnerListPicker';\nimport {\n CreatedAtColumn,\n OwnerEntityColumn,\n TaskStatusColumn,\n TemplateTitleColumn,\n} from './columns';\nimport {\n actionsRouteRef,\n editRouteRef,\n rootRouteRef,\n templatingExtensionsRouteRef,\n} from '../../routes';\nimport { ScaffolderPageContextMenu } from '@backstage/plugin-scaffolder-react/alpha';\nimport { useNavigate } from 'react-router-dom';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { scaffolderTranslationRef } from '../../translation';\n\nexport interface MyTaskPageProps {\n initiallySelectedFilter?: 'owned' | 'all';\n contextMenu?: {\n editor?: boolean;\n actions?: boolean;\n create?: boolean;\n templatingExtensions?: boolean;\n };\n}\n\nconst ListTaskPageContent = (props: MyTaskPageProps) => {\n const { initiallySelectedFilter = 'owned' } = props;\n const { t } = useTranslationRef(scaffolderTranslationRef);\n const [limit, setLimit] = useState(5);\n const [page, setPage] = useState(0);\n\n const scaffolderApi = useApi(scaffolderApiRef);\n const rootLink = useRouteRef(rootRouteRef);\n\n const [ownerFilter, setOwnerFilter] = useState(initiallySelectedFilter);\n const { value, loading, error } = useAsync(() => {\n if (scaffolderApi.listTasks) {\n return scaffolderApi.listTasks?.({\n filterByOwnership: ownerFilter,\n limit,\n offset: page * limit,\n });\n }\n\n // eslint-disable-next-line no-console\n console.warn(\n 'listTasks is not implemented in the scaffolderApi, please make sure to implement this method.',\n );\n\n return Promise.resolve({ tasks: [], totalTasks: 0 });\n }, [scaffolderApi, ownerFilter, limit, page]);\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n return (\n <CatalogFilterLayout>\n <CatalogFilterLayout.Filters>\n <OwnerListPicker\n filter={ownerFilter}\n onSelectOwner={id => setOwnerFilter(id)}\n />\n </CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>\n <ErrorPanel error={error} />\n <EmptyState\n missing=\"info\"\n title={t('listTaskPage.content.emptyState.title')}\n description={t('listTaskPage.content.emptyState.description')}\n />\n </CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n );\n }\n\n return (\n <CatalogFilterLayout>\n <CatalogFilterLayout.Filters>\n <OwnerListPicker\n filter={ownerFilter}\n onSelectOwner={id => setOwnerFilter(id)}\n />\n </CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>\n <Table<ScaffolderTask>\n onRowsPerPageChange={pageSize => {\n setPage(0);\n setLimit(pageSize);\n }}\n onPageChange={newPage => setPage(newPage)}\n options={{ pageSize: limit, emptyRowsWhenPaging: false }}\n data={value?.tasks ?? []}\n page={page}\n totalCount={value?.totalTasks ?? 0}\n title={t('listTaskPage.content.tableTitle')}\n columns={[\n {\n title: t('listTaskPage.content.tableCell.taskID'),\n field: 'id',\n render: row => (\n <Link to={`${rootLink()}/tasks/${row.id}`}>{row.id}</Link>\n ),\n },\n {\n title: t('listTaskPage.content.tableCell.template'),\n field: 'spec.templateInfo.entity.metadata.title',\n render: row => (\n <TemplateTitleColumn\n entityRef={row.spec.templateInfo?.entityRef}\n />\n ),\n },\n {\n title: t('listTaskPage.content.tableCell.created'),\n field: 'createdAt',\n render: row => <CreatedAtColumn createdAt={row.createdAt} />,\n },\n {\n title: t('listTaskPage.content.tableCell.owner'),\n field: 'createdBy',\n render: row => (\n <OwnerEntityColumn entityRef={row.spec?.user?.ref} />\n ),\n },\n {\n title: t('listTaskPage.content.tableCell.status'),\n field: 'status',\n render: row => <TaskStatusColumn status={row.status} />,\n },\n ]}\n />\n </CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n );\n};\n\nexport const ListTasksPage = (props: MyTaskPageProps) => {\n const navigate = useNavigate();\n const editorLink = useRouteRef(editRouteRef);\n const actionsLink = useRouteRef(actionsRouteRef);\n const createLink = useRouteRef(rootRouteRef);\n const { t } = useTranslationRef(scaffolderTranslationRef);\n const templatingExtensionsLink = useRouteRef(templatingExtensionsRouteRef);\n\n const scaffolderPageContextMenuProps = {\n onEditorClicked:\n props?.contextMenu?.editor !== false\n ? () => navigate(editorLink())\n : undefined,\n onActionsClicked:\n props?.contextMenu?.actions !== false\n ? () => navigate(actionsLink())\n : undefined,\n onTasksClicked: undefined,\n onCreateClicked:\n props?.contextMenu?.create !== false\n ? () => navigate(createLink())\n : undefined,\n onTemplatingExtensionsClicked:\n props?.contextMenu?.templatingExtensions !== false\n ? () => navigate(templatingExtensionsLink())\n : undefined,\n };\n return (\n <Page themeId=\"home\">\n <Header\n pageTitleOverride={t('listTaskPage.pageTitle')}\n title={t('listTaskPage.title')}\n subtitle={t('listTaskPage.subtitle')}\n >\n <ScaffolderPageContextMenu {...scaffolderPageContextMenuProps} />\n </Header>\n <Content>\n <ListTaskPageContent {...props} />\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -151,7 +151,7 @@ const InternalRouter = (props) => {
|
|
|
151
151
|
Route,
|
|
152
152
|
{
|
|
153
153
|
path: templatingExtensionsRouteRef.path,
|
|
154
|
-
element: /* @__PURE__ */ jsx(TemplatingExtensionsPage, {})
|
|
154
|
+
element: /* @__PURE__ */ jsx(TemplatingExtensionsPage, { contextMenu: props.contextMenu })
|
|
155
155
|
}
|
|
156
156
|
),
|
|
157
157
|
/* @__PURE__ */ jsx(Route, { path: "*", element: /* @__PURE__ */ jsx(NotFoundErrorPage, {}) })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Router.esm.js","sources":["../../../src/components/Router/Router.tsx"],"sourcesContent":["/*\n * Copyright 2022 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 { ComponentType, PropsWithChildren } from 'react';\nimport { Routes, Route, useOutlet } from 'react-router-dom';\n\nimport {\n FieldExtensionOptions,\n FormProps,\n ReviewStepProps,\n TemplateGroupFilter,\n} from '@backstage/plugin-scaffolder-react';\nimport {\n ScaffolderTaskOutput,\n SecretsContextProvider,\n useCustomFieldExtensions,\n useCustomLayouts,\n} from '@backstage/plugin-scaffolder-react';\n\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from '../../extensions/default';\n\nimport {\n actionsRouteRef,\n editorRouteRef,\n customFieldsRouteRef,\n editRouteRef,\n scaffolderListTaskRouteRef,\n scaffolderTaskRouteRef,\n selectedTemplateRouteRef,\n templateFormRouteRef,\n templatingExtensionsRouteRef,\n} from '../../routes';\n\nimport { ActionsPage } from '../../components/ActionsPage';\nimport { ListTasksPage } from '../../components/ListTasksPage';\n\nimport {\n TemplateListPageProps,\n TemplateWizardPageProps,\n} from '@backstage/plugin-scaffolder/alpha';\nimport { TemplateListPage, TemplateWizardPage } from '../../alpha/components';\nimport { OngoingTask } from '../OngoingTask';\nimport {\n TemplateFormPage,\n TemplateIntroPage,\n TemplateEditorPage,\n CustomFieldsPage,\n} from '../../alpha/components/TemplateEditorPage';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { templateManagementPermission } from '@backstage/plugin-scaffolder-common/alpha';\nimport { useApp } from '@backstage/core-plugin-api';\nimport { OpaqueFormField } from '@internal/scaffolder';\nimport { useAsync, useMountEffect } from '@react-hookz/web';\nimport { TemplatingExtensionsPage } from '../TemplatingExtensionsPage';\nimport { FormField } from '@backstage/plugin-scaffolder-react/alpha';\n\n/**\n * The Props for the Scaffolder Router\n *\n * @public\n */\nexport type RouterProps = {\n components?: {\n ReviewStepComponent?: ComponentType<ReviewStepProps>;\n TemplateCardComponent?: ComponentType<{\n template: TemplateEntityV1beta3;\n }>;\n TaskPageComponent?: ComponentType<PropsWithChildren<{}>>;\n EXPERIMENTAL_TemplateOutputsComponent?: ComponentType<{\n output?: ScaffolderTaskOutput;\n }>;\n EXPERIMENTAL_TemplateListPageComponent?: ComponentType<TemplateListPageProps>;\n EXPERIMENTAL_TemplateWizardPageComponent?: ComponentType<TemplateWizardPageProps>;\n };\n groups?: TemplateGroupFilter[];\n templateFilter?: (entity: TemplateEntityV1beta3) => boolean;\n headerOptions?: {\n pageTitleOverride?: string;\n title?: string;\n subtitle?: string;\n };\n defaultPreviewTemplate?: string;\n formProps?: FormProps;\n contextMenu?: {\n /** Whether to show a link to the template editor */\n editor?: boolean;\n /** Whether to show a link to the actions documentation */\n actions?: boolean;\n /** Whether to show a link to the tasks page */\n tasks?: boolean;\n /** Whether to show a link to the create page (on /create subroutes) */\n create?: boolean;\n };\n};\n\n/**\n * Internal router with additional props that aren't available in the public API\n * for the old frontend system.\n *\n * @internal\n */\nexport const InternalRouter = (\n props: PropsWithChildren<\n RouterProps & { formFieldLoaders?: Array<() => Promise<FormField>> }\n >,\n) => {\n const {\n components: {\n TemplateCardComponent,\n TaskPageComponent = OngoingTask,\n ReviewStepComponent,\n EXPERIMENTAL_TemplateOutputsComponent: TemplateOutputsComponent,\n EXPERIMENTAL_TemplateListPageComponent:\n TemplateListPageComponent = TemplateListPage,\n EXPERIMENTAL_TemplateWizardPageComponent:\n TemplateWizardPageComponent = TemplateWizardPage,\n } = {},\n } = props;\n const outlet = useOutlet() || props.children;\n const customFieldExtensions = useCustomFieldExtensions(outlet);\n const loadedFieldExtensions = useFormFieldLoaders(props.formFieldLoaders);\n\n const app = useApp();\n const { NotFoundErrorPage } = app.getComponents();\n\n const fieldExtensions = [\n ...customFieldExtensions,\n ...loadedFieldExtensions,\n ...DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS.filter(\n ({ name }) =>\n !customFieldExtensions.some(\n customFieldExtension => customFieldExtension.name === name,\n ),\n ),\n ] as FieldExtensionOptions[];\n\n const customLayouts = useCustomLayouts(outlet);\n\n return (\n <Routes>\n <Route\n path=\"/\"\n element={\n <TemplateListPageComponent\n TemplateCardComponent={TemplateCardComponent}\n contextMenu={props.contextMenu}\n groups={props.groups}\n templateFilter={props.templateFilter}\n headerOptions={props.headerOptions}\n />\n }\n />\n <Route\n path={selectedTemplateRouteRef.path}\n element={\n <SecretsContextProvider>\n <TemplateWizardPageComponent\n headerOptions={props.headerOptions}\n customFieldExtensions={fieldExtensions}\n layouts={customLayouts}\n components={{ ReviewStepComponent }}\n formProps={props.formProps}\n />\n </SecretsContextProvider>\n }\n />\n <Route\n path={scaffolderTaskRouteRef.path}\n element={\n <TaskPageComponent\n TemplateOutputsComponent={TemplateOutputsComponent}\n />\n }\n />\n <Route\n path={editRouteRef.path}\n element={\n <RequirePermission permission={templateManagementPermission}>\n <SecretsContextProvider>\n <TemplateIntroPage />\n </SecretsContextProvider>\n </RequirePermission>\n }\n />\n <Route\n path={customFieldsRouteRef.path}\n element={\n <RequirePermission permission={templateManagementPermission}>\n <SecretsContextProvider>\n <CustomFieldsPage fieldExtensions={fieldExtensions} />\n </SecretsContextProvider>\n </RequirePermission>\n }\n />\n <Route\n path={templateFormRouteRef.path}\n element={\n <RequirePermission permission={templateManagementPermission}>\n <SecretsContextProvider>\n <TemplateFormPage\n layouts={customLayouts}\n formProps={props.formProps}\n fieldExtensions={fieldExtensions}\n />\n </SecretsContextProvider>\n </RequirePermission>\n }\n />\n\n <Route\n path={actionsRouteRef.path}\n element={<ActionsPage contextMenu={props.contextMenu} />}\n />\n <Route\n path={scaffolderListTaskRouteRef.path}\n element={<ListTasksPage contextMenu={props.contextMenu} />}\n />\n <Route\n path={editorRouteRef.path}\n element={\n <RequirePermission permission={templateManagementPermission}>\n <SecretsContextProvider>\n <TemplateEditorPage\n layouts={customLayouts}\n formProps={props.formProps}\n fieldExtensions={fieldExtensions}\n />\n </SecretsContextProvider>\n </RequirePermission>\n }\n />\n <Route\n path={templatingExtensionsRouteRef.path}\n element={<TemplatingExtensionsPage />}\n />\n <Route path=\"*\" element={<NotFoundErrorPage />} />\n </Routes>\n );\n};\n\n/**\n * The Scaffolder Router\n *\n * @public\n */\nexport const Router = (props: PropsWithChildren<RouterProps>) => {\n return <InternalRouter {...props} />;\n};\n\nfunction useFormFieldLoaders(\n formFieldLoaders?: Array<() => Promise<FormField>>,\n) {\n const [{ result: loadedFieldExtensions }, { execute }] =\n useAsync(async () => {\n const loaded = await Promise.all(\n (formFieldLoaders ?? []).map(loader => loader()),\n );\n return loaded.map(f => OpaqueFormField.toInternal(f));\n }, []);\n useMountEffect(execute);\n return loadedFieldExtensions;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Router.esm.js","sources":["../../../src/components/Router/Router.tsx"],"sourcesContent":["/*\n * Copyright 2022 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 { ComponentType, PropsWithChildren } from 'react';\nimport { Routes, Route, useOutlet } from 'react-router-dom';\n\nimport {\n FieldExtensionOptions,\n FormProps,\n ReviewStepProps,\n TemplateGroupFilter,\n} from '@backstage/plugin-scaffolder-react';\nimport {\n ScaffolderTaskOutput,\n SecretsContextProvider,\n useCustomFieldExtensions,\n useCustomLayouts,\n} from '@backstage/plugin-scaffolder-react';\n\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from '../../extensions/default';\n\nimport {\n actionsRouteRef,\n editorRouteRef,\n customFieldsRouteRef,\n editRouteRef,\n scaffolderListTaskRouteRef,\n scaffolderTaskRouteRef,\n selectedTemplateRouteRef,\n templateFormRouteRef,\n templatingExtensionsRouteRef,\n} from '../../routes';\n\nimport { ActionsPage } from '../../components/ActionsPage';\nimport { ListTasksPage } from '../../components/ListTasksPage';\n\nimport {\n TemplateListPageProps,\n TemplateWizardPageProps,\n} from '@backstage/plugin-scaffolder/alpha';\nimport { TemplateListPage, TemplateWizardPage } from '../../alpha/components';\nimport { OngoingTask } from '../OngoingTask';\nimport {\n TemplateFormPage,\n TemplateIntroPage,\n TemplateEditorPage,\n CustomFieldsPage,\n} from '../../alpha/components/TemplateEditorPage';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { templateManagementPermission } from '@backstage/plugin-scaffolder-common/alpha';\nimport { useApp } from '@backstage/core-plugin-api';\nimport { OpaqueFormField } from '@internal/scaffolder';\nimport { useAsync, useMountEffect } from '@react-hookz/web';\nimport { TemplatingExtensionsPage } from '../TemplatingExtensionsPage';\nimport { FormField } from '@backstage/plugin-scaffolder-react/alpha';\n\n/**\n * The Props for the Scaffolder Router\n *\n * @public\n */\nexport type RouterProps = {\n components?: {\n ReviewStepComponent?: ComponentType<ReviewStepProps>;\n TemplateCardComponent?: ComponentType<{\n template: TemplateEntityV1beta3;\n }>;\n TaskPageComponent?: ComponentType<PropsWithChildren<{}>>;\n EXPERIMENTAL_TemplateOutputsComponent?: ComponentType<{\n output?: ScaffolderTaskOutput;\n }>;\n EXPERIMENTAL_TemplateListPageComponent?: ComponentType<TemplateListPageProps>;\n EXPERIMENTAL_TemplateWizardPageComponent?: ComponentType<TemplateWizardPageProps>;\n };\n groups?: TemplateGroupFilter[];\n templateFilter?: (entity: TemplateEntityV1beta3) => boolean;\n headerOptions?: {\n pageTitleOverride?: string;\n title?: string;\n subtitle?: string;\n };\n defaultPreviewTemplate?: string;\n formProps?: FormProps;\n contextMenu?: {\n /** Whether to show a link to the template editor */\n editor?: boolean;\n /** Whether to show a link to the actions documentation */\n actions?: boolean;\n /** Whether to show a link to the tasks page */\n tasks?: boolean;\n /** Whether to show a link to the create page (on /create subroutes) */\n create?: boolean;\n /** Whether to show a link to the templating extensions page */\n templatingExtensions?: boolean;\n };\n};\n\n/**\n * Internal router with additional props that aren't available in the public API\n * for the old frontend system.\n *\n * @internal\n */\nexport const InternalRouter = (\n props: PropsWithChildren<\n RouterProps & { formFieldLoaders?: Array<() => Promise<FormField>> }\n >,\n) => {\n const {\n components: {\n TemplateCardComponent,\n TaskPageComponent = OngoingTask,\n ReviewStepComponent,\n EXPERIMENTAL_TemplateOutputsComponent: TemplateOutputsComponent,\n EXPERIMENTAL_TemplateListPageComponent:\n TemplateListPageComponent = TemplateListPage,\n EXPERIMENTAL_TemplateWizardPageComponent:\n TemplateWizardPageComponent = TemplateWizardPage,\n } = {},\n } = props;\n const outlet = useOutlet() || props.children;\n const customFieldExtensions = useCustomFieldExtensions(outlet);\n const loadedFieldExtensions = useFormFieldLoaders(props.formFieldLoaders);\n\n const app = useApp();\n const { NotFoundErrorPage } = app.getComponents();\n\n const fieldExtensions = [\n ...customFieldExtensions,\n ...loadedFieldExtensions,\n ...DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS.filter(\n ({ name }) =>\n !customFieldExtensions.some(\n customFieldExtension => customFieldExtension.name === name,\n ),\n ),\n ] as FieldExtensionOptions[];\n\n const customLayouts = useCustomLayouts(outlet);\n\n return (\n <Routes>\n <Route\n path=\"/\"\n element={\n <TemplateListPageComponent\n TemplateCardComponent={TemplateCardComponent}\n contextMenu={props.contextMenu}\n groups={props.groups}\n templateFilter={props.templateFilter}\n headerOptions={props.headerOptions}\n />\n }\n />\n <Route\n path={selectedTemplateRouteRef.path}\n element={\n <SecretsContextProvider>\n <TemplateWizardPageComponent\n headerOptions={props.headerOptions}\n customFieldExtensions={fieldExtensions}\n layouts={customLayouts}\n components={{ ReviewStepComponent }}\n formProps={props.formProps}\n />\n </SecretsContextProvider>\n }\n />\n <Route\n path={scaffolderTaskRouteRef.path}\n element={\n <TaskPageComponent\n TemplateOutputsComponent={TemplateOutputsComponent}\n />\n }\n />\n <Route\n path={editRouteRef.path}\n element={\n <RequirePermission permission={templateManagementPermission}>\n <SecretsContextProvider>\n <TemplateIntroPage />\n </SecretsContextProvider>\n </RequirePermission>\n }\n />\n <Route\n path={customFieldsRouteRef.path}\n element={\n <RequirePermission permission={templateManagementPermission}>\n <SecretsContextProvider>\n <CustomFieldsPage fieldExtensions={fieldExtensions} />\n </SecretsContextProvider>\n </RequirePermission>\n }\n />\n <Route\n path={templateFormRouteRef.path}\n element={\n <RequirePermission permission={templateManagementPermission}>\n <SecretsContextProvider>\n <TemplateFormPage\n layouts={customLayouts}\n formProps={props.formProps}\n fieldExtensions={fieldExtensions}\n />\n </SecretsContextProvider>\n </RequirePermission>\n }\n />\n\n <Route\n path={actionsRouteRef.path}\n element={<ActionsPage contextMenu={props.contextMenu} />}\n />\n <Route\n path={scaffolderListTaskRouteRef.path}\n element={<ListTasksPage contextMenu={props.contextMenu} />}\n />\n <Route\n path={editorRouteRef.path}\n element={\n <RequirePermission permission={templateManagementPermission}>\n <SecretsContextProvider>\n <TemplateEditorPage\n layouts={customLayouts}\n formProps={props.formProps}\n fieldExtensions={fieldExtensions}\n />\n </SecretsContextProvider>\n </RequirePermission>\n }\n />\n <Route\n path={templatingExtensionsRouteRef.path}\n element={<TemplatingExtensionsPage contextMenu={props.contextMenu} />}\n />\n <Route path=\"*\" element={<NotFoundErrorPage />} />\n </Routes>\n );\n};\n\n/**\n * The Scaffolder Router\n *\n * @public\n */\nexport const Router = (props: PropsWithChildren<RouterProps>) => {\n return <InternalRouter {...props} />;\n};\n\nfunction useFormFieldLoaders(\n formFieldLoaders?: Array<() => Promise<FormField>>,\n) {\n const [{ result: loadedFieldExtensions }, { execute }] =\n useAsync(async () => {\n const loaded = await Promise.all(\n (formFieldLoaders ?? []).map(loader => loader()),\n );\n return loaded.map(f => OpaqueFormField.toInternal(f));\n }, []);\n useMountEffect(execute);\n return loadedFieldExtensions;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -219,17 +219,18 @@ const TemplatingExtensionsPageContent = ({
|
|
|
219
219
|
)
|
|
220
220
|
] });
|
|
221
221
|
};
|
|
222
|
-
const TemplatingExtensionsPage = () => {
|
|
222
|
+
const TemplatingExtensionsPage = (props) => {
|
|
223
223
|
const navigate = useNavigate();
|
|
224
224
|
const editorLink = useRouteRef(editRouteRef);
|
|
225
225
|
const tasksLink = useRouteRef(scaffolderListTaskRouteRef);
|
|
226
226
|
const createLink = useRouteRef(rootRouteRef);
|
|
227
227
|
const actionsLink = useRouteRef(actionsRouteRef);
|
|
228
228
|
const scaffolderPageContextMenuProps = {
|
|
229
|
-
onEditorClicked: () => navigate(editorLink()),
|
|
230
|
-
onActionsClicked: () => navigate(actionsLink()),
|
|
231
|
-
onTasksClicked: () => navigate(tasksLink()),
|
|
232
|
-
onCreateClicked: () => navigate(createLink())
|
|
229
|
+
onEditorClicked: props?.contextMenu?.editor !== false ? () => navigate(editorLink()) : void 0,
|
|
230
|
+
onActionsClicked: props?.contextMenu?.actions !== false ? () => navigate(actionsLink()) : void 0,
|
|
231
|
+
onTasksClicked: props?.contextMenu?.tasks !== false ? () => navigate(tasksLink()) : void 0,
|
|
232
|
+
onCreateClicked: props?.contextMenu?.create !== false ? () => navigate(createLink()) : void 0,
|
|
233
|
+
onTemplatingExtensionsClicked: void 0
|
|
233
234
|
};
|
|
234
235
|
const { t } = useTranslationRef(scaffolderTranslationRef);
|
|
235
236
|
return /* @__PURE__ */ jsxs(Page, { themeId: "home", children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplatingExtensionsPage.esm.js","sources":["../../../src/components/TemplatingExtensionsPage/TemplatingExtensionsPage.tsx"],"sourcesContent":["/*\n * Copyright 2025 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 { useApi, useRouteRef } from '@backstage/core-plugin-api';\n\nimport {\n actionsRouteRef,\n editRouteRef,\n rootRouteRef,\n scaffolderListTaskRouteRef,\n templatingExtensionsRouteRef,\n} from '../../routes';\n\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { scaffolderTranslationRef } from '../../translation';\n\nimport {\n Content,\n EmptyState,\n ErrorPanel,\n Header,\n Link,\n Page,\n Progress,\n} from '@backstage/core-components';\nimport { scaffolderApiRef } from '@backstage/plugin-scaffolder-react';\nimport {\n ScaffolderPageContextMenu,\n ScaffolderPageContextMenuProps,\n} from '@backstage/plugin-scaffolder-react/alpha';\nimport Box from '@material-ui/core/Box';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Tab from '@material-ui/core/Tab';\nimport Tabs from '@material-ui/core/Tabs';\nimport TextField from '@material-ui/core/TextField';\nimport AllInclusiveIcon from '@material-ui/icons/AllInclusive';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport FunctionsIcon from '@material-ui/icons/Functions';\nimport LinkIcon from '@material-ui/icons/Link';\nimport SearchIcon from '@material-ui/icons/Search';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport useAsync from 'react-use/esm/useAsync';\nimport {\n Extension,\n ExtensionKind,\n listTemplatingExtensions,\n parseFragment,\n} from './navigation';\nimport { TemplateFilters } from './TemplateFilters';\nimport {\n TemplateGlobalFunctions,\n TemplateGlobalValues,\n} from './TemplateGlobals';\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\n argRequired: {\n position: 'relative',\n '& > *': {\n display: 'inline',\n position: 'relative',\n '&::after': {\n position: 'absolute',\n content: '\"*\"',\n top: 0,\n right: theme.spacing(-1),\n fontWeight: 'bolder',\n color: theme.palette.error.light,\n },\n },\n },\n\n link: {\n paddingLeft: theme.spacing(1),\n cursor: 'pointer',\n },\n\n tabs: {\n display: 'block',\n minHeight: 'initial',\n overflow: 'initial',\n },\n}));\n\nexport const TemplatingExtensionsPageContent = ({\n linkLocal,\n}: {\n linkLocal?: boolean;\n}) => {\n const api = useApi(scaffolderApiRef);\n const classes = useStyles();\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n const { loading, value, error } = useAsync(async () => {\n if (api.listTemplatingExtensions) {\n return api.listTemplatingExtensions();\n }\n // eslint-disable-next-line no-console\n console.warn(\n 'listTemplatingExtensions is not implemented in the scaffolderApi; please make sure to implement this method.',\n );\n return Promise.resolve({\n filters: {},\n globals: { functions: {}, values: {} },\n });\n }, [api]);\n\n const [tab, selectTab] = useState<ExtensionKind>('filter');\n const [selectedItem, setSelectedItem] = useState<Extension | null>(null);\n const [input, setInput] = useState<string>('');\n\n const handleTab = (_event: any, kind: ExtensionKind) => {\n if (selectedItem?.kind !== kind) {\n setSelectedItem(null);\n setInput('');\n }\n selectTab(kind);\n };\n\n const selectItem = (item: Extension | null) => {\n setSelectedItem(item);\n if (item) {\n selectTab(item.kind);\n }\n };\n\n useEffect(() => {\n if (value && window.location.hash) {\n try {\n selectTab(parseFragment(window.location.hash.substring(1)).kind);\n document.querySelector(window.location.hash)?.scrollIntoView();\n } catch (e) {\n // ignore bad link\n }\n }\n }, [value]);\n\n const extensionKinds = useMemo(\n () => ({\n filter: {\n icon: <FilterListIcon />,\n label: t('templatingExtensions.content.filters.title'),\n },\n function: {\n icon: <FunctionsIcon />,\n label: t('templatingExtensions.content.functions.title'),\n },\n value: {\n icon: <AllInclusiveIcon />,\n label: t('templatingExtensions.content.values.title'),\n },\n }),\n [t],\n );\n\n const templatingExtensionsLink = useRouteRef(templatingExtensionsRouteRef);\n\n if (loading) {\n return <Progress />;\n }\n if (error || !value) {\n return (\n <div data-testid=\"empty\">\n {error && <ErrorPanel error={error} />}\n <EmptyState\n missing=\"info\"\n title={t('templatingExtensions.content.emptyState.title')}\n description={t('templatingExtensions.content.emptyState.description')}\n />\n </div>\n );\n }\n const { filters, globals } = value;\n\n const baseLink = (\n <Link\n className={classes.link}\n to={templatingExtensionsLink()}\n {...(linkLocal ? {} : { target: '_blank', rel: 'noopener noreferrer' })}\n >\n <LinkIcon />\n </Link>\n );\n\n return (\n <>\n <Autocomplete\n renderInput={params => (\n <TextField\n {...params}\n aria-label={t(\n 'templatingExtensions.content.searchFieldPlaceholder',\n )}\n placeholder={t(\n 'templatingExtensions.content.searchFieldPlaceholder',\n )}\n variant=\"outlined\"\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n }}\n />\n )}\n getOptionLabel={option => option.name}\n getOptionSelected={(lhs, rhs) => lhs === rhs}\n options={listTemplatingExtensions(value)}\n groupBy={option => option.kind}\n renderGroup={params => (\n <>\n <Box display=\"flex\" alignItems=\"center\">\n {extensionKinds[params.group as ExtensionKind].icon}\n <Box sx={{ ml: 1 }}>\n {extensionKinds[params.group as ExtensionKind].label}\n </Box>\n </Box>\n <ul>{params.children}</ul>\n </>\n )}\n renderOption={(option: Extension) => (\n <ListItemText primary={option.name} />\n )}\n onChange={(_event: any, option: Extension | null) => {\n selectItem(option);\n }}\n inputValue={input}\n onInputChange={(_event: any, s: string) => setInput(s)}\n loading={loading}\n fullWidth\n clearOnEscape\n />\n <Tabs value={tab} onChange={handleTab} centered className={classes.tabs}>\n {Object.entries(extensionKinds).map(([k, v]) => (\n <Tab key={k} value={k} {...v} />\n ))}\n </Tabs>\n {tab === 'filter' && (\n <TemplateFilters {...{ baseLink, t, classes, filters, selectedItem }} />\n )}\n {tab === 'function' && (\n <TemplateGlobalFunctions\n functions={globals.functions}\n {...{ baseLink, t, classes, selectedItem }}\n />\n )}\n {tab === 'value' && (\n <TemplateGlobalValues\n values={globals.values}\n {...{ baseLink, t, classes, selectedItem }}\n />\n )}\n </>\n );\n};\n\nexport const TemplatingExtensionsPage = () => {\n const navigate = useNavigate();\n const editorLink = useRouteRef(editRouteRef);\n const tasksLink = useRouteRef(scaffolderListTaskRouteRef);\n const createLink = useRouteRef(rootRouteRef);\n const actionsLink = useRouteRef(actionsRouteRef);\n\n const scaffolderPageContextMenuProps: ScaffolderPageContextMenuProps = {\n onEditorClicked: () => navigate(editorLink()),\n onActionsClicked: () => navigate(actionsLink()),\n onTasksClicked: () => navigate(tasksLink()),\n onCreateClicked: () => navigate(createLink()),\n };\n\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n return (\n <Page themeId=\"home\">\n <Header\n pageTitleOverride={t('templatingExtensions.pageTitle')}\n title={t('templatingExtensions.title')}\n subtitle={t('templatingExtensions.subtitle')}\n >\n <ScaffolderPageContextMenu {...scaffolderPageContextMenuProps} />\n </Header>\n <Content>\n <TemplatingExtensionsPageContent linkLocal />\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TemplatingExtensionsPage.esm.js","sources":["../../../src/components/TemplatingExtensionsPage/TemplatingExtensionsPage.tsx"],"sourcesContent":["/*\n * Copyright 2025 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 { useApi, useRouteRef } from '@backstage/core-plugin-api';\n\nimport {\n actionsRouteRef,\n editRouteRef,\n rootRouteRef,\n scaffolderListTaskRouteRef,\n templatingExtensionsRouteRef,\n} from '../../routes';\n\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { scaffolderTranslationRef } from '../../translation';\n\nimport {\n Content,\n EmptyState,\n ErrorPanel,\n Header,\n Link,\n Page,\n Progress,\n} from '@backstage/core-components';\nimport { scaffolderApiRef } from '@backstage/plugin-scaffolder-react';\nimport {\n ScaffolderPageContextMenu,\n ScaffolderPageContextMenuProps,\n} from '@backstage/plugin-scaffolder-react/alpha';\nimport Box from '@material-ui/core/Box';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Tab from '@material-ui/core/Tab';\nimport Tabs from '@material-ui/core/Tabs';\nimport TextField from '@material-ui/core/TextField';\nimport AllInclusiveIcon from '@material-ui/icons/AllInclusive';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport FunctionsIcon from '@material-ui/icons/Functions';\nimport LinkIcon from '@material-ui/icons/Link';\nimport SearchIcon from '@material-ui/icons/Search';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport useAsync from 'react-use/esm/useAsync';\nimport {\n Extension,\n ExtensionKind,\n listTemplatingExtensions,\n parseFragment,\n} from './navigation';\nimport { TemplateFilters } from './TemplateFilters';\nimport {\n TemplateGlobalFunctions,\n TemplateGlobalValues,\n} from './TemplateGlobals';\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\n argRequired: {\n position: 'relative',\n '& > *': {\n display: 'inline',\n position: 'relative',\n '&::after': {\n position: 'absolute',\n content: '\"*\"',\n top: 0,\n right: theme.spacing(-1),\n fontWeight: 'bolder',\n color: theme.palette.error.light,\n },\n },\n },\n\n link: {\n paddingLeft: theme.spacing(1),\n cursor: 'pointer',\n },\n\n tabs: {\n display: 'block',\n minHeight: 'initial',\n overflow: 'initial',\n },\n}));\n\nexport const TemplatingExtensionsPageContent = ({\n linkLocal,\n}: {\n linkLocal?: boolean;\n}) => {\n const api = useApi(scaffolderApiRef);\n const classes = useStyles();\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n const { loading, value, error } = useAsync(async () => {\n if (api.listTemplatingExtensions) {\n return api.listTemplatingExtensions();\n }\n // eslint-disable-next-line no-console\n console.warn(\n 'listTemplatingExtensions is not implemented in the scaffolderApi; please make sure to implement this method.',\n );\n return Promise.resolve({\n filters: {},\n globals: { functions: {}, values: {} },\n });\n }, [api]);\n\n const [tab, selectTab] = useState<ExtensionKind>('filter');\n const [selectedItem, setSelectedItem] = useState<Extension | null>(null);\n const [input, setInput] = useState<string>('');\n\n const handleTab = (_event: any, kind: ExtensionKind) => {\n if (selectedItem?.kind !== kind) {\n setSelectedItem(null);\n setInput('');\n }\n selectTab(kind);\n };\n\n const selectItem = (item: Extension | null) => {\n setSelectedItem(item);\n if (item) {\n selectTab(item.kind);\n }\n };\n\n useEffect(() => {\n if (value && window.location.hash) {\n try {\n selectTab(parseFragment(window.location.hash.substring(1)).kind);\n document.querySelector(window.location.hash)?.scrollIntoView();\n } catch (e) {\n // ignore bad link\n }\n }\n }, [value]);\n\n const extensionKinds = useMemo(\n () => ({\n filter: {\n icon: <FilterListIcon />,\n label: t('templatingExtensions.content.filters.title'),\n },\n function: {\n icon: <FunctionsIcon />,\n label: t('templatingExtensions.content.functions.title'),\n },\n value: {\n icon: <AllInclusiveIcon />,\n label: t('templatingExtensions.content.values.title'),\n },\n }),\n [t],\n );\n\n const templatingExtensionsLink = useRouteRef(templatingExtensionsRouteRef);\n\n if (loading) {\n return <Progress />;\n }\n if (error || !value) {\n return (\n <div data-testid=\"empty\">\n {error && <ErrorPanel error={error} />}\n <EmptyState\n missing=\"info\"\n title={t('templatingExtensions.content.emptyState.title')}\n description={t('templatingExtensions.content.emptyState.description')}\n />\n </div>\n );\n }\n const { filters, globals } = value;\n\n const baseLink = (\n <Link\n className={classes.link}\n to={templatingExtensionsLink()}\n {...(linkLocal ? {} : { target: '_blank', rel: 'noopener noreferrer' })}\n >\n <LinkIcon />\n </Link>\n );\n\n return (\n <>\n <Autocomplete\n renderInput={params => (\n <TextField\n {...params}\n aria-label={t(\n 'templatingExtensions.content.searchFieldPlaceholder',\n )}\n placeholder={t(\n 'templatingExtensions.content.searchFieldPlaceholder',\n )}\n variant=\"outlined\"\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n }}\n />\n )}\n getOptionLabel={option => option.name}\n getOptionSelected={(lhs, rhs) => lhs === rhs}\n options={listTemplatingExtensions(value)}\n groupBy={option => option.kind}\n renderGroup={params => (\n <>\n <Box display=\"flex\" alignItems=\"center\">\n {extensionKinds[params.group as ExtensionKind].icon}\n <Box sx={{ ml: 1 }}>\n {extensionKinds[params.group as ExtensionKind].label}\n </Box>\n </Box>\n <ul>{params.children}</ul>\n </>\n )}\n renderOption={(option: Extension) => (\n <ListItemText primary={option.name} />\n )}\n onChange={(_event: any, option: Extension | null) => {\n selectItem(option);\n }}\n inputValue={input}\n onInputChange={(_event: any, s: string) => setInput(s)}\n loading={loading}\n fullWidth\n clearOnEscape\n />\n <Tabs value={tab} onChange={handleTab} centered className={classes.tabs}>\n {Object.entries(extensionKinds).map(([k, v]) => (\n <Tab key={k} value={k} {...v} />\n ))}\n </Tabs>\n {tab === 'filter' && (\n <TemplateFilters {...{ baseLink, t, classes, filters, selectedItem }} />\n )}\n {tab === 'function' && (\n <TemplateGlobalFunctions\n functions={globals.functions}\n {...{ baseLink, t, classes, selectedItem }}\n />\n )}\n {tab === 'value' && (\n <TemplateGlobalValues\n values={globals.values}\n {...{ baseLink, t, classes, selectedItem }}\n />\n )}\n </>\n );\n};\n\nexport type TemplatingExtensionsPageProps = {\n contextMenu?: {\n editor?: boolean;\n actions?: boolean;\n tasks?: boolean;\n create?: boolean;\n };\n};\n\nexport const TemplatingExtensionsPage = (\n props: TemplatingExtensionsPageProps,\n) => {\n const navigate = useNavigate();\n const editorLink = useRouteRef(editRouteRef);\n const tasksLink = useRouteRef(scaffolderListTaskRouteRef);\n const createLink = useRouteRef(rootRouteRef);\n const actionsLink = useRouteRef(actionsRouteRef);\n\n const scaffolderPageContextMenuProps: ScaffolderPageContextMenuProps = {\n onEditorClicked:\n props?.contextMenu?.editor !== false\n ? () => navigate(editorLink())\n : undefined,\n onActionsClicked:\n props?.contextMenu?.actions !== false\n ? () => navigate(actionsLink())\n : 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 onTemplatingExtensionsClicked: undefined,\n };\n\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n return (\n <Page themeId=\"home\">\n <Header\n pageTitleOverride={t('templatingExtensions.pageTitle')}\n title={t('templatingExtensions.title')}\n subtitle={t('templatingExtensions.subtitle')}\n >\n <ScaffolderPageContextMenu {...scaffolderPageContextMenuProps} />\n </Header>\n <Content>\n <TemplatingExtensionsPageContent linkLocal />\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/plugin-scaffolder",
|
|
3
|
-
"version": "1.34.1",
|
|
3
|
+
"version": "1.34.2-next.1",
|
|
4
4
|
"description": "The Backstage plugin that helps you create new things",
|
|
5
5
|
"backstage": {
|
|
6
6
|
"role": "frontend-plugin",
|
|
@@ -70,23 +70,23 @@
|
|
|
70
70
|
"test": "backstage-cli package test"
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
|
-
"@backstage/catalog-client": "
|
|
74
|
-
"@backstage/catalog-model": "
|
|
75
|
-
"@backstage/core-compat-api": "
|
|
76
|
-
"@backstage/core-components": "
|
|
77
|
-
"@backstage/core-plugin-api": "
|
|
78
|
-
"@backstage/errors": "
|
|
79
|
-
"@backstage/frontend-plugin-api": "
|
|
80
|
-
"@backstage/integration": "
|
|
81
|
-
"@backstage/integration-react": "
|
|
82
|
-
"@backstage/plugin-catalog-common": "
|
|
83
|
-
"@backstage/plugin-catalog-react": "
|
|
84
|
-
"@backstage/plugin-permission-react": "
|
|
85
|
-
"@backstage/plugin-scaffolder-common": "
|
|
86
|
-
"@backstage/plugin-scaffolder-react": "
|
|
87
|
-
"@backstage/plugin-techdocs-common": "
|
|
88
|
-
"@backstage/plugin-techdocs-react": "
|
|
89
|
-
"@backstage/types": "
|
|
73
|
+
"@backstage/catalog-client": "1.12.0",
|
|
74
|
+
"@backstage/catalog-model": "1.7.5",
|
|
75
|
+
"@backstage/core-compat-api": "0.5.3-next.1",
|
|
76
|
+
"@backstage/core-components": "0.18.2-next.1",
|
|
77
|
+
"@backstage/core-plugin-api": "1.11.1-next.0",
|
|
78
|
+
"@backstage/errors": "1.2.7",
|
|
79
|
+
"@backstage/frontend-plugin-api": "0.12.1-next.1",
|
|
80
|
+
"@backstage/integration": "1.18.1-next.1",
|
|
81
|
+
"@backstage/integration-react": "1.2.11-next.1",
|
|
82
|
+
"@backstage/plugin-catalog-common": "1.1.6-next.0",
|
|
83
|
+
"@backstage/plugin-catalog-react": "1.21.2-next.1",
|
|
84
|
+
"@backstage/plugin-permission-react": "0.4.37-next.0",
|
|
85
|
+
"@backstage/plugin-scaffolder-common": "1.7.2-next.1",
|
|
86
|
+
"@backstage/plugin-scaffolder-react": "1.19.2-next.1",
|
|
87
|
+
"@backstage/plugin-techdocs-common": "0.1.1",
|
|
88
|
+
"@backstage/plugin-techdocs-react": "1.3.4-next.1",
|
|
89
|
+
"@backstage/types": "1.2.2",
|
|
90
90
|
"@codemirror/language": "^6.0.0",
|
|
91
91
|
"@codemirror/legacy-modes": "^6.1.0",
|
|
92
92
|
"@codemirror/view": "^6.0.0",
|
|
@@ -118,13 +118,13 @@
|
|
|
118
118
|
"zod-to-json-schema": "^3.20.4"
|
|
119
119
|
},
|
|
120
120
|
"devDependencies": {
|
|
121
|
-
"@backstage/cli": "
|
|
122
|
-
"@backstage/core-app-api": "
|
|
123
|
-
"@backstage/dev-utils": "
|
|
124
|
-
"@backstage/plugin-catalog": "
|
|
125
|
-
"@backstage/plugin-permission-common": "
|
|
126
|
-
"@backstage/plugin-techdocs": "
|
|
127
|
-
"@backstage/test-utils": "
|
|
121
|
+
"@backstage/cli": "0.34.4-next.1",
|
|
122
|
+
"@backstage/core-app-api": "1.19.1-next.0",
|
|
123
|
+
"@backstage/dev-utils": "1.1.15-next.1",
|
|
124
|
+
"@backstage/plugin-catalog": "1.31.4-next.1",
|
|
125
|
+
"@backstage/plugin-permission-common": "0.9.2-next.0",
|
|
126
|
+
"@backstage/plugin-techdocs": "1.15.1-next.1",
|
|
127
|
+
"@backstage/test-utils": "1.7.12-next.0",
|
|
128
128
|
"@testing-library/dom": "^10.0.0",
|
|
129
129
|
"@testing-library/jest-dom": "^6.0.0",
|
|
130
130
|
"@testing-library/react": "^16.0.0",
|