@backstage/plugin-catalog 1.11.1 → 1.11.2-next.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,11 +1,77 @@
1
1
  # @backstage/plugin-catalog
2
2
 
3
- ## 1.11.1
3
+ ## 1.11.2-next.3
4
4
 
5
5
  ### Patch Changes
6
6
 
7
+ - 530b6f364c8c: Adding in type and kind entity details to catalog table title for user clarity
8
+ - 886055301abe: `CatalogIndexPage` now accepts an optional `ownerPickerMode` for toggling the behavior of the `EntityOwnerPicker`,
9
+ exposing a new mode `<CatalogIndexPage ownerPickerMode="all" />` particularly suitable for larger catalogs. In this new mode, `EntityOwnerPicker` will display all the users and groups present in the catalog.
7
10
  - Updated dependencies
8
- - @backstage/plugin-search-react@1.6.1
11
+ - @backstage/plugin-search-react@1.6.2-next.3
12
+ - @backstage/core-components@0.13.2-next.3
13
+ - @backstage/catalog-model@1.4.0-next.1
14
+ - @backstage/catalog-client@1.4.2-next.2
15
+ - @backstage/core-plugin-api@1.5.2-next.0
16
+ - @backstage/errors@1.2.0-next.0
17
+ - @backstage/integration-react@1.1.14-next.3
18
+ - @backstage/theme@0.4.0-next.1
19
+ - @backstage/types@1.0.2
20
+ - @backstage/plugin-catalog-common@1.0.14-next.1
21
+ - @backstage/plugin-catalog-react@1.7.0-next.3
22
+ - @backstage/plugin-scaffolder-common@1.3.1-next.1
23
+ - @backstage/plugin-search-common@1.2.4-next.0
24
+
25
+ ## 1.11.1-next.2
26
+
27
+ ### Patch Changes
28
+
29
+ - 47b01e4c5315: Keyboard navigation to open EntityContextMenu now focus visible the first element.
30
+ - Updated dependencies
31
+ - @backstage/theme@0.4.0-next.1
32
+ - @backstage/plugin-catalog-react@1.7.0-next.2
33
+ - @backstage/core-components@0.13.2-next.2
34
+ - @backstage/integration-react@1.1.14-next.2
35
+ - @backstage/plugin-search-react@1.6.1-next.2
36
+ - @backstage/core-plugin-api@1.5.2-next.0
37
+
38
+ ## 1.11.1-next.1
39
+
40
+ ### Patch Changes
41
+
42
+ - 08f177b91084: Add link from Template entity to the scaffolder launch page for the template in the AboutCard.
43
+ - Updated dependencies
44
+ - @backstage/errors@1.2.0-next.0
45
+ - @backstage/plugin-search-react@1.6.1-next.1
46
+ - @backstage/core-components@0.13.2-next.1
47
+ - @backstage/plugin-catalog-react@1.7.0-next.1
48
+ - @backstage/catalog-model@1.4.0-next.0
49
+ - @backstage/core-plugin-api@1.5.2-next.0
50
+ - @backstage/integration-react@1.1.14-next.1
51
+ - @backstage/catalog-client@1.4.2-next.1
52
+ - @backstage/plugin-catalog-common@1.0.14-next.0
53
+ - @backstage/plugin-scaffolder-common@1.3.1-next.0
54
+ - @backstage/theme@0.4.0-next.0
55
+ - @backstage/types@1.0.2
56
+ - @backstage/plugin-search-common@1.2.4-next.0
57
+
58
+ ## 1.11.1-next.0
59
+
60
+ ### Patch Changes
61
+
62
+ - Updated dependencies
63
+ - @backstage/catalog-client@1.4.2-next.0
64
+ - @backstage/plugin-catalog-react@1.7.0-next.0
65
+ - @backstage/theme@0.4.0-next.0
66
+ - @backstage/core-components@0.13.2-next.0
67
+ - @backstage/core-plugin-api@1.5.1
68
+ - @backstage/integration-react@1.1.14-next.0
69
+ - @backstage/plugin-search-react@1.6.1-next.0
70
+ - @backstage/catalog-model@1.3.0
71
+ - @backstage/errors@1.1.5
72
+ - @backstage/types@1.0.2
73
+ - @backstage/plugin-catalog-common@1.0.13
74
+ - @backstage/plugin-search-common@1.2.3
9
75
 
10
76
  ## 1.11.0
11
77
 
@@ -1,4 +1,4 @@
1
- export { A as AboutCard, a as AboutContent, b as AboutField } from './index-06f6e8ce.esm.js';
1
+ export { A as AboutCard, a as AboutContent, b as AboutField } from './index-ccf4c8ce.esm.js';
2
2
  import 'zen-observable';
3
3
  import '@backstage/catalog-model';
4
4
  import 'lodash';
@@ -6,7 +6,9 @@ import '@backstage/core-components';
6
6
  import '@backstage/core-plugin-api';
7
7
  import '@backstage/integration-react';
