@backstage/plugin-scaffolder 1.0.1-next.2 → 1.1.0
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 +48 -0
- package/alpha/package.json +1 -1
- package/dist/esm/{Router-9a3e085b.esm.js → Router-d90b3098.esm.js} +86 -19
- package/dist/esm/Router-d90b3098.esm.js.map +1 -0
- package/dist/esm/{default-4cf122e1.esm.js → default-b784df08.esm.js} +2 -2
- package/dist/esm/{default-4cf122e1.esm.js.map → default-b784df08.esm.js.map} +1 -1
- package/dist/esm/{index-ae0b91e4.esm.js → index-76cc5591.esm.js} +11 -6
- package/dist/esm/index-76cc5591.esm.js.map +1 -0
- package/dist/esm/{index-d6a70531.esm.js → index-948241af.esm.js} +4 -5
- package/dist/esm/{index-d6a70531.esm.js.map → index-948241af.esm.js.map} +1 -1
- package/dist/index.alpha.d.ts +9 -0
- package/dist/index.beta.d.ts +9 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.esm.js +1 -1
- package/package.json +20 -20
- package/dist/esm/Router-9a3e085b.esm.js.map +0 -1
- package/dist/esm/index-ae0b91e4.esm.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,53 @@
|
|
|
1
1
|
# @backstage/plugin-scaffolder
|
|
2
2
|
|
|
3
|
+
## 1.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 6331ec1ebc: Added a context menu to the scaffolder page that provides links to the template editor and actions reference. These links and the presence of the context menu can be toggled through the `contextMenu` prop of the scaffolder page.
|
|
8
|
+
- 8fad3b6ef5: The Template Preview page has been renamed to Template Editor, and is not available at the `/edit` path instead. There is a redirect in place from `/preview`.
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- 7c7919777e: build(deps-dev): bump `@testing-library/react-hooks` from 7.0.2 to 8.0.0
|
|
13
|
+
- 24254fd433: build(deps): bump `@testing-library/user-event` from 13.5.0 to 14.0.0
|
|
14
|
+
- 946af407db: Changed input label for owner field in GitlabRepoPicker
|
|
15
|
+
- 230ad0826f: Bump to using `@types/node` v16
|
|
16
|
+
- d34900af81: Added a new `NextScaffolderRouter` which will eventually replace the exiting router
|
|
17
|
+
- 9975ff9852: Applied the fix from version 1.0.1 of this package, which is part of the v1.0.2 release of Backstage.
|
|
18
|
+
- 4431873583: Update `usePermission` usage.
|
|
19
|
+
- Updated dependencies
|
|
20
|
+
- @backstage/integration@1.1.0
|
|
21
|
+
- @backstage/plugin-permission-react@0.4.0
|
|
22
|
+
- @backstage/plugin-catalog-react@1.0.1
|
|
23
|
+
- @backstage/catalog-model@1.0.1
|
|
24
|
+
- @backstage/core-components@0.9.3
|
|
25
|
+
- @backstage/core-plugin-api@1.0.1
|
|
26
|
+
- @backstage/integration-react@1.0.1
|
|
27
|
+
- @backstage/plugin-catalog-common@1.0.1
|
|
28
|
+
- @backstage/catalog-client@1.0.1
|
|
29
|
+
- @backstage/plugin-scaffolder-common@1.0.1
|
|
30
|
+
|
|
31
|
+
## 1.1.0-next.3
|
|
32
|
+
|
|
33
|
+
### Minor Changes
|
|
34
|
+
|
|
35
|
+
- 6331ec1ebc: Added a context menu to the scaffolder page that provides links to the template editor and actions reference. These links and the presence of the context menu can be toggled through the `contextMenu` prop of the scaffolder page.
|
|
36
|
+
- 8fad3b6ef5: The Template Preview page has been renamed to Template Editor, and is not available at the `/edit` path instead. There is a redirect in place from `/preview`.
|
|
37
|
+
|
|
38
|
+
### Patch Changes
|
|
39
|
+
|
|
40
|
+
- 24254fd433: build(deps): bump `@testing-library/user-event` from 13.5.0 to 14.0.0
|
|
41
|
+
- 946af407db: Changed input label for owner field in GitlabRepoPicker
|
|
42
|
+
- 230ad0826f: Bump to using `@types/node` v16
|
|
43
|
+
- Updated dependencies
|
|
44
|
+
- @backstage/core-components@0.9.3-next.2
|
|
45
|
+
- @backstage/core-plugin-api@1.0.1-next.0
|
|
46
|
+
- @backstage/integration-react@1.0.1-next.2
|
|
47
|
+
- @backstage/plugin-catalog-react@1.0.1-next.3
|
|
48
|
+
- @backstage/plugin-permission-react@0.4.0-next.1
|
|
49
|
+
- @backstage/integration@1.1.0-next.2
|
|
50
|
+
|
|
3
51
|
## 1.0.1-next.2
|
|
4
52
|
|
|
5
53
|
### Patch Changes
|
package/alpha/package.json
CHANGED
|
@@ -3,13 +3,23 @@ import { useNavigate, Navigate, useOutlet, Routes, Route } from 'react-router';
|
|
|
3
3
|
import { ItemCardHeader, MarkdownContent, Button, ContentHeader, Progress, WarningPanel, Link as Link$1, Content, ItemCardGrid, Page, Header, CreateButton, SupportButton, StructuredMetadataTable, InfoCard, ErrorPage } from '@backstage/core-components';
|
|
4
4
|
import { useRouteRef, useApi, errorApiRef, featureFlagsApiRef, useApiHolder, alertApiRef, useElementFilter } from '@backstage/core-plugin-api';
|
|
5
5
|
import { getEntityRelations, getEntitySourceLocation, FavoriteEntity, EntityRefLinks, useEntityList, EntityListProvider, CatalogFilterLayout, EntitySearchBar, EntityKindPicker, UserListPicker, EntityTagPicker, catalogApiRef, humanizeEntityRef } from '@backstage/plugin-catalog-react';
|
|
6
|
-
import { s as selectedTemplateRouteRef, r as registerComponentRouteRef, T as TemplateTypePicker, S as SecretsContext,
|
|
6
|
+
import { s as selectedTemplateRouteRef, r as rootRouteRef, a as registerComponentRouteRef, T as TemplateTypePicker, S as SecretsContext, b as scaffolderApiRef, c as scaffolderTaskRouteRef, F as FIELD_EXTENSION_WRAPPER_KEY, d as FIELD_EXTENSION_KEY, e as SecretsContextProvider, f as actionsRouteRef, g as editRouteRef, h as TaskPage } from './index-76cc5591.esm.js';
|
|
7
7
|
import { RELATION_OWNED_BY, stringifyEntityRef } from '@backstage/catalog-model';
|
|
8
|
-
import { makeStyles, useTheme, Card, CardMedia, CardContent, Box, Typography, Chip, CardActions, IconButton, Tooltip, Link, Stepper, Step, StepLabel, StepContent, Button as Button$1, Paper, LinearProgress, TableContainer, Table, TableHead, TableRow, TableCell, TableBody, Grid, FormControl, InputLabel, Select, MenuItem } from '@material-ui/core';
|
|
8
|
+
import { makeStyles, useTheme, Card, CardMedia, CardContent, Box, Typography, Chip, CardActions, IconButton, Tooltip, Link, Stepper, Step, StepLabel, StepContent, Button as Button$1, Paper, LinearProgress, TableContainer, Table, TableHead, TableRow, TableCell, TableBody, Grid, FormControl, InputLabel, Select, MenuItem as MenuItem$1 } from '@material-ui/core';
|
|
9
9
|
import { scmIntegrationsApiRef, ScmIntegrationIcon } from '@backstage/integration-react';
|
|
10
10
|
import WarningIcon from '@material-ui/icons/Warning';
|
|
11
11
|
import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common';
|
|
12
12
|
import { usePermission } from '@backstage/plugin-permission-react';
|
|
13
|
+
import IconButton$1 from '@material-ui/core/IconButton';
|
|
14
|
+
import ListItemIcon from '@material-ui/core/ListItemIcon';
|
|
15
|
+
import ListItemText from '@material-ui/core/ListItemText';
|
|
16
|
+
import MenuItem from '@material-ui/core/MenuItem';
|
|
17
|
+
import MenuList from '@material-ui/core/MenuList';
|
|
18
|
+
import Popover from '@material-ui/core/Popover';
|
|
19
|
+
import { makeStyles as makeStyles$1 } from '@material-ui/core/styles';
|
|
20
|
+
import Description from '@material-ui/icons/Description';
|
|
21
|
+
import Edit from '@material-ui/icons/Edit';
|
|
22
|
+
import MoreVert from '@material-ui/icons/MoreVert';
|
|
13
23
|
import qs from 'qs';
|
|
14
24
|
import { useParams } from 'react-router-dom';
|
|
15
25
|
import useAsync from 'react-use/lib/useAsync';
|
|
@@ -23,7 +33,7 @@ import { showPanel } from '@codemirror/panel';
|
|
|
23
33
|
import { StreamLanguage } from '@codemirror/stream-parser';
|
|
24
34
|
import CodeMirror from '@uiw/react-codemirror';
|
|
25
35
|
import yaml from 'yaml';
|
|
26
|
-
import { D as DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from './default-
|
|
36
|
+
import { D as DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from './default-b784df08.esm.js';
|
|
27
37
|
import '@backstage/errors';
|
|
28
38
|
import 'zen-observable';
|
|
29
39
|
import '@material-ui/core/FormControl';
|
|
@@ -41,7 +51,6 @@ import '@material-ui/core/Grid';
|
|
|
41
51
|
import '@material-ui/core/Step';
|
|
42
52
|
import '@material-ui/core/StepLabel';
|
|
43
53
|
import '@material-ui/core/Stepper';
|
|
44
|
-
import '@material-ui/core/styles';
|
|
45
54
|
import '@material-ui/core/Typography';
|
|
46
55
|
import '@material-ui/icons/Cancel';
|
|
47
56
|
import '@material-ui/icons/Check';
|
|
@@ -51,7 +60,7 @@ import 'react-use/lib/useInterval';
|
|
|
51
60
|
import 'use-immer';
|
|
52
61
|
import '@material-ui/icons/Language';
|
|
53
62
|
|
|
54
|
-
const useStyles$
|
|
63
|
+
const useStyles$3 = makeStyles((theme) => ({
|
|
55
64
|
cardHeader: {
|
|
56
65
|
position: "relative"
|
|
57
66
|
},
|
|
@@ -130,7 +139,7 @@ const TemplateCard = ({ template, deprecated }) => {
|
|
|
130
139
|
const ownedByRelations = getEntityRelations(template, RELATION_OWNED_BY);
|
|
131
140
|
const themeId = backstageTheme.getPageTheme({ themeId: templateProps.type }) ? templateProps.type : "other";
|
|
132
141
|
const theme = backstageTheme.getPageTheme({ themeId });
|
|
133
|
-
const classes = useStyles$
|
|
142
|
+
const classes = useStyles$3({ backgroundImage: theme.backgroundImage });
|
|
134
143
|
const href = templateRoute({ templateName: templateProps.name });
|
|
135
144
|
const scmIntegrationsApi = useApi(scmIntegrationsApiRef);
|
|
136
145
|
const sourceLocation = getEntitySourceLocation(template, scmIntegrationsApi);
|
|
@@ -215,9 +224,60 @@ const TemplateList = ({
|
|
|
215
224
|
})))));
|
|
216
225
|
};
|
|
217
226
|
|
|
227
|
+
const useStyles$2 = makeStyles$1({
|
|
228
|
+
button: {
|
|
229
|
+
color: "white"
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
function ScaffolderPageContextMenu(props) {
|
|
233
|
+
const classes = useStyles$2();
|
|
234
|
+
const [anchorEl, setAnchorEl] = useState();
|
|
235
|
+
const pageLink = useRouteRef(rootRouteRef);
|
|
236
|
+
const navigate = useNavigate();
|
|
237
|
+
const showEditor = props.editor !== false;
|
|
238
|
+
const showActions = props.actions !== false;
|
|
239
|
+
if (!showEditor && !showActions) {
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
const onOpen = (event) => {
|
|
243
|
+
setAnchorEl(event.currentTarget);
|
|
244
|
+
};
|
|
245
|
+
const onClose = () => {
|
|
246
|
+
setAnchorEl(void 0);
|
|
247
|
+
};
|
|
248
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(IconButton$1, {
|
|
249
|
+
"aria-label": "more",
|
|
250
|
+
"aria-controls": "long-menu",
|
|
251
|
+
"aria-haspopup": "true",
|
|
252
|
+
onClick: onOpen,
|
|
253
|
+
"data-testid": "menu-button",
|
|
254
|
+
color: "inherit",
|
|
255
|
+
className: classes.button
|
|
256
|
+
}, /* @__PURE__ */ React.createElement(MoreVert, null)), /* @__PURE__ */ React.createElement(Popover, {
|
|
257
|
+
open: Boolean(anchorEl),
|
|
258
|
+
onClose,
|
|
259
|
+
anchorEl,
|
|
260
|
+
anchorOrigin: { vertical: "bottom", horizontal: "right" },
|
|
261
|
+
transformOrigin: { vertical: "top", horizontal: "right" }
|
|
262
|
+
}, /* @__PURE__ */ React.createElement(MenuList, null, showEditor && /* @__PURE__ */ React.createElement(MenuItem, {
|
|
263
|
+
onClick: () => navigate(`${pageLink()}/edit`)
|
|
264
|
+
}, /* @__PURE__ */ React.createElement(ListItemIcon, null, /* @__PURE__ */ React.createElement(Edit, {
|
|
265
|
+
fontSize: "small"
|
|
266
|
+
})), /* @__PURE__ */ React.createElement(ListItemText, {
|
|
267
|
+
primary: "Template Editor"
|
|
268
|
+
})), showActions && /* @__PURE__ */ React.createElement(MenuItem, {
|
|
269
|
+
onClick: () => navigate(`${pageLink()}/actions`)
|
|
270
|
+
}, /* @__PURE__ */ React.createElement(ListItemIcon, null, /* @__PURE__ */ React.createElement(Description, {
|
|
271
|
+
fontSize: "small"
|
|
272
|
+
})), /* @__PURE__ */ React.createElement(ListItemText, {
|
|
273
|
+
primary: "Installed Actions"
|
|
274
|
+
})))));
|
|
275
|
+
}
|
|
276
|
+
|
|
218
277
|
const ScaffolderPageContents = ({
|
|
219
278
|
TemplateCardComponent,
|
|
220
|
-
groups
|
|
279
|
+
groups,
|
|
280
|
+
contextMenu
|
|
221
281
|
}) => {
|
|
222
282
|
const registerComponentLink = useRouteRef(registerComponentRouteRef);
|
|
223
283
|
const otherTemplatesGroup = {
|
|
@@ -236,7 +296,9 @@ const ScaffolderPageContents = ({
|
|
|
236
296
|
pageTitleOverride: "Create a New Component",
|
|
237
297
|
title: "Create a New Component",
|
|
238
298
|
subtitle: "Create new software components using standard templates"
|
|
239
|
-
}
|
|
299
|
+
}, /* @__PURE__ */ React.createElement(ScaffolderPageContextMenu, {
|
|
300
|
+
...contextMenu
|
|
301
|
+
})), /* @__PURE__ */ React.createElement(Content, null, /* @__PURE__ */ React.createElement(ContentHeader, {
|
|
240
302
|
title: "Available Templates"
|
|
241
303
|
}, allowed && /* @__PURE__ */ React.createElement(CreateButton, {
|
|
242
304
|
title: "Register Existing Component",
|
|
@@ -776,7 +838,7 @@ const useStyles = makeStyles({
|
|
|
776
838
|
height: "95%"
|
|
777
839
|
}
|
|
778
840
|
});
|
|
779
|
-
const
|
|
841
|
+
const TemplateEditorPage = ({
|
|
780
842
|
defaultPreviewTemplate = EXAMPLE_TEMPLATE_PARAMS_YAML,
|
|
781
843
|
customFieldExtensions = []
|
|
782
844
|
}) => {
|
|
@@ -842,7 +904,7 @@ const TemplatePreviewPage = ({
|
|
|
842
904
|
return /* @__PURE__ */ React.createElement(Page, {
|
|
843
905
|
themeId: "home"
|
|
844
906
|
}, /* @__PURE__ */ React.createElement(Header, {
|
|
845
|
-
title: "Template
|
|
907
|
+
title: "Template Editor",
|
|
846
908
|
subtitle: "Preview your template parameter UI"
|
|
847
909
|
}), /* @__PURE__ */ React.createElement(Content, null, loading && /* @__PURE__ */ React.createElement(LinearProgress, null), /* @__PURE__ */ React.createElement(Grid, {
|
|
848
910
|
container: true,
|
|
@@ -861,7 +923,7 @@ const TemplatePreviewPage = ({
|
|
|
861
923
|
label: "Load Existing Template",
|
|
862
924
|
labelId: "select-template-label",
|
|
863
925
|
onChange: (e) => handleSelectChange(e.target.value)
|
|
864
|
-
}, templateOptions.map((option, idx) => /* @__PURE__ */ React.createElement(MenuItem, {
|
|
926
|
+
}, templateOptions.map((option, idx) => /* @__PURE__ */ React.createElement(MenuItem$1, {
|
|
865
927
|
key: idx,
|
|
866
928
|
value: option.value
|
|
867
929
|
}, option.label)))), /* @__PURE__ */ React.createElement(CodeMirror, {
|
|
@@ -908,30 +970,35 @@ const Router = (props) => {
|
|
|
908
970
|
...DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS.filter(({ name }) => !customFieldExtensions.some((customFieldExtension) => customFieldExtension.name === name))
|
|
909
971
|
];
|
|
910
972
|
return /* @__PURE__ */ React.createElement(Routes, null, /* @__PURE__ */ React.createElement(Route, {
|
|
911
|
-
path: "/",
|
|
912
973
|
element: /* @__PURE__ */ React.createElement(ScaffolderPage, {
|
|
913
974
|
groups,
|
|
914
|
-
TemplateCardComponent
|
|
975
|
+
TemplateCardComponent,
|
|
976
|
+
contextMenu: props.contextMenu
|
|
915
977
|
})
|
|
916
978
|
}), /* @__PURE__ */ React.createElement(Route, {
|
|
917
|
-
path:
|
|
979
|
+
path: selectedTemplateRouteRef.path,
|
|
918
980
|
element: /* @__PURE__ */ React.createElement(SecretsContextProvider, null, /* @__PURE__ */ React.createElement(TemplatePage, {
|
|
919
981
|
customFieldExtensions: fieldExtensions
|
|
920
982
|
}))
|
|
921
983
|
}), /* @__PURE__ */ React.createElement(Route, {
|
|
922
|
-
path:
|
|
984
|
+
path: scaffolderTaskRouteRef.path,
|
|
923
985
|
element: /* @__PURE__ */ React.createElement(TaskPageElement, null)
|
|
924
986
|
}), /* @__PURE__ */ React.createElement(Route, {
|
|
925
|
-
path:
|
|
987
|
+
path: actionsRouteRef.path,
|
|
926
988
|
element: /* @__PURE__ */ React.createElement(ActionsPage, null)
|
|
927
989
|
}), /* @__PURE__ */ React.createElement(Route, {
|
|
928
|
-
path:
|
|
929
|
-
element: /* @__PURE__ */ React.createElement(SecretsContextProvider, null, /* @__PURE__ */ React.createElement(
|
|
990
|
+
path: editRouteRef.path,
|
|
991
|
+
element: /* @__PURE__ */ React.createElement(SecretsContextProvider, null, /* @__PURE__ */ React.createElement(TemplateEditorPage, {
|
|
930
992
|
defaultPreviewTemplate,
|
|
931
993
|
customFieldExtensions: fieldExtensions
|
|
932
994
|
}))
|
|
995
|
+
}), /* @__PURE__ */ React.createElement(Route, {
|
|
996
|
+
path: "preview",
|
|
997
|
+
element: /* @__PURE__ */ React.createElement(Navigate, {
|
|
998
|
+
to: "../edit"
|
|
999
|
+
})
|
|
933
1000
|
}));
|
|
934
1001
|
};
|
|
935
1002
|
|
|
936
1003
|
export { Router };
|
|
937
|
-
//# sourceMappingURL=Router-
|
|
1004
|
+
//# sourceMappingURL=Router-d90b3098.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Router-d90b3098.esm.js","sources":["../../src/components/TemplateCard/TemplateCard.tsx","../../src/components/TemplateList/TemplateList.tsx","../../src/components/ScaffolderPage/ScaffolderPageContextMenu.tsx","../../src/components/ScaffolderPage/ScaffolderPage.tsx","../../src/components/MultistepJsonForm/schema.ts","../../src/components/MultistepJsonForm/FieldOverrides/DescriptionField.tsx","../../src/components/MultistepJsonForm/MultistepJsonForm.tsx","../../src/components/TemplatePage/TemplatePage.tsx","../../src/components/ActionsPage/ActionsPage.tsx","../../src/components/TemplateEditorPage/TemplateEditorPage.tsx","../../src/components/Router.tsx"],"sourcesContent":["/*\n * Copyright 2020 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 { Entity, RELATION_OWNED_BY } from '@backstage/catalog-model';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport {\n ScmIntegrationIcon,\n scmIntegrationsApiRef,\n} from '@backstage/integration-react';\nimport {\n EntityRefLinks,\n FavoriteEntity,\n getEntityRelations,\n getEntitySourceLocation,\n} from '@backstage/plugin-catalog-react';\nimport { BackstageTheme } from '@backstage/theme';\nimport {\n Box,\n Card,\n CardActions,\n CardContent,\n CardMedia,\n Chip,\n IconButton,\n Link,\n makeStyles,\n Tooltip,\n Typography,\n useTheme,\n} from '@material-ui/core';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport React from 'react';\nimport { selectedTemplateRouteRef } from '../../routes';\n\nimport {\n Button,\n ItemCardHeader,\n MarkdownContent,\n} from '@backstage/core-components';\nimport { useApi, useRouteRef } from '@backstage/core-plugin-api';\n\nconst useStyles = makeStyles(theme => ({\n cardHeader: {\n position: 'relative',\n },\n title: {\n backgroundImage: ({ backgroundImage }: any) => backgroundImage,\n },\n box: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n '-webkit-line-clamp': 10,\n '-webkit-box-orient': 'vertical',\n paddingBottom: '0.8em',\n },\n label: {\n color: theme.palette.text.secondary,\n textTransform: 'uppercase',\n fontSize: '0.65rem',\n fontWeight: 'bold',\n letterSpacing: 0.5,\n lineHeight: 1,\n paddingBottom: '0.2rem',\n },\n leftButton: {\n marginRight: 'auto',\n },\n starButton: {\n position: 'absolute',\n top: theme.spacing(0.5),\n right: theme.spacing(0.5),\n padding: '0.25rem',\n color: '#fff',\n },\n}));\n\nconst useDeprecationStyles = makeStyles(theme => ({\n deprecationIcon: {\n position: 'absolute',\n top: theme.spacing(0.5),\n right: theme.spacing(3.5),\n padding: '0.25rem',\n },\n link: {\n color: theme.palette.warning.light,\n },\n}));\n\nexport type TemplateCardProps = {\n template: TemplateEntityV1beta3;\n deprecated?: boolean;\n};\n\ntype TemplateProps = {\n description: string;\n tags: string[];\n title: string;\n type: string;\n name: string;\n};\n\nconst getTemplateCardProps = (\n template: TemplateEntityV1beta3,\n): TemplateProps & { key: string } => {\n return {\n key: template.metadata.uid!,\n name: template.metadata.name,\n title: `${(template.metadata.title || template.metadata.name) ?? ''}`,\n type: template.spec.type ?? '',\n description: template.metadata.description ?? '-',\n tags: (template.metadata?.tags as string[]) ?? [],\n };\n};\n\nconst DeprecationWarning = () => {\n const styles = useDeprecationStyles();\n\n const Title = (\n <Typography style={{ padding: 10, maxWidth: 300 }}>\n This template uses a syntax that has been deprecated, and should be\n migrated to a newer syntax. Click for more info.\n </Typography>\n );\n\n return (\n <div className={styles.deprecationIcon}>\n <Tooltip title={Title}>\n <Link\n href=\"https://backstage.io/docs/features/software-templates/migrating-from-v1beta2-to-v1beta3\"\n className={styles.link}\n >\n <WarningIcon />\n </Link>\n </Tooltip>\n </div>\n );\n};\n\nexport const TemplateCard = ({ template, deprecated }: TemplateCardProps) => {\n const backstageTheme = useTheme<BackstageTheme>();\n const templateRoute = useRouteRef(selectedTemplateRouteRef);\n const templateProps = getTemplateCardProps(template);\n const ownedByRelations = getEntityRelations(\n template as Entity,\n RELATION_OWNED_BY,\n );\n const themeId = backstageTheme.getPageTheme({ themeId: templateProps.type })\n ? templateProps.type\n : 'other';\n const theme = backstageTheme.getPageTheme({ themeId });\n const classes = useStyles({ backgroundImage: theme.backgroundImage });\n const href = templateRoute({ templateName: templateProps.name });\n\n const scmIntegrationsApi = useApi(scmIntegrationsApiRef);\n const sourceLocation = getEntitySourceLocation(template, scmIntegrationsApi);\n\n return (\n <Card>\n <CardMedia className={classes.cardHeader}>\n <FavoriteEntity className={classes.starButton} entity={template} />\n {deprecated && <DeprecationWarning />}\n <ItemCardHeader\n title={templateProps.title}\n subtitle={templateProps.type}\n classes={{ root: classes.title }}\n />\n </CardMedia>\n <CardContent style={{ display: 'grid' }}>\n <Box className={classes.box}>\n <Typography variant=\"body2\" className={classes.label}>\n Description\n </Typography>\n <MarkdownContent content={templateProps.description} />\n </Box>\n <Box className={classes.box}>\n <Typography variant=\"body2\" className={classes.label}>\n Owner\n </Typography>\n <EntityRefLinks entityRefs={ownedByRelations} defaultKind=\"Group\" />\n </Box>\n <Box>\n <Typography variant=\"body2\" className={classes.label}>\n Tags\n </Typography>\n {templateProps.tags?.map(tag => (\n <Chip size=\"small\" label={tag} key={tag} />\n ))}\n </Box>\n </CardContent>\n <CardActions>\n {sourceLocation && (\n <IconButton\n className={classes.leftButton}\n href={sourceLocation.locationTargetUrl}\n >\n <ScmIntegrationIcon type={sourceLocation.integrationType} />\n </IconButton>\n )}\n <Button\n color=\"primary\"\n to={href}\n aria-label={`Choose ${templateProps.title}`}\n >\n Choose\n </Button>\n </CardActions>\n </Card>\n );\n};\n","/*\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 */\n\nimport React, { ComponentType } from 'react';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport {\n Content,\n ContentHeader,\n ItemCardGrid,\n Link,\n Progress,\n WarningPanel,\n} from '@backstage/core-components';\nimport { useEntityList } from '@backstage/plugin-catalog-react';\nimport { Typography } from '@material-ui/core';\nimport { TemplateCard } from '../TemplateCard';\n\n/**\n * @internal\n */\nexport type TemplateListProps = {\n TemplateCardComponent?:\n | ComponentType<{ template: TemplateEntityV1beta3 }>\n | undefined;\n group?: {\n title?: React.ReactNode;\n filter: (entity: Entity) => boolean;\n };\n};\n\n/**\n * @internal\n */\nexport const TemplateList = ({\n TemplateCardComponent,\n group,\n}: TemplateListProps) => {\n const { loading, error, entities } = useEntityList();\n const Card = TemplateCardComponent || TemplateCard;\n const maybeFilteredEntities = group\n ? entities.filter(e => group.filter(e))\n : entities;\n\n const titleComponent: React.ReactNode = (() => {\n if (group && group.title) {\n if (typeof group.title === 'string') {\n return <ContentHeader title={group.title} />;\n }\n return group.title;\n }\n\n return <ContentHeader title=\"Other Templates\" />;\n })();\n\n if (group && maybeFilteredEntities.length === 0) {\n return null;\n }\n return (\n <>\n {loading && <Progress />}\n\n {error && (\n <WarningPanel title=\"Oops! Something went wrong loading the templates\">\n {error.message}\n </WarningPanel>\n )}\n\n {!error && !loading && !entities.length && (\n <Typography variant=\"body2\">\n No templates found that match your filter. Learn more about{' '}\n <Link to=\"https://backstage.io/docs/features/software-templates/adding-templates\">\n adding templates\n </Link>\n .\n </Typography>\n )}\n\n <Content>\n {titleComponent}\n <ItemCardGrid>\n {maybeFilteredEntities &&\n maybeFilteredEntities?.length > 0 &&\n maybeFilteredEntities.map((template: Entity) => (\n <Card\n key={stringifyEntityRef(template)}\n template={template as TemplateEntityV1beta3}\n deprecated={template.apiVersion === 'backstage.io/v1beta2'}\n />\n ))}\n </ItemCardGrid>\n </Content>\n </>\n );\n};\n","/*\n * Copyright 2020 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 */\n\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport IconButton from '@material-ui/core/IconButton';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MenuList from '@material-ui/core/MenuList';\nimport Popover from '@material-ui/core/Popover';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Description from '@material-ui/icons/Description';\nimport Edit from '@material-ui/icons/Edit';\nimport MoreVert from '@material-ui/icons/MoreVert';\nimport React, { useState } from 'react';\nimport { useNavigate } from 'react-router';\nimport { rootRouteRef } from '../../routes';\n\nconst useStyles = makeStyles({\n button: {\n color: 'white',\n },\n});\n\nexport type ScaffolderPageContextMenuProps = {\n editor?: boolean;\n actions?: boolean;\n};\n\nexport function ScaffolderPageContextMenu(\n props: ScaffolderPageContextMenuProps,\n) {\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement>();\n const pageLink = useRouteRef(rootRouteRef);\n const navigate = useNavigate();\n\n const showEditor = props.editor !== false;\n const showActions = props.actions !== false;\n\n if (!showEditor && !showActions) {\n return null;\n }\n\n const onOpen = (event: React.SyntheticEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const onClose = () => {\n setAnchorEl(undefined);\n };\n\n return (\n <>\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n onClick={onOpen}\n data-testid=\"menu-button\"\n color=\"inherit\"\n className={classes.button}\n >\n <MoreVert />\n </IconButton>\n <Popover\n open={Boolean(anchorEl)}\n onClose={onClose}\n anchorEl={anchorEl}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n >\n <MenuList>\n {showEditor && (\n <MenuItem onClick={() => navigate(`${pageLink()}/edit`)}>\n <ListItemIcon>\n <Edit fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText primary=\"Template Editor\" />\n </MenuItem>\n )}\n {showActions && (\n <MenuItem onClick={() => navigate(`${pageLink()}/actions`)}>\n <ListItemIcon>\n <Description fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText primary=\"Installed Actions\" />\n </MenuItem>\n )}\n </MenuList>\n </Popover>\n </>\n );\n}\n","/*\n * Copyright 2020 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 */\n\nimport {\n Content,\n ContentHeader,\n CreateButton,\n Header,\n Page,\n SupportButton,\n} from '@backstage/core-components';\nimport { Entity } from '@backstage/catalog-model';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport {\n CatalogFilterLayout,\n EntityKindPicker,\n EntityListProvider,\n EntitySearchBar,\n EntityTagPicker,\n UserListPicker,\n} from '@backstage/plugin-catalog-react';\nimport React, { ComponentType } from 'react';\nimport { registerComponentRouteRef } from '../../routes';\nimport { TemplateList } from '../TemplateList';\nimport { TemplateTypePicker } from '../TemplateTypePicker';\nimport { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { ScaffolderPageContextMenu } from './ScaffolderPageContextMenu';\n\nexport type ScaffolderPageProps = {\n TemplateCardComponent?:\n | ComponentType<{ template: TemplateEntityV1beta3 }>\n | undefined;\n groups?: Array<{\n title?: React.ReactNode;\n filter: (entity: Entity) => boolean;\n }>;\n contextMenu?: {\n editor?: boolean;\n actions?: boolean;\n };\n};\n\nexport const ScaffolderPageContents = ({\n TemplateCardComponent,\n groups,\n contextMenu,\n}: ScaffolderPageProps) => {\n const registerComponentLink = useRouteRef(registerComponentRouteRef);\n const otherTemplatesGroup = {\n title: groups ? 'Other Templates' : 'Templates',\n filter: (entity: Entity) => {\n const filtered = (groups ?? []).map(group => group.filter(entity));\n return !filtered.some(result => result === true);\n },\n };\n\n const { allowed } = usePermission({\n permission: catalogEntityCreatePermission,\n });\n\n return (\n <Page themeId=\"home\">\n <Header\n pageTitleOverride=\"Create a New Component\"\n title=\"Create a New Component\"\n subtitle=\"Create new software components using standard templates\"\n >\n <ScaffolderPageContextMenu {...contextMenu} />\n </Header>\n <Content>\n <ContentHeader title=\"Available Templates\">\n {allowed && (\n <CreateButton\n title=\"Register Existing Component\"\n to={registerComponentLink && registerComponentLink()}\n />\n )}\n <SupportButton>\n Create new software components using standard templates. Different\n templates create different kinds of components (services, websites,\n documentation, ...).\n </SupportButton>\n </ContentHeader>\n\n <CatalogFilterLayout>\n <CatalogFilterLayout.Filters>\n <EntitySearchBar />\n <EntityKindPicker initialFilter=\"template\" hidden />\n <UserListPicker\n initialFilter=\"all\"\n availableFilters={['all', 'starred']}\n />\n <TemplateTypePicker />\n <EntityTagPicker />\n </CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>\n {groups &&\n groups.map((group, index) => (\n <TemplateList\n key={index}\n TemplateCardComponent={TemplateCardComponent}\n group={group}\n />\n ))}\n <TemplateList\n key=\"other\"\n TemplateCardComponent={TemplateCardComponent}\n group={otherTemplatesGroup}\n />\n </CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n </Content>\n </Page>\n );\n};\n\nexport const ScaffolderPage = ({\n TemplateCardComponent,\n groups,\n}: ScaffolderPageProps) => (\n <EntityListProvider>\n <ScaffolderPageContents\n TemplateCardComponent={TemplateCardComponent}\n groups={groups}\n />\n </EntityListProvider>\n);\n","/*\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 */\n\nimport { JsonObject } from '@backstage/types';\nimport { FormProps } from '@rjsf/core';\n\nfunction isObject(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction extractUiSchema(schema: JsonObject, uiSchema: JsonObject) {\n if (!isObject(schema)) {\n return;\n }\n\n const { properties, items, anyOf, oneOf, allOf, dependencies } = schema;\n\n for (const propName in schema) {\n if (!schema.hasOwnProperty(propName)) {\n continue;\n }\n\n if (propName.startsWith('ui:')) {\n uiSchema[propName] = schema[propName];\n delete schema[propName];\n }\n }\n\n if (isObject(properties)) {\n for (const propName in properties) {\n if (!properties.hasOwnProperty(propName)) {\n continue;\n }\n\n const schemaNode = properties[propName];\n if (!isObject(schemaNode)) {\n continue;\n }\n const innerUiSchema = {};\n uiSchema[propName] = innerUiSchema;\n extractUiSchema(schemaNode, innerUiSchema);\n }\n }\n\n if (isObject(items)) {\n const innerUiSchema = {};\n uiSchema.items = innerUiSchema;\n extractUiSchema(items, innerUiSchema);\n }\n\n if (Array.isArray(anyOf)) {\n for (const schemaNode of anyOf) {\n if (!isObject(schemaNode)) {\n continue;\n }\n extractUiSchema(schemaNode, uiSchema);\n }\n }\n\n if (Array.isArray(oneOf)) {\n for (const schemaNode of oneOf) {\n if (!isObject(schemaNode)) {\n continue;\n }\n extractUiSchema(schemaNode, uiSchema);\n }\n }\n\n if (Array.isArray(allOf)) {\n for (const schemaNode of allOf) {\n if (!isObject(schemaNode)) {\n continue;\n }\n extractUiSchema(schemaNode, uiSchema);\n }\n }\n\n if (isObject(dependencies)) {\n for (const depName of Object.keys(dependencies)) {\n const schemaNode = dependencies[depName];\n if (!isObject(schemaNode)) {\n continue;\n }\n extractUiSchema(schemaNode, uiSchema);\n }\n }\n}\n\nexport function transformSchemaToProps(inputSchema: JsonObject): {\n schema: FormProps<any>['schema'];\n uiSchema: FormProps<any>['uiSchema'];\n} {\n inputSchema.type = inputSchema.type || 'object';\n const schema = JSON.parse(JSON.stringify(inputSchema));\n delete schema.title; // Rendered separately\n const uiSchema = {};\n extractUiSchema(schema, uiSchema);\n return { schema, uiSchema };\n}\n","/*\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 */\n\nimport React from 'react';\nimport { MarkdownContent } from '@backstage/core-components';\nimport { FieldProps } from '@rjsf/core';\n\nexport const DescriptionField = ({ description }: FieldProps) =>\n description && <MarkdownContent content={description} linkTarget=\"_blank\" />;\n","/*\n * Copyright 2020 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 { JsonObject } from '@backstage/types';\nimport {\n Box,\n Button,\n Paper,\n Step as StepUI,\n StepContent,\n StepLabel,\n Stepper,\n Typography,\n} from '@material-ui/core';\nimport {\n errorApiRef,\n useApi,\n featureFlagsApiRef,\n} from '@backstage/core-plugin-api';\nimport { FormProps, IChangeEvent, UiSchema, withTheme } from '@rjsf/core';\nimport { Theme as MuiTheme } from '@rjsf/material-ui';\nimport React, { useState } from 'react';\nimport { transformSchemaToProps } from './schema';\nimport { Content, StructuredMetadataTable } from '@backstage/core-components';\nimport cloneDeep from 'lodash/cloneDeep';\nimport * as fieldOverrides from './FieldOverrides';\n\nconst Form = withTheme(MuiTheme);\ntype Step = {\n schema: JsonObject;\n title: string;\n} & Partial<Omit<FormProps<any>, 'schema'>>;\n\ntype Props = {\n /**\n * Steps for the form, each contains title and form schema\n */\n steps: Step[];\n formData: Record<string, any>;\n onChange: (e: IChangeEvent) => void;\n onReset: () => void;\n onFinish?: () => Promise<void>;\n widgets?: FormProps<any>['widgets'];\n fields?: FormProps<any>['fields'];\n};\n\nexport function getUiSchemasFromSteps(steps: Step[]): UiSchema[] {\n const uiSchemas: Array<UiSchema> = [];\n steps.forEach(step => {\n const schemaProps = step.schema.properties as JsonObject;\n for (const key in schemaProps) {\n if (schemaProps.hasOwnProperty(key)) {\n const uiSchema = schemaProps[key] as UiSchema;\n uiSchema.name = key;\n uiSchemas.push(uiSchema);\n }\n }\n });\n return uiSchemas;\n}\n\nexport function getReviewData(formData: Record<string, any>, steps: Step[]) {\n const uiSchemas = getUiSchemasFromSteps(steps);\n const reviewData: Record<string, any> = {};\n for (const key in formData) {\n if (formData.hasOwnProperty(key)) {\n const uiSchema = uiSchemas.find(us => us.name === key);\n\n if (!uiSchema) {\n reviewData[key] = formData[key];\n continue;\n }\n\n if (uiSchema['ui:widget'] === 'password') {\n reviewData[key] = '******';\n continue;\n }\n\n if (!uiSchema['ui:backstage'] || !uiSchema['ui:backstage'].review) {\n reviewData[key] = formData[key];\n continue;\n }\n\n const review = uiSchema['ui:backstage'].review as JsonObject;\n if (!review.show) {\n continue;\n }\n\n if (review.mask) {\n reviewData[key] = review.mask;\n continue;\n }\n reviewData[key] = formData[key];\n }\n }\n\n return reviewData;\n}\n\nexport const MultistepJsonForm = (props: Props) => {\n const { formData, onChange, onReset, onFinish, fields, widgets } = props;\n const [activeStep, setActiveStep] = useState(0);\n const [disableButtons, setDisableButtons] = useState(false);\n const errorApi = useApi(errorApiRef);\n const featureFlagApi = useApi(featureFlagsApiRef);\n const featureFlagKey = 'backstage:featureFlag';\n const filterOutProperties = (step: Step): Step => {\n const filteredStep = cloneDeep(step);\n const removedPropertyKeys: Array<string> = [];\n if (filteredStep.schema.properties) {\n filteredStep.schema.properties = Object.fromEntries(\n Object.entries(filteredStep.schema.properties).filter(\n ([key, value]) => {\n if (value[featureFlagKey]) {\n if (featureFlagApi.isActive(value[featureFlagKey])) {\n return true;\n }\n removedPropertyKeys.push(key);\n return false;\n }\n return true;\n },\n ),\n );\n\n // remove the feature flag property key from required if they are not active\n filteredStep.schema.required = Array.isArray(filteredStep.schema.required)\n ? filteredStep.schema.required?.filter(\n r => !removedPropertyKeys.includes(r as string),\n )\n : filteredStep.schema.required;\n }\n return filteredStep;\n };\n\n const steps = props.steps\n .filter(step => {\n const featureFlag = step.schema[featureFlagKey];\n return (\n typeof featureFlag !== 'string' || featureFlagApi.isActive(featureFlag)\n );\n })\n .map(filterOutProperties);\n\n const handleReset = () => {\n setActiveStep(0);\n onReset();\n };\n const handleNext = () => {\n setActiveStep(Math.min(activeStep + 1, steps.length));\n };\n const handleBack = () => setActiveStep(Math.max(activeStep - 1, 0));\n const handleCreate = async () => {\n if (!onFinish) {\n return;\n }\n\n setDisableButtons(true);\n try {\n await onFinish();\n } catch (err) {\n setDisableButtons(false);\n errorApi.post(err);\n }\n };\n\n return (\n <>\n <Stepper activeStep={activeStep} orientation=\"vertical\">\n {steps.map(({ title, schema, ...formProps }, index) => {\n return (\n <StepUI key={title}>\n <StepLabel\n aria-label={`Step ${index + 1} ${title}`}\n aria-disabled=\"false\"\n tabIndex={0}\n >\n <Typography variant=\"h6\" component=\"h3\">\n {title}\n </Typography>\n </StepLabel>\n <StepContent key={title}>\n <Form\n showErrorList={false}\n fields={{ ...fieldOverrides, ...fields }}\n widgets={widgets}\n noHtml5Validate\n formData={formData}\n onChange={onChange}\n onSubmit={e => {\n if (e.errors.length === 0) handleNext();\n }}\n {...formProps}\n {...transformSchemaToProps(schema)}\n >\n <Button disabled={activeStep === 0} onClick={handleBack}>\n Back\n </Button>\n <Button variant=\"contained\" color=\"primary\" type=\"submit\">\n Next step\n </Button>\n </Form>\n </StepContent>\n </StepUI>\n );\n })}\n </Stepper>\n {activeStep === steps.length && (\n <Content>\n <Paper square elevation={0}>\n <Typography variant=\"h6\">Review and create</Typography>\n <StructuredMetadataTable\n dense\n metadata={getReviewData(formData, steps)}\n />\n <Box mb={4} />\n <Button onClick={handleBack} disabled={disableButtons}>\n Back\n </Button>\n <Button onClick={handleReset} disabled={disableButtons}>\n Reset\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={handleCreate}\n disabled={!onFinish || disableButtons}\n >\n Create\n </Button>\n </Paper>\n </Content>\n )}\n </>\n );\n};\n","/*\n * Copyright 2020 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 { JsonObject, JsonValue } from '@backstage/types';\nimport { LinearProgress } from '@material-ui/core';\nimport { FormValidation, IChangeEvent } from '@rjsf/core';\nimport qs from 'qs';\nimport React, { useCallback, useContext, useState } from 'react';\nimport { Navigate, useNavigate } from 'react-router';\nimport { useParams } from 'react-router-dom';\nimport useAsync from 'react-use/lib/useAsync';\nimport { scaffolderApiRef } from '../../api';\nimport { CustomFieldValidator, FieldExtensionOptions } from '../../extensions';\nimport { SecretsContext } from '../secrets/SecretsContext';\nimport { rootRouteRef, scaffolderTaskRouteRef } from '../../routes';\nimport { MultistepJsonForm } from '../MultistepJsonForm';\n\nimport { Content, Header, InfoCard, Page } from '@backstage/core-components';\nimport {\n ApiHolder,\n errorApiRef,\n useApi,\n useApiHolder,\n useRouteRef,\n} from '@backstage/core-plugin-api';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\n\nconst useTemplateParameterSchema = (templateRef: string) => {\n const scaffolderApi = useApi(scaffolderApiRef);\n const { value, loading, error } = useAsync(\n () => scaffolderApi.getTemplateParameterSchema(templateRef),\n [scaffolderApi, templateRef],\n );\n return { schema: value, loading, error };\n};\n\nfunction isObject(obj: unknown): obj is JsonObject {\n return typeof obj === 'object' && obj !== null && !Array.isArray(obj);\n}\n\nexport const createValidator = (\n rootSchema: JsonObject,\n validators: Record<string, undefined | CustomFieldValidator<unknown>>,\n context: {\n apiHolder: ApiHolder;\n },\n) => {\n function validate(\n schema: JsonObject,\n formData: JsonObject,\n errors: FormValidation,\n ) {\n const schemaProps = schema.properties;\n if (!isObject(schemaProps)) {\n return;\n }\n\n for (const [key, propData] of Object.entries(formData)) {\n const propValidation = errors[key];\n\n if (isObject(propData)) {\n const propSchemaProps = schemaProps[key];\n if (isObject(propSchemaProps)) {\n validate(\n propSchemaProps,\n propData as JsonObject,\n propValidation as FormValidation,\n );\n }\n } else {\n const propSchema = schemaProps[key];\n const fieldName =\n isObject(propSchema) && (propSchema['ui:field'] as string);\n if (fieldName && typeof validators[fieldName] === 'function') {\n validators[fieldName]!(\n propData as JsonValue,\n propValidation,\n context,\n );\n }\n }\n }\n }\n\n return (formData: JsonObject, errors: FormValidation) => {\n validate(rootSchema, formData, errors);\n return errors;\n };\n};\n\nexport const TemplatePage = ({\n customFieldExtensions = [],\n}: {\n customFieldExtensions?: FieldExtensionOptions<any, any>[];\n}) => {\n const apiHolder = useApiHolder();\n const secretsContext = useContext(SecretsContext);\n const errorApi = useApi(errorApiRef);\n const scaffolderApi = useApi(scaffolderApiRef);\n const { templateName } = useParams();\n const navigate = useNavigate();\n const scaffolderTaskRoute = useRouteRef(scaffolderTaskRouteRef);\n const rootRoute = useRouteRef(rootRouteRef);\n const { schema, loading, error } = useTemplateParameterSchema(templateName);\n const [formState, setFormState] = useState<Record<string, any>>(() => {\n const query = qs.parse(window.location.search, {\n ignoreQueryPrefix: true,\n });\n\n try {\n return JSON.parse(query.formData as string);\n } catch (e) {\n return query.formData ?? {};\n }\n });\n const handleFormReset = () => setFormState({});\n const handleChange = useCallback(\n (e: IChangeEvent) => setFormState(e.formData),\n [setFormState],\n );\n\n const handleCreate = async () => {\n const { taskId } = await scaffolderApi.scaffold({\n templateRef: stringifyEntityRef({\n name: templateName,\n kind: 'template',\n namespace: 'default',\n }),\n values: formState,\n secrets: secretsContext?.secrets,\n });\n\n const formParams = qs.stringify(\n { formData: formState },\n { addQueryPrefix: true },\n );\n const newUrl = `${window.location.pathname}${formParams}`;\n // We use direct history manipulation since useSearchParams and\n // useNavigate in react-router-dom cause unnecessary extra rerenders.\n // Also make sure to replace the state rather than pushing to avoid\n // extra back/forward slots.\n window.history?.replaceState(null, document.title, newUrl);\n\n navigate(scaffolderTaskRoute({ taskId }));\n };\n\n if (error) {\n errorApi.post(new Error(`Failed to load template, ${error}`));\n return <Navigate to={rootRoute()} />;\n }\n if (!loading && !schema) {\n errorApi.post(new Error('Template was not found.'));\n return <Navigate to={rootRoute()} />;\n }\n\n const customFieldComponents = Object.fromEntries(\n customFieldExtensions.map(({ name, component }) => [name, component]),\n );\n\n const customFieldValidators = Object.fromEntries(\n customFieldExtensions.map(({ name, validation }) => [name, validation]),\n );\n\n return (\n <Page themeId=\"home\">\n <Header\n pageTitleOverride=\"Create a New Component\"\n title=\"Create a New Component\"\n subtitle=\"Create new software components using standard templates\"\n />\n <Content>\n {loading && <LinearProgress data-testid=\"loading-progress\" />}\n {schema && (\n <InfoCard\n title={schema.title}\n noPadding\n titleTypographyProps={{ component: 'h2' }}\n >\n <MultistepJsonForm\n formData={formState}\n fields={customFieldComponents}\n onChange={handleChange}\n onReset={handleFormReset}\n onFinish={handleCreate}\n steps={schema.steps.map(step => {\n return {\n ...step,\n validate: createValidator(\n step.schema,\n customFieldValidators,\n { apiHolder },\n ),\n };\n })}\n />\n </InfoCard>\n )}\n </Content>\n </Page>\n );\n};\n","/*\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 from 'react';\nimport useAsync from 'react-use/lib/useAsync';\nimport { scaffolderApiRef } from '../../api';\nimport {\n Typography,\n Paper,\n Table,\n TableBody,\n Box,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n makeStyles,\n} from '@material-ui/core';\nimport { JSONSchema7, JSONSchema7Definition } from 'json-schema';\nimport classNames from 'classnames';\n\nimport { useApi } from '@backstage/core-plugin-api';\nimport {\n Progress,\n Content,\n Header,\n Page,\n ErrorPage,\n} from '@backstage/core-components';\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\nexport const ActionsPage = () => {\n const api = useApi(scaffolderApiRef);\n const classes = useStyles();\n const { loading, value, error } = useAsync(async () => {\n return api.listActions();\n });\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n return (\n <ErrorPage\n statusMessage=\"Failed to load installed actions\"\n status=\"500\"\n />\n );\n }\n\n const formatRows = (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 props = entry[1] as unknown as JSONSchema7;\n const codeClassname = classNames(classes.code, {\n [classes.codeRequired]: input.required?.includes(key),\n });\n\n return (\n <TableRow key={key}>\n <TableCell>\n <div className={codeClassname}>{key}</div>\n </TableCell>\n <TableCell>{props.title}</TableCell>\n <TableCell>{props.description}</TableCell>\n <TableCell>\n <span className={classes.code}>{props.type}</span>\n </TableCell>\n </TableRow>\n );\n });\n };\n\n const renderTable = (input: JSONSchema7) => {\n if (!input.properties) {\n return undefined;\n }\n return (\n <TableContainer component={Paper}>\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Name</TableCell>\n <TableCell>Title</TableCell>\n <TableCell>Description</TableCell>\n <TableCell>Type</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>{formatRows(input)}</TableBody>\n </Table>\n </TableContainer>\n );\n };\n\n const renderTables = (name: string, input?: JSONSchema7Definition[]) => {\n if (!input) {\n return undefined;\n }\n\n return (\n <>\n <Typography variant=\"h6\">{name}</Typography>\n {input.map((i, index) => (\n <div key={index}>{renderTable(i as unknown as JSONSchema7)}</div>\n ))}\n </>\n );\n };\n\n const items = value?.map(action => {\n if (action.id.startsWith('legacy:')) {\n return undefined;\n }\n\n const oneOf = renderTables('oneOf', action.schema?.input?.oneOf);\n return (\n <Box pb={4} key={action.id}>\n <Typography variant=\"h4\" className={classes.code}>\n {action.id}\n </Typography>\n <Typography>{action.description}</Typography>\n {action.schema?.input && (\n <Box pb={2}>\n <Typography variant=\"h5\">Input</Typography>\n {renderTable(action.schema.input)}\n {oneOf}\n </Box>\n )}\n {action.schema?.output && (\n <Box pb={2}>\n <Typography variant=\"h5\">Output</Typography>\n {renderTable(action.schema.output)}\n </Box>\n )}\n </Box>\n );\n });\n\n return (\n <Page themeId=\"home\">\n <Header\n pageTitleOverride=\"Create a New Component\"\n title=\"Installed actions\"\n subtitle=\"This is the collection of all installed actions\"\n />\n <Content>{items}</Content>\n </Page>\n );\n};\n","/*\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 React, { useCallback, useState } from 'react';\nimport useAsync from 'react-use/lib/useAsync';\nimport useDebounce from 'react-use/lib/useDebounce';\nimport { Entity } from '@backstage/catalog-model';\nimport { Content, Header, InfoCard, Page } from '@backstage/core-components';\nimport { alertApiRef, useApi, useApiHolder } from '@backstage/core-plugin-api';\nimport {\n catalogApiRef,\n humanizeEntityRef,\n} from '@backstage/plugin-catalog-react';\nimport { JsonObject } from '@backstage/types';\nimport { yaml as yamlSupport } from '@codemirror/legacy-modes/mode/yaml';\nimport { showPanel } from '@codemirror/panel';\nimport { StreamLanguage } from '@codemirror/stream-parser';\nimport {\n FormControl,\n Grid,\n InputLabel,\n LinearProgress,\n makeStyles,\n MenuItem,\n Select,\n} from '@material-ui/core';\nimport { IChangeEvent } from '@rjsf/core';\nimport CodeMirror from '@uiw/react-codemirror';\nimport yaml from 'yaml';\nimport { FieldExtensionOptions } from '../../extensions';\nimport { TemplateParameterSchema } from '../../types';\nimport { MultistepJsonForm } from '../MultistepJsonForm';\nimport { createValidator } from '../TemplatePage';\n\nconst EXAMPLE_TEMPLATE_PARAMS_YAML = `# Edit the template parameters below to see how they will render in the scaffolder form UI\nparameters:\n - title: Fill in some steps\n required:\n - name\n properties:\n name:\n title: Name\n type: string\n description: Unique name of the component\n owner:\n title: Owner\n type: string\n description: Owner of the component\n ui:field: OwnerPicker\n ui:options:\n allowedKinds:\n - Group\n - title: Choose a location\n required:\n - repoUrl\n properties:\n repoUrl:\n title: Repository Location\n type: string\n ui:field: RepoUrlPicker\n ui:options:\n allowedHosts:\n - github.com\n`;\n\ntype TemplateOption = {\n label: string;\n value: Entity;\n};\n\nconst useStyles = makeStyles({\n templateSelect: {\n marginBottom: '10px',\n },\n grid: {\n height: '100%',\n },\n codeMirror: {\n height: '95%',\n },\n});\n\nexport const TemplateEditorPage = ({\n defaultPreviewTemplate = EXAMPLE_TEMPLATE_PARAMS_YAML,\n customFieldExtensions = [],\n}: {\n defaultPreviewTemplate?: string;\n customFieldExtensions?: FieldExtensionOptions<any, any>[];\n}) => {\n const classes = useStyles();\n const alertApi = useApi(alertApiRef);\n const catalogApi = useApi(catalogApiRef);\n const apiHolder = useApiHolder();\n const [selectedTemplate, setSelectedTemplate] = useState('');\n const [schema, setSchema] = useState<TemplateParameterSchema>({\n title: '',\n steps: [],\n });\n const [templateOptions, setTemplateOptions] = useState<TemplateOption[]>([]);\n const [templateYaml, setTemplateYaml] = useState(defaultPreviewTemplate);\n const [formState, setFormState] = useState({});\n\n const { loading } = useAsync(\n () =>\n catalogApi\n .getEntities({\n filter: { kind: 'template' },\n fields: [\n 'kind',\n 'metadata.namespace',\n 'metadata.name',\n 'metadata.title',\n 'spec.parameters',\n ],\n })\n .then(({ items }) =>\n setTemplateOptions(\n items.map(template => ({\n label:\n template.metadata.title ??\n humanizeEntityRef(template, { defaultKind: 'template' }),\n value: template,\n })),\n ),\n )\n .catch(e =>\n alertApi.post({\n message: `Error loading exisiting templates: ${e.message}`,\n severity: 'error',\n }),\n ),\n [catalogApi],\n );\n\n const errorPanel = document.createElement('div');\n errorPanel.style.color = 'red';\n\n useDebounce(\n () => {\n try {\n const parsedTemplate = yaml.parse(templateYaml);\n\n setSchema({\n title: 'Preview',\n steps: parsedTemplate.parameters.map((param: JsonObject) => ({\n title: param.title,\n schema: param,\n })),\n });\n setFormState({});\n } catch (e) {\n errorPanel.textContent = e.message;\n }\n },\n 250,\n [setFormState, setSchema, templateYaml],\n );\n\n const handleSelectChange = useCallback(\n selected => {\n setSelectedTemplate(selected);\n setTemplateYaml(yaml.stringify(selected.spec));\n },\n [setTemplateYaml],\n );\n\n const handleFormReset = () => setFormState({});\n const handleFormChange = useCallback(\n (e: IChangeEvent) => setFormState(e.formData),\n [setFormState],\n );\n\n const handleCodeChange = useCallback(\n (code: string) => {\n setTemplateYaml(code);\n },\n [setTemplateYaml],\n );\n\n const customFieldComponents = Object.fromEntries(\n customFieldExtensions.map(({ name, component }) => [name, component]),\n );\n\n const customFieldValidators = Object.fromEntries(\n customFieldExtensions.map(({ name, validation }) => [name, validation]),\n );\n\n return (\n <Page themeId=\"home\">\n <Header\n title=\"Template Editor\"\n subtitle=\"Preview your template parameter UI\"\n />\n <Content>\n {loading && <LinearProgress />}\n <Grid container className={classes.grid}>\n <Grid item xs={6}>\n <FormControl\n className={classes.templateSelect}\n variant=\"outlined\"\n fullWidth\n >\n <InputLabel id=\"select-template-label\">\n Load Existing Template\n </InputLabel>\n <Select\n value={selectedTemplate}\n label=\"Load Existing Template\"\n labelId=\"select-template-label\"\n onChange={e => handleSelectChange(e.target.value)}\n >\n {templateOptions.map((option, idx) => (\n <MenuItem key={idx} value={option.value as any}>\n {option.label}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <CodeMirror\n className={classes.codeMirror}\n value={templateYaml}\n theme=\"dark\"\n height=\"100%\"\n extensions={[\n StreamLanguage.define(yamlSupport),\n showPanel.of(() => ({ dom: errorPanel, top: true })),\n ]}\n onChange={handleCodeChange}\n />\n </Grid>\n <Grid item xs={6}>\n {schema && (\n <InfoCard key={JSON.stringify(schema)}>\n <MultistepJsonForm\n formData={formState}\n fields={customFieldComponents}\n onChange={handleFormChange}\n onReset={handleFormReset}\n steps={schema.steps.map(step => {\n return {\n ...step,\n validate: createValidator(\n step.schema,\n customFieldValidators,\n { apiHolder },\n ),\n };\n })}\n />\n </InfoCard>\n )}\n </Grid>\n </Grid>\n </Content>\n </Page>\n );\n};\n","/*\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 */\n\nimport React, { ComponentType } from 'react';\nimport { Routes, Route, useOutlet, Navigate } from 'react-router';\nimport { Entity } from '@backstage/catalog-model';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { ScaffolderPage } from './ScaffolderPage';\nimport { TemplatePage } from './TemplatePage';\nimport { TaskPage } from './TaskPage';\nimport { ActionsPage } from './ActionsPage';\nimport { SecretsContextProvider } from './secrets/SecretsContext';\nimport { TemplateEditorPage } from './TemplateEditorPage';\n\nimport {\n FieldExtensionOptions,\n FIELD_EXTENSION_WRAPPER_KEY,\n FIELD_EXTENSION_KEY,\n DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS,\n} from '../extensions';\nimport { useElementFilter } from '@backstage/core-plugin-api';\nimport {\n actionsRouteRef,\n editRouteRef,\n scaffolderTaskRouteRef,\n selectedTemplateRouteRef,\n} from '../routes';\n\n/**\n * The props for the entrypoint `ScaffolderPage` component the plugin.\n * @public\n */\nexport type RouterProps = {\n components?: {\n TemplateCardComponent?:\n | ComponentType<{ template: TemplateEntityV1beta3 }>\n | undefined;\n TaskPageComponent?: ComponentType<{}>;\n };\n groups?: Array<{\n title?: React.ReactNode;\n filter: (entity: Entity) => boolean;\n }>;\n defaultPreviewTemplate?: string;\n /**\n * Options for the context menu on the scaffolder page.\n */\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 };\n};\n\n/**\n * The main entrypoint `Router` for the `ScaffolderPlugin`.\n *\n * @public\n */\nexport const Router = (props: RouterProps) => {\n const { groups, components = {}, defaultPreviewTemplate } = props;\n\n const { TemplateCardComponent, TaskPageComponent } = components;\n\n const outlet = useOutlet();\n const TaskPageElement = TaskPageComponent ?? TaskPage;\n\n const customFieldExtensions = useElementFilter(outlet, elements =>\n elements\n .selectByComponentData({\n key: FIELD_EXTENSION_WRAPPER_KEY,\n })\n .findComponentData<FieldExtensionOptions>({\n key: FIELD_EXTENSION_KEY,\n }),\n );\n\n const fieldExtensions = [\n ...customFieldExtensions,\n ...DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS.filter(\n ({ name }) =>\n !customFieldExtensions.some(\n customFieldExtension => customFieldExtension.name === name,\n ),\n ),\n ];\n\n return (\n <Routes>\n <Route\n element={\n <ScaffolderPage\n groups={groups}\n TemplateCardComponent={TemplateCardComponent}\n contextMenu={props.contextMenu}\n />\n }\n />\n <Route\n path={selectedTemplateRouteRef.path}\n element={\n <SecretsContextProvider>\n <TemplatePage customFieldExtensions={fieldExtensions} />\n </SecretsContextProvider>\n }\n />\n <Route path={scaffolderTaskRouteRef.path} element={<TaskPageElement />} />\n <Route path={actionsRouteRef.path} element={<ActionsPage />} />\n <Route\n path={editRouteRef.path}\n element={\n <SecretsContextProvider>\n <TemplateEditorPage\n defaultPreviewTemplate={defaultPreviewTemplate}\n customFieldExtensions={fieldExtensions}\n />\n </SecretsContextProvider>\n }\n />\n\n <Route path=\"preview\" element={<Navigate to=\"../edit\" />} />\n </Routes>\n );\n};\n"],"names":["useStyles","Link","makeStyles","IconButton","isObject","MuiTheme","StepUI","Button","MenuItem","yamlSupport"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as EntityPicker,
|
|
1
|
+
import { E as EntityPicker, i as EntityNamePicker, j as entityNamePickerValidation, k as EntityTagsPicker, R as RepoUrlPicker, l as repoPickerValidation, O as OwnerPicker, m as OwnedEntityPicker } from './index-76cc5591.esm.js';
|
|
2
2
|
|
|
3
3
|
const DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS = [
|
|
4
4
|
{
|
|
@@ -30,4 +30,4 @@ const DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS = [
|
|
|
30
30
|
];
|
|
31
31
|
|
|
32
32
|
export { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS as D };
|
|
33
|
-
//# sourceMappingURL=default-
|
|
33
|
+
//# sourceMappingURL=default-b784df08.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-
|
|
1
|
+
{"version":3,"file":"default-b784df08.esm.js","sources":["../../src/extensions/default.ts"],"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 { EntityPicker } from '../components/fields/EntityPicker/EntityPicker';\nimport { EntityNamePicker } from '../components/fields/EntityNamePicker/EntityNamePicker';\nimport { entityNamePickerValidation } from '../components/fields/EntityNamePicker/validation';\nimport { EntityTagsPicker } from '../components/fields/EntityTagsPicker/EntityTagsPicker';\nimport { OwnerPicker } from '../components/fields/OwnerPicker/OwnerPicker';\nimport { RepoUrlPicker } from '../components/fields/RepoUrlPicker/RepoUrlPicker';\nimport { repoPickerValidation } from '../components/fields/RepoUrlPicker/validation';\nimport { OwnedEntityPicker } from '../components/fields/OwnedEntityPicker/OwnedEntityPicker';\n\nexport const DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS = [\n {\n component: EntityPicker,\n name: 'EntityPicker',\n },\n {\n component: EntityNamePicker,\n name: 'EntityNamePicker',\n validation: entityNamePickerValidation,\n },\n {\n component: EntityTagsPicker,\n name: 'EntityTagsPicker',\n },\n {\n component: RepoUrlPicker,\n name: 'RepoUrlPicker',\n validation: repoPickerValidation,\n },\n {\n component: OwnerPicker,\n name: 'OwnerPicker',\n },\n {\n component: OwnedEntityPicker,\n name: 'OwnedEntityPicker',\n },\n];\n"],"names":[],"mappings":";;AAQY,MAAC,mCAAmC,GAAG;AACnD,EAAE;AACF,IAAI,SAAS,EAAE,YAAY;AAC3B,IAAI,IAAI,EAAE,cAAc;AACxB,GAAG;AACH,EAAE;AACF,IAAI,SAAS,EAAE,gBAAgB;AAC/B,IAAI,IAAI,EAAE,kBAAkB;AAC5B,IAAI,UAAU,EAAE,0BAA0B;AAC1C,GAAG;AACH,EAAE;AACF,IAAI,SAAS,EAAE,gBAAgB;AAC/B,IAAI,IAAI,EAAE,kBAAkB;AAC5B,GAAG;AACH,EAAE;AACF,IAAI,SAAS,EAAE,aAAa;AAC5B,IAAI,IAAI,EAAE,eAAe;AACzB,IAAI,UAAU,EAAE,oBAAoB;AACpC,GAAG;AACH,EAAE;AACF,IAAI,SAAS,EAAE,WAAW;AAC1B,IAAI,IAAI,EAAE,aAAa;AACvB,GAAG;AACH,EAAE;AACF,IAAI,SAAS,EAAE,iBAAiB;AAChC,IAAI,IAAI,EAAE,mBAAmB;AAC7B,GAAG;AACH;;;;"}
|
|
@@ -407,7 +407,7 @@ const GitlabRepoPicker = (props) => {
|
|
|
407
407
|
id: "ownerInput",
|
|
408
408
|
onChange: (e) => onChange({ owner: e.target.value }),
|
|
409
409
|
value: owner
|
|
410
|
-
})), /* @__PURE__ */ React.createElement(FormHelperText, null, "The organization, user
|
|
410
|
+
})), /* @__PURE__ */ React.createElement(FormHelperText, null, "The organization, groups, subgroups, user, project (also known as namespaces in gitlab), that this repo will belong to")), /* @__PURE__ */ React.createElement(FormControl, {
|
|
411
411
|
margin: "normal",
|
|
412
412
|
required: true,
|
|
413
413
|
error: (rawErrors == null ? void 0 : rawErrors.length) > 0 && !repoName
|
|
@@ -789,11 +789,16 @@ const scaffolderTaskRouteRef = createSubRouteRef({
|
|
|
789
789
|
parent: rootRouteRef,
|
|
790
790
|
path: "/tasks/:taskId"
|
|
791
791
|
});
|
|
792
|
-
createSubRouteRef({
|
|
792
|
+
const actionsRouteRef = createSubRouteRef({
|
|
793
793
|
id: "scaffolder/actions",
|
|
794
794
|
parent: rootRouteRef,
|
|
795
795
|
path: "/actions"
|
|
796
796
|
});
|
|
797
|
+
const editRouteRef = createSubRouteRef({
|
|
798
|
+
id: "scaffolder/edit",
|
|
799
|
+
parent: rootRouteRef,
|
|
800
|
+
path: "/edit"
|
|
801
|
+
});
|
|
797
802
|
|
|
798
803
|
const scaffolderPlugin = createPlugin({
|
|
799
804
|
id: "scaffolder",
|
|
@@ -839,7 +844,7 @@ const OwnerPickerFieldExtension = scaffolderPlugin.provide(createScaffolderField
|
|
|
839
844
|
}));
|
|
840
845
|
const ScaffolderPage = scaffolderPlugin.provide(createRoutableExtension({
|
|
841
846
|
name: "ScaffolderPage",
|
|
842
|
-
component: () => import('./Router-
|
|
847
|
+
component: () => import('./Router-d90b3098.esm.js').then((m) => m.Router),
|
|
843
848
|
mountPoint: rootRouteRef
|
|
844
849
|
}));
|
|
845
850
|
const OwnedEntityPickerFieldExtension = scaffolderPlugin.provide(createScaffolderFieldExtension({
|
|
@@ -852,7 +857,7 @@ const EntityTagsPickerFieldExtension = scaffolderPlugin.provide(createScaffolder
|
|
|
852
857
|
}));
|
|
853
858
|
const NextScaffolderPage = scaffolderPlugin.provide(createRoutableExtension({
|
|
854
859
|
name: "NextScaffolderPage",
|
|
855
|
-
component: () => import('./index-
|
|
860
|
+
component: () => import('./index-948241af.esm.js').then((m) => m.Router),
|
|
856
861
|
mountPoint: rootRouteRef
|
|
857
862
|
}));
|
|
858
863
|
|
|
@@ -1292,5 +1297,5 @@ const TaskPage = ({ loadingText }) => {
|
|
|
1292
1297
|
})))))));
|
|
1293
1298
|
};
|
|
1294
1299
|
|
|
1295
|
-
export { EntityPicker as E, FIELD_EXTENSION_WRAPPER_KEY as F, NextScaffolderPage as N, OwnerPicker as O, RepoUrlPicker as R, SecretsContext as S, TemplateTypePicker as T,
|
|
1296
|
-
//# sourceMappingURL=index-
|
|
1300
|
+
export { useTemplateSecrets as A, EntityPicker as E, FIELD_EXTENSION_WRAPPER_KEY as F, NextScaffolderPage as N, OwnerPicker as O, RepoUrlPicker as R, SecretsContext as S, TemplateTypePicker as T, registerComponentRouteRef as a, scaffolderApiRef as b, scaffolderTaskRouteRef as c, FIELD_EXTENSION_KEY as d, SecretsContextProvider as e, actionsRouteRef as f, editRouteRef as g, TaskPage as h, EntityNamePicker as i, entityNamePickerValidation as j, EntityTagsPicker as k, repoPickerValidation as l, OwnedEntityPicker as m, ScaffolderClient as n, createScaffolderFieldExtension as o, ScaffolderFieldExtensions as p, EntityPickerFieldExtension as q, rootRouteRef as r, selectedTemplateRouteRef as s, EntityNamePickerFieldExtension as t, EntityTagsPickerFieldExtension as u, OwnerPickerFieldExtension as v, OwnedEntityPickerFieldExtension as w, RepoUrlPickerFieldExtension as x, ScaffolderPage as y, scaffolderPlugin as z };
|
|
1301
|
+
//# sourceMappingURL=index-76cc5591.esm.js.map
|