@backstage/plugin-catalog 1.32.0-next.1 → 1.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # @backstage/plugin-catalog
2
2
 
3
+ ## 1.32.0
4
+
5
+ ### Minor Changes
6
+
7
+ - a521911: Add support for customizable icons in `SearchResultListItemBlueprint` and related components
8
+
9
+ ### Patch Changes
10
+
11
+ - b500bcc: Fix React warnings for elements not having stable keys.
12
+ - a87c0a5: Fixed responsiveness issues with catalog entity content layout using the new frontend system.
13
+ - aff04d3: Fixed missing margins for entity warning content area on catalog entity page in NFS.
14
+ - Updated dependencies
15
+ - @backstage/frontend-plugin-api@0.13.0
16
+ - @backstage/core-compat-api@0.5.4
17
+ - @backstage/plugin-search-react@1.10.0
18
+ - @backstage/plugin-catalog-react@1.21.3
19
+ - @backstage/core-components@0.18.3
20
+ - @backstage/core-plugin-api@1.12.0
21
+ - @backstage/plugin-permission-react@0.4.38
22
+ - @backstage/catalog-model@1.7.6
23
+ - @backstage/plugin-techdocs-react@1.3.5
24
+ - @backstage/catalog-client@1.12.1
25
+ - @backstage/integration-react@1.2.12
26
+ - @backstage/plugin-catalog-common@1.1.7
27
+ - @backstage/plugin-scaffolder-common@1.7.3
28
+ - @backstage/plugin-search-common@1.2.21
29
+
3
30
  ## 1.32.0-next.1
4
31
 
5
32
  ### Minor Changes
@@ -1,5 +1,5 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
- import Grid from '@material-ui/core/Grid';
2
+ import { Fragment as Fragment$1 } from 'react';
3
3
  import { makeStyles } from '@material-ui/core/styles';
4
4
  import { EntitySwitch } from '../components/EntitySwitch/EntitySwitch.esm.js';
5
5
  import { isOrphan, EntityOrphanWarning } from '../components/EntityOrphanWarning/EntityOrphanWarning.esm.js';