8
8
  import '@backstage/plugin-catalog-react';
9
+ import '@backstage/plugin-scaffolder-common';
9
10
  import '@material-ui/core';
11
+ import '@material-ui/icons/AddCircleOutline';
10
12
  import '@material-ui/icons/Cached';
11
13
  import '@material-ui/icons/Description';
12
14
  import '@material-ui/icons/Edit';
@@ -29,4 +31,4 @@ import '@material-ui/icons/Cancel';
29
31
  import '@backstage/errors';
30
32
  import '@backstage/catalog-client';
31
33
  import '@backstage/plugin-search-react';
32
- //# sourceMappingURL=index-6391c20c.esm.js.map
34
+ //# sourceMappingURL=index-27cd41d3.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-27cd41d3.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -3,12 +3,14 @@ import LanguageIcon from '@material-ui/icons/Language';
3
3
  import React from 'react';
4
4
  import { makeStyles, Typography, Button } from '@material-ui/core';
5
5
  import { CodeSnippet, InfoCard } from '@backstage/core-components';
6
- import { L as LinksGridList } from './index-06f6e8ce.esm.js';
6
+ import { L as LinksGridList } from './index-ccf4c8ce.esm.js';
7
7
  import { useApp } from '@backstage/core-plugin-api';
8
8
  import 'zen-observable';
9
9
  import '@backstage/catalog-model';
10
10
  import 'lodash';
11
11
  import '@backstage/integration-react';
12
+ import '@backstage/plugin-scaffolder-common';
13
+ import '@material-ui/icons/AddCircleOutline';
12
14
  import '@material-ui/icons/Cached';
13
15
  import '@material-ui/icons/Description';
14
16
  import '@material-ui/icons/Edit';
@@ -93,4 +95,4 @@ const EntityLinksCard = (props) => {
93
95
  };
94
96
 
95
97
  export { EntityLinksCard };
