@backstage/plugin-scaffolder 1.9.0-next.2 → 1.9.0-next.4

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.
@@ -1,5 +1,5 @@
1
1
  import React, { useState, useMemo, useContext, useEffect } from 'react';
2
- import { useNavigate, Navigate, useOutlet, Routes, Route } from 'react-router';
2
+ import { Link, useNavigate, Navigate, useOutlet, Routes, Route } from 'react-router-dom';
3
3
  import { Progress, ItemCardHeader, Link as Link$1, MarkdownContent, UserIcon, Button as Button$1, Content, ItemCardGrid, ContentHeader, Page, Header, SupportButton, StructuredMetadataTable, InfoCard } from '@backstage/core-components';
4
4
  import { useEntityTypeFilter, FavoriteEntity, getEntityRelations, EntityRefLinks, useEntityList, EntityListProvider, CatalogFilterLayout, EntitySearchBar, EntityKindPicker, UserListPicker, EntityTagPicker } from '@backstage/plugin-catalog-react';
5
5
  import capitalize from 'lodash/capitalize';
@@ -12,17 +12,16 @@ import { useApi, alertApiRef, useRouteRef, useApp, errorApiRef, featureFlagsApiR
12
12
  import Button from '@material-ui/core/Button';
13
13
  import IconButton from '@material-ui/core/IconButton';
14
14
  import useMediaQuery from '@material-ui/core/useMediaQuery';
15
- import { Link } from 'react-router-dom';
16
15
  import AddCircleOutline from '@material-ui/icons/AddCircleOutline';
17
16
  import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common';
18
17
  import { usePermission } from '@backstage/plugin-permission-react';
19
- import { B as nextSelectedTemplateRouteRef, v as viewTechDocRouteRef, r as registerComponentRouteRef, s as selectedTemplateRouteRef, C as nextRouteRef, d as scaffolderTaskRouteRef, S as SecretsContext, c as scaffolderApiRef, F as FIELD_EXTENSION_WRAPPER_KEY, i as FIELD_EXTENSION_KEY, k as SecretsContextProvider } from './index-102258f6.esm.js';
18
+ import { B as nextSelectedTemplateRouteRef, v as viewTechDocRouteRef, r as registerComponentRouteRef, s as selectedTemplateRouteRef, C as nextRouteRef, d as scaffolderTaskRouteRef, S as SecretsContext, c as scaffolderApiRef, F as FIELD_EXTENSION_WRAPPER_KEY, i as FIELD_EXTENSION_KEY, k as SecretsContextProvider } from './index-8d9b2b59.esm.js';
20
19
  import { RELATION_OWNED_BY, parseEntityRef, stringifyEntityRef, DEFAULT_NAMESPACE } from '@backstage/catalog-model';
21
20
  import LanguageIcon from '@material-ui/icons/Language';
22
21
  import useAsync from 'react-use/lib/useAsync';
23
22
  import { withTheme } from '@rjsf/core-v5';
24
23
  import { Draft07 } from 'json-schema-library';
25
- import { c as createFieldValidation, e as extractSchemaFromStep, D as DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from './schema-4db0f1ff.esm.js';
24
+ import { c as createFieldValidation, e as extractSchemaFromStep, D as DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from './schema-0d0eab8f.esm.js';
26
25
  import validator from '@rjsf/validator-ajv8';
27
26
  import { getDefaultFormState } from '@rjsf/utils';
28
27
  import '@backstage/errors';
@@ -677,4 +676,4 @@ const Router = (props) => {
677
676
  };
678
677
 
679
678
  export { Router };
680
- //# sourceMappingURL=index-cb47594c.esm.js.map
679
+ //# sourceMappingURL=index-c1108e33.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-cb47594c.esm.js","sources":["../../src/next/TemplateListPage/CategoryPicker.tsx","../../src/next/TemplateListPage/RegisterExistingButton.tsx","../../src/next/TemplateListPage/TemplateCard/CardHeader.tsx","../../src/next/TemplateListPage/TemplateCard/CardLink.tsx","../../src/next/TemplateListPage/TemplateCard/TemplateCard.tsx","../../src/next/TemplateListPage/TemplateGroup.tsx","../../src/next/TemplateListPage/TemplateGroups.tsx","../../src/next/TemplateListPage/TemplateListPage.tsx","../../src/next/TemplateWizardPage/Stepper/createAsyncValidators.ts","../../src/next/TemplateWizardPage/Stepper/useTemplateSchema.ts","../../src/next/TemplateWizardPage/Stepper/ReviewState.tsx","../../src/next/TemplateWizardPage/Stepper/Stepper.tsx","../../src/next/TemplateWizardPage/TemplateWizardPage.tsx","../../src/next/Router/Router.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 */\n\nimport React from 'react';\nimport capitalize from 'lodash/capitalize';\nimport { Progress } from '@backstage/core-components';\nimport {\n Box,\n Checkbox,\n FormControlLabel,\n TextField,\n Typography,\n} from '@material-ui/core';\nimport CheckBoxIcon from '@material-ui/icons/CheckBox';\nimport CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { Autocomplete } from '@material-ui/lab';\nimport { useEntityTypeFilter } from '@backstage/plugin-catalog-react';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\n\nconst icon = <CheckBoxOutlineBlankIcon fontSize=\"small\" />;\nconst checkedIcon = <CheckBoxIcon fontSize=\"small\" />;\n\n/**\n * The Category Picker that is rendered on the left side for picking\n * categories and filtering the template list.\n */\nexport const CategoryPicker = () => {\n const alertApi = useApi(alertApiRef);\n const { error, loading, availableTypes, selectedTypes, setSelectedTypes } =\n useEntityTypeFilter();\n\n if (loading) return <Progress />;\n\n if (error) {\n alertApi.post({\n message: `Failed to load entity types with error: ${error}`,\n severity: 'error',\n });\n return null;\n }\n\n if (!availableTypes) return null;\n\n return (\n <Box pb={1} pt={1}>\n <Typography variant=\"button\">Categories</Typography>\n <Autocomplete\n multiple\n aria-label=\"Categories\"\n options={availableTypes}\n value={selectedTypes}\n onChange={(_: object, value: string[]) => setSelectedTypes(value)}\n renderOption={(option, { selected }) => (\n <FormControlLabel\n control={\n <Checkbox\n icon={icon}\n checkedIcon={checkedIcon}\n checked={selected}\n />\n }\n label={capitalize(option)}\n />\n )}\n size=\"small\"\n popupIcon={<ExpandMoreIcon />}\n renderInput={params => <TextField {...params} variant=\"outlined\" />}\n />\n </Box>\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 { BackstageTheme } from '@backstage/theme';\nimport Button from '@material-ui/core/Button';\nimport IconButton from '@material-ui/core/IconButton';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport React from 'react';\nimport { Link as RouterLink, LinkProps } from 'react-router-dom';\nimport AddCircleOutline from '@material-ui/icons/AddCircleOutline';\nimport { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\n/**\n * Properties for {@link RegisterExistingButton}\n *\n * @alpha\n */\nexport type RegisterExistingButtonProps = {\n title: string;\n} & Partial<Pick<LinkProps, 'to'>>;\n\n/**\n * A button that helps users to register an existing component.\n * @alpha\n */\nexport const RegisterExistingButton = (props: RegisterExistingButtonProps) => {\n const { title, to } = props;\n const { allowed } = usePermission({\n permission: catalogEntityCreatePermission,\n });\n const isXSScreen = useMediaQuery<BackstageTheme>(theme =>\n theme.breakpoints.down('xs'),\n );\n\n if (!to || !allowed) {\n return null;\n }\n\n return isXSScreen ? (\n <IconButton\n component={RouterLink}\n color=\"primary\"\n title={title}\n size=\"small\"\n to={to}\n >\n <AddCircleOutline />\n </IconButton>\n ) : (\n <Button component={RouterLink} variant=\"contained\" color=\"primary\" to={to}>\n {title}\n </Button>\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 */\n\nimport React from 'react';\nimport { makeStyles, useTheme } from '@material-ui/core';\nimport { ItemCardHeader } from '@backstage/core-components';\nimport { BackstageTheme } from '@backstage/theme';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { FavoriteEntity } from '@backstage/plugin-catalog-react';\n\nconst useStyles = makeStyles<BackstageTheme, { cardBackgroundImage: string }>(\n () => ({\n header: {\n backgroundImage: ({ cardBackgroundImage }) => cardBackgroundImage,\n },\n subtitleWrapper: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n }),\n);\n\n/**\n * Props for the CardHeader component\n */\nexport interface CardHeaderProps {\n template: TemplateEntityV1beta3;\n}\n\n/**\n * The Card Header with the background for the TemplateCard.\n */\nexport const CardHeader = (props: CardHeaderProps) => {\n const {\n template: {\n metadata: { title, name },\n spec: { type },\n },\n } = props;\n const { getPageTheme } = useTheme<BackstageTheme>();\n const themeForType = getPageTheme({ themeId: type });\n\n const styles = useStyles({\n cardBackgroundImage: themeForType.backgroundImage,\n });\n\n const SubtitleComponent = (\n <div className={styles.subtitleWrapper}>\n <div>{type}</div>\n <div>\n <FavoriteEntity entity={props.template} style={{ padding: 0 }} />\n </div>\n </div>\n );\n\n return (\n <ItemCardHeader\n title={title ?? name}\n subtitle={SubtitleComponent}\n classes={{ root: styles.header }}\n />\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 { IconComponent } from '@backstage/core-plugin-api';\nimport { BackstageTheme } from '@backstage/theme';\nimport { Link } from '@backstage/core-components';\nimport { makeStyles } from '@material-ui/core';\nimport React from 'react';\n\ninterface CardLinkProps {\n icon: IconComponent;\n text: string;\n url: string;\n}\n\nconst useStyles = makeStyles<BackstageTheme>(() => ({\n linkText: {\n display: 'inline-flex',\n alignItems: 'center',\n },\n}));\n\nexport const CardLink = ({ icon: Icon, text, url }: CardLinkProps) => {\n const styles = useStyles();\n\n return (\n <div className={styles.linkText}>\n <Icon fontSize=\"small\" />\n <Link style={{ marginLeft: '8px' }} to={url}>\n {text || url}\n </Link>\n </div>\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 {\n DEFAULT_NAMESPACE,\n parseEntityRef,\n RELATION_OWNED_BY,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport { Button, MarkdownContent, UserIcon } from '@backstage/core-components';\nimport { IconComponent, useApp, useRouteRef } from '@backstage/core-plugin-api';\nimport {\n EntityRefLinks,\n getEntityRelations,\n} from '@backstage/plugin-catalog-react';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { BackstageTheme } from '@backstage/theme';\nimport {\n Box,\n Card,\n CardActions,\n CardContent,\n Chip,\n Divider,\n Grid,\n makeStyles,\n} from '@material-ui/core';\nimport LanguageIcon from '@material-ui/icons/Language';\nimport React from 'react';\nimport {\n nextSelectedTemplateRouteRef,\n viewTechDocRouteRef,\n} from '../../../routes';\nimport { CardHeader } from './CardHeader';\nimport { CardLink } from './CardLink';\n\nconst useStyles = makeStyles<BackstageTheme>(theme => ({\n box: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n '-webkit-line-clamp': 10,\n '-webkit-box-orient': 'vertical',\n },\n markdown: {\n /** to make the styles for React Markdown not leak into the description */\n '& :first-child': {\n margin: 0,\n },\n },\n label: {\n color: theme.palette.text.secondary,\n textTransform: 'uppercase',\n fontWeight: 'bold',\n letterSpacing: 0.5,\n lineHeight: 1,\n fontSize: '0.75rem',\n },\n footer: {\n display: 'flex',\n justifyContent: 'space-between',\n flex: 1,\n alignItems: 'center',\n },\n ownedBy: {\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n color: theme.palette.link,\n },\n}));\n\n/**\n * The Props for the Template Card component\n * @alpha\n */\nexport interface TemplateCardProps {\n template: TemplateEntityV1beta3;\n deprecated?: boolean;\n}\n\n/**\n * The Template Card component that is rendered in a list for each template\n * @alpha\n */\nexport const TemplateCard = (props: TemplateCardProps) => {\n const { template } = props;\n const styles = useStyles();\n const ownedByRelations = getEntityRelations(template, RELATION_OWNED_BY);\n const templateRoute = useRouteRef(nextSelectedTemplateRouteRef);\n const { name, namespace } = parseEntityRef(\n stringifyEntityRef(props.template),\n );\n const href = templateRoute({\n templateName: name,\n namespace: namespace,\n });\n\n const app = useApp();\n const iconResolver = (key?: string): IconComponent =>\n key ? app.getSystemIcon(key) ?? LanguageIcon : LanguageIcon;\n\n // TechDocs Link\n const viewTechDoc = useRouteRef(viewTechDocRouteRef);\n const viewTechDocsAnnotation =\n template.metadata.annotations?.['backstage.io/techdocs-ref'];\n const viewTechDocsLink =\n !!viewTechDocsAnnotation &&\n !!viewTechDoc &&\n viewTechDoc({\n namespace: template.metadata.namespace || DEFAULT_NAMESPACE,\n kind: template.kind,\n name: template.metadata.name,\n });\n\n return (\n <Card>\n <CardHeader template={template} />\n <CardContent>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <Box className={styles.box}>\n <MarkdownContent\n className={styles.markdown}\n content={template.metadata.description ?? 'No description'}\n />\n </Box>\n </Grid>\n {(template.metadata.tags?.length ?? 0) > 0 && (\n <>\n <Grid item xs={12}>\n <Divider />\n </Grid>\n <Grid item xs={12}>\n <Grid container spacing={2}>\n {template.metadata.tags?.map(tag => (\n <Grid item>\n <Chip\n style={{ margin: 0 }}\n size=\"small\"\n label={tag}\n key={tag}\n />\n </Grid>\n ))}\n </Grid>\n </Grid>\n </>\n )}\n {(!!viewTechDocsLink || template.metadata.links?.length) && (\n <>\n <Grid item xs={12}>\n <Divider />\n </Grid>\n <Grid item xs={12}>\n <Grid container spacing={2}>\n {viewTechDocsLink && (\n <Grid className={styles.linkText} item xs={6}>\n <CardLink\n icon={iconResolver('docs')}\n text=\"View TechDocs\"\n url={viewTechDocsLink}\n />\n </Grid>\n )}\n {template.metadata.links?.map(({ url, icon, title }) => (\n <Grid className={styles.linkText} item xs={6}>\n <CardLink\n icon={iconResolver(icon)}\n text={title || url}\n url={url}\n />\n </Grid>\n ))}\n </Grid>\n </Grid>\n </>\n )}\n </Grid>\n </CardContent>\n <CardActions style={{ padding: '16px' }}>\n <div className={styles.footer}>\n <div className={styles.ownedBy}>\n {ownedByRelations.length > 0 && (\n <>\n <UserIcon fontSize=\"small\" />\n <EntityRefLinks\n style={{ marginLeft: '8px' }}\n entityRefs={ownedByRelations}\n defaultKind=\"Group\"\n />\n </>\n )}\n </div>\n <Button size=\"small\" variant=\"outlined\" color=\"primary\" to={href}>\n Choose\n </Button>\n </div>\n </CardActions>\n </Card>\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 { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport React from 'react';\nimport {\n Content,\n ContentHeader,\n ItemCardGrid,\n Link,\n} from '@backstage/core-components';\nimport { Typography } from '@material-ui/core';\nimport { TemplateCard, TemplateCardProps } from './TemplateCard';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\n\nexport interface TemplateGroupProps {\n templates: TemplateEntityV1beta3[];\n title: React.ReactNode;\n components?: {\n CardComponent?: React.ComponentType<TemplateCardProps>;\n };\n}\n\nexport const TemplateGroup = (props: TemplateGroupProps) => {\n const { templates, title, components: { CardComponent } = {} } = props;\n const titleComponent =\n typeof title === 'string' ? <ContentHeader title={title} /> : title;\n\n if (templates.length === 0) {\n return (\n <Content>\n {titleComponent}\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 </Content>\n );\n }\n\n const Card = CardComponent || TemplateCard;\n\n return (\n <Content>\n {titleComponent}\n <ItemCardGrid>\n {templates.map(template => (\n <Card key={stringifyEntityRef(template)} template={template} />\n ))}\n </ItemCardGrid>\n </Content>\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 from 'react';\nimport { TemplateGroup } from './TemplateGroup';\nimport { Entity } from '@backstage/catalog-model';\nimport { useEntityList } from '@backstage/plugin-catalog-react';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { Progress, Link } from '@backstage/core-components';\nimport { Typography } from '@material-ui/core';\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\n\n/**\n * @alpha\n */\nexport type TemplateGroupFilter = {\n title?: React.ReactNode;\n filter: (entity: Entity) => boolean;\n};\n\nexport interface TemplateGroupsProps {\n groups: TemplateGroupFilter[];\n TemplateCardComponent?: React.ComponentType<{\n template: TemplateEntityV1beta3;\n }>;\n}\n\nexport const TemplateGroups = (props: TemplateGroupsProps) => {\n const { loading, error, entities } = useEntityList();\n const { groups, TemplateCardComponent } = props;\n const errorApi = useApi(errorApiRef);\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n errorApi.post(error);\n return null;\n }\n\n if (!entities || !entities.length) {\n return (\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\n return (\n <>\n {groups.map(({ title, filter }, index) => (\n <TemplateGroup\n key={index}\n templates={entities.filter((e): e is TemplateEntityV1beta3 =>\n filter(e),\n )}\n title={title}\n components={{ CardComponent: TemplateCardComponent }}\n />\n ))}\n </>\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 */\n\nimport React from 'react';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\n\nimport {\n Content,\n ContentHeader,\n Header,\n Page,\n SupportButton,\n} from '@backstage/core-components';\nimport {\n EntityKindPicker,\n EntityListProvider,\n EntitySearchBar,\n EntityTagPicker,\n CatalogFilterLayout,\n UserListPicker,\n} from '@backstage/plugin-catalog-react';\nimport { CategoryPicker } from './CategoryPicker';\nimport { RegisterExistingButton } from './RegisterExistingButton';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { registerComponentRouteRef } from '../../routes';\nimport { TemplateGroupFilter, TemplateGroups } from './TemplateGroups';\n\nexport type TemplateListPageProps = {\n TemplateCardComponent?: React.ComponentType<{\n template: TemplateEntityV1beta3;\n }>;\n groups?: TemplateGroupFilter[];\n};\n\nconst defaultGroup: TemplateGroupFilter = {\n title: 'All Templates',\n filter: () => true,\n};\n\nexport const TemplateListPage = (props: TemplateListPageProps) => {\n const registerComponentLink = useRouteRef(registerComponentRouteRef);\n const { TemplateCardComponent, groups = [] } = props;\n\n return (\n <EntityListProvider>\n <Page themeId=\"website\">\n <Header\n pageTitleOverride=\"Create a new component\"\n title=\"Create a new component\"\n subtitle=\"Create new software components using standard templates in your organization\"\n />\n <Content>\n <ContentHeader title=\"Available Templates\">\n <RegisterExistingButton\n title=\"Register Existing Component\"\n to={registerComponentLink && registerComponentLink()}\n />\n <SupportButton>\n Create new software components using standard templates. Different\n templates create different kinds of components (services,\n websites, 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 <CategoryPicker />\n <EntityTagPicker />\n </CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>\n <TemplateGroups\n groups={[...groups, defaultGroup]}\n TemplateCardComponent={TemplateCardComponent}\n />\n </CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n </Content>\n </Page>\n </EntityListProvider>\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 */\n\nimport { FieldValidation } from '@rjsf/utils';\nimport { JsonObject } from '@backstage/types';\nimport { ApiHolder } from '@backstage/core-plugin-api';\nimport { NextCustomFieldValidator } from '../../../extensions';\nimport { Draft07 as JSONSchema } from 'json-schema-library';\nimport { createFieldValidation } from './schema';\n\nexport const createAsyncValidators = (\n rootSchema: JsonObject,\n validators: Record<string, undefined | NextCustomFieldValidator<unknown>>,\n context: {\n apiHolder: ApiHolder;\n },\n) => {\n async function validate(formData: JsonObject, pathPrefix: string = '#') {\n const parsedSchema = new JSONSchema(rootSchema);\n const formValidation: Record<string, FieldValidation> = {};\n for (const [key, value] of Object.entries(formData)) {\n const definitionInSchema = parsedSchema.getSchema(\n `${pathPrefix}/${key}`,\n formData,\n );\n\n if (definitionInSchema && 'ui:field' in definitionInSchema) {\n const validator = validators[definitionInSchema['ui:field']];\n if (validator) {\n const fieldValidation = createFieldValidation();\n try {\n await validator(value, fieldValidation, context);\n } catch (ex) {\n fieldValidation.addError(ex.message);\n }\n formValidation[key] = fieldValidation;\n }\n }\n }\n\n return formValidation;\n }\n\n return async (formData: JsonObject) => {\n return await validate(formData);\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 { featureFlagsApiRef, useApi } from '@backstage/core-plugin-api';\nimport { JsonObject } from '@backstage/types';\nimport { UiSchema } from '@rjsf/utils';\nimport { TemplateParameterSchema } from '../../../types';\nimport { extractSchemaFromStep } from './schema';\n\nexport interface ParsedTemplateSchema {\n uiSchema: UiSchema;\n mergedSchema: JsonObject;\n schema: JsonObject;\n title: string;\n description?: string;\n}\nexport const useTemplateSchema = (\n manifest: TemplateParameterSchema,\n): { steps: ParsedTemplateSchema[] } => {\n const featureFlags = useApi(featureFlagsApiRef);\n const steps = manifest.steps.map(({ title, description, schema }) => ({\n title,\n description,\n mergedSchema: schema,\n ...extractSchemaFromStep(schema),\n }));\n\n const returningSteps = steps\n // Filter out steps that are not enabled with the feature flags\n .filter(step => {\n const stepFeatureFlag = step.uiSchema['ui:backstage']?.featureFlag;\n return stepFeatureFlag ? featureFlags.isActive(stepFeatureFlag) : true;\n })\n // Then filter out the properties that are not enabled with feature flag\n .map(step => ({\n ...step,\n schema: {\n ...step.schema,\n // Title is rendered at the top of the page, so let's ignore this from jsonschemaform\n title: undefined,\n properties: Object.fromEntries(\n Object.entries(step.schema.properties as JsonObject).filter(\n ([key]) => {\n const stepFeatureFlag =\n step.uiSchema[key]?.['ui:backstage']?.featureFlag;\n return stepFeatureFlag\n ? featureFlags.isActive(stepFeatureFlag)\n : true;\n },\n ),\n ),\n },\n }));\n\n return {\n steps: returningSteps,\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 from 'react';\nimport { StructuredMetadataTable } from '@backstage/core-components';\nimport { JsonObject } from '@backstage/types';\nimport { ParsedTemplateSchema } from './useTemplateSchema';\nimport { Draft07 as JSONSchema } from 'json-schema-library';\n\ninterface ReviewStateProps {\n schemas: ParsedTemplateSchema[];\n formState: JsonObject;\n}\n\nexport const ReviewState = (props: ReviewStateProps) => {\n const reviewData = Object.fromEntries(\n Object.entries(props.formState).map(([key, value]) => {\n for (const step of props.schemas) {\n const parsedSchema = new JSONSchema(step.mergedSchema);\n const definitionInSchema = parsedSchema.getSchema(\n `#/${key}`,\n props.formState,\n );\n if (definitionInSchema) {\n const backstageReviewOptions =\n definitionInSchema['ui:backstage']?.review;\n\n if (backstageReviewOptions) {\n if (backstageReviewOptions.mask) {\n return [key, backstageReviewOptions.mask];\n }\n if (backstageReviewOptions.show === false) {\n return [];\n }\n }\n\n if (definitionInSchema['ui:widget'] === 'password') {\n return [key, '******'];\n }\n }\n }\n return [key, value];\n }),\n );\n return <StructuredMetadataTable metadata={reviewData} />;\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 {\n useAnalytics,\n useApiHolder,\n useRouteRefParams,\n} from '@backstage/core-plugin-api';\nimport { JsonValue } from '@backstage/types';\nimport {\n Stepper as MuiStepper,\n Step as MuiStep,\n StepLabel as MuiStepLabel,\n Button,\n makeStyles,\n} from '@material-ui/core';\nimport { withTheme } from '@rjsf/core-v5';\nimport { ErrorSchema, FieldValidation } from '@rjsf/utils';\nimport React, { useMemo, useState } from 'react';\nimport { NextFieldExtensionOptions } from '../../../extensions';\nimport { TemplateParameterSchema } from '../../../types';\nimport { createAsyncValidators } from './createAsyncValidators';\nimport { useTemplateSchema } from './useTemplateSchema';\nimport { ReviewState } from './ReviewState';\nimport validator from '@rjsf/validator-ajv8';\nimport { selectedTemplateRouteRef } from '../../../routes';\nimport type { ErrorTransformer } from '@rjsf/utils';\nimport { getDefaultFormState } from '@rjsf/utils';\n\nconst useStyles = makeStyles(theme => ({\n backButton: {\n marginRight: theme.spacing(1),\n },\n\n footer: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'right',\n },\n formWrapper: {\n padding: theme.spacing(2),\n },\n}));\n\nexport interface StepperProps {\n manifest: TemplateParameterSchema;\n extensions: NextFieldExtensionOptions<any, any>[];\n onComplete: (values: Record<string, JsonValue>) => Promise<void>;\n transformErrors?: ErrorTransformer;\n}\n\n// TODO(blam): We require here, as the types in this package depend on @rjsf/core explicitly\n// which is what we're using here as the default types, it needs to depend on @rjsf/core-v5 because\n// of the re-writing we're doing. Once we've migrated, we can import this the exact same as before.\nconst Form = withTheme(require('@rjsf/material-ui-v5').Theme);\n\nexport const Stepper = (props: StepperProps) => {\n const { templateName } = useRouteRefParams(selectedTemplateRouteRef);\n const analytics = useAnalytics();\n const { steps } = useTemplateSchema(props.manifest);\n const apiHolder = useApiHolder();\n const [activeStep, setActiveStep] = useState(0);\n const [formState, setFormState] = useState<Record<string, JsonValue>>({});\n const [errors, setErrors] = useState<\n undefined | Record<string, FieldValidation>\n >();\n const styles = useStyles();\n\n const extensions = useMemo(() => {\n return Object.fromEntries(\n props.extensions.map(({ name, component }) => [name, component]),\n );\n }, [props.extensions]);\n\n const validators = useMemo(() => {\n return Object.fromEntries(\n props.extensions.map(({ name, validation }) => [name, validation]),\n );\n }, [props.extensions]);\n\n const validation = useMemo(() => {\n return createAsyncValidators(steps[activeStep]?.mergedSchema, validators, {\n apiHolder,\n });\n }, [steps, activeStep, validators, apiHolder]);\n\n const handleBack = () => {\n setActiveStep(prevActiveStep => prevActiveStep - 1);\n };\n\n const handleNext = async ({\n formData,\n }: {\n formData: Record<string, JsonValue>;\n }) => {\n // TODO(blam): What do we do about loading states, does each field extension get a chance\n // to display it's own loading? Or should we grey out the entire form.\n setErrors(undefined);\n\n const schema = steps[activeStep]?.schema;\n const rootSchema = steps[activeStep]?.mergedSchema;\n\n const newFormData = getDefaultFormState(\n validator,\n schema,\n formData,\n rootSchema,\n true,\n );\n\n const returnedValidation = await validation(newFormData);\n\n const hasErrors = Object.values(returnedValidation).some(\n i => i.__errors?.length,\n );\n\n if (hasErrors) {\n setErrors(returnedValidation);\n } else {\n setErrors(undefined);\n setActiveStep(prevActiveStep => {\n const stepNum = prevActiveStep + 1;\n analytics.captureEvent('click', `Next Step (${stepNum})`);\n return stepNum;\n });\n }\n setFormState(current => ({ ...current, ...newFormData }));\n };\n\n return (\n <>\n <MuiStepper activeStep={activeStep} alternativeLabel variant=\"elevation\">\n {steps.map((step, index) => (\n <MuiStep key={index}>\n <MuiStepLabel>{step.title}</MuiStepLabel>\n </MuiStep>\n ))}\n <MuiStep>\n <MuiStepLabel>Review</MuiStepLabel>\n </MuiStep>\n </MuiStepper>\n <div className={styles.formWrapper}>\n {activeStep < steps.length ? (\n <Form\n validator={validator}\n extraErrors={errors as unknown as ErrorSchema}\n formData={formState}\n formContext={{ formData: formState }}\n schema={steps[activeStep].schema}\n uiSchema={steps[activeStep].uiSchema}\n onSubmit={handleNext}\n fields={extensions}\n showErrorList={false}\n transformErrors={props.transformErrors}\n >\n <div className={styles.footer}>\n <Button\n onClick={handleBack}\n className={styles.backButton}\n disabled={activeStep < 1}\n >\n Back\n </Button>\n <Button variant=\"contained\" color=\"primary\" type=\"submit\">\n {activeStep === steps.length - 1 ? 'Review' : 'Next'}\n </Button>\n </div>\n </Form>\n ) : (\n <>\n <ReviewState formState={formState} schemas={steps} />\n <div className={styles.footer}>\n <Button\n onClick={handleBack}\n className={styles.backButton}\n disabled={activeStep < 1}\n >\n Back\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => {\n props.onComplete(formState);\n const name =\n typeof formState.name === 'string'\n ? formState.name\n : undefined;\n analytics.captureEvent(\n 'create',\n name || `new ${templateName}`,\n );\n }}\n >\n Create\n </Button>\n </div>\n </>\n )}\n </div>\n </>\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, { useContext, useEffect } from 'react';\nimport {\n Page,\n Header,\n Content,\n Progress,\n InfoCard,\n MarkdownContent,\n} from '@backstage/core-components';\nimport { NextFieldExtensionOptions } from '../../extensions';\nimport { Navigate, useNavigate } from 'react-router';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport {\n AnalyticsContext,\n errorApiRef,\n useApi,\n useRouteRef,\n useRouteRefParams,\n} from '@backstage/core-plugin-api';\nimport { scaffolderApiRef } from '../../api';\nimport useAsync from 'react-use/lib/useAsync';\nimport { makeStyles } from '@material-ui/core';\nimport { Stepper } from './Stepper';\nimport { BackstageTheme } from '@backstage/theme';\nimport {\n nextRouteRef,\n scaffolderTaskRouteRef,\n selectedTemplateRouteRef,\n} from '../../routes';\nimport { SecretsContext } from '../../components/secrets/SecretsContext';\nimport { JsonValue } from '@backstage/types';\nimport type { ErrorTransformer } from '@rjsf/utils';\n\nexport interface TemplateWizardPageProps {\n customFieldExtensions: NextFieldExtensionOptions<any, any>[];\n transformErrors?: ErrorTransformer;\n}\n\nconst useStyles = makeStyles<BackstageTheme>(() => ({\n markdown: {\n /** to make the styles for React Markdown not leak into the description */\n '& :first-child': {\n marginTop: 0,\n },\n '& :last-child': {\n marginBottom: 0,\n },\n },\n}));\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\n return { manifest: value, loading, error };\n};\n\nexport const TemplateWizardPage = (props: TemplateWizardPageProps) => {\n const styles = useStyles();\n const rootRef = useRouteRef(nextRouteRef);\n const taskRoute = useRouteRef(scaffolderTaskRouteRef);\n const { secrets } = useContext(SecretsContext) ?? {};\n const scaffolderApi = useApi(scaffolderApiRef);\n const navigate = useNavigate();\n const { templateName, namespace } = useRouteRefParams(\n selectedTemplateRouteRef,\n );\n\n const templateRef = stringifyEntityRef({\n kind: 'Template',\n namespace,\n name: templateName,\n });\n\n const errorApi = useApi(errorApiRef);\n const { loading, manifest, error } = useTemplateParameterSchema(templateRef);\n\n const onComplete = async (values: Record<string, JsonValue>) => {\n const { taskId } = await scaffolderApi.scaffold({\n templateRef,\n values,\n secrets,\n });\n\n navigate(taskRoute({ taskId }));\n };\n\n useEffect(() => {\n if (error) {\n errorApi.post(new Error(`Failed to load template, ${error}`));\n }\n }, [error, errorApi]);\n\n if (error) {\n return <Navigate to={rootRef()} />;\n }\n\n return (\n <AnalyticsContext attributes={{ entityRef: templateRef }}>\n <Page themeId=\"website\">\n <Header\n pageTitleOverride=\"Create a new component\"\n title=\"Create a new component\"\n subtitle=\"Create new software components using standard templates in your organization\"\n />\n <Content>\n {loading && <Progress />}\n {manifest && (\n <InfoCard\n title={manifest.title}\n subheader={\n <MarkdownContent\n className={styles.markdown}\n content={manifest.description ?? 'No description'}\n />\n }\n noPadding\n titleTypographyProps={{ component: 'h2' }}\n >\n <Stepper\n manifest={manifest}\n extensions={props.customFieldExtensions}\n onComplete={onComplete}\n transformErrors={props.transformErrors}\n />\n </InfoCard>\n )}\n </Content>\n </Page>\n </AnalyticsContext>\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, { PropsWithChildren } from 'react';\nimport { Routes, Route, useOutlet } from 'react-router';\nimport { TemplateListPage } from '../TemplateListPage';\nimport { TemplateWizardPage } from '../TemplateWizardPage';\nimport {\n FIELD_EXTENSION_WRAPPER_KEY,\n FIELD_EXTENSION_KEY,\n DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS,\n NextFieldExtensionOptions,\n FieldExtensionOptions,\n} from '../../extensions';\n\nimport { useElementFilter } from '@backstage/core-plugin-api';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { TemplateGroupFilter } from '../TemplateListPage/TemplateGroups';\nimport { nextSelectedTemplateRouteRef } from '../../routes';\nimport { SecretsContextProvider } from '../../components/secrets/SecretsContext';\nimport type { ErrorTransformer } from '@rjsf/utils';\n\n/**\n * The Props for the Scaffolder Router\n *\n * @alpha\n */\nexport type NextRouterProps = {\n components?: {\n TemplateCardComponent?: React.ComponentType<{\n template: TemplateEntityV1beta3;\n }>;\n TaskPageComponent?: React.ComponentType<{}>;\n };\n groups?: TemplateGroupFilter[];\n transformErrors?: ErrorTransformer;\n};\n\n/**\n * The Scaffolder Router\n *\n * @alpha\n */\nexport const Router = (props: PropsWithChildren<NextRouterProps>) => {\n const { components: { TemplateCardComponent } = {} } = props;\n\n const outlet = useOutlet() || props.children;\n\n const customFieldExtensions = useElementFilter(outlet, elements =>\n elements\n .selectByComponentData({\n key: FIELD_EXTENSION_WRAPPER_KEY,\n })\n .findComponentData<FieldExtensionOptions | NextFieldExtensionOptions>({\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 ] as NextFieldExtensionOptions[];\n\n return (\n <Routes>\n <Route\n path=\"/\"\n element={\n <TemplateListPage\n TemplateCardComponent={TemplateCardComponent}\n groups={props.groups}\n />\n }\n />\n <Route\n path={nextSelectedTemplateRouteRef.path}\n element={\n <SecretsContextProvider>\n <TemplateWizardPage customFieldExtensions={fieldExtensions} />\n </SecretsContextProvider>\n }\n />\n </Routes>\n );\n};\n"],"names":["RouterLink","useStyles","Link","_a","Button","JSONSchema","validation","MuiStepper","MuiStep","MuiStepLabel"],"mappings":"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"}
1
+ {"version":3,"file":"index-c1108e33.esm.js","sources":["../../src/next/TemplateListPage/CategoryPicker.tsx","../../src/next/TemplateListPage/RegisterExistingButton.tsx","../../src/next/TemplateListPage/TemplateCard/CardHeader.tsx","../../src/next/TemplateListPage/TemplateCard/CardLink.tsx","../../src/next/TemplateListPage/TemplateCard/TemplateCard.tsx","../../src/next/TemplateListPage/TemplateGroup.tsx","../../src/next/TemplateListPage/TemplateGroups.tsx","../../src/next/TemplateListPage/TemplateListPage.tsx","../../src/next/TemplateWizardPage/Stepper/createAsyncValidators.ts","../../src/next/TemplateWizardPage/Stepper/useTemplateSchema.ts","../../src/next/TemplateWizardPage/Stepper/ReviewState.tsx","../../src/next/TemplateWizardPage/Stepper/Stepper.tsx","../../src/next/TemplateWizardPage/TemplateWizardPage.tsx","../../src/next/Router/Router.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 */\n\nimport React from 'react';\nimport capitalize from 'lodash/capitalize';\nimport { Progress } from '@backstage/core-components';\nimport {\n Box,\n Checkbox,\n FormControlLabel,\n TextField,\n Typography,\n} from '@material-ui/core';\nimport CheckBoxIcon from '@material-ui/icons/CheckBox';\nimport CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { Autocomplete } from '@material-ui/lab';\nimport { useEntityTypeFilter } from '@backstage/plugin-catalog-react';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\n\nconst icon = <CheckBoxOutlineBlankIcon fontSize=\"small\" />;\nconst checkedIcon = <CheckBoxIcon fontSize=\"small\" />;\n\n/**\n * The Category Picker that is rendered on the left side for picking\n * categories and filtering the template list.\n */\nexport const CategoryPicker = () => {\n const alertApi = useApi(alertApiRef);\n const { error, loading, availableTypes, selectedTypes, setSelectedTypes } =\n useEntityTypeFilter();\n\n if (loading) return <Progress />;\n\n if (error) {\n alertApi.post({\n message: `Failed to load entity types with error: ${error}`,\n severity: 'error',\n });\n return null;\n }\n\n if (!availableTypes) return null;\n\n return (\n <Box pb={1} pt={1}>\n <Typography variant=\"button\">Categories</Typography>\n <Autocomplete\n multiple\n aria-label=\"Categories\"\n options={availableTypes}\n value={selectedTypes}\n onChange={(_: object, value: string[]) => setSelectedTypes(value)}\n renderOption={(option, { selected }) => (\n <FormControlLabel\n control={\n <Checkbox\n icon={icon}\n checkedIcon={checkedIcon}\n checked={selected}\n />\n }\n label={capitalize(option)}\n />\n )}\n size=\"small\"\n popupIcon={<ExpandMoreIcon />}\n renderInput={params => <TextField {...params} variant=\"outlined\" />}\n />\n </Box>\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 { BackstageTheme } from '@backstage/theme';\nimport Button from '@material-ui/core/Button';\nimport IconButton from '@material-ui/core/IconButton';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport React from 'react';\nimport { Link as RouterLink, LinkProps } from 'react-router-dom';\nimport AddCircleOutline from '@material-ui/icons/AddCircleOutline';\nimport { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\n/**\n * Properties for {@link RegisterExistingButton}\n *\n * @alpha\n */\nexport type RegisterExistingButtonProps = {\n title: string;\n} & Partial<Pick<LinkProps, 'to'>>;\n\n/**\n * A button that helps users to register an existing component.\n * @alpha\n */\nexport const RegisterExistingButton = (props: RegisterExistingButtonProps) => {\n const { title, to } = props;\n const { allowed } = usePermission({\n permission: catalogEntityCreatePermission,\n });\n const isXSScreen = useMediaQuery<BackstageTheme>(theme =>\n theme.breakpoints.down('xs'),\n );\n\n if (!to || !allowed) {\n return null;\n }\n\n return isXSScreen ? (\n <IconButton\n component={RouterLink}\n color=\"primary\"\n title={title}\n size=\"small\"\n to={to}\n >\n <AddCircleOutline />\n </IconButton>\n ) : (\n <Button component={RouterLink} variant=\"contained\" color=\"primary\" to={to}>\n {title}\n </Button>\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 */\n\nimport React from 'react';\nimport { makeStyles, useTheme } from '@material-ui/core';\nimport { ItemCardHeader } from '@backstage/core-components';\nimport { BackstageTheme } from '@backstage/theme';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { FavoriteEntity } from '@backstage/plugin-catalog-react';\n\nconst useStyles = makeStyles<BackstageTheme, { cardBackgroundImage: string }>(\n () => ({\n header: {\n backgroundImage: ({ cardBackgroundImage }) => cardBackgroundImage,\n },\n subtitleWrapper: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n }),\n);\n\n/**\n * Props for the CardHeader component\n */\nexport interface CardHeaderProps {\n template: TemplateEntityV1beta3;\n}\n\n/**\n * The Card Header with the background for the TemplateCard.\n */\nexport const CardHeader = (props: CardHeaderProps) => {\n const {\n template: {\n metadata: { title, name },\n spec: { type },\n },\n } = props;\n const { getPageTheme } = useTheme<BackstageTheme>();\n const themeForType = getPageTheme({ themeId: type });\n\n const styles = useStyles({\n cardBackgroundImage: themeForType.backgroundImage,\n });\n\n const SubtitleComponent = (\n <div className={styles.subtitleWrapper}>\n <div>{type}</div>\n <div>\n <FavoriteEntity entity={props.template} style={{ padding: 0 }} />\n </div>\n </div>\n );\n\n return (\n <ItemCardHeader\n title={title ?? name}\n subtitle={SubtitleComponent}\n classes={{ root: styles.header }}\n />\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 { IconComponent } from '@backstage/core-plugin-api';\nimport { BackstageTheme } from '@backstage/theme';\nimport { Link } from '@backstage/core-components';\nimport { makeStyles } from '@material-ui/core';\nimport React from 'react';\n\ninterface CardLinkProps {\n icon: IconComponent;\n text: string;\n url: string;\n}\n\nconst useStyles = makeStyles<BackstageTheme>(() => ({\n linkText: {\n display: 'inline-flex',\n alignItems: 'center',\n },\n}));\n\nexport const CardLink = ({ icon: Icon, text, url }: CardLinkProps) => {\n const styles = useStyles();\n\n return (\n <div className={styles.linkText}>\n <Icon fontSize=\"small\" />\n <Link style={{ marginLeft: '8px' }} to={url}>\n {text || url}\n </Link>\n </div>\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 {\n DEFAULT_NAMESPACE,\n parseEntityRef,\n RELATION_OWNED_BY,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport { Button, MarkdownContent, UserIcon } from '@backstage/core-components';\nimport { IconComponent, useApp, useRouteRef } from '@backstage/core-plugin-api';\nimport {\n EntityRefLinks,\n getEntityRelations,\n} from '@backstage/plugin-catalog-react';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { BackstageTheme } from '@backstage/theme';\nimport {\n Box,\n Card,\n CardActions,\n CardContent,\n Chip,\n Divider,\n Grid,\n makeStyles,\n} from '@material-ui/core';\nimport LanguageIcon from '@material-ui/icons/Language';\nimport React from 'react';\nimport {\n nextSelectedTemplateRouteRef,\n viewTechDocRouteRef,\n} from '../../../routes';\nimport { CardHeader } from './CardHeader';\nimport { CardLink } from './CardLink';\n\nconst useStyles = makeStyles<BackstageTheme>(theme => ({\n box: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n '-webkit-line-clamp': 10,\n '-webkit-box-orient': 'vertical',\n },\n markdown: {\n /** to make the styles for React Markdown not leak into the description */\n '& :first-child': {\n margin: 0,\n },\n },\n label: {\n color: theme.palette.text.secondary,\n textTransform: 'uppercase',\n fontWeight: 'bold',\n letterSpacing: 0.5,\n lineHeight: 1,\n fontSize: '0.75rem',\n },\n footer: {\n display: 'flex',\n justifyContent: 'space-between',\n flex: 1,\n alignItems: 'center',\n },\n ownedBy: {\n display: 'flex',\n alignItems: 'center',\n flex: 1,\n color: theme.palette.link,\n },\n}));\n\n/**\n * The Props for the Template Card component\n * @alpha\n */\nexport interface TemplateCardProps {\n template: TemplateEntityV1beta3;\n deprecated?: boolean;\n}\n\n/**\n * The Template Card component that is rendered in a list for each template\n * @alpha\n */\nexport const TemplateCard = (props: TemplateCardProps) => {\n const { template } = props;\n const styles = useStyles();\n const ownedByRelations = getEntityRelations(template, RELATION_OWNED_BY);\n const templateRoute = useRouteRef(nextSelectedTemplateRouteRef);\n const { name, namespace } = parseEntityRef(\n stringifyEntityRef(props.template),\n );\n const href = templateRoute({\n templateName: name,\n namespace: namespace,\n });\n\n const app = useApp();\n const iconResolver = (key?: string): IconComponent =>\n key ? app.getSystemIcon(key) ?? LanguageIcon : LanguageIcon;\n\n // TechDocs Link\n const viewTechDoc = useRouteRef(viewTechDocRouteRef);\n const viewTechDocsAnnotation =\n template.metadata.annotations?.['backstage.io/techdocs-ref'];\n const viewTechDocsLink =\n !!viewTechDocsAnnotation &&\n !!viewTechDoc &&\n viewTechDoc({\n namespace: template.metadata.namespace || DEFAULT_NAMESPACE,\n kind: template.kind,\n name: template.metadata.name,\n });\n\n return (\n <Card>\n <CardHeader template={template} />\n <CardContent>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <Box className={styles.box}>\n <MarkdownContent\n className={styles.markdown}\n content={template.metadata.description ?? 'No description'}\n />\n </Box>\n </Grid>\n {(template.metadata.tags?.length ?? 0) > 0 && (\n <>\n <Grid item xs={12}>\n <Divider />\n </Grid>\n <Grid item xs={12}>\n <Grid container spacing={2}>\n {template.metadata.tags?.map(tag => (\n <Grid item>\n <Chip\n style={{ margin: 0 }}\n size=\"small\"\n label={tag}\n key={tag}\n />\n </Grid>\n ))}\n </Grid>\n </Grid>\n </>\n )}\n {(!!viewTechDocsLink || template.metadata.links?.length) && (\n <>\n <Grid item xs={12}>\n <Divider />\n </Grid>\n <Grid item xs={12}>\n <Grid container spacing={2}>\n {viewTechDocsLink && (\n <Grid className={styles.linkText} item xs={6}>\n <CardLink\n icon={iconResolver('docs')}\n text=\"View TechDocs\"\n url={viewTechDocsLink}\n />\n </Grid>\n )}\n {template.metadata.links?.map(({ url, icon, title }) => (\n <Grid className={styles.linkText} item xs={6}>\n <CardLink\n icon={iconResolver(icon)}\n text={title || url}\n url={url}\n />\n </Grid>\n ))}\n </Grid>\n </Grid>\n </>\n )}\n </Grid>\n </CardContent>\n <CardActions style={{ padding: '16px' }}>\n <div className={styles.footer}>\n <div className={styles.ownedBy}>\n {ownedByRelations.length > 0 && (\n <>\n <UserIcon fontSize=\"small\" />\n <EntityRefLinks\n style={{ marginLeft: '8px' }}\n entityRefs={ownedByRelations}\n defaultKind=\"Group\"\n />\n </>\n )}\n </div>\n <Button size=\"small\" variant=\"outlined\" color=\"primary\" to={href}>\n Choose\n </Button>\n </div>\n </CardActions>\n </Card>\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 { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport React from 'react';\nimport {\n Content,\n ContentHeader,\n ItemCardGrid,\n Link,\n} from '@backstage/core-components';\nimport { Typography } from '@material-ui/core';\nimport { TemplateCard, TemplateCardProps } from './TemplateCard';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\n\nexport interface TemplateGroupProps {\n templates: TemplateEntityV1beta3[];\n title: React.ReactNode;\n components?: {\n CardComponent?: React.ComponentType<TemplateCardProps>;\n };\n}\n\nexport const TemplateGroup = (props: TemplateGroupProps) => {\n const { templates, title, components: { CardComponent } = {} } = props;\n const titleComponent =\n typeof title === 'string' ? <ContentHeader title={title} /> : title;\n\n if (templates.length === 0) {\n return (\n <Content>\n {titleComponent}\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 </Content>\n );\n }\n\n const Card = CardComponent || TemplateCard;\n\n return (\n <Content>\n {titleComponent}\n <ItemCardGrid>\n {templates.map(template => (\n <Card key={stringifyEntityRef(template)} template={template} />\n ))}\n </ItemCardGrid>\n </Content>\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 from 'react';\nimport { TemplateGroup } from './TemplateGroup';\nimport { Entity } from '@backstage/catalog-model';\nimport { useEntityList } from '@backstage/plugin-catalog-react';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { Progress, Link } from '@backstage/core-components';\nimport { Typography } from '@material-ui/core';\nimport { errorApiRef, useApi } from '@backstage/core-plugin-api';\n\n/**\n * @alpha\n */\nexport type TemplateGroupFilter = {\n title?: React.ReactNode;\n filter: (entity: Entity) => boolean;\n};\n\nexport interface TemplateGroupsProps {\n groups: TemplateGroupFilter[];\n TemplateCardComponent?: React.ComponentType<{\n template: TemplateEntityV1beta3;\n }>;\n}\n\nexport const TemplateGroups = (props: TemplateGroupsProps) => {\n const { loading, error, entities } = useEntityList();\n const { groups, TemplateCardComponent } = props;\n const errorApi = useApi(errorApiRef);\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n errorApi.post(error);\n return null;\n }\n\n if (!entities || !entities.length) {\n return (\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\n return (\n <>\n {groups.map(({ title, filter }, index) => (\n <TemplateGroup\n key={index}\n templates={entities.filter((e): e is TemplateEntityV1beta3 =>\n filter(e),\n )}\n title={title}\n components={{ CardComponent: TemplateCardComponent }}\n />\n ))}\n </>\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 */\n\nimport React from 'react';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\n\nimport {\n Content,\n ContentHeader,\n Header,\n Page,\n SupportButton,\n} from '@backstage/core-components';\nimport {\n EntityKindPicker,\n EntityListProvider,\n EntitySearchBar,\n EntityTagPicker,\n CatalogFilterLayout,\n UserListPicker,\n} from '@backstage/plugin-catalog-react';\nimport { CategoryPicker } from './CategoryPicker';\nimport { RegisterExistingButton } from './RegisterExistingButton';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { registerComponentRouteRef } from '../../routes';\nimport { TemplateGroupFilter, TemplateGroups } from './TemplateGroups';\n\nexport type TemplateListPageProps = {\n TemplateCardComponent?: React.ComponentType<{\n template: TemplateEntityV1beta3;\n }>;\n groups?: TemplateGroupFilter[];\n};\n\nconst defaultGroup: TemplateGroupFilter = {\n title: 'All Templates',\n filter: () => true,\n};\n\nexport const TemplateListPage = (props: TemplateListPageProps) => {\n const registerComponentLink = useRouteRef(registerComponentRouteRef);\n const { TemplateCardComponent, groups = [] } = props;\n\n return (\n <EntityListProvider>\n <Page themeId=\"website\">\n <Header\n pageTitleOverride=\"Create a new component\"\n title=\"Create a new component\"\n subtitle=\"Create new software components using standard templates in your organization\"\n />\n <Content>\n <ContentHeader title=\"Available Templates\">\n <RegisterExistingButton\n title=\"Register Existing Component\"\n to={registerComponentLink && registerComponentLink()}\n />\n <SupportButton>\n Create new software components using standard templates. Different\n templates create different kinds of components (services,\n websites, 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 <CategoryPicker />\n <EntityTagPicker />\n </CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>\n <TemplateGroups\n groups={[...groups, defaultGroup]}\n TemplateCardComponent={TemplateCardComponent}\n />\n </CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n </Content>\n </Page>\n </EntityListProvider>\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 */\n\nimport { FieldValidation } from '@rjsf/utils';\nimport { JsonObject } from '@backstage/types';\nimport { ApiHolder } from '@backstage/core-plugin-api';\nimport { NextCustomFieldValidator } from '../../../extensions';\nimport { Draft07 as JSONSchema } from 'json-schema-library';\nimport { createFieldValidation } from './schema';\n\nexport const createAsyncValidators = (\n rootSchema: JsonObject,\n validators: Record<string, undefined | NextCustomFieldValidator<unknown>>,\n context: {\n apiHolder: ApiHolder;\n },\n) => {\n async function validate(formData: JsonObject, pathPrefix: string = '#') {\n const parsedSchema = new JSONSchema(rootSchema);\n const formValidation: Record<string, FieldValidation> = {};\n for (const [key, value] of Object.entries(formData)) {\n const definitionInSchema = parsedSchema.getSchema(\n `${pathPrefix}/${key}`,\n formData,\n );\n\n if (definitionInSchema && 'ui:field' in definitionInSchema) {\n const validator = validators[definitionInSchema['ui:field']];\n if (validator) {\n const fieldValidation = createFieldValidation();\n try {\n await validator(value, fieldValidation, context);\n } catch (ex) {\n fieldValidation.addError(ex.message);\n }\n formValidation[key] = fieldValidation;\n }\n }\n }\n\n return formValidation;\n }\n\n return async (formData: JsonObject) => {\n return await validate(formData);\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 { featureFlagsApiRef, useApi } from '@backstage/core-plugin-api';\nimport { JsonObject } from '@backstage/types';\nimport { UiSchema } from '@rjsf/utils';\nimport { TemplateParameterSchema } from '../../../types';\nimport { extractSchemaFromStep } from './schema';\n\nexport interface ParsedTemplateSchema {\n uiSchema: UiSchema;\n mergedSchema: JsonObject;\n schema: JsonObject;\n title: string;\n description?: string;\n}\nexport const useTemplateSchema = (\n manifest: TemplateParameterSchema,\n): { steps: ParsedTemplateSchema[] } => {\n const featureFlags = useApi(featureFlagsApiRef);\n const steps = manifest.steps.map(({ title, description, schema }) => ({\n title,\n description,\n mergedSchema: schema,\n ...extractSchemaFromStep(schema),\n }));\n\n const returningSteps = steps\n // Filter out steps that are not enabled with the feature flags\n .filter(step => {\n const stepFeatureFlag = step.uiSchema['ui:backstage']?.featureFlag;\n return stepFeatureFlag ? featureFlags.isActive(stepFeatureFlag) : true;\n })\n // Then filter out the properties that are not enabled with feature flag\n .map(step => ({\n ...step,\n schema: {\n ...step.schema,\n // Title is rendered at the top of the page, so let's ignore this from jsonschemaform\n title: undefined,\n properties: Object.fromEntries(\n Object.entries(step.schema.properties as JsonObject).filter(\n ([key]) => {\n const stepFeatureFlag =\n step.uiSchema[key]?.['ui:backstage']?.featureFlag;\n return stepFeatureFlag\n ? featureFlags.isActive(stepFeatureFlag)\n : true;\n },\n ),\n ),\n },\n }));\n\n return {\n steps: returningSteps,\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 from 'react';\nimport { StructuredMetadataTable } from '@backstage/core-components';\nimport { JsonObject } from '@backstage/types';\nimport { ParsedTemplateSchema } from './useTemplateSchema';\nimport { Draft07 as JSONSchema } from 'json-schema-library';\n\ninterface ReviewStateProps {\n schemas: ParsedTemplateSchema[];\n formState: JsonObject;\n}\n\nexport const ReviewState = (props: ReviewStateProps) => {\n const reviewData = Object.fromEntries(\n Object.entries(props.formState).map(([key, value]) => {\n for (const step of props.schemas) {\n const parsedSchema = new JSONSchema(step.mergedSchema);\n const definitionInSchema = parsedSchema.getSchema(\n `#/${key}`,\n props.formState,\n );\n if (definitionInSchema) {\n const backstageReviewOptions =\n definitionInSchema['ui:backstage']?.review;\n\n if (backstageReviewOptions) {\n if (backstageReviewOptions.mask) {\n return [key, backstageReviewOptions.mask];\n }\n if (backstageReviewOptions.show === false) {\n return [];\n }\n }\n\n if (definitionInSchema['ui:widget'] === 'password') {\n return [key, '******'];\n }\n }\n }\n return [key, value];\n }),\n );\n return <StructuredMetadataTable metadata={reviewData} />;\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 {\n useAnalytics,\n useApiHolder,\n useRouteRefParams,\n} from '@backstage/core-plugin-api';\nimport { JsonValue } from '@backstage/types';\nimport {\n Stepper as MuiStepper,\n Step as MuiStep,\n StepLabel as MuiStepLabel,\n Button,\n makeStyles,\n} from '@material-ui/core';\nimport { withTheme } from '@rjsf/core-v5';\nimport { ErrorSchema, FieldValidation } from '@rjsf/utils';\nimport React, { useMemo, useState } from 'react';\nimport { NextFieldExtensionOptions } from '../../../extensions';\nimport { TemplateParameterSchema } from '../../../types';\nimport { createAsyncValidators } from './createAsyncValidators';\nimport { useTemplateSchema } from './useTemplateSchema';\nimport { ReviewState } from './ReviewState';\nimport validator from '@rjsf/validator-ajv8';\nimport { selectedTemplateRouteRef } from '../../../routes';\nimport type { ErrorTransformer } from '@rjsf/utils';\nimport { getDefaultFormState } from '@rjsf/utils';\n\nconst useStyles = makeStyles(theme => ({\n backButton: {\n marginRight: theme.spacing(1),\n },\n\n footer: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'right',\n },\n formWrapper: {\n padding: theme.spacing(2),\n },\n}));\n\nexport interface StepperProps {\n manifest: TemplateParameterSchema;\n extensions: NextFieldExtensionOptions<any, any>[];\n onComplete: (values: Record<string, JsonValue>) => Promise<void>;\n transformErrors?: ErrorTransformer;\n}\n\n// TODO(blam): We require here, as the types in this package depend on @rjsf/core explicitly\n// which is what we're using here as the default types, it needs to depend on @rjsf/core-v5 because\n// of the re-writing we're doing. Once we've migrated, we can import this the exact same as before.\nconst Form = withTheme(require('@rjsf/material-ui-v5').Theme);\n\nexport const Stepper = (props: StepperProps) => {\n const { templateName } = useRouteRefParams(selectedTemplateRouteRef);\n const analytics = useAnalytics();\n const { steps } = useTemplateSchema(props.manifest);\n const apiHolder = useApiHolder();\n const [activeStep, setActiveStep] = useState(0);\n const [formState, setFormState] = useState<Record<string, JsonValue>>({});\n const [errors, setErrors] = useState<\n undefined | Record<string, FieldValidation>\n >();\n const styles = useStyles();\n\n const extensions = useMemo(() => {\n return Object.fromEntries(\n props.extensions.map(({ name, component }) => [name, component]),\n );\n }, [props.extensions]);\n\n const validators = useMemo(() => {\n return Object.fromEntries(\n props.extensions.map(({ name, validation }) => [name, validation]),\n );\n }, [props.extensions]);\n\n const validation = useMemo(() => {\n return createAsyncValidators(steps[activeStep]?.mergedSchema, validators, {\n apiHolder,\n });\n }, [steps, activeStep, validators, apiHolder]);\n\n const handleBack = () => {\n setActiveStep(prevActiveStep => prevActiveStep - 1);\n };\n\n const handleNext = async ({\n formData,\n }: {\n formData: Record<string, JsonValue>;\n }) => {\n // TODO(blam): What do we do about loading states, does each field extension get a chance\n // to display it's own loading? Or should we grey out the entire form.\n setErrors(undefined);\n\n const schema = steps[activeStep]?.schema;\n const rootSchema = steps[activeStep]?.mergedSchema;\n\n const newFormData = getDefaultFormState(\n validator,\n schema,\n formData,\n rootSchema,\n true,\n );\n\n const returnedValidation = await validation(newFormData);\n\n const hasErrors = Object.values(returnedValidation).some(\n i => i.__errors?.length,\n );\n\n if (hasErrors) {\n setErrors(returnedValidation);\n } else {\n setErrors(undefined);\n setActiveStep(prevActiveStep => {\n const stepNum = prevActiveStep + 1;\n analytics.captureEvent('click', `Next Step (${stepNum})`);\n return stepNum;\n });\n }\n setFormState(current => ({ ...current, ...newFormData }));\n };\n\n return (\n <>\n <MuiStepper activeStep={activeStep} alternativeLabel variant=\"elevation\">\n {steps.map((step, index) => (\n <MuiStep key={index}>\n <MuiStepLabel>{step.title}</MuiStepLabel>\n </MuiStep>\n ))}\n <MuiStep>\n <MuiStepLabel>Review</MuiStepLabel>\n </MuiStep>\n </MuiStepper>\n <div className={styles.formWrapper}>\n {activeStep < steps.length ? (\n <Form\n validator={validator}\n extraErrors={errors as unknown as ErrorSchema}\n formData={formState}\n formContext={{ formData: formState }}\n schema={steps[activeStep].schema}\n uiSchema={steps[activeStep].uiSchema}\n onSubmit={handleNext}\n fields={extensions}\n showErrorList={false}\n transformErrors={props.transformErrors}\n >\n <div className={styles.footer}>\n <Button\n onClick={handleBack}\n className={styles.backButton}\n disabled={activeStep < 1}\n >\n Back\n </Button>\n <Button variant=\"contained\" color=\"primary\" type=\"submit\">\n {activeStep === steps.length - 1 ? 'Review' : 'Next'}\n </Button>\n </div>\n </Form>\n ) : (\n <>\n <ReviewState formState={formState} schemas={steps} />\n <div className={styles.footer}>\n <Button\n onClick={handleBack}\n className={styles.backButton}\n disabled={activeStep < 1}\n >\n Back\n </Button>\n <Button\n variant=\"contained\"\n onClick={() => {\n props.onComplete(formState);\n const name =\n typeof formState.name === 'string'\n ? formState.name\n : undefined;\n analytics.captureEvent(\n 'create',\n name || `new ${templateName}`,\n );\n }}\n >\n Create\n </Button>\n </div>\n </>\n )}\n </div>\n </>\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, { useContext, useEffect } from 'react';\nimport {\n Page,\n Header,\n Content,\n Progress,\n InfoCard,\n MarkdownContent,\n} from '@backstage/core-components';\nimport { NextFieldExtensionOptions } from '../../extensions';\nimport { Navigate, useNavigate } from 'react-router-dom';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport {\n AnalyticsContext,\n errorApiRef,\n useApi,\n useRouteRef,\n useRouteRefParams,\n} from '@backstage/core-plugin-api';\nimport { scaffolderApiRef } from '../../api';\nimport useAsync from 'react-use/lib/useAsync';\nimport { makeStyles } from '@material-ui/core';\nimport { Stepper } from './Stepper';\nimport { BackstageTheme } from '@backstage/theme';\nimport {\n nextRouteRef,\n scaffolderTaskRouteRef,\n selectedTemplateRouteRef,\n} from '../../routes';\nimport { SecretsContext } from '../../components/secrets/SecretsContext';\nimport { JsonValue } from '@backstage/types';\nimport type { ErrorTransformer } from '@rjsf/utils';\n\nexport interface TemplateWizardPageProps {\n customFieldExtensions: NextFieldExtensionOptions<any, any>[];\n transformErrors?: ErrorTransformer;\n}\n\nconst useStyles = makeStyles<BackstageTheme>(() => ({\n markdown: {\n /** to make the styles for React Markdown not leak into the description */\n '& :first-child': {\n marginTop: 0,\n },\n '& :last-child': {\n marginBottom: 0,\n },\n },\n}));\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\n return { manifest: value, loading, error };\n};\n\nexport const TemplateWizardPage = (props: TemplateWizardPageProps) => {\n const styles = useStyles();\n const rootRef = useRouteRef(nextRouteRef);\n const taskRoute = useRouteRef(scaffolderTaskRouteRef);\n const { secrets } = useContext(SecretsContext) ?? {};\n const scaffolderApi = useApi(scaffolderApiRef);\n const navigate = useNavigate();\n const { templateName, namespace } = useRouteRefParams(\n selectedTemplateRouteRef,\n );\n\n const templateRef = stringifyEntityRef({\n kind: 'Template',\n namespace,\n name: templateName,\n });\n\n const errorApi = useApi(errorApiRef);\n const { loading, manifest, error } = useTemplateParameterSchema(templateRef);\n\n const onComplete = async (values: Record<string, JsonValue>) => {\n const { taskId } = await scaffolderApi.scaffold({\n templateRef,\n values,\n secrets,\n });\n\n navigate(taskRoute({ taskId }));\n };\n\n useEffect(() => {\n if (error) {\n errorApi.post(new Error(`Failed to load template, ${error}`));\n }\n }, [error, errorApi]);\n\n if (error) {\n return <Navigate to={rootRef()} />;\n }\n\n return (\n <AnalyticsContext attributes={{ entityRef: templateRef }}>\n <Page themeId=\"website\">\n <Header\n pageTitleOverride=\"Create a new component\"\n title=\"Create a new component\"\n subtitle=\"Create new software components using standard templates in your organization\"\n />\n <Content>\n {loading && <Progress />}\n {manifest && (\n <InfoCard\n title={manifest.title}\n subheader={\n <MarkdownContent\n className={styles.markdown}\n content={manifest.description ?? 'No description'}\n />\n }\n noPadding\n titleTypographyProps={{ component: 'h2' }}\n >\n <Stepper\n manifest={manifest}\n extensions={props.customFieldExtensions}\n onComplete={onComplete}\n transformErrors={props.transformErrors}\n />\n </InfoCard>\n )}\n </Content>\n </Page>\n </AnalyticsContext>\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, { PropsWithChildren } from 'react';\nimport { Routes, Route, useOutlet } from 'react-router-dom';\nimport { TemplateListPage } from '../TemplateListPage';\nimport { TemplateWizardPage } from '../TemplateWizardPage';\nimport {\n FIELD_EXTENSION_WRAPPER_KEY,\n FIELD_EXTENSION_KEY,\n DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS,\n NextFieldExtensionOptions,\n FieldExtensionOptions,\n} from '../../extensions';\n\nimport { useElementFilter } from '@backstage/core-plugin-api';\nimport { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { TemplateGroupFilter } from '../TemplateListPage/TemplateGroups';\nimport { nextSelectedTemplateRouteRef } from '../../routes';\nimport { SecretsContextProvider } from '../../components/secrets/SecretsContext';\nimport type { ErrorTransformer } from '@rjsf/utils';\n\n/**\n * The Props for the Scaffolder Router\n *\n * @alpha\n */\nexport type NextRouterProps = {\n components?: {\n TemplateCardComponent?: React.ComponentType<{\n template: TemplateEntityV1beta3;\n }>;\n TaskPageComponent?: React.ComponentType<{}>;\n };\n groups?: TemplateGroupFilter[];\n transformErrors?: ErrorTransformer;\n};\n\n/**\n * The Scaffolder Router\n *\n * @alpha\n */\nexport const Router = (props: PropsWithChildren<NextRouterProps>) => {\n const { components: { TemplateCardComponent } = {} } = props;\n\n const outlet = useOutlet() || props.children;\n\n const customFieldExtensions = useElementFilter(outlet, elements =>\n elements\n .selectByComponentData({\n key: FIELD_EXTENSION_WRAPPER_KEY,\n })\n .findComponentData<FieldExtensionOptions | NextFieldExtensionOptions>({\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 ] as NextFieldExtensionOptions[];\n\n return (\n <Routes>\n <Route\n path=\"/\"\n element={\n <TemplateListPage\n TemplateCardComponent={TemplateCardComponent}\n groups={props.groups}\n />\n }\n />\n <Route\n path={nextSelectedTemplateRouteRef.path}\n element={\n <SecretsContextProvider>\n <TemplateWizardPage customFieldExtensions={fieldExtensions} />\n </SecretsContextProvider>\n }\n />\n </Routes>\n );\n};\n"],"names":["RouterLink","useStyles","Link","_a","Button","JSONSchema","validation","MuiStepper","MuiStep","MuiStepLabel"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { E as EntityPicker, n as EntityPickerSchema, o as EntityNamePicker, p as entityNamePickerValidation, q as EntityNamePickerSchema, t as EntityTagsPicker, u as EntityTagsPickerSchema, R as RepoUrlPicker, w as repoPickerValidation, x as RepoUrlPickerSchema, O as OwnerPicker, y as OwnerPickerSchema, z as OwnedEntityPicker, A as OwnedEntityPickerSchema } from './index-102258f6.esm.js';
1
+ import { E as EntityPicker, n as EntityPickerSchema, o as EntityNamePicker, p as entityNamePickerValidation, q as EntityNamePickerSchema, t as EntityTagsPicker, u as EntityTagsPickerSchema, R as RepoUrlPicker, w as repoPickerValidation, x as RepoUrlPickerSchema, O as OwnerPicker, y as OwnerPickerSchema, z as OwnedEntityPicker, A as OwnedEntityPickerSchema } from './index-8d9b2b59.esm.js';
2
2
 
3
3
  const DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS = [
4
4
  {
@@ -123,4 +123,4 @@ const createFieldValidation = () => {
123
123
  };
124
124
 
125
125
  export { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS as D, createFieldValidation as c, extractSchemaFromStep as e };
126
- //# sourceMappingURL=schema-4db0f1ff.esm.js.map
126
+ //# sourceMappingURL=schema-0d0eab8f.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-4db0f1ff.esm.js","sources":["../../src/extensions/default.ts","../../src/next/TemplateWizardPage/Stepper/schema.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 {\n EntityPicker,\n EntityPickerSchema,\n} from '../components/fields/EntityPicker/EntityPicker';\nimport {\n EntityNamePicker,\n EntityNamePickerSchema,\n} from '../components/fields/EntityNamePicker/EntityNamePicker';\nimport { entityNamePickerValidation } from '../components/fields/EntityNamePicker/validation';\nimport {\n EntityTagsPicker,\n EntityTagsPickerSchema,\n} from '../components/fields/EntityTagsPicker/EntityTagsPicker';\nimport {\n OwnerPicker,\n OwnerPickerSchema,\n} from '../components/fields/OwnerPicker/OwnerPicker';\nimport {\n RepoUrlPicker,\n RepoUrlPickerSchema,\n} from '../components/fields/RepoUrlPicker/RepoUrlPicker';\nimport { repoPickerValidation } from '../components/fields/RepoUrlPicker/validation';\nimport {\n OwnedEntityPicker,\n OwnedEntityPickerSchema,\n} from '../components/fields/OwnedEntityPicker/OwnedEntityPicker';\n\nexport const DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS = [\n {\n component: EntityPicker,\n name: 'EntityPicker',\n schema: EntityPickerSchema,\n },\n {\n component: EntityNamePicker,\n name: 'EntityNamePicker',\n validation: entityNamePickerValidation,\n schema: EntityNamePickerSchema,\n },\n {\n component: EntityTagsPicker,\n name: 'EntityTagsPicker',\n schema: EntityTagsPickerSchema,\n },\n {\n component: RepoUrlPicker,\n name: 'RepoUrlPicker',\n validation: repoPickerValidation,\n schema: RepoUrlPickerSchema,\n },\n {\n component: OwnerPicker,\n name: 'OwnerPicker',\n schema: OwnerPickerSchema,\n },\n {\n component: OwnedEntityPicker,\n name: 'OwnedEntityPicker',\n schema: OwnedEntityPickerSchema,\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 { JsonObject } from '@backstage/types';\nimport { FieldValidation, UiSchema } from '@rjsf/utils';\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\n/**\n * @alpha\n * Takes a step from a Backstage Template Manifest and converts it to a JSON Schema and UI Schema for rjsf\n */\nexport const extractSchemaFromStep = (\n inputStep: JsonObject,\n): { uiSchema: UiSchema; schema: JsonObject } => {\n const uiSchema: UiSchema = {};\n const returnSchema: JsonObject = JSON.parse(JSON.stringify(inputStep));\n extractUiSchema(returnSchema, uiSchema);\n return { uiSchema, schema: returnSchema };\n};\n\n/**\n * @alpha\n * Creates a field validation object for use in react jsonschema form\n */\nexport const createFieldValidation = (): FieldValidation => {\n const fieldValidation: FieldValidation = {\n __errors: [] as string[],\n addError: (message: string) => {\n fieldValidation.__errors?.push(message);\n },\n };\n\n return fieldValidation;\n};\n"],"names":[],"mappings":";;AA0CO,MAAM,mCAAsC,GAAA;AAAA,EACjD;AAAA,IACE,SAAW,EAAA,YAAA;AAAA,IACX,IAAM,EAAA,cAAA;AAAA,IACN,MAAQ,EAAA,kBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,gBAAA;AAAA,IACX,IAAM,EAAA,kBAAA;AAAA,IACN,UAAY,EAAA,0BAAA;AAAA,IACZ,MAAQ,EAAA,sBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,gBAAA;AAAA,IACX,IAAM,EAAA,kBAAA;AAAA,IACN,MAAQ,EAAA,sBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,aAAA;AAAA,IACX,IAAM,EAAA,eAAA;AAAA,IACN,UAAY,EAAA,oBAAA;AAAA,IACZ,MAAQ,EAAA,mBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,WAAA;AAAA,IACX,IAAM,EAAA,aAAA;AAAA,IACN,MAAQ,EAAA,iBAAA;AAAA,GACV;AAAA,EACA;AAAA,IACE,SAAW,EAAA,iBAAA;AAAA,IACX,IAAM,EAAA,mBAAA;AAAA,IACN,MAAQ,EAAA,uBAAA;AAAA,GACV;AACF;;ACzDA,SAAS,SAAS,KAAqC,EAAA;AACrD,EAAO,OAAA,OAAO,UAAU,QAAY,IAAA,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA,CAAA;AAC5E,CAAA;AAEA,SAAS,eAAA,CAAgB,QAAoB,QAAsB,EAAA;AACjE,EAAI,IAAA,CAAC,QAAS,CAAA,MAAM,CAAG,EAAA;AACrB,IAAA,OAAA;AAAA,GACF;AAEA,EAAA,MAAM,EAAE,UAAY,EAAA,KAAA,EAAO,OAAO,KAAO,EAAA,KAAA,EAAO,cAAiB,GAAA,MAAA,CAAA;AAEjE,EAAA,KAAA,MAAW,YAAY,MAAQ,EAAA;AAC7B,IAAA,IAAI,CAAC,MAAA,CAAO,cAAe,CAAA,QAAQ,CAAG,EAAA;AACpC,MAAA,SAAA;AAAA,KACF;AAEA,IAAI,IAAA,QAAA,CAAS,UAAW,CAAA,KAAK,CAAG,EAAA;AAC9B,MAAA,QAAA,CAAS,YAAY,MAAO,CAAA,QAAA,CAAA,CAAA;AAC5B,MAAA,OAAO,MAAO,CAAA,QAAA,CAAA,CAAA;AAAA,KAChB;AAAA,GACF;AAEA,EAAI,IAAA,QAAA,CAAS,UAAU,CAAG,EAAA;AACxB,IAAA,KAAA,MAAW,YAAY,UAAY,EAAA;AACjC,MAAA,IAAI,CAAC,UAAA,CAAW,cAAe,CAAA,QAAQ,CAAG,EAAA;AACxC,QAAA,SAAA;AAAA,OACF;AAEA,MAAA,MAAM,aAAa,UAAW,CAAA,QAAA,CAAA,CAAA;AAC9B,MAAI,IAAA,CAAC,QAAS,CAAA,UAAU,CAAG,EAAA;AACzB,QAAA,SAAA;AAAA,OACF;AACA,MAAA,MAAM,gBAAgB,EAAC,CAAA;AACvB,MAAA,QAAA,CAAS,QAAY,CAAA,GAAA,aAAA,CAAA;AACrB,MAAA,eAAA,CAAgB,YAAY,aAAa,CAAA,CAAA;AAAA,KAC3C;AAAA,GACF;AAEA,EAAI,IAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AACnB,IAAA,MAAM,gBAAgB,EAAC,CAAA;AACvB,IAAA,QAAA,CAAS,KAAQ,GAAA,aAAA,CAAA;AACjB,IAAA,eAAA,CAAgB,OAAO,aAAa,CAAA,CAAA;AAAA,GACtC;AAEA,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAG,EAAA;AACxB,IAAA,KAAA,MAAW,cAAc,KAAO,EAAA;AAC9B,MAAI,IAAA,CAAC,QAAS,CAAA,UAAU,CAAG,EAAA;AACzB,QAAA,SAAA;AAAA,OACF;AACA,MAAA,eAAA,CAAgB,YAAY,QAAQ,CAAA,CAAA;AAAA,KACtC;AAAA,GACF;AAEA,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAG,EAAA;AACxB,IAAA,KAAA,MAAW,cAAc,KAAO,EAAA;AAC9B,MAAI,IAAA,CAAC,QAAS,CAAA,UAAU,CAAG,EAAA;AACzB,QAAA,SAAA;AAAA,OACF;AACA,MAAA,eAAA,CAAgB,YAAY,QAAQ,CAAA,CAAA;AAAA,KACtC;AAAA,GACF;AAEA,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,CAAG,EAAA;AACxB,IAAA,KAAA,MAAW,cAAc,KAAO,EAAA;AAC9B,MAAI,IAAA,CAAC,QAAS,CAAA,UAAU,CAAG,EAAA;AACzB,QAAA,SAAA;AAAA,OACF;AACA,MAAA,eAAA,CAAgB,YAAY,QAAQ,CAAA,CAAA;AAAA,KACtC;AAAA,GACF;AAEA,EAAI,IAAA,QAAA,CAAS,YAAY,CAAG,EAAA;AAC1B,IAAA,KAAA,MAAW,OAAW,IAAA,MAAA,CAAO,IAAK,CAAA,YAAY,CAAG,EAAA;AAC/C,MAAA,MAAM,aAAa,YAAa,CAAA,OAAA,CAAA,CAAA;AAChC,MAAI,IAAA,CAAC,QAAS,CAAA,UAAU,CAAG,EAAA;AACzB,QAAA,SAAA;AAAA,OACF;AACA,MAAA,eAAA,CAAgB,YAAY,QAAQ,CAAA,CAAA;AAAA,KACtC;AAAA,GACF;AACF,CAAA;AAMa,MAAA,qBAAA,GAAwB,CACnC,SAC+C,KAAA;AAC/C,EAAA,MAAM,WAAqB,EAAC,CAAA;AAC5B,EAAA,MAAM,eAA2B,IAAK,CAAA,KAAA,CAAM,IAAK,CAAA,SAAA,CAAU,SAAS,CAAC,CAAA,CAAA;AACrE,EAAA,eAAA,CAAgB,cAAc,QAAQ,CAAA,CAAA;AACtC,EAAO,OAAA,EAAE,QAAU,EAAA,MAAA,EAAQ,YAAa,EAAA,CAAA;AAC1C,EAAA;AAMO,MAAM,wBAAwB,MAAuB;AAC1D,EAAA,MAAM,eAAmC,GAAA;AAAA,IACvC,UAAU,EAAC;AAAA,IACX,QAAA,EAAU,CAAC,OAAoB,KAAA;AAxHnC,MAAA,IAAA,EAAA,CAAA;AAyHM,MAAgB,CAAA,EAAA,GAAA,eAAA,CAAA,QAAA,KAAhB,mBAA0B,IAAK,CAAA,OAAA,CAAA,CAAA;AAAA,KACjC;AAAA,GACF,CAAA;AAEA,EAAO,OAAA,eAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"schema-0d0eab8f.esm.js","sources":["../../src/extensions/default.ts","../../src/next/TemplateWizardPage/Stepper/schema.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 {\n EntityPicker,\n EntityPickerSchema,\n} from '../components/fields/EntityPicker/EntityPicker';\nimport {\n EntityNamePicker,\n EntityNamePickerSchema,\n} from '../components/fields/EntityNamePicker/EntityNamePicker';\nimport { entityNamePickerValidation } from '../components/fields/EntityNamePicker/validation';\nimport {\n EntityTagsPicker,\n EntityTagsPickerSchema,\n} from '../components/fields/EntityTagsPicker/EntityTagsPicker';\nimport {\n OwnerPicker,\n OwnerPickerSchema,\n} from '../components/fields/OwnerPicker/OwnerPicker';\nimport {\n RepoUrlPicker,\n RepoUrlPickerSchema,\n} from '../components/fields/RepoUrlPicker/RepoUrlPicker';\nimport { repoPickerValidation } from '../components/fields/RepoUrlPicker/validation';\nimport {\n OwnedEntityPicker,\n OwnedEntityPickerSchema,\n} from '../components/fields/OwnedEntityPicker/OwnedEntityPicker';\n\nexport const DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS = [\n {\n component: EntityPicker,\n name: 'EntityPicker',\n schema: EntityPickerSchema,\n },\n {\n component: EntityNamePicker,\n name: 'EntityNamePicker',\n validation: entityNamePickerValidation,\n schema: EntityNamePickerSchema,\n },\n {\n component: EntityTagsPicker,\n name: 'EntityTagsPicker',\n schema: EntityTagsPickerSchema,\n },\n {\n component: RepoUrlPicker,\n name: 'RepoUrlPicker',\n validation: repoPickerValidation,\n schema: RepoUrlPickerSchema,\n },\n {\n component: OwnerPicker,\n name: 'OwnerPicker',\n schema: OwnerPickerSchema,\n },\n {\n component: OwnedEntityPicker,\n name: 'OwnedEntityPicker',\n schema: OwnedEntityPickerSchema,\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 { JsonObject } from '@backstage/types';\nimport { FieldValidation, UiSchema } from '@rjsf/utils';\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\n/**\n * @alpha\n * Takes a step from a Backstage Template Manifest and converts it to a JSON Schema and UI Schema for rjsf\n */\nexport const extractSchemaFromStep = (\n inputStep: JsonObject,\n): { uiSchema: UiSchema; schema: JsonObject } => {\n const uiSchema: UiSchema = {};\n const returnSchema: JsonObject = JSON.parse(JSON.stringify(inputStep));\n extractUiSchema(returnSchema, uiSchema);\n return { uiSchema, schema: returnSchema };\n};\n\n/**\n * @alpha\n * Creates a field validation object for use in react jsonschema form\n */\nexport const createFieldValidation = (): FieldValidation => {\n const fieldValidation: FieldValidation = {\n __errors: [] as string[],\n addError: (message: string) => {\n fieldValidation.__errors?.push(message);\n },\n };\n\n return fieldValidation;\n};\n"],"names":[],"mappings":"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"}
@@ -387,6 +387,7 @@ export declare const repoPickerValidation: (value: string, validation: FieldVali
387
387
  export declare const RepoUrlPickerFieldExtension: FieldExtensionComponent<string, {
388
388
  allowedOwners?: string[] | undefined;
389
389
  allowedOrganizations?: string[] | undefined;
390
+ allowedProjects?: string[] | undefined;
390
391
  allowedRepos?: string[] | undefined;
391
392
  allowedHosts?: string[] | undefined;
392
393
  requestUserCredentials?: {
@@ -407,6 +408,7 @@ secretsKey: string;
407
408
  export declare const RepoUrlPickerFieldSchema: FieldSchema<string, {
408
409
  allowedOwners?: string[] | undefined;
409
410
  allowedOrganizations?: string[] | undefined;
411
+ allowedProjects?: string[] | undefined;
410
412
  allowedRepos?: string[] | undefined;
411
413
  allowedHosts?: string[] | undefined;
412
414
  requestUserCredentials?: {
@@ -335,6 +335,7 @@ export declare const repoPickerValidation: (value: string, validation: FieldVali
335
335
  export declare const RepoUrlPickerFieldExtension: FieldExtensionComponent<string, {
336
336
  allowedOwners?: string[] | undefined;
337
337
  allowedOrganizations?: string[] | undefined;
338
+ allowedProjects?: string[] | undefined;
338
339
  allowedRepos?: string[] | undefined;
339
340
  allowedHosts?: string[] | undefined;
340
341
  requestUserCredentials?: {
@@ -355,6 +356,7 @@ secretsKey: string;
355
356
  export declare const RepoUrlPickerFieldSchema: FieldSchema<string, {
356
357
  allowedOwners?: string[] | undefined;
357
358
  allowedOrganizations?: string[] | undefined;
359
+ allowedProjects?: string[] | undefined;
358
360
  allowedRepos?: string[] | undefined;
359
361
  allowedHosts?: string[] | undefined;
360
362
  requestUserCredentials?: {
package/dist/index.d.ts CHANGED
@@ -335,6 +335,7 @@ export declare const repoPickerValidation: (value: string, validation: FieldVali
335
335
  export declare const RepoUrlPickerFieldExtension: FieldExtensionComponent<string, {
336
336
  allowedOwners?: string[] | undefined;
337
337
  allowedOrganizations?: string[] | undefined;
338
+ allowedProjects?: string[] | undefined;
338
339
  allowedRepos?: string[] | undefined;
339
340
  allowedHosts?: string[] | undefined;
340
341
  requestUserCredentials?: {
@@ -355,6 +356,7 @@ secretsKey: string;
355
356
  export declare const RepoUrlPickerFieldSchema: FieldSchema<string, {
356
357
  allowedOwners?: string[] | undefined;
357
358
  allowedOrganizations?: string[] | undefined;
359
+ allowedProjects?: string[] | undefined;
358
360
  allowedRepos?: string[] | undefined;
359
361
  allowedHosts?: string[] | undefined;
360
362
  requestUserCredentials?: {
package/dist/index.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- export { M as EntityNamePickerFieldExtension, K as EntityPickerFieldExtension, _ as EntityPickerFieldSchema, N as EntityTagsPickerFieldExtension, a2 as EntityTagsPickerFieldSchema, X as NextScaffolderPage, Q as OwnedEntityPickerFieldExtension, a1 as OwnedEntityPickerFieldSchema, P as OwnerPickerFieldExtension, $ as OwnerPickerFieldSchema, U as RepoUrlPickerFieldExtension, a0 as RepoUrlPickerFieldSchema, D as ScaffolderClient, H as ScaffolderFieldExtensions, J as ScaffolderLayouts, V as ScaffolderPage, m as TaskPage, T as TemplateTypePicker, Y as createNextScaffolderFieldExtension, G as createScaffolderFieldExtension, I as createScaffolderLayout, Z as makeFieldSchemaFromZod, C as nextRouteRef, B as nextSelectedTemplateRouteRef, w as repoPickerValidation, f as rootRouteRef, c as scaffolderApiRef, W as scaffolderPlugin, s as selectedTemplateRouteRef, a3 as useTemplateSecrets } from './esm/index-102258f6.esm.js';
1
+ export { M as EntityNamePickerFieldExtension, K as EntityPickerFieldExtension, _ as EntityPickerFieldSchema, N as EntityTagsPickerFieldExtension, a2 as EntityTagsPickerFieldSchema, X as NextScaffolderPage, Q as OwnedEntityPickerFieldExtension, a1 as OwnedEntityPickerFieldSchema, P as OwnerPickerFieldExtension, $ as OwnerPickerFieldSchema, U as RepoUrlPickerFieldExtension, a0 as RepoUrlPickerFieldSchema, D as ScaffolderClient, H as ScaffolderFieldExtensions, J as ScaffolderLayouts, V as ScaffolderPage, m as TaskPage, T as TemplateTypePicker, Y as createNextScaffolderFieldExtension, G as createScaffolderFieldExtension, I as createScaffolderLayout, Z as makeFieldSchemaFromZod, C as nextRouteRef, B as nextSelectedTemplateRouteRef, w as repoPickerValidation, f as rootRouteRef, c as scaffolderApiRef, W as scaffolderPlugin, s as selectedTemplateRouteRef, a3 as useTemplateSecrets } from './esm/index-8d9b2b59.esm.js';
2
2
  import '@backstage/catalog-model';
3
3
  import '@backstage/core-plugin-api';
4
4
  import '@backstage/errors';
@@ -35,7 +35,7 @@ import '@material-ui/icons/Check';
35
35
  import '@material-ui/icons/FiberManualRecord';
36
36
  import 'classnames';
37
37
  import 'luxon';
38
- import 'react-router';
38
+ import 'react-router-dom';
39
39
  import 'react-use/lib/useInterval';
40
40
  import 'use-immer';
41
41
  import '@material-ui/icons/Language';
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@backstage/plugin-scaffolder",
3
3
  "description": "The Backstage plugin that helps you create new things",
4
- "version": "1.9.0-next.2",
4
+ "version": "1.9.0-next.4",
5
5
  "main": "dist/index.esm.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "license": "Apache-2.0",
@@ -36,14 +36,14 @@
36
36
  "@backstage/catalog-client": "^1.2.0-next.1",
37
37
  "@backstage/catalog-model": "^1.1.4-next.1",
38
38
  "@backstage/config": "^1.0.5-next.1",
39
- "@backstage/core-components": "^0.12.1-next.2",
39
+ "@backstage/core-components": "^0.12.1-next.4",
40
40
  "@backstage/core-plugin-api": "^1.2.0-next.2",
41
41
  "@backstage/errors": "^1.1.4-next.1",
42
42
  "@backstage/integration": "^1.4.1-next.1",
43
- "@backstage/integration-react": "^1.1.7-next.2",
44
- "@backstage/plugin-catalog-common": "^1.0.9-next.2",
45
- "@backstage/plugin-catalog-react": "^1.2.2-next.2",
46
- "@backstage/plugin-permission-react": "^0.4.8-next.2",
43
+ "@backstage/integration-react": "^1.1.7-next.4",
44
+ "@backstage/plugin-catalog-common": "^1.0.9-next.3",
45
+ "@backstage/plugin-catalog-react": "^1.2.2-next.4",
46
+ "@backstage/plugin-permission-react": "^0.4.8-next.3",
47
47
  "@backstage/plugin-scaffolder-common": "^1.2.3-next.1",
48
48
  "@backstage/theme": "^0.2.16",
49
49
  "@backstage/types": "^1.0.2-next.1",
@@ -75,21 +75,20 @@
75
75
  "use-immer": "^0.7.0",
76
76
  "yaml": "^2.0.0",
77
77
  "zen-observable": "^0.10.0",
78
- "zod": "^3.11.6",
79
- "zod-to-json-schema": "^3.18.1"
78
+ "zod": "~3.18.0",
79
+ "zod-to-json-schema": "~3.18.0"
80
80
  },
81
81
  "peerDependencies": {
82
82
  "@types/react": "^16.13.1 || ^17.0.0",
83
83
  "react": "^16.13.1 || ^17.0.0",
84
- "react-router": "6.0.0-beta.0 || ^6.3.0",
85
84
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
86
85
  },
87
86
  "devDependencies": {
88
- "@backstage/cli": "^0.21.2-next.2",
89
- "@backstage/core-app-api": "^1.2.1-next.2",
90
- "@backstage/dev-utils": "^1.0.9-next.2",
91
- "@backstage/plugin-catalog": "^1.7.0-next.2",
92
- "@backstage/test-utils": "^1.2.3-next.2",
87
+ "@backstage/cli": "^0.22.0-next.4",
88
+ "@backstage/core-app-api": "^1.3.0-next.4",
89
+ "@backstage/dev-utils": "^1.0.9-next.4",
90
+ "@backstage/plugin-catalog": "^1.7.0-next.4",
91
+ "@backstage/test-utils": "^1.2.3-next.4",
93
92
  "@testing-library/jest-dom": "^5.10.1",
94
93
  "@testing-library/react": "^12.1.3",
95
94
  "@testing-library/react-hooks": "^8.0.0",