@@ -13,6 +13,16 @@ const useStyles = makeStyles((theme) => ({
13
13
  flexFlow: "column nowrap",
14
14
  gap: theme.spacing(3)
15
15
  },
16
+ warningArea: {
17
+ display: "flex",
18
+ flexDirection: "column",
19
+ gap: theme.spacing(2),
20
+ marginBottom: theme.spacing(3),
21
+ "&:empty": {
22
+ marginBottom: 0,
23
+ display: "none"
24
+ }
25
+ },
16
26
  mainContent: {
17
27
  display: "flex",
18
28
  flexFlow: "column",
@@ -23,7 +33,7 @@ const useStyles = makeStyles((theme) => ({
23
33
  infoArea: {
24
34
  display: "flex",
25
35
  flexFlow: "column nowrap",
26
- alignItems: "flex-start",
36
+ alignItems: "stretch",
27
37
  gap: theme.spacing(3),
28
38
  minWidth: 0,
29
39
  "& > *": {
@@ -33,11 +43,12 @@ const useStyles = makeStyles((theme) => ({
33
43
  },
34
44
  summaryArea: {
35
45
  minWidth: 0,
36
- margin: theme.spacing(1.5)
46
+ margin: theme.spacing(1)
37
47
  // To counteract MUI negative grid margin
38
48
  },
39
49
  summaryCard: {
40
50
  flex: "0 0 auto",
51
+ width: "100%",
41
52
  "& + &": {
42
53
  marginLeft: theme.spacing(3)
43
54
  }
@@ -68,7 +79,8 @@ const useStyles = makeStyles((theme) => ({
68
79
  },
69
80
  summaryArea: {
70
81
  gridArea: "summary",
71
- marginBottom: theme.spacing(3)
82
+ margin: theme.spacing(1)
83
+ // To counteract MUI negative grid margin
72
84
  },
73
85
  infoArea: {
74
86
  gridArea: "info",
@@ -88,14 +100,12 @@ const useStyles = makeStyles((theme) => ({
88
100
  "&::-webkit-scrollbar": {
89
101
  display: "none"
90
102
  }
103
+ },
104
+ summaryCard: {
105
+ width: "auto"
91
106
  }
92
107
  }
93
108
  }));
94
- const entityWarningContent = /* @__PURE__ */ jsxs(Fragment, { children: [
95
- /* @__PURE__ */ jsx(EntitySwitch, { children: /* @__PURE__ */ jsx(EntitySwitch.Case, { if: isOrphan, children: /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(EntityOrphanWarning, {}) }) }) }),
96
- /* @__PURE__ */ jsx(EntitySwitch, { children: /* @__PURE__ */ jsx(EntitySwitch.Case, { if: hasRelationWarnings, children: /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(EntityRelationWarning, {}) }) }) }),
97
- /* @__PURE__ */ jsx(EntitySwitch, { children: /* @__PURE__ */ jsx(EntitySwitch.Case, { if: hasCatalogProcessingErrors, children: /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(EntityProcessingErrorsPanel, {}) }) }) })
98
- ] });
99
109
  function DefaultEntityContentLayout(props) {
100
110
  const { cards } = props;
101
111
  const infoCards = cards.filter((card) => card.type === "info");
@@ -109,12 +119,23 @@ function DefaultEntityContentLayout(props) {
109
119
  contentCards: !!contentCards.length
110
120
  });
111
121
  return /* @__PURE__ */ jsxs(Fragment, { children: [
112
- entityWarningContent,
122
+ /* @__PURE__ */ jsxs("div", { className: classes.warningArea, children: [
123
+ /* @__PURE__ */ jsx(EntitySwitch, { children: /* @__PURE__ */ jsx(EntitySwitch.Case, { if: isOrphan, children: /* @__PURE__ */ jsx(EntityOrphanWarning, {}) }) }),
124
+ /* @__PURE__ */ jsx(EntitySwitch, { children: /* @__PURE__ */ jsx(EntitySwitch.Case, { if: hasRelationWarnings, children: /* @__PURE__ */ jsx(EntityRelationWarning, {}) }) }),
125
+ /* @__PURE__ */ jsx(EntitySwitch, { children: /* @__PURE__ */ jsx(EntitySwitch.Case, { if: hasCatalogProcessingErrors, children: /* @__PURE__ */ jsx(EntityProcessingErrorsPanel, {}) }) })
126
+ ] }),
113
127
  /* @__PURE__ */ jsxs("div", { className: classes.root, children: [
114
- infoCards.length > 0 ? /* @__PURE__ */ jsx("div", { className: classes.infoArea, children: infoCards.map((card) => card.element) }) : null,
128
+ infoCards.length > 0 ? /* @__PURE__ */ jsx("div", { className: classes.infoArea, children: infoCards.map((card, index) => /* @__PURE__ */ jsx(Fragment$1, { children: card.element }, card.element.key ?? index)) }) : null,
115
129
  /* @__PURE__ */ jsxs("div", { className: classes.mainContent, children: [
116
- summaryCards.length > 0 ? /* @__PURE__ */ jsx("div", { className: classes.summaryArea, children: /* @__PURE__ */ jsx(HorizontalScrollGrid, { scrollStep: 400, scrollSpeed: 100, children: summaryCards.map((card) => /* @__PURE__ */ jsx("div", { className: classes.summaryCard, children: card.element })) }) }) : null,
117
- contentCards.length > 0 ? /* @__PURE__ */ jsx("div", { className: classes.contentArea, children: contentCards.map((card) => card.element) }) : null
130
+ summaryCards.length > 0 ? /* @__PURE__ */ jsx("div", { className: classes.summaryArea, children: /* @__PURE__ */ jsx(HorizontalScrollGrid, { scrollStep: 400, scrollSpeed: 100, children: summaryCards.map((card, index) => /* @__PURE__ */ jsx(
131
+ "div",
132
+ {
133
+ className: classes.summaryCard,
134
+ children: card.element
135
+ },
136
+ card.element.key ?? index
137
+ )) }) }) : null,
138
+ contentCards.length > 0 ? /* @__PURE__ */ jsx("div", { className: classes.contentArea, children: contentCards.map((card, index) => /* @__PURE__ */ jsx(Fragment$1, { children: card.element }, card.element.key ?? index)) }) : null
118
139
  ] })
119
140
  ] })
120
141
  ] });
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultEntityContentLayout.esm.js","sources":["../../src/alpha/DefaultEntityContentLayout.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Grid from '@material-ui/core/Grid';\nimport { makeStyles, Theme } from '@material-ui/core/styles';\nimport { EntityContentLayoutProps } from '@backstage/plugin-catalog-react/alpha';\nimport { EntitySwitch } from '../components/EntitySwitch';\nimport {\n EntityOrphanWarning,\n isOrphan,\n} from '../components/EntityOrphanWarning';\nimport {\n EntityRelationWarning,\n hasRelationWarnings,\n} from '../components/EntityRelationWarning';\nimport {\n EntityProcessingErrorsPanel,\n hasCatalogProcessingErrors,\n} from '../components/EntityProcessingErrorsPanel';\nimport { HorizontalScrollGrid } from '@backstage/core-components';\n\nconst useStyles = makeStyles<\n Theme,\n { infoCards: boolean; summaryCards: boolean; contentCards: boolean }\n>(theme => ({\n root: {\n display: 'flex',\n flexFlow: 'column nowrap',\n gap: theme.spacing(3),\n },\n mainContent: {\n display: 'flex',\n flexFlow: 'column',\n gap: theme.spacing(3),\n alignItems: 'stretch',\n minWidth: 0,\n },\n infoArea: {\n display: 'flex',\n flexFlow: 'column nowrap',\n alignItems: 'flex-start',\n gap: theme.spacing(3),\n minWidth: 0,\n '& > *': {\n flexShrink: 0,\n flexGrow: 0,\n },\n },\n summaryArea: {\n minWidth: 0,\n margin: theme.spacing(1.5), // To counteract MUI negative grid margin\n },\n summaryCard: {\n flex: '0 0 auto',\n '& + &': {\n marginLeft: theme.spacing(3),\n },\n },\n contentArea: {\n display: 'flex',\n flexFlow: 'column',\n gap: theme.spacing(3),\n alignItems: 'stretch',\n minWidth: 0,\n },\n [theme.breakpoints.up('md')]: {\n root: {\n display: 'grid',\n gap: theme.spacing(3),\n gridTemplateAreas: ({ summaryCards }) => `\n \"${summaryCards ? 'summary' : 'content'} info\"\n \"content info\"\n `,\n gridTemplateColumns: ({ infoCards }) => (infoCards ? '2fr 1fr' : '1fr'),\n alignItems: 'start',\n },\n mainContent: {\n display: 'contents',\n },\n contentArea: {\n gridArea: 'content',\n },\n summaryArea: {\n gridArea: 'summary',\n marginBottom: theme.spacing(3),\n },\n infoArea: {\n gridArea: 'info',\n position: 'sticky',\n top: theme.spacing(3),\n // this is a little unfortunate, but it's required to make the info cards scrollable\n // in a fixed container of the full height when it's stuck.\n // 100% doesn't work as that's the height of the entire layout, which is what powers the card scrolling.\n maxHeight: '100vh',\n overflowY: 'auto',\n alignSelf: 'start',\n alignItems: 'stretch',\n // Hide the scrollbar for the inner info cards\n // kind of an accessibility nightmare, but we see.\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n },\n },\n}));\n\nconst entityWarningContent = (\n <>\n <EntitySwitch>\n <EntitySwitch.Case if={isOrphan}>\n <Grid item xs={12}>\n <EntityOrphanWarning />\n </Grid>\n </EntitySwitch.Case>\n </EntitySwitch>\n\n <EntitySwitch>\n <EntitySwitch.Case if={hasRelationWarnings}>\n <Grid item xs={12}>\n <EntityRelationWarning />\n </Grid>\n </EntitySwitch.Case>\n </EntitySwitch>\n\n <EntitySwitch>\n <EntitySwitch.Case if={hasCatalogProcessingErrors}>\n <Grid item xs={12}>\n <EntityProcessingErrorsPanel />\n </Grid>\n </EntitySwitch.Case>\n </EntitySwitch>\n </>\n);\n\nexport function DefaultEntityContentLayout(props: EntityContentLayoutProps) {\n const { cards } = props;\n\n const infoCards = cards.filter(card => card.type === 'info');\n const summaryCards = cards.filter(card => card.type === 'summary');\n const contentCards = cards.filter(\n card => !card.type || card.type === 'content',\n );\n\n const classes = useStyles({\n infoCards: !!infoCards.length,\n summaryCards: !!summaryCards.length,\n contentCards: !!contentCards.length,\n });\n\n return (\n <>\n {entityWarningContent}\n <div className={classes.root}>\n {infoCards.length > 0 ? (\n <div className={classes.infoArea}>\n {infoCards.map(card => card.element)}\n </div>\n ) : null}\n <div className={classes.mainContent}>\n {summaryCards.length > 0 ? (\n <div className={classes.summaryArea}>\n <HorizontalScrollGrid scrollStep={400} scrollSpeed={100}>\n {summaryCards.map(card => (\n <div className={classes.summaryCard}>{card.element}</div>\n ))}\n </HorizontalScrollGrid>\n </div>\n ) : null}\n {contentCards.length > 0 ? (\n <div className={classes.contentArea}>\n {contentCards.map(card => card.element)}\n </div>\n ) : null}\n </div>\n </div>\n </>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DefaultEntityContentLayout.esm.js","sources":["../../src/alpha/DefaultEntityContentLayout.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Fragment } from 'react';\nimport { makeStyles, Theme } from '@material-ui/core/styles';\nimport { EntityContentLayoutProps } from '@backstage/plugin-catalog-react/alpha';\nimport { EntitySwitch } from '../components/EntitySwitch';\nimport {\n EntityOrphanWarning,\n isOrphan,\n} from '../components/EntityOrphanWarning';\nimport {\n EntityRelationWarning,\n hasRelationWarnings,\n} from '../components/EntityRelationWarning';\nimport {\n EntityProcessingErrorsPanel,\n hasCatalogProcessingErrors,\n} from '../components/EntityProcessingErrorsPanel';\nimport { HorizontalScrollGrid } from '@backstage/core-components';\n\nconst useStyles = makeStyles<\n Theme,\n { infoCards: boolean; summaryCards: boolean; contentCards: boolean }\n>(theme => ({\n root: {\n display: 'flex',\n flexFlow: 'column nowrap',\n gap: theme.spacing(3),\n },\n warningArea: {\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(2),\n marginBottom: theme.spacing(3),\n '&:empty': {\n marginBottom: 0,\n display: 'none',\n },\n },\n mainContent: {\n display: 'flex',\n flexFlow: 'column',\n gap: theme.spacing(3),\n alignItems: 'stretch',\n minWidth: 0,\n },\n infoArea: {\n display: 'flex',\n flexFlow: 'column nowrap',\n alignItems: 'stretch',\n gap: theme.spacing(3),\n minWidth: 0,\n '& > *': {\n flexShrink: 0,\n flexGrow: 0,\n },\n },\n summaryArea: {\n minWidth: 0,\n margin: theme.spacing(1), // To counteract MUI negative grid margin\n },\n summaryCard: {\n flex: '0 0 auto',\n width: '100%',\n '& + &': {\n marginLeft: theme.spacing(3),\n },\n },\n contentArea: {\n display: 'flex',\n flexFlow: 'column',\n gap: theme.spacing(3),\n alignItems: 'stretch',\n minWidth: 0,\n },\n [theme.breakpoints.up('md')]: {\n root: {\n display: 'grid',\n gap: theme.spacing(3),\n gridTemplateAreas: ({ summaryCards }) => `\n \"${summaryCards ? 'summary' : 'content'} info\"\n \"content info\"\n `,\n gridTemplateColumns: ({ infoCards }) => (infoCards ? '2fr 1fr' : '1fr'),\n alignItems: 'start',\n },\n mainContent: {\n display: 'contents',\n },\n contentArea: {\n gridArea: 'content',\n },\n summaryArea: {\n gridArea: 'summary',\n margin: theme.spacing(1), // To counteract MUI negative grid margin\n },\n infoArea: {\n gridArea: 'info',\n position: 'sticky',\n top: theme.spacing(3),\n // this is a little unfortunate, but it's required to make the info cards scrollable\n // in a fixed container of the full height when it's stuck.\n // 100% doesn't work as that's the height of the entire layout, which is what powers the card scrolling.\n maxHeight: '100vh',\n overflowY: 'auto',\n alignSelf: 'start',\n alignItems: 'stretch',\n // Hide the scrollbar for the inner info cards\n // kind of an accessibility nightmare, but we see.\n scrollbarWidth: 'none',\n msOverflowStyle: 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n },\n summaryCard: {\n width: 'auto',\n },\n },\n}));\n\nexport function DefaultEntityContentLayout(props: EntityContentLayoutProps) {\n const { cards } = props;\n\n const infoCards = cards.filter(card => card.type === 'info');\n const summaryCards = cards.filter(card => card.type === 'summary');\n const contentCards = cards.filter(\n card => !card.type || card.type === 'content',\n );\n\n const classes = useStyles({\n infoCards: !!infoCards.length,\n summaryCards: !!summaryCards.length,\n contentCards: !!contentCards.length,\n });\n\n return (\n <>\n <div className={classes.warningArea}>\n <EntitySwitch>\n <EntitySwitch.Case if={isOrphan}>\n <EntityOrphanWarning />\n </EntitySwitch.Case>\n </EntitySwitch>\n\n <EntitySwitch>\n <EntitySwitch.Case if={hasRelationWarnings}>\n <EntityRelationWarning />\n </EntitySwitch.Case>\n </EntitySwitch>\n\n <EntitySwitch>\n <EntitySwitch.Case if={hasCatalogProcessingErrors}>\n <EntityProcessingErrorsPanel />\n </EntitySwitch.Case>\n </EntitySwitch>\n </div>\n <div className={classes.root}>\n {infoCards.length > 0 ? (\n <div className={classes.infoArea}>\n {infoCards.map((card, index) => (\n <Fragment key={card.element.key ?? index}>\n {card.element}\n </Fragment>\n ))}\n </div>\n ) : null}\n <div className={classes.mainContent}>\n {summaryCards.length > 0 ? (\n <div className={classes.summaryArea}>\n <HorizontalScrollGrid scrollStep={400} scrollSpeed={100}>\n {summaryCards.map((card, index) => (\n <div\n key={card.element.key ?? index}\n className={classes.summaryCard}\n >\n {card.element}\n </div>\n ))}\n </HorizontalScrollGrid>\n </div>\n ) : null}\n {contentCards.length > 0 ? (\n <div className={classes.contentArea}>\n {contentCards.map((card, index) => (\n <Fragment key={card.element.key ?? index}>\n {card.element}\n </Fragment>\n ))}\n </div>\n ) : null}\n </div>\n </div>\n </>\n );\n}\n"],"names":["Fragment"],"mappings":"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"}
@@ -74,7 +74,14 @@ const catalogEntityPage = PageBlueprint.makeWithOverrides({
74
74
  factory(originalFactory, { config, inputs }) {
75
75
  return originalFactory({
76
76
  path: "/catalog/:namespace/:kind/:name",
77
+ // NOTE: The `convertLegacyRouteRef` call here ensures that this route ref
78
+ // is mutated to support the new frontend system. Removing this conversion
79
+ // is a potentially breaking change since this is a singleton and the
80
+ // route refs from `core-plugin-api` used to not support the new format.
81
+ // This shouldn't be removed until we completely deprecate the
82
+ // `core-compat-api` package.
77
83
  routeRef: convertLegacyRouteRef(entityRouteRef),
84
+ // READ THE ABOVE
78
85
  loader: async () => {
79
86
  const { EntityLayout } = await import('./components/EntityLayout/index.esm.js');
80
87
  const menuItems = inputs.contextMenuItems.map((item) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"pages.esm.js","sources":["../../src/alpha/pages.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n} from '@backstage/core-compat-api';\nimport {\n coreExtensionData,\n createExtensionInput,\n PageBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport {\n AsyncEntityProvider,\n entityRouteRef,\n} from '@backstage/plugin-catalog-react';\nimport {\n EntityHeaderBlueprint,\n EntityContentBlueprint,\n defaultEntityContentGroups,\n EntityContextMenuItemBlueprint,\n} from '@backstage/plugin-catalog-react/alpha';\nimport { rootRouteRef } from '../routes';\nimport { useEntityFromUrl } from '../components/CatalogEntityPage/useEntityFromUrl';\nimport { buildFilterFn } from './filter/FilterWrapper';\n\nexport const catalogPage = PageBlueprint.makeWithOverrides({\n inputs: {\n filters: createExtensionInput([coreExtensionData.reactElement]),\n },\n config: {\n schema: {\n pagination: z =>\n z\n .union([\n z.boolean(),\n z.object({\n mode: z.enum(['cursor', 'offset']),\n limit: z.number().optional(),\n offset: z.number().optional(),\n }),\n ])\n .default(true),\n },\n },\n factory(originalFactory, { inputs, config }) {\n return originalFactory({\n path: '/catalog',\n routeRef: convertLegacyRouteRef(rootRouteRef),\n loader: async () => {\n const { BaseCatalogPage } = await import('../components/CatalogPage');\n const filters = inputs.filters.map(filter =>\n filter.get(coreExtensionData.reactElement),\n );\n return compatWrapper(\n <BaseCatalogPage\n filters={<>{filters}</>}\n pagination={config.pagination}\n />,\n );\n },\n });\n },\n});\n\nexport const catalogEntityPage = PageBlueprint.makeWithOverrides({\n name: 'entity',\n inputs: {\n headers: createExtensionInput([\n EntityHeaderBlueprint.dataRefs.element.optional(),\n EntityHeaderBlueprint.dataRefs.filterFunction.optional(),\n ]),\n contents: createExtensionInput([\n coreExtensionData.reactElement,\n coreExtensionData.routePath,\n coreExtensionData.routeRef.optional(),\n EntityContentBlueprint.dataRefs.title,\n EntityContentBlueprint.dataRefs.filterFunction.optional(),\n EntityContentBlueprint.dataRefs.filterExpression.optional(),\n EntityContentBlueprint.dataRefs.group.optional(),\n ]),\n contextMenuItems: createExtensionInput([\n coreExtensionData.reactElement,\n EntityContextMenuItemBlueprint.dataRefs.filterFunction.optional(),\n ]),\n },\n config: {\n schema: {\n groups: z =>\n z\n .array(z.record(z.string(), z.object({ title: z.string() })))\n .optional(),\n },\n },\n factory(originalFactory, { config, inputs }) {\n return originalFactory({\n path: '/catalog/:namespace/:kind/:name',\n routeRef: convertLegacyRouteRef(entityRouteRef),\n loader: async () => {\n const { EntityLayout } = await import('./components/EntityLayout');\n\n const menuItems = inputs.contextMenuItems.map(item => ({\n element: item.get(coreExtensionData.reactElement),\n filter:\n item.get(EntityContextMenuItemBlueprint.dataRefs.filterFunction) ??\n (() => true),\n }));\n\n type Groups = Record<\n string,\n { title: string; items: Array<(typeof inputs.contents)[0]> }\n >;\n\n // Get available headers, sorted by if they have a filter function or not.\n // TODO(blam): we should really have priority or some specificity here which can be used to sort the headers.\n // That can be done with embedding the priority in the dataRef alongside the filter function.\n const headers = inputs.headers\n .map(header => ({\n element: header.get(EntityHeaderBlueprint.dataRefs.element),\n filter: header.get(EntityHeaderBlueprint.dataRefs.filterFunction),\n }))\n .sort((a, b) => {\n if (a.filter && !b.filter) return -1;\n if (!a.filter && b.filter) return 1;\n return 0;\n });\n\n let groups = Object.entries(defaultEntityContentGroups).reduce<Groups>(\n (rest, group) => {\n const [groupId, groupValue] = group;\n return {\n ...rest,\n [groupId]: { title: groupValue, items: [] },\n };\n },\n {},\n );\n\n // config groups override default groups\n if (config.groups) {\n groups = config.groups.reduce<Groups>((rest, group) => {\n const [groupId, groupValue] = Object.entries(group)[0];\n return {\n ...rest,\n [groupId]: { title: groupValue.title, items: [] },\n };\n }, {});\n }\n\n for (const output of inputs.contents) {\n const itemId = output.node.spec.id;\n const itemTitle = output.get(EntityContentBlueprint.dataRefs.title);\n const itemGroup = output.get(EntityContentBlueprint.dataRefs.group);\n const group = itemGroup && groups[itemGroup];\n if (!group) {\n groups[itemId] = { title: itemTitle, items: [output] };\n continue;\n }\n group.items.push(output);\n }\n\n const Component = () => {\n const entityFromUrl = useEntityFromUrl();\n const { entity } = entityFromUrl;\n const filteredMenuItems = entity\n ? menuItems.filter(i => i.filter(entity)).map(i => i.element)\n : [];\n\n const header = headers.find(\n h => !h.filter || h.filter(entity!),\n )?.element;\n\n return (\n <AsyncEntityProvider {...entityFromUrl}>\n <EntityLayout\n header={header}\n contextMenuItems={filteredMenuItems}\n >\n {Object.values(groups).flatMap(({ title, items }) =>\n items.map(output => (\n <EntityLayout.Route\n group={title}\n key={output.get(coreExtensionData.routePath)}\n path={output.get(coreExtensionData.routePath)}\n title={output.get(EntityContentBlueprint.dataRefs.title)}\n if={buildFilterFn(\n output.get(\n EntityContentBlueprint.dataRefs.filterFunction,\n ),\n output.get(\n EntityContentBlueprint.dataRefs.filterExpression,\n ),\n )}\n >\n {output.get(coreExtensionData.reactElement)}\n </EntityLayout.Route>\n )),\n )}\n </EntityLayout>\n </AsyncEntityProvider>\n );\n };\n\n return compatWrapper(<Component />);\n },\n });\n },\n});\n\nexport default [catalogPage, catalogEntityPage];\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pages.esm.js","sources":["../../src/alpha/pages.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n} from '@backstage/core-compat-api';\nimport {\n coreExtensionData,\n createExtensionInput,\n PageBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport {\n AsyncEntityProvider,\n entityRouteRef,\n} from '@backstage/plugin-catalog-react';\nimport {\n EntityHeaderBlueprint,\n EntityContentBlueprint,\n defaultEntityContentGroups,\n EntityContextMenuItemBlueprint,\n} from '@backstage/plugin-catalog-react/alpha';\nimport { rootRouteRef } from '../routes';\nimport { useEntityFromUrl } from '../components/CatalogEntityPage/useEntityFromUrl';\nimport { buildFilterFn } from './filter/FilterWrapper';\n\nexport const catalogPage = PageBlueprint.makeWithOverrides({\n inputs: {\n filters: createExtensionInput([coreExtensionData.reactElement]),\n },\n config: {\n schema: {\n pagination: z =>\n z\n .union([\n z.boolean(),\n z.object({\n mode: z.enum(['cursor', 'offset']),\n limit: z.number().optional(),\n offset: z.number().optional(),\n }),\n ])\n .default(true),\n },\n },\n factory(originalFactory, { inputs, config }) {\n return originalFactory({\n path: '/catalog',\n routeRef: convertLegacyRouteRef(rootRouteRef),\n loader: async () => {\n const { BaseCatalogPage } = await import('../components/CatalogPage');\n const filters = inputs.filters.map(filter =>\n filter.get(coreExtensionData.reactElement),\n );\n return compatWrapper(\n <BaseCatalogPage\n filters={<>{filters}</>}\n pagination={config.pagination}\n />,\n );\n },\n });\n },\n});\n\nexport const catalogEntityPage = PageBlueprint.makeWithOverrides({\n name: 'entity',\n inputs: {\n headers: createExtensionInput([\n EntityHeaderBlueprint.dataRefs.element.optional(),\n EntityHeaderBlueprint.dataRefs.filterFunction.optional(),\n ]),\n contents: createExtensionInput([\n coreExtensionData.reactElement,\n coreExtensionData.routePath,\n coreExtensionData.routeRef.optional(),\n EntityContentBlueprint.dataRefs.title,\n EntityContentBlueprint.dataRefs.filterFunction.optional(),\n EntityContentBlueprint.dataRefs.filterExpression.optional(),\n EntityContentBlueprint.dataRefs.group.optional(),\n ]),\n contextMenuItems: createExtensionInput([\n coreExtensionData.reactElement,\n EntityContextMenuItemBlueprint.dataRefs.filterFunction.optional(),\n ]),\n },\n config: {\n schema: {\n groups: z =>\n z\n .array(z.record(z.string(), z.object({ title: z.string() })))\n .optional(),\n },\n },\n factory(originalFactory, { config, inputs }) {\n return originalFactory({\n path: '/catalog/:namespace/:kind/:name',\n // NOTE: The `convertLegacyRouteRef` call here ensures that this route ref\n // is mutated to support the new frontend system. Removing this conversion\n // is a potentially breaking change since this is a singleton and the\n // route refs from `core-plugin-api` used to not support the new format.\n // This shouldn't be removed until we completely deprecate the\n // `core-compat-api` package.\n routeRef: convertLegacyRouteRef(entityRouteRef), // READ THE ABOVE\n loader: async () => {\n const { EntityLayout } = await import('./components/EntityLayout');\n\n const menuItems = inputs.contextMenuItems.map(item => ({\n element: item.get(coreExtensionData.reactElement),\n filter:\n item.get(EntityContextMenuItemBlueprint.dataRefs.filterFunction) ??\n (() => true),\n }));\n\n type Groups = Record<\n string,\n { title: string; items: Array<(typeof inputs.contents)[0]> }\n >;\n\n // Get available headers, sorted by if they have a filter function or not.\n // TODO(blam): we should really have priority or some specificity here which can be used to sort the headers.\n // That can be done with embedding the priority in the dataRef alongside the filter function.\n const headers = inputs.headers\n .map(header => ({\n element: header.get(EntityHeaderBlueprint.dataRefs.element),\n filter: header.get(EntityHeaderBlueprint.dataRefs.filterFunction),\n }))\n .sort((a, b) => {\n if (a.filter && !b.filter) return -1;\n if (!a.filter && b.filter) return 1;\n return 0;\n });\n\n let groups = Object.entries(defaultEntityContentGroups).reduce<Groups>(\n (rest, group) => {\n const [groupId, groupValue] = group;\n return {\n ...rest,\n [groupId]: { title: groupValue, items: [] },\n };\n },\n {},\n );\n\n // config groups override default groups\n if (config.groups) {\n groups = config.groups.reduce<Groups>((rest, group) => {\n const [groupId, groupValue] = Object.entries(group)[0];\n return {\n ...rest,\n [groupId]: { title: groupValue.title, items: [] },\n };\n }, {});\n }\n\n for (const output of inputs.contents) {\n const itemId = output.node.spec.id;\n const itemTitle = output.get(EntityContentBlueprint.dataRefs.title);\n const itemGroup = output.get(EntityContentBlueprint.dataRefs.group);\n const group = itemGroup && groups[itemGroup];\n if (!group) {\n groups[itemId] = { title: itemTitle, items: [output] };\n continue;\n }\n group.items.push(output);\n }\n\n const Component = () => {\n const entityFromUrl = useEntityFromUrl();\n const { entity } = entityFromUrl;\n const filteredMenuItems = entity\n ? menuItems.filter(i => i.filter(entity)).map(i => i.element)\n : [];\n\n const header = headers.find(\n h => !h.filter || h.filter(entity!),\n )?.element;\n\n return (\n <AsyncEntityProvider {...entityFromUrl}>\n <EntityLayout\n header={header}\n contextMenuItems={filteredMenuItems}\n >\n {Object.values(groups).flatMap(({ title, items }) =>\n items.map(output => (\n <EntityLayout.Route\n group={title}\n key={output.get(coreExtensionData.routePath)}\n path={output.get(coreExtensionData.routePath)}\n title={output.get(EntityContentBlueprint.dataRefs.title)}\n if={buildFilterFn(\n output.get(\n EntityContentBlueprint.dataRefs.filterFunction,\n ),\n output.get(\n EntityContentBlueprint.dataRefs.filterExpression,\n ),\n )}\n >\n {output.get(coreExtensionData.reactElement)}\n </EntityLayout.Route>\n )),\n )}\n </EntityLayout>\n </AsyncEntityProvider>\n );\n };\n\n return compatWrapper(<Component />);\n },\n });\n },\n});\n\nexport default [catalogPage, catalogEntityPage];\n"],"names":[],"mappings":";;;;;;;;;AAuCO,MAAM,WAAA,GAAc,cAAc,iBAAA,CAAkB;AAAA,EACzD,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,oBAAA,CAAqB,CAAC,iBAAA,CAAkB,YAAY,CAAC;AAAA,GAChE;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,UAAA,EAAY,CAAA,CAAA,KACV,CAAA,CACG,KAAA,CAAM;AAAA,QACL,EAAE,OAAA,EAAQ;AAAA,QACV,EAAE,MAAA,CAAO;AAAA,UACP,MAAM,CAAA,CAAE,IAAA,CAAK,CAAC,QAAA,EAAU,QAAQ,CAAC,CAAA;AAAA,UACjC,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,UAC3B,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA;AAAS,SAC7B;AAAA,OACF,CAAA,CACA,OAAA,CAAQ,IAAI;AAAA;AACnB,GACF;AAAA,EACA,OAAA,CAAQ,eAAA,EAAiB,EAAE,MAAA,EAAQ,QAAO,EAAG;AAC3C,IAAA,OAAO,eAAA,CAAgB;AAAA,MACrB,IAAA,EAAM,UAAA;AAAA,MACN,QAAA,EAAU,sBAAsB,YAAY,CAAA;AAAA,MAC5C,QAAQ,YAAY;AAClB,QAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,MAAM,OAAO,wCAA2B,CAAA;AACpE,QAAA,MAAM,OAAA,GAAU,OAAO,OAAA,CAAQ,GAAA;AAAA,UAAI,CAAA,MAAA,KACjC,MAAA,CAAO,GAAA,CAAI,iBAAA,CAAkB,YAAY;AAAA,SAC3C;AACA,QAAA,OAAO,aAAA;AAAA,0BACL,GAAA;AAAA,YAAC,eAAA;AAAA,YAAA;AAAA,cACC,OAAA,kCAAY,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,cACpB,YAAY,MAAA,CAAO;AAAA;AAAA;AACrB,SACF;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAC;AAEM,MAAM,iBAAA,GAAoB,cAAc,iBAAA,CAAkB;AAAA,EAC/D,IAAA,EAAM,QAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,SAAS,oBAAA,CAAqB;AAAA,MAC5B,qBAAA,CAAsB,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAS;AAAA,MAChD,qBAAA,CAAsB,QAAA,CAAS,cAAA,CAAe,QAAA;AAAS,KACxD,CAAA;AAAA,IACD,UAAU,oBAAA,CAAqB;AAAA,MAC7B,iBAAA,CAAkB,YAAA;AAAA,MAClB,iBAAA,CAAkB,SAAA;AAAA,MAClB,iBAAA,CAAkB,SAAS,QAAA,EAAS;AAAA,MACpC,uBAAuB,QAAA,CAAS,KAAA;AAAA,MAChC,sBAAA,CAAuB,QAAA,CAAS,cAAA,CAAe,QAAA,EAAS;AAAA,MACxD,sBAAA,CAAuB,QAAA,CAAS,gBAAA,CAAiB,QAAA,EAAS;AAAA,MAC1D,sBAAA,CAAuB,QAAA,CAAS,KAAA,CAAM,QAAA;AAAS,KAChD,CAAA;AAAA,IACD,kBAAkB,oBAAA,CAAqB;AAAA,MACrC,iBAAA,CAAkB,YAAA;AAAA,MAClB,8BAAA,CAA+B,QAAA,CAAS,cAAA,CAAe,QAAA;AAAS,KACjE;AAAA,GACH;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,MAAA,EAAQ,OACN,CAAA,CACG,KAAA,CAAM,EAAE,MAAA,CAAO,CAAA,CAAE,QAAO,EAAG,CAAA,CAAE,OAAO,EAAE,KAAA,EAAO,EAAE,MAAA,EAAO,EAAG,CAAC,CAAC,EAC3D,QAAA;AAAS;AAChB,GACF;AAAA,EACA,OAAA,CAAQ,eAAA,EAAiB,EAAE,MAAA,EAAQ,QAAO,EAAG;AAC3C,IAAA,OAAO,eAAA,CAAgB;AAAA,MACrB,IAAA,EAAM,iCAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAON,QAAA,EAAU,sBAAsB,cAAc,CAAA;AAAA;AAAA,MAC9C,QAAQ,YAAY;AAClB,QAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAAO,wCAA2B,CAAA;AAEjE,QAAA,MAAM,SAAA,GAAY,MAAA,CAAO,gBAAA,CAAiB,GAAA,CAAI,CAAA,IAAA,MAAS;AAAA,UACrD,OAAA,EAAS,IAAA,CAAK,GAAA,CAAI,iBAAA,CAAkB,YAAY,CAAA;AAAA,UAChD,QACE,IAAA,CAAK,GAAA,CAAI,+BAA+B,QAAA,CAAS,cAAc,MAC9D,MAAM,IAAA;AAAA,SACX,CAAE,CAAA;AAUF,QAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CACpB,GAAA,CAAI,CAAA,MAAA,MAAW;AAAA,UACd,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,qBAAA,CAAsB,SAAS,OAAO,CAAA;AAAA,UAC1D,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,qBAAA,CAAsB,SAAS,cAAc;AAAA,SAClE,CAAE,CAAA,CACD,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AACd,UAAA,IAAI,CAAA,CAAE,MAAA,IAAU,CAAC,CAAA,CAAE,QAAQ,OAAO,EAAA;AAClC,UAAA,IAAI,CAAC,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,QAAQ,OAAO,CAAA;AAClC,UAAA,OAAO,CAAA;AAAA,QACT,CAAC,CAAA;AAEH,QAAA,IAAI,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,0BAA0B,CAAA,CAAE,MAAA;AAAA,UACtD,CAAC,MAAM,KAAA,KAAU;AACf,YAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,KAAA;AAC9B,YAAA,OAAO;AAAA,cACL,GAAG,IAAA;AAAA,cACH,CAAC,OAAO,GAAG,EAAE,OAAO,UAAA,EAAY,KAAA,EAAO,EAAC;AAAE,aAC5C;AAAA,UACF,CAAA;AAAA,UACA;AAAC,SACH;AAGA,QAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,UAAA,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,MAAA,CAAe,CAAC,MAAM,KAAA,KAAU;AACrD,YAAA,MAAM,CAAC,SAAS,UAAU,CAAA,GAAI,OAAO,OAAA,CAAQ,KAAK,EAAE,CAAC,CAAA;AACrD,YAAA,OAAO;AAAA,cACL,GAAG,IAAA;AAAA,cACH,CAAC,OAAO,GAAG,EAAE,OAAO,UAAA,CAAW,KAAA,EAAO,KAAA,EAAO,EAAC;AAAE,aAClD;AAAA,UACF,CAAA,EAAG,EAAE,CAAA;AAAA,QACP;AAEA,QAAA,KAAA,MAAW,MAAA,IAAU,OAAO,QAAA,EAAU;AACpC,UAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,EAAA;AAChC,UAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,sBAAA,CAAuB,SAAS,KAAK,CAAA;AAClE,UAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,sBAAA,CAAuB,SAAS,KAAK,CAAA;AAClE,UAAA,MAAM,KAAA,GAAQ,SAAA,IAAa,MAAA,CAAO,SAAS,CAAA;AAC3C,UAAA,IAAI,CAAC,KAAA,EAAO;AACV,YAAA,MAAA,CAAO,MAAM,IAAI,EAAE,KAAA,EAAO,WAAW,KAAA,EAAO,CAAC,MAAM,CAAA,EAAE;AACrD,YAAA;AAAA,UACF;AACA,UAAA,KAAA,CAAM,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,QACzB;AAEA,QAAA,MAAM,YAAY,MAAM;AACtB,UAAA,MAAM,gBAAgB,gBAAA,EAAiB;AACvC,UAAA,MAAM,EAAE,QAAO,GAAI,aAAA;AACnB,UAAA,MAAM,iBAAA,GAAoB,MAAA,GACtB,SAAA,CAAU,MAAA,CAAO,OAAK,CAAA,CAAE,MAAA,CAAO,MAAM,CAAC,EAAE,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,IAC1D,EAAC;AAEL,UAAA,MAAM,SAAS,OAAA,CAAQ,IAAA;AAAA,YACrB,OAAK,CAAC,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,OAAO,MAAO;AAAA,WACpC,EAAG,OAAA;AAEH,UAAA,uBACE,GAAA,CAAC,mBAAA,EAAA,EAAqB,GAAG,aAAA,EACvB,QAAA,kBAAA,GAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,MAAA;AAAA,cACA,gBAAA,EAAkB,iBAAA;AAAA,cAEjB,QAAA,EAAA,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,OAAA;AAAA,gBAAQ,CAAC,EAAE,KAAA,EAAO,OAAM,KAC7C,KAAA,CAAM,IAAI,CAAA,MAAA,qBACR,GAAA;AAAA,kBAAC,YAAA,CAAa,KAAA;AAAA,kBAAb;AAAA,oBACC,KAAA,EAAO,KAAA;AAAA,oBAEP,IAAA,EAAM,MAAA,CAAO,GAAA,CAAI,iBAAA,CAAkB,SAAS,CAAA;AAAA,oBAC5C,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,sBAAA,CAAuB,SAAS,KAAK,CAAA;AAAA,oBACvD,EAAA,EAAI,aAAA;AAAA,sBACF,MAAA,CAAO,GAAA;AAAA,wBACL,uBAAuB,QAAA,CAAS;AAAA,uBAClC;AAAA,sBACA,MAAA,CAAO,GAAA;AAAA,wBACL,uBAAuB,QAAA,CAAS;AAAA;AAClC,qBACF;AAAA,oBAEC,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,iBAAA,CAAkB,YAAY;AAAA,mBAAA;AAAA,kBAZrC,MAAA,CAAO,GAAA,CAAI,iBAAA,CAAkB,SAAS;AAAA,iBAc9C;AAAA;AACH;AAAA,WACF,EACF,CAAA;AAAA,QAEJ,CAAA;AAEA,QAAA,OAAO,aAAA,iBAAc,GAAA,CAAC,SAAA,EAAA,EAAU,CAAE,CAAA;AAAA,MACpC;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAC;AAED,YAAe,CAAC,aAAa,iBAAiB,CAAA;;;;"}
package/dist/alpha.d.ts CHANGED
@@ -28,7 +28,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
28
28
  }>;
29
29
  unregisterRedirect: _backstage_frontend_plugin_api.ExternalRouteRef<undefined>;
30
30
  }, {
31
- "api:catalog": _backstage_frontend_plugin_api.ExtensionDefinition<{
31
+ "api:catalog": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
32
32
  kind: "api";
33
33
  name: undefined;
34
34
  config: {};
@@ -37,7 +37,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
37
37
  inputs: {};
38
38
  params: <TApi, TImpl extends TApi, TDeps extends { [name in string]: unknown; }>(params: _backstage_frontend_plugin_api.ApiFactory<TApi, TImpl, TDeps>) => _backstage_frontend_plugin_api.ExtensionBlueprintParams<_backstage_frontend_plugin_api.AnyApiFactory>;
39
39
  }>;
40
- "api:catalog/entity-presentation": _backstage_frontend_plugin_api.ExtensionDefinition<{
40
+ "api:catalog/entity-presentation": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
41
41
  kind: "api";
42
42
  name: "entity-presentation";
43
43
  config: {};
@@ -46,7 +46,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
46
46
  inputs: {};
47
47
  params: <TApi, TImpl extends TApi, TDeps extends { [name in string]: unknown; }>(params: _backstage_frontend_plugin_api.ApiFactory<TApi, TImpl, TDeps>) => _backstage_frontend_plugin_api.ExtensionBlueprintParams<_backstage_frontend_plugin_api.AnyApiFactory>;
48
48
  }>;
49
- "api:catalog/starred-entities": _backstage_frontend_plugin_api.ExtensionDefinition<{
49
+ "api:catalog/starred-entities": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
50
50
  kind: "api";
51
51
  name: "starred-entities";
52
52
  config: {};
@@ -55,7 +55,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
55
55
  inputs: {};
56
56
  params: <TApi, TImpl extends TApi, TDeps extends { [name in string]: unknown; }>(params: _backstage_frontend_plugin_api.ApiFactory<TApi, TImpl, TDeps>) => _backstage_frontend_plugin_api.ExtensionBlueprintParams<_backstage_frontend_plugin_api.AnyApiFactory>;
57
57
  }>;
58
- "catalog-filter:catalog/kind": _backstage_frontend_plugin_api.ExtensionDefinition<{
58
+ "catalog-filter:catalog/kind": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
59
59
  config: {
60
60
  initialFilter: string;
61
61
  };
@@ -75,7 +75,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
75
75
  loader: () => Promise<JSX.Element>;
76
76
  };
77
77
  }>;
78
- "catalog-filter:catalog/lifecycle": _backstage_frontend_plugin_api.ExtensionDefinition<{
78
+ "catalog-filter:catalog/lifecycle": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
79
79
  kind: "catalog-filter";
80
80
  name: "lifecycle";
81
81
  config: {};
@@ -86,7 +86,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
86
86
  loader: () => Promise<JSX.Element>;
87
87
  };
88
88
  }>;
89
- "catalog-filter:catalog/list": _backstage_frontend_plugin_api.ExtensionDefinition<{
89
+ "catalog-filter:catalog/list": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
90
90
  config: {
91
91
  initialFilter: "all" | "owned" | "starred";
92
92
  };
@@ -106,7 +106,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
106
106
  loader: () => Promise<JSX.Element>;
107
107
  };
108
108
  }>;
109
- "catalog-filter:catalog/mode": _backstage_frontend_plugin_api.ExtensionDefinition<{
109
+ "catalog-filter:catalog/mode": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
110
110
  config: {
111
111
  mode: "all" | "owners-only" | undefined;
112
112
  };
@@ -126,7 +126,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
126
126
  loader: () => Promise<JSX.Element>;
127
127
  };
128
128
  }>;
129
- "catalog-filter:catalog/namespace": _backstage_frontend_plugin_api.ExtensionDefinition<{
129
+ "catalog-filter:catalog/namespace": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
130
130
  kind: "catalog-filter";
131
131
  name: "namespace";
132
132
  config: {};
@@ -137,7 +137,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
137
137
  loader: () => Promise<JSX.Element>;
138
138
  };
139
139
  }>;
140
- "catalog-filter:catalog/processing-status": _backstage_frontend_plugin_api.ExtensionDefinition<{
140
+ "catalog-filter:catalog/processing-status": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
141
141
  kind: "catalog-filter";
142
142
  name: "processing-status";
143
143
  config: {};
@@ -148,7 +148,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
148
148
  loader: () => Promise<JSX.Element>;
149
149
  };
150
150
  }>;
151
- "catalog-filter:catalog/tag": _backstage_frontend_plugin_api.ExtensionDefinition<{
151
+ "catalog-filter:catalog/tag": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
152
152
  kind: "catalog-filter";
153
153
  name: "tag";
154
154
  config: {};
@@ -159,7 +159,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
159
159
  loader: () => Promise<JSX.Element>;
160
160
  };
161
161
  }>;
162
- "catalog-filter:catalog/type": _backstage_frontend_plugin_api.ExtensionDefinition<{
162
+ "catalog-filter:catalog/type": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
163
163
  kind: "catalog-filter";
164
164
  name: "type";
165
165
  config: {};
@@ -170,7 +170,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
170
170
  loader: () => Promise<JSX.Element>;
171
171
  };
172
172
  }>;
173
- "entity-card:catalog/about": _backstage_frontend_plugin_api.ExtensionDefinition<{
173
+ "entity-card:catalog/about": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
174
174
  config: {
175
175
  filter: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
176
176
  type: "content" | "summary" | "info" | undefined;
@@ -204,7 +204,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
204
204
  type?: _backstage_plugin_catalog_react_alpha.EntityCardType;
205
205
  };
206
206
  }>;
207
- "entity-card:catalog/depends-on-components": _backstage_frontend_plugin_api.ExtensionDefinition<{
207
+ "entity-card:catalog/depends-on-components": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
208
208
  kind: "entity-card";
209
209
  name: "depends-on-components";
210
210
  config: {
@@ -229,7 +229,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
229
229
  type?: _backstage_plugin_catalog_react_alpha.EntityCardType;
230
230
  };
231
231
  }>;
232
- "entity-card:catalog/depends-on-resources": _backstage_frontend_plugin_api.ExtensionDefinition<{
232
+ "entity-card:catalog/depends-on-resources": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
233
233
  kind: "entity-card";
234
234
  name: "depends-on-resources";
235
235
  config: {
@@ -254,7 +254,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
254
254
  type?: _backstage_plugin_catalog_react_alpha.EntityCardType;
255
255
  };
256
256
  }>;
257
- "entity-card:catalog/has-components": _backstage_frontend_plugin_api.ExtensionDefinition<{
257
+ "entity-card:catalog/has-components": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
258
258
  kind: "entity-card";
259
259
  name: "has-components";
260
260
  config: {
@@ -279,7 +279,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
279
279
  type?: _backstage_plugin_catalog_react_alpha.EntityCardType;
280
280
  };
281
281
  }>;
282
- "entity-card:catalog/has-resources": _backstage_frontend_plugin_api.ExtensionDefinition<{
282
+ "entity-card:catalog/has-resources": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
283
283
  kind: "entity-card";
284
284
  name: "has-resources";
285
285
  config: {
@@ -304,7 +304,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
304
304
  type?: _backstage_plugin_catalog_react_alpha.EntityCardType;
305
305
  };
306
306
  }>;
307
- "entity-card:catalog/has-subcomponents": _backstage_frontend_plugin_api.ExtensionDefinition<{
307
+ "entity-card:catalog/has-subcomponents": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
308
308
  kind: "entity-card";
309
309
  name: "has-subcomponents";
310
310
  config: {
@@ -329,7 +329,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
329
329
  type?: _backstage_plugin_catalog_react_alpha.EntityCardType;
330
330
  };
331
331
  }>;
332
- "entity-card:catalog/has-subdomains": _backstage_frontend_plugin_api.ExtensionDefinition<{
332
+ "entity-card:catalog/has-subdomains": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
333
333
  kind: "entity-card";
334
334
  name: "has-subdomains";
335
335
  config: {
@@ -354,7 +354,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
354
354
  type?: _backstage_plugin_catalog_react_alpha.EntityCardType;
355
355
  };
356
356
  }>;
357
- "entity-card:catalog/has-systems": _backstage_frontend_plugin_api.ExtensionDefinition<{
357
+ "entity-card:catalog/has-systems": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
358
358
  kind: "entity-card";
359
359
  name: "has-systems";
360
360
  config: {
@@ -379,7 +379,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
379
379
  type?: _backstage_plugin_catalog_react_alpha.EntityCardType;
380
380
  };
381
381
  }>;
382
- "entity-card:catalog/labels": _backstage_frontend_plugin_api.ExtensionDefinition<{
382
+ "entity-card:catalog/labels": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
383
383
  kind: "entity-card";
384
384
  name: "labels";
385
385
  config: {
@@ -404,7 +404,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
404
404
  type?: _backstage_plugin_catalog_react_alpha.EntityCardType;
405
405
  };
406
406
  }>;
407
- "entity-card:catalog/links": _backstage_frontend_plugin_api.ExtensionDefinition<{
407
+ "entity-card:catalog/links": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
408
408
  kind: "entity-card";
409
409
  name: "links";
410
410
  config: {
@@ -429,7 +429,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
429
429
  type?: _backstage_plugin_catalog_react_alpha.EntityCardType;
430
430
  };
431
431
  }>;
432
- "entity-content:catalog/overview": _backstage_frontend_plugin_api.ExtensionDefinition<{
432
+ "entity-content:catalog/overview": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
433
433
  config: {
434
434
  path: string | undefined;
435
435
  title: string | undefined;
@@ -485,7 +485,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
485
485
  filter?: string | _backstage_plugin_catalog_react_alpha.EntityPredicate | ((entity: _backstage_catalog_model.Entity) => boolean);
486
486
  };
487
487
  }>;
488
- "entity-context-menu-item:catalog/copy-entity-url": _backstage_frontend_plugin_api.ExtensionDefinition<{
488
+ "entity-context-menu-item:catalog/copy-entity-url": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
489
489
  kind: "entity-context-menu-item";
490
490
  name: "copy-entity-url";
491
491
  config: {
@@ -500,7 +500,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
500
500
  inputs: {};
501
501
  params: _backstage_plugin_catalog_react_alpha.EntityContextMenuItemParams;
502
502
  }>;
503
- "entity-context-menu-item:catalog/inspect-entity": _backstage_frontend_plugin_api.ExtensionDefinition<{
503
+ "entity-context-menu-item:catalog/inspect-entity": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
504
504
  kind: "entity-context-menu-item";
505
505
  name: "inspect-entity";
506
506
  config: {
@@ -515,7 +515,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
515
515
  inputs: {};
516
516
  params: _backstage_plugin_catalog_react_alpha.EntityContextMenuItemParams;
517
517
  }>;
518
- "entity-context-menu-item:catalog/unregister-entity": _backstage_frontend_plugin_api.ExtensionDefinition<{
518
+ "entity-context-menu-item:catalog/unregister-entity": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
519
519
  kind: "entity-context-menu-item";
520
520
  name: "unregister-entity";
521
521
  config: {
@@ -530,7 +530,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
530
530
  inputs: {};
531
531
  params: _backstage_plugin_catalog_react_alpha.EntityContextMenuItemParams;
532
532
  }>;
533
- "entity-icon-link:catalog/view-source": _backstage_frontend_plugin_api.ExtensionDefinition<{
533
+ "entity-icon-link:catalog/view-source": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
534
534
  kind: "entity-icon-link";
535
535
  name: "view-source";
536
536
  config: {
@@ -554,7 +554,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
554
554
  filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | ((entity: _backstage_catalog_model.Entity) => boolean);
555
555
  };
556
556
  }>;
557
- "nav-item:catalog": _backstage_frontend_plugin_api.ExtensionDefinition<{
557
+ "nav-item:catalog": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
558
558
  kind: "nav-item";
559
559
  name: undefined;
560
560
  config: {};
@@ -571,7 +571,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
571
571
  routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
572
572
  };
573
573
  }>;
574
- "page:catalog": _backstage_frontend_plugin_api.ExtensionDefinition<{
574
+ "page:catalog": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
575
575
  config: {
576
576
  pagination: boolean | {
577
577
  mode: "offset" | "cursor";
@@ -608,7 +608,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
608
608
  routeRef?: _backstage_frontend_plugin_api.RouteRef;
609
609
  };
610
610
  }>;
611
- "page:catalog/entity": _backstage_frontend_plugin_api.ExtensionDefinition<{
611
+ "page:catalog/entity": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
612
612
  config: {
613
613
  groups: Record<string, {
614
614
  title: string;
@@ -663,7 +663,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
663
663
  routeRef?: _backstage_frontend_plugin_api.RouteRef;
664
664
  };
665
665
  }>;
666
- "search-result-list-item:catalog": _backstage_frontend_plugin_api.ExtensionDefinition<{
666
+ "search-result-list-item:catalog": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
667
667
  kind: "search-result-list-item";
668
668
  name: undefined;
669
669
  config: {
@@ -1,5 +1,5 @@
1
1
  var name = "@backstage/plugin-catalog";
2
- var version = "1.32.0-next.1";
2
+ var version = "1.32.0";
3
3
  var description = "The Backstage plugin for browsing the Backstage catalog";
4
4
  var backstage = {
5
5
  role: "frontend-plugin",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-catalog",
3
- "version": "1.32.0-next.1",
3
+ "version": "1.32.0",
4
4
  "description": "The Backstage plugin for browsing the Backstage catalog",
5
5
  "backstage": {
6
6
  "role": "frontend-plugin",
@@ -70,24 +70,24 @@
70
70
  "test": "backstage-cli package test"
71
71
  },
72
72
  "dependencies": {
73
- "@backstage/catalog-client": "1.12.1-next.0",
74
- "@backstage/catalog-model": "1.7.6-next.0",
75
- "@backstage/core-compat-api": "0.5.4-next.0",
76
- "@backstage/core-components": "0.18.3-next.1",
77
- "@backstage/core-plugin-api": "1.11.2-next.1",
78
- "@backstage/errors": "1.2.7",
79
- "@backstage/frontend-plugin-api": "0.12.2-next.1",
80
- "@backstage/integration-react": "1.2.12-next.0",
81
- "@backstage/plugin-catalog-common": "1.1.7-next.0",
82
- "@backstage/plugin-catalog-react": "1.21.3-next.1",
83
- "@backstage/plugin-permission-react": "0.4.38-next.0",
84
- "@backstage/plugin-scaffolder-common": "1.7.3-next.0",
85
- "@backstage/plugin-search-common": "1.2.21-next.0",
86
- "@backstage/plugin-search-react": "1.10.0-next.1",
87
- "@backstage/plugin-techdocs-common": "0.1.1",
88
- "@backstage/plugin-techdocs-react": "1.3.5-next.0",
89
- "@backstage/types": "1.2.2",
90
- "@backstage/version-bridge": "1.0.11",
73
+ "@backstage/catalog-client": "^1.12.1",
74
+ "@backstage/catalog-model": "^1.7.6",
75
+ "@backstage/core-compat-api": "^0.5.4",
76
+ "@backstage/core-components": "^0.18.3",
77
+ "@backstage/core-plugin-api": "^1.12.0",
78
+ "@backstage/errors": "^1.2.7",
79
+ "@backstage/frontend-plugin-api": "^0.13.0",
80
+ "@backstage/integration-react": "^1.2.12",
81
+ "@backstage/plugin-catalog-common": "^1.1.7",
82
+ "@backstage/plugin-catalog-react": "^1.21.3",
83
+ "@backstage/plugin-permission-react": "^0.4.38",
84
+ "@backstage/plugin-scaffolder-common": "^1.7.3",
85
+ "@backstage/plugin-search-common": "^1.2.21",
86
+ "@backstage/plugin-search-react": "^1.10.0",
87
+ "@backstage/plugin-techdocs-common": "^0.1.1",
88
+ "@backstage/plugin-techdocs-react": "^1.3.5",
89
+ "@backstage/types": "^1.2.2",
90
+ "@backstage/version-bridge": "^1.0.11",
91
91
  "@material-ui/core": "^4.12.2",
92
92
  "@material-ui/icons": "^4.9.1",
93
93
  "@material-ui/lab": "4.0.0-alpha.61",
@@ -102,12 +102,12 @@
102
102
  "zen-observable": "^0.10.0"
103
103
  },
104
104
  "devDependencies": {
105
- "@backstage/cli": "0.34.5-next.1",
106
- "@backstage/core-app-api": "1.19.2-next.1",
107
- "@backstage/dev-utils": "1.1.17-next.1",
108
- "@backstage/frontend-test-utils": "0.4.1-next.0",
109
- "@backstage/plugin-permission-common": "0.9.3-next.1",
110
- "@backstage/test-utils": "1.7.13-next.0",
105
+ "@backstage/cli": "^0.34.5",
106
+ "@backstage/core-app-api": "^1.19.2",
107
+ "@backstage/dev-utils": "^1.1.17",
108
+ "@backstage/frontend-test-utils": "^0.4.1",
109
+ "@backstage/plugin-permission-common": "^0.9.3",
110
+ "@backstage/test-utils": "^1.7.13",
111
111
  "@testing-library/dom": "^10.0.0",
112
112
  "@testing-library/jest-dom": "^6.0.0",
113
113
  "@testing-library/react": "^16.0.0",