96
- //# sourceMappingURL=index-1c47c3d8.esm.js.map
98
+ //# sourceMappingURL=index-6411af49.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-1c47c3d8.esm.js","sources":["../../src/components/EntityLinksCard/EntityLinksEmptyState.tsx","../../src/components/EntityLinksCard/EntityLinksCard.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BackstageTheme } from '@backstage/theme';\nimport { Button, makeStyles, Typography } from '@material-ui/core';\nimport React from 'react';\nimport { CodeSnippet } from '@backstage/core-components';\n\nconst ENTITY_YAML = `metadata:\n name: example\n links:\n - url: https://dashboard.example.com\n title: My Dashboard\n icon: dashboard`;\n\n/** @public */\nexport type EntityLinksEmptyStateClassKey = 'code';\n\nconst useStyles = makeStyles<BackstageTheme>(\n theme => ({\n code: {\n borderRadius: 6,\n margin: `${theme.spacing(2)}px 0px`,\n background:\n theme.palette.type === 'dark' ? '#444' : theme.palette.common.white,\n },\n }),\n { name: 'PluginCatalogEntityLinksEmptyState' },\n);\n\nexport function EntityLinksEmptyState() {\n const classes = useStyles();\n\n return (\n <>\n <Typography variant=\"body1\">\n No links defined for this entity. You can add links to your entity YAML\n as shown in the highlighted example below:\n </Typography>\n <div className={classes.code}>\n <CodeSnippet\n text={ENTITY_YAML}\n language=\"yaml\"\n showLineNumbers\n highlightedNumbers={[3, 4, 5, 6]}\n customStyle={{ background: 'inherit', fontSize: '115%' }}\n />\n </div>\n <Button\n variant=\"contained\"\n color=\"primary\"\n target=\"_blank\"\n href=\"https://backstage.io/docs/features/software-catalog/descriptor-format#links-optional\"\n >\n Read more\n </Button>\n </>\n );\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport LanguageIcon from '@material-ui/icons/Language';\nimport React from 'react';\nimport { EntityLinksEmptyState } from './EntityLinksEmptyState';\nimport { LinksGridList } from './LinksGridList';\nimport { ColumnBreakpoints } from './types';\nimport { IconComponent, useApp } from '@backstage/core-plugin-api';\nimport { InfoCard, InfoCardVariants } from '@backstage/core-components';\n\n/** @public */\nexport interface EntityLinksCardProps {\n cols?: ColumnBreakpoints | number;\n variant?: InfoCardVariants;\n}\n\nexport const EntityLinksCard = (props: EntityLinksCardProps) => {\n const { cols = undefined, variant } = props;\n const { entity } = useEntity();\n const app = useApp();\n\n const iconResolver = (key?: string): IconComponent =>\n key ? app.getSystemIcon(key) ?? LanguageIcon : LanguageIcon;\n\n const links = entity?.metadata?.links;\n\n return (\n <InfoCard title=\"Links\" variant={variant}>\n {!links || links.length === 0 ? (\n <EntityLinksEmptyState />\n ) : (\n <LinksGridList\n cols={cols}\n items={links.map(({ url, title, icon }) => ({\n text: title ?? url,\n href: url,\n Icon: iconResolver(icon),\n }))}\n />\n )}\n </InfoCard>\n );\n};\n"],"names":["_a"],"mappings":"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"}
1
+ {"version":3,"file":"index-6411af49.esm.js","sources":["../../src/components/EntityLinksCard/EntityLinksEmptyState.tsx","../../src/components/EntityLinksCard/EntityLinksCard.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BackstageTheme } from '@backstage/theme';\nimport { Button, makeStyles, Typography } from '@material-ui/core';\nimport React from 'react';\nimport { CodeSnippet } from '@backstage/core-components';\n\nconst ENTITY_YAML = `metadata:\n name: example\n links:\n - url: https://dashboard.example.com\n title: My Dashboard\n icon: dashboard`;\n\n/** @public */\nexport type EntityLinksEmptyStateClassKey = 'code';\n\nconst useStyles = makeStyles<BackstageTheme>(\n theme => ({\n code: {\n borderRadius: 6,\n margin: `${theme.spacing(2)}px 0px`,\n background:\n theme.palette.type === 'dark' ? '#444' : theme.palette.common.white,\n },\n }),\n { name: 'PluginCatalogEntityLinksEmptyState' },\n);\n\nexport function EntityLinksEmptyState() {\n const classes = useStyles();\n\n return (\n <>\n <Typography variant=\"body1\">\n No links defined for this entity. You can add links to your entity YAML\n as shown in the highlighted example below:\n </Typography>\n <div className={classes.code}>\n <CodeSnippet\n text={ENTITY_YAML}\n language=\"yaml\"\n showLineNumbers\n highlightedNumbers={[3, 4, 5, 6]}\n customStyle={{ background: 'inherit', fontSize: '115%' }}\n />\n </div>\n <Button\n variant=\"contained\"\n color=\"primary\"\n target=\"_blank\"\n href=\"https://backstage.io/docs/features/software-catalog/descriptor-format#links-optional\"\n >\n Read more\n </Button>\n </>\n );\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport LanguageIcon from '@material-ui/icons/Language';\nimport React from 'react';\nimport { EntityLinksEmptyState } from './EntityLinksEmptyState';\nimport { LinksGridList } from './LinksGridList';\nimport { ColumnBreakpoints } from './types';\nimport { IconComponent, useApp } from '@backstage/core-plugin-api';\nimport { InfoCard, InfoCardVariants } from '@backstage/core-components';\n\n/** @public */\nexport interface EntityLinksCardProps {\n cols?: ColumnBreakpoints | number;\n variant?: InfoCardVariants;\n}\n\nexport const EntityLinksCard = (props: EntityLinksCardProps) => {\n const { cols = undefined, variant } = props;\n const { entity } = useEntity();\n const app = useApp();\n\n const iconResolver = (key?: string): IconComponent =>\n key ? app.getSystemIcon(key) ?? LanguageIcon : LanguageIcon;\n\n const links = entity?.metadata?.links;\n\n return (\n <InfoCard title=\"Links\" variant={variant}>\n {!links || links.length === 0 ? (\n <EntityLinksEmptyState />\n ) : (\n <LinksGridList\n cols={cols}\n items={links.map(({ url, title, icon }) => ({\n text: title ?? url,\n href: url,\n Icon: iconResolver(icon),\n }))}\n />\n )}\n </InfoCard>\n );\n};\n"],"names":["_a"],"mappings":"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"}
@@ -3,13 +3,15 @@ import { useOutlet } from 'react-router-dom';
3
3
  import { PageWithHeader, Content, ContentHeader, CreateButton, SupportButton } from '@backstage/core-components';
4
4
  import { useApi, configApiRef, useRouteRef } from '@backstage/core-plugin-api';
5
5
  import { EntityListProvider, CatalogFilterLayout, EntityKindPicker, EntityTypePicker, UserListPicker, EntityOwnerPicker, EntityLifecyclePicker, EntityTagPicker, EntityProcessingStatusPicker, EntityNamespacePicker } from '@backstage/plugin-catalog-react';
6
- import { c as createComponentRouteRef, C as CatalogTable } from './index-06f6e8ce.esm.js';
6
+ import { c as createComponentRouteRef, C as CatalogTable } from './index-ccf4c8ce.esm.js';
7
7
  import { usePluginOptions } from '@backstage/core-plugin-api/alpha';
8
8
  import 'zen-observable';
9
9
  import '@backstage/catalog-model';
10
10
  import 'lodash';
11
11
  import '@backstage/integration-react';
12
+ import '@backstage/plugin-scaffolder-common';
12
13
  import '@material-ui/core';
14
+ import '@material-ui/icons/AddCircleOutline';
13
15
  import '@material-ui/icons/Cached';
14
16
  import '@material-ui/icons/Description';
15
17
  import '@material-ui/icons/Edit';
@@ -41,7 +43,8 @@ function DefaultCatalogPage(props) {
41
43
  initiallySelectedFilter = "owned",
42
44
  initialKind = "component",
43
45
  tableOptions = {},
44
- emptyContent
46
+ emptyContent,
47
+ ownerPickerMode
45
48
  } = props;
46
49
  const orgName = (_a = useApi(configApiRef).getOptionalString("organization.name")) != null ? _a : "Backstage";
47
50
  const createComponentLink = useRouteRef(createComponentRouteRef);
@@ -52,7 +55,7 @@ function DefaultCatalogPage(props) {
52
55
  title: createButtonTitle,
53
56
  to: createComponentLink && createComponentLink()
54
57
  }
55
- ), /* @__PURE__ */ React.createElement(SupportButton, null, "All your software catalog entities")), /* @__PURE__ */ React.createElement(EntityListProvider, null, /* @__PURE__ */ React.createElement(CatalogFilterLayout, null, /* @__PURE__ */ React.createElement(CatalogFilterLayout.Filters, null, /* @__PURE__ */ React.createElement(EntityKindPicker, { initialFilter: initialKind }), /* @__PURE__ */ React.createElement(EntityTypePicker, null), /* @__PURE__ */ React.createElement(UserListPicker, { initialFilter: initiallySelectedFilter }), /* @__PURE__ */ React.createElement(EntityOwnerPicker, null), /* @__PURE__ */ React.createElement(EntityLifecyclePicker, null), /* @__PURE__ */ React.createElement(EntityTagPicker, null), /* @__PURE__ */ React.createElement(EntityProcessingStatusPicker, null), /* @__PURE__ */ React.createElement(EntityNamespacePicker, null)), /* @__PURE__ */ React.createElement(CatalogFilterLayout.Content, null, /* @__PURE__ */ React.createElement(
58
+ ), /* @__PURE__ */ React.createElement(SupportButton, null, "All your software catalog entities")), /* @__PURE__ */ React.createElement(EntityListProvider, null, /* @__PURE__ */ React.createElement(CatalogFilterLayout, null, /* @__PURE__ */ React.createElement(CatalogFilterLayout.Filters, null, /* @__PURE__ */ React.createElement(EntityKindPicker, { initialFilter: initialKind }), /* @__PURE__ */ React.createElement(EntityTypePicker, null), /* @__PURE__ */ React.createElement(UserListPicker, { initialFilter: initiallySelectedFilter }), /* @__PURE__ */ React.createElement(EntityOwnerPicker, { mode: ownerPickerMode }), /* @__PURE__ */ React.createElement(EntityLifecyclePicker, null), /* @__PURE__ */ React.createElement(EntityTagPicker, null), /* @__PURE__ */ React.createElement(EntityProcessingStatusPicker, null), /* @__PURE__ */ React.createElement(EntityNamespacePicker, null)), /* @__PURE__ */ React.createElement(CatalogFilterLayout.Content, null, /* @__PURE__ */ React.createElement(
56
59
  CatalogTable,
57
60
  {
58
61
  columns,
@@ -69,4 +72,4 @@ function CatalogPage(props) {
69
72
  }
70
73
 
71
74
  export { CatalogPage, DefaultCatalogPage };
72
- //# sourceMappingURL=index-41f94bc9.esm.js.map
75
+ //# sourceMappingURL=index-b4281d3b.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-b4281d3b.esm.js","sources":["../../src/options.ts","../../src/components/CatalogPage/DefaultCatalogPage.tsx","../../src/components/CatalogPage/CatalogPage.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { usePluginOptions } from '@backstage/core-plugin-api/alpha';\n\nexport type CatalogPluginOptions = {\n createButtonTitle: string;\n};\n\n/** @ignore */\nexport type CatalogInputPluginOptions = {\n createButtonTitle: string;\n};\n\nexport const useCatalogPluginOptions = () =>\n usePluginOptions<CatalogPluginOptions>();\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 {\n Content,\n ContentHeader,\n CreateButton,\n PageWithHeader,\n SupportButton,\n TableColumn,\n TableProps,\n} from '@backstage/core-components';\nimport { configApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport {\n CatalogFilterLayout,\n EntityLifecyclePicker,\n EntityListProvider,\n EntityProcessingStatusPicker,\n EntityOwnerPicker,\n EntityTagPicker,\n EntityTypePicker,\n UserListFilterKind,\n UserListPicker,\n EntityKindPicker,\n EntityNamespacePicker,\n EntityOwnerPickerProps,\n} from '@backstage/plugin-catalog-react';\nimport React, { ReactNode } from 'react';\nimport { createComponentRouteRef } from '../../routes';\nimport { CatalogTable, CatalogTableRow } from '../CatalogTable';\nimport { useCatalogPluginOptions } from '../../options';\n\n/**\n * Props for root catalog pages.\n *\n * @public\n */\nexport interface DefaultCatalogPageProps {\n initiallySelectedFilter?: UserListFilterKind;\n columns?: TableColumn<CatalogTableRow>[];\n actions?: TableProps<CatalogTableRow>['actions'];\n initialKind?: string;\n tableOptions?: TableProps<CatalogTableRow>['options'];\n emptyContent?: ReactNode;\n ownerPickerMode?: EntityOwnerPickerProps['mode'];\n}\n\nexport function DefaultCatalogPage(props: DefaultCatalogPageProps) {\n const {\n columns,\n actions,\n initiallySelectedFilter = 'owned',\n initialKind = 'component',\n tableOptions = {},\n emptyContent,\n ownerPickerMode,\n } = props;\n const orgName =\n useApi(configApiRef).getOptionalString('organization.name') ?? 'Backstage';\n const createComponentLink = useRouteRef(createComponentRouteRef);\n\n const { createButtonTitle } = useCatalogPluginOptions();\n\n return (\n <PageWithHeader title={`${orgName} Catalog`} themeId=\"home\">\n <Content>\n <ContentHeader title=\"\">\n <CreateButton\n title={createButtonTitle}\n to={createComponentLink && createComponentLink()}\n />\n <SupportButton>All your software catalog entities</SupportButton>\n </ContentHeader>\n <EntityListProvider>\n <CatalogFilterLayout>\n <CatalogFilterLayout.Filters>\n <EntityKindPicker initialFilter={initialKind} />\n <EntityTypePicker />\n <UserListPicker initialFilter={initiallySelectedFilter} />\n <EntityOwnerPicker mode={ownerPickerMode} />\n <EntityLifecyclePicker />\n <EntityTagPicker />\n <EntityProcessingStatusPicker />\n <EntityNamespacePicker />\n </CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>\n <CatalogTable\n columns={columns}\n actions={actions}\n tableOptions={tableOptions}\n emptyContent={emptyContent}\n />\n </CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n </EntityListProvider>\n </Content>\n </PageWithHeader>\n );\n}\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { useOutlet } from 'react-router-dom';\nimport {\n DefaultCatalogPage,\n DefaultCatalogPageProps,\n} from './DefaultCatalogPage';\n\nexport function CatalogPage(props: DefaultCatalogPageProps) {\n const outlet = useOutlet();\n\n return outlet || <DefaultCatalogPage {...props} />;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2Ba,MAAA,uBAAA,GAA0B,MACrC,gBAAuC,EAAA;;ACgClC,SAAS,mBAAmB,KAAgC,EAAA;AA5DnE,EAAA,IAAA,EAAA,CAAA;AA6DE,EAAM,MAAA;AAAA,IACJ,OAAA;AAAA,IACA,OAAA;AAAA,IACA,uBAA0B,GAAA,OAAA;AAAA,IAC1B,WAAc,GAAA,WAAA;AAAA,IACd,eAAe,EAAC;AAAA,IAChB,YAAA;AAAA,IACA,eAAA;AAAA,GACE,GAAA,KAAA,CAAA;AACJ,EAAA,MAAM,WACJ,EAAO,GAAA,MAAA,CAAA,YAAY,EAAE,iBAAkB,CAAA,mBAAmB,MAA1D,IAA+D,GAAA,EAAA,GAAA,WAAA,CAAA;AACjE,EAAM,MAAA,mBAAA,GAAsB,YAAY,uBAAuB,CAAA,CAAA;AAE/D,EAAM,MAAA,EAAE,iBAAkB,EAAA,GAAI,uBAAwB,EAAA,CAAA;AAEtD,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,cAAA,EAAA,EAAe,KAAO,EAAA,CAAA,EAAG,OAAmB,CAAA,QAAA,CAAA,EAAA,OAAA,EAAQ,MACnD,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,OACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,aAAc,EAAA,EAAA,KAAA,EAAM,EACnB,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA,iBAAA;AAAA,MACP,EAAA,EAAI,uBAAuB,mBAAoB,EAAA;AAAA,KAAA;AAAA,GACjD,sCACC,aAAc,EAAA,IAAA,EAAA,oCAAkC,CACnD,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,kBACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,mBACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,oBAAoB,OAApB,EAAA,IAAA,sCACE,gBAAiB,EAAA,EAAA,aAAA,EAAe,aAAa,CAC9C,kBAAA,KAAA,CAAA,aAAA,CAAC,gBAAiB,EAAA,IAAA,CAAA,kBACjB,KAAA,CAAA,aAAA,CAAA,cAAA,EAAA,EAAe,eAAe,uBAAyB,EAAA,CAAA,sCACvD,iBAAkB,EAAA,EAAA,IAAA,EAAM,iBAAiB,CAC1C,kBAAA,KAAA,CAAA,aAAA,CAAC,qBAAsB,EAAA,IAAA,CAAA,kBACtB,KAAA,CAAA,aAAA,CAAA,eAAA,EAAA,IAAgB,mBAChB,KAAA,CAAA,aAAA,CAAA,4BAAA,EAAA,IAA6B,mBAC7B,KAAA,CAAA,aAAA,CAAA,qBAAA,EAAA,IAAsB,CACzB,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,mBAAoB,CAAA,OAAA,EAApB,IACC,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,OAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,KAAA;AAAA,GAEJ,CACF,CACF,CACF,CACF,CAAA,CAAA;AAEJ;;ACxFO,SAAS,YAAY,KAAgC,EAAA;AAC1D,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AAEzB,EAAA,OAAO,MAAU,oBAAA,KAAA,CAAA,aAAA,CAAC,kBAAoB,EAAA,EAAA,GAAG,KAAO,EAAA,CAAA,CAAA;AAClD;;;;"}
@@ -1,4 +1,4 @@
1
- export { E as EntityLabelsCard, h as hasLabels } from './index-06f6e8ce.esm.js';
1
+ export { E as EntityLabelsCard, h as hasLabels } from './index-ccf4c8ce.esm.js';
2
2
  import 'zen-observable';
3
3
  import '@backstage/catalog-model';
4
4
  import 'lodash';
@@ -6,7 +6,9 @@ import '@backstage/core-components';
6
6
  import '@backstage/core-plugin-api';
7
7
  import '@backstage/integration-react';
8
8
  import '@backstage/plugin-catalog-react';
9
+ import '@backstage/plugin-scaffolder-common';
9
10
  import '@material-ui/core';
11
+ import '@material-ui/icons/AddCircleOutline';
10
12
  import '@material-ui/icons/Cached';
11
13
  import '@material-ui/icons/Description';
12
14
  import '@material-ui/icons/Edit';
@@ -29,4 +31,4 @@ import '@material-ui/icons/Cancel';
29
31
  import '@backstage/errors';
30
32
  import '@backstage/catalog-client';
31
33
  import '@backstage/plugin-search-react';
32
- //# sourceMappingURL=index-37b55325.esm.js.map
34
+ //# sourceMappingURL=index-bd952212.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-bd952212.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -2,10 +2,12 @@ import ObservableImpl from 'zen-observable';
2
2
  import { stringifyEntityRef, RELATION_PART_OF, RELATION_OWNED_BY, getEntitySourceLocation, ANNOTATION_EDIT_URL, DEFAULT_NAMESPACE, ANNOTATION_LOCATION, ANNOTATION_VIEW_URL } from '@backstage/catalog-model';
3
3
  import { isArray, isString, capitalize } from 'lodash';
4
4
  import { Link, MarkdownContent, HeaderIconLinkRow, OverflowTooltip, WarningPanel, CodeSnippet, Table, Page, Header, Progress, RoutedTabs, Content, HeaderLabel, ResponseErrorPanel, InfoCard } from '@backstage/core-components';
5
- import { createExternalRouteRef, createRouteRef, useElementFilter, useApi, alertApiRef, errorApiRef, useRouteRef, attachComponentData, useRouteRefParams, useApiHolder, createPlugin, createApiFactory, discoveryApiRef, fetchApiRef, storageApiRef, createRoutableExtension, createComponentExtension } from '@backstage/core-plugin-api';
5
+ import { createExternalRouteRef, createRouteRef, useElementFilter, useApp, useApi, alertApiRef, errorApiRef, useRouteRef, attachComponentData, useRouteRefParams, useApiHolder, createPlugin, createApiFactory, discoveryApiRef, fetchApiRef, storageApiRef, createRoutableExtension, createComponentExtension } from '@backstage/core-plugin-api';
6
6
  import { scmIntegrationsApiRef, ScmIntegrationIcon } from '@backstage/integration-react';
7
7
  import { getEntityRelations, EntityRefLinks, useEntity, catalogApiRef, getEntitySourceLocation as getEntitySourceLocation$1, useEntityList, EntityKindFilter, EntityRefLink, humanizeEntityRef, useStarredEntities, entityRouteRef, useAsyncEntity, UnregisterEntityDialog, InspectEntityDialog, FavoriteEntity, CatalogFilterLayout, starredEntitiesApiRef } from '@backstage/plugin-catalog-react';
8
+ import { isTemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';
8
9
  import { makeStyles, Typography, Grid, Box, useMediaQuery, ImageList, ImageListItem, Chip, Card, CardHeader, IconButton, Divider, CardContent, createStyles, Select, InputBase, MenuItem, ListItemIcon, ListItemText, Tooltip, Popover, MenuList, Dialog, DialogTitle, DialogActions, Button } from '@material-ui/core';
10
+ import CreateComponentIcon from '@material-ui/icons/AddCircleOutline';
9
11
  import CachedIcon from '@material-ui/icons/Cached';
10
12
  import DocsIcon from '@material-ui/icons/Description';
11
13
  import EditIcon from '@material-ui/icons/Edit';
@@ -103,6 +105,11 @@ const viewTechDocRouteRef = createExternalRouteRef({
103
105
  optional: true,
104
106
  params: ["namespace", "kind", "name"]
105
107
  });
108
+ const createFromTemplateRouteRef = createExternalRouteRef({
109
+ id: "create-from-template",
110
+ optional: true,
111
+ params: ["namespace", "templateName"]
112
+ });
106
113
  const rootRouteRef = createRouteRef({
107
114
  id: "catalog"
108
115
  });
@@ -344,8 +351,9 @@ const useStyles$4 = makeStyles({
344
351
  }
345
352
  });
346
353
  function AboutCard(props) {
347
- var _a, _b, _c;
354
+ var _a, _b, _c, _d;
348
355
  const { variant } = props;
356
+ const app = useApp();
349
357
  const classes = useStyles$4();
350
358
  const { entity } = useEntity();
351
359
  const scmIntegrationsApi = useApi(scmIntegrationsApiRef);
@@ -353,6 +361,7 @@ function AboutCard(props) {
353
361
  const alertApi = useApi(alertApiRef);
354
362
  const errorApi = useApi(errorApiRef);
355
363
  const viewTechdocLink = useRouteRef(viewTechDocRouteRef);
364
+ const templateRoute = useRouteRef(createFromTemplateRouteRef);
356
365
  const entitySourceLocation = getEntitySourceLocation$1(
357
366
  entity,
358
367
  scmIntegrationsApi
@@ -374,6 +383,20 @@ function AboutCard(props) {
374
383
  name: entity.metadata.name
375
384
  })
376
385
  };
386
+ const subHeaderLinks = [viewInSource, viewInTechDocs];
387
+ if (isTemplateEntityV1beta3(entity)) {
388
+ const Icon = (_c = app.getSystemIcon("scaffolder")) != null ? _c : CreateComponentIcon;
389
+ const launchTemplate = {
390
+ label: "Launch Template",
391
+ icon: /* @__PURE__ */ React.createElement(Icon, null),
392
+ disabled: !templateRoute,
393
+ href: templateRoute && templateRoute({
394
+ templateName: entity.metadata.name,
395
+ namespace: entity.metadata.namespace || DEFAULT_NAMESPACE
396
+ })
397
+ };
398
+ subHeaderLinks.push(launchTemplate);
399
+ }
377
400
  let cardClass = "";
378
401
  if (variant === "gridItem") {
379
402
  cardClass = classes.gridItemCard;
@@ -386,7 +409,7 @@ function AboutCard(props) {
386
409
  } else if (variant === "fullHeight") {
387
410
  cardContentClass = classes.fullHeightCardContent;
388
411
  }
389
- const entityLocation = (_c = entity.metadata.annotations) == null ? void 0 : _c[ANNOTATION_LOCATION];
412
+ const entityLocation = (_d = entity.metadata.annotations) == null ? void 0 : _d[ANNOTATION_LOCATION];
390
413
  const allowRefresh = (entityLocation == null ? void 0 : entityLocation.startsWith("url:")) || (entityLocation == null ? void 0 : entityLocation.startsWith("file:"));
391
414
  const refreshEntity = useCallback(async () => {
392
415
  try {
@@ -419,7 +442,7 @@ function AboutCard(props) {
419
442
  },
420
443
  /* @__PURE__ */ React.createElement(EditIcon, null)
421
444
  )),
422
- subheader: /* @__PURE__ */ React.createElement(HeaderIconLinkRow, { links: [viewInSource, viewInTechDocs] })
445
+ subheader: /* @__PURE__ */ React.createElement(HeaderIconLinkRow, { links: subHeaderLinks })
423
446
  }
424
447
  ), /* @__PURE__ */ React.createElement(Divider, null), /* @__PURE__ */ React.createElement(CardContent, { className: cardContentClass }, /* @__PURE__ */ React.createElement(AboutContent, { entity })));
425
448
  }
@@ -684,7 +707,7 @@ const refCompare = (a, b) => {
684
707
  return toRef(a).localeCompare(toRef(b));
685
708
  };
686
709
  const CatalogTable = (props) => {
687
- var _a, _b, _c;
710
+ var _a, _b, _c, _d, _e;
688
711
  const { columns, actions, tableOptions, subtitle, emptyContent } = props;
689
712
  const { isStarredEntity, toggleStarredEntity } = useStarredEntities();
690
713
  const { loading, error, entities, filters } = useEntityList();
@@ -807,6 +830,9 @@ const CatalogTable = (props) => {
807
830
  typeColumn.hidden = !showTypeColumn;
808
831
  }
809
832
  const showPagination = rows.length > 20;
833
+ const currentKind = ((_d = filters.kind) == null ? void 0 : _d.value) || "";
834
+ const currentType = ((_e = filters.type) == null ? void 0 : _e.value) || "";
835
+ const titleDisplay = [titlePreamble, currentType, pluralize(currentKind)].filter((s) => s).join(" ");
810
836
  return /* @__PURE__ */ React.createElement(
811
837
  Table,
812
838
  {
@@ -822,7 +848,7 @@ const CatalogTable = (props) => {
822
848
  pageSizeOptions: [20, 50, 100],
823
849
  ...tableOptions
824
850
  },
825
- title: `${titlePreamble} (${entities.length})`,
851
+ title: `${titleDisplay} (${entities.length})`,
826
852
  data: rows,
827
853
  actions: actions || defaultActions,
828
854
  subtitle,
@@ -938,7 +964,7 @@ function EntityContextMenu(props) {
938
964
  transformOrigin: { vertical: "top", horizontal: "right" },
939
965
  "aria-labelledby": "long-menu"
940
966
  },
941
- /* @__PURE__ */ React.createElement(MenuList, null, extraItems, /* @__PURE__ */ React.createElement(
967
+ /* @__PURE__ */ React.createElement(MenuList, { autoFocusItem: Boolean(anchorEl) }, extraItems, /* @__PURE__ */ React.createElement(
942
968
  UnregisterEntity,
943
969
  {
944
970
  unregisterEntityOptions: UNSTABLE_contextMenuOptions,
@@ -1441,7 +1467,8 @@ const catalogPlugin = createPlugin({
1441
1467
  },
1442
1468
  externalRoutes: {
1443
1469
  createComponent: createComponentRouteRef,
1444
- viewTechDoc: viewTechDocRouteRef
1470
+ viewTechDoc: viewTechDocRouteRef,
1471
+ createFromTemplate: createFromTemplateRouteRef
1445
1472
  },
1446
1473
  __experimentalConfigure(options) {
1447
1474
  const defaultOptions = {
@@ -1453,7 +1480,7 @@ const catalogPlugin = createPlugin({
1453
1480
  const CatalogIndexPage = catalogPlugin.provide(
1454
1481
  createRoutableExtension({
1455
1482
  name: "CatalogIndexPage",
1456
- component: () => import('./index-41f94bc9.esm.js').then((m) => m.CatalogPage),
1483
+ component: () => import('./index-b4281d3b.esm.js').then((m) => m.CatalogPage),
1457
1484
  mountPoint: rootRouteRef
1458
1485
  })
1459
1486
  );
@@ -1468,7 +1495,7 @@ const EntityAboutCard = catalogPlugin.provide(
1468
1495
  createComponentExtension({
1469
1496
  name: "EntityAboutCard",
1470
1497
  component: {
1471
- lazy: () => import('./index-6391c20c.esm.js').then((m) => m.AboutCard)
1498
+ lazy: () => import('./index-27cd41d3.esm.js').then((m) => m.AboutCard)
1472
1499
  }
1473
1500
  })
1474
1501
  );
@@ -1476,7 +1503,7 @@ const EntityLinksCard = catalogPlugin.provide(
1476
1503
  createComponentExtension({
1477
1504
  name: "EntityLinksCard",
1478
1505
  component: {
1479
- lazy: () => import('./index-1c47c3d8.esm.js').then((m) => m.EntityLinksCard)
1506
+ lazy: () => import('./index-6411af49.esm.js').then((m) => m.EntityLinksCard)
1480
1507
  }
1481
1508
  })
1482
1509
  );
@@ -1484,7 +1511,7 @@ const EntityLabelsCard = catalogPlugin.provide(
1484
1511
  createComponentExtension({
1485
1512
  name: "EntityLabelsCard",
1486
1513
  component: {
1487
- lazy: () => import('./index-37b55325.esm.js').then((m) => m.EntityLabelsCard)
1514
+ lazy: () => import('./index-bd952212.esm.js').then((m) => m.EntityLabelsCard)
1488
1515
  }
1489
1516
  })
1490
1517
  );
@@ -1573,4 +1600,4 @@ const CatalogSearchResultListItem = catalogPlugin.provide(
1573
1600
  );
1574
1601
 
1575
1602
  export { AboutCard as A, isNamespace as B, CatalogTable as C, DefaultStarredEntitiesApi as D, EntityLabelsCard$1 as E, isComponentType as F, isResourceType as G, isEntityWith as H, FilteredEntityLayout as I, FilterContainer as J, EntityListContainer as K, LinksGridList as L, RelatedEntitiesCard as R, AboutContent as a, AboutField as b, createComponentRouteRef as c, CatalogEntityPage as d, CatalogIndexPage as e, catalogPlugin as f, EntityAboutCard as g, hasLabels as h, EntityDependencyOfComponentsCard as i, EntityDependsOnComponentsCard as j, EntityDependsOnResourcesCard as k, EntityHasComponentsCard as l, EntityHasResourcesCard as m, EntityHasSubcomponentsCard as n, EntityHasSystemsCard as o, EntityLinksCard as p, EntityLabelsCard as q, CatalogSearchResultListItem as r, CatalogKindHeader as s, EntityLayout as t, EntityOrphanWarning as u, isOrphan as v, EntityProcessingErrorsPanel as w, hasCatalogProcessingErrors as x, EntitySwitch as y, isKind as z };
1576
- //# sourceMappingURL=index-06f6e8ce.esm.js.map
1603
+ //# sourceMappingURL=index-ccf4c8ce.esm.js.map