@backstage/plugin-catalog 1.31.2-next.0 → 1.31.2-next.2

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,56 @@
1
1
  # @backstage/plugin-catalog
2
2
 
3
+ ## 1.31.2-next.2
4
+
5
+ ### Patch Changes
6
+
7
+ - e4ddf22: Internal update to align with new blueprint parameter naming in the new frontend system.
8
+ - Updated dependencies
9
+ - @backstage/frontend-plugin-api@0.11.0-next.1
10
+ - @backstage/core-compat-api@0.5.0-next.2
11
+ - @backstage/plugin-search-react@1.9.3-next.1
12
+ - @backstage/plugin-catalog-react@1.20.0-next.2
13
+ - @backstage/core-components@0.17.5-next.1
14
+ - @backstage/catalog-client@1.11.0-next.0
15
+ - @backstage/catalog-model@1.7.5
16
+ - @backstage/core-plugin-api@1.10.9
17
+ - @backstage/errors@1.2.7
18
+ - @backstage/integration-react@1.2.9
19
+ - @backstage/types@1.2.1
20
+ - @backstage/version-bridge@1.0.11
21
+ - @backstage/plugin-catalog-common@1.1.5
22
+ - @backstage/plugin-permission-react@0.4.36
23
+ - @backstage/plugin-scaffolder-common@1.7.0-next.0
24
+ - @backstage/plugin-search-common@1.2.19
25
+ - @backstage/plugin-techdocs-common@0.1.1
26
+ - @backstage/plugin-techdocs-react@1.3.2-next.0
27
+
28
+ ## 1.31.2-next.1
29
+
30
+ ### Patch Changes
31
+
32
+ - c0ea01b: Fix card scrolling behaviour
33
+ - f2f133c: Internal update to use the new variant of `ApiBlueprint`.
34
+ - Updated dependencies
35
+ - @backstage/plugin-scaffolder-common@1.7.0-next.0
36
+ - @backstage/core-compat-api@0.4.5-next.1
37
+ - @backstage/plugin-catalog-react@1.20.0-next.1
38
+ - @backstage/frontend-plugin-api@0.11.0-next.0
39
+ - @backstage/catalog-client@1.11.0-next.0
40
+ - @backstage/plugin-search-react@1.9.3-next.0
41
+ - @backstage/plugin-techdocs-react@1.3.2-next.0
42
+ - @backstage/core-components@0.17.5-next.0
43
+ - @backstage/catalog-model@1.7.5
44
+ - @backstage/core-plugin-api@1.10.9
45
+ - @backstage/errors@1.2.7
46
+ - @backstage/integration-react@1.2.9
47
+ - @backstage/types@1.2.1
48
+ - @backstage/version-bridge@1.0.11
49
+ - @backstage/plugin-catalog-common@1.1.5
50
+ - @backstage/plugin-permission-react@0.4.36
51
+ - @backstage/plugin-search-common@1.2.19
52
+ - @backstage/plugin-techdocs-common@0.1.1
53
+
3
54
  ## 1.31.2-next.0
4
55
 
5
56
  ### Patch Changes
@@ -13,7 +13,7 @@ const useStyles = makeStyles((theme) => ({
13
13
  flexFlow: "column nowrap",
14
14
  gap: theme.spacing(3)
15
15
  },
16
- contentArea: {
16
+ mainContent: {
17
17
  display: "flex",
18
18
  flexFlow: "column",
19
19
  gap: theme.spacing(3),
@@ -23,9 +23,13 @@ const useStyles = makeStyles((theme) => ({
23
23
  infoArea: {
24
24
  display: "flex",
25
25
  flexFlow: "column nowrap",
26
- alignItems: "stretch",
26
+ alignItems: "flex-start",
27
27
  gap: theme.spacing(3),
28
- minWidth: 0
28
+ minWidth: 0,
29
+ "& > *": {
30
+ flexShrink: 0,
31
+ flexGrow: 0
32
+ }
29
33
  },
30
34
  summaryArea: {
31
35
  minWidth: 0,
@@ -38,10 +42,17 @@ const useStyles = makeStyles((theme) => ({
38
42
  marginLeft: theme.spacing(3)
39
43
  }
40
44
  },
45
+ contentArea: {
46
+ display: "flex",
47
+ flexFlow: "column",
48
+ gap: theme.spacing(3),
49
+ alignItems: "stretch",
50
+ minWidth: 0
51
+ },
41
52
  [theme.breakpoints.up("md")]: {
42
53
  root: {
43
54
  display: "grid",
44
- gap: 0,
55
+ gap: theme.spacing(3),
45
56
  gridTemplateAreas: ({ summaryCards }) => `
46
57
  "${summaryCards ? "summary" : "content"} info"
47
58
  "content info"
@@ -49,11 +60,8 @@ const useStyles = makeStyles((theme) => ({
49
60
  gridTemplateColumns: ({ infoCards }) => infoCards ? "2fr 1fr" : "1fr",
50
61
  alignItems: "start"
51
62
  },
52
- infoArea: {
53
- gridArea: "info",
54
- position: "sticky",
55
- top: theme.spacing(3),
56
- marginLeft: theme.spacing(3)
63
+ mainContent: {
64
+ display: "contents"
57
65
  },
58
66
  contentArea: {
59
67
  gridArea: "content"
@@ -61,6 +69,25 @@ const useStyles = makeStyles((theme) => ({
61
69
  summaryArea: {
62
70
  gridArea: "summary",
63
71
  marginBottom: theme.spacing(3)
72
+ },
73
+ infoArea: {
74
+ gridArea: "info",
75
+ position: "sticky",
76
+ top: theme.spacing(3),
77
+ // this is a little unfortunate, but it's required to make the info cards scrollable
78
+ // in a fixed container of the full height when it's stuck.
79
+ // 100% doesn't work as that's the height of the entire layout, which is what powers the card scrolling.
80
+ maxHeight: "100vh",
81
+ overflowY: "auto",
82
+ alignSelf: "start",
83
+ alignItems: "stretch",
84
+ // Hide the scrollbar for the inner info cards
85
+ // kind of an accessibility nightmare, but we see.
86
+ scrollbarWidth: "none",
87
+ msOverflowStyle: "none",
88
+ "&::-webkit-scrollbar": {
89
+ display: "none"
90
+ }
64
91
  }
65
92
  }
66
93
  }));
@@ -85,8 +112,10 @@ function DefaultEntityContentLayout(props) {
85
112
  entityWarningContent,
86
113
  /* @__PURE__ */ jsxs("div", { className: classes.root, children: [
87
114
  infoCards.length > 0 ? /* @__PURE__ */ jsx("div", { className: classes.infoArea, children: infoCards.map((card) => card.element) }) : null,
88
- 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,
89
- contentCards.length > 0 ? /* @__PURE__ */ jsx("div", { className: classes.contentArea, children: contentCards.map((card) => card.element) }) : null
115
+ /* @__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
118
+ ] })
90
119
  ] })
91
120
  ] });
92
121
  }
@@ -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 contentArea: {\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 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 [theme.breakpoints.up('md')]: {\n root: {\n display: 'grid',\n gap: 0,\n gridTemplateAreas: ({ summaryCards }) => `\n \"${summaryCards ? 'summary' : 'content'} info\"\n \"content info\"\n `,\n gridTemplateColumns: ({ infoCards }) => (infoCards ? '2fr 1fr' : '1fr'),\n alignItems: 'start',\n },\n infoArea: {\n gridArea: 'info',\n position: 'sticky',\n top: theme.spacing(3),\n marginLeft: theme.spacing(3),\n },\n contentArea: {\n gridArea: 'content',\n },\n summaryArea: {\n gridArea: 'summary',\n marginBottom: theme.spacing(3),\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 {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 </>\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 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,4 +1,4 @@
1
- import { createApiFactory, discoveryApiRef, fetchApiRef, storageApiRef } from '@backstage/core-plugin-api';
1
+ import { discoveryApiRef, fetchApiRef, storageApiRef } from '@backstage/core-plugin-api';
2
2
  import { CatalogClient } from '@backstage/catalog-client';
3
3
  import { ApiBlueprint } from '@backstage/frontend-plugin-api';
4
4
  import { catalogApiRef, starredEntitiesApiRef, entityPresentationApiRef } from '@backstage/plugin-catalog-react';
@@ -6,36 +6,30 @@ import { DefaultEntityPresentationApi } from '../apis/EntityPresentationApi/Defa
6
6
  import { DefaultStarredEntitiesApi } from '../apis/StarredEntitiesApi/DefaultStarredEntitiesApi.esm.js';
7
7
 
8
8
  const catalogApi = ApiBlueprint.make({
9
- params: {
10
- factory: createApiFactory({
11
- api: catalogApiRef,
12
- deps: {
13
- discoveryApi: discoveryApiRef,
14
- fetchApi: fetchApiRef
15
- },
16
- factory: ({ discoveryApi, fetchApi }) => new CatalogClient({ discoveryApi, fetchApi })
17
- })
18
- }
9
+ params: (defineParams) => defineParams({
10
+ api: catalogApiRef,
11
+ deps: {
12
+ discoveryApi: discoveryApiRef,
13
+ fetchApi: fetchApiRef
14
+ },
15
+ factory: ({ discoveryApi, fetchApi }) => new CatalogClient({ discoveryApi, fetchApi })
16
+ })
19
17
  });
20
18
  const catalogStarredEntitiesApi = ApiBlueprint.make({
21
19
  name: "starred-entities",
22
- params: {
23
- factory: createApiFactory({
24
- api: starredEntitiesApiRef,
25
- deps: { storageApi: storageApiRef },
26
- factory: ({ storageApi }) => new DefaultStarredEntitiesApi({ storageApi })
27
- })
28
- }
20
+ params: (defineParams) => defineParams({
21
+ api: starredEntitiesApiRef,
22
+ deps: { storageApi: storageApiRef },
23
+ factory: ({ storageApi }) => new DefaultStarredEntitiesApi({ storageApi })
24
+ })
29
25
  });
30
26
  const entityPresentationApi = ApiBlueprint.make({
31
27
  name: "entity-presentation",
32
- params: {
33
- factory: createApiFactory({
34
- api: entityPresentationApiRef,
35
- deps: { catalogApiImp: catalogApiRef },
36
- factory: ({ catalogApiImp }) => DefaultEntityPresentationApi.create({ catalogApi: catalogApiImp })
37
- })
38
- }
28
+ params: (defineParams) => defineParams({
29
+ api: entityPresentationApiRef,
30
+ deps: { catalogApiImp: catalogApiRef },
31
+ factory: ({ catalogApiImp }) => DefaultEntityPresentationApi.create({ catalogApi: catalogApiImp })
32
+ })
39
33
  });
40
34
  var apis = [catalogApi, catalogStarredEntitiesApi, entityPresentationApi];
41
35
 
@@ -1 +1 @@
1
- {"version":3,"file":"apis.esm.js","sources":["../../src/alpha/apis.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 createApiFactory,\n discoveryApiRef,\n fetchApiRef,\n storageApiRef,\n} from '@backstage/core-plugin-api';\nimport { CatalogClient } from '@backstage/catalog-client';\nimport { ApiBlueprint } from '@backstage/frontend-plugin-api';\nimport {\n catalogApiRef,\n entityPresentationApiRef,\n starredEntitiesApiRef,\n} from '@backstage/plugin-catalog-react';\nimport {\n DefaultEntityPresentationApi,\n DefaultStarredEntitiesApi,\n} from '../apis';\n\nexport const catalogApi = ApiBlueprint.make({\n params: {\n factory: createApiFactory({\n api: catalogApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ discoveryApi, fetchApi }) =>\n new CatalogClient({ discoveryApi, fetchApi }),\n }),\n },\n});\n\nexport const catalogStarredEntitiesApi = ApiBlueprint.make({\n name: 'starred-entities',\n params: {\n factory: createApiFactory({\n api: starredEntitiesApiRef,\n deps: { storageApi: storageApiRef },\n factory: ({ storageApi }) =>\n new DefaultStarredEntitiesApi({ storageApi }),\n }),\n },\n});\n\nexport const entityPresentationApi = ApiBlueprint.make({\n name: 'entity-presentation',\n params: {\n factory: createApiFactory({\n api: entityPresentationApiRef,\n deps: { catalogApiImp: catalogApiRef },\n factory: ({ catalogApiImp }) =>\n DefaultEntityPresentationApi.create({ catalogApi: catalogApiImp }),\n }),\n },\n});\n\nexport default [catalogApi, catalogStarredEntitiesApi, entityPresentationApi];\n"],"names":[],"mappings":";;;;;;;AAkCa,MAAA,UAAA,GAAa,aAAa,IAAK,CAAA;AAAA,EAC1C,MAAQ,EAAA;AAAA,IACN,SAAS,gBAAiB,CAAA;AAAA,MACxB,GAAK,EAAA,aAAA;AAAA,MACL,IAAM,EAAA;AAAA,QACJ,YAAc,EAAA,eAAA;AAAA,QACd,QAAU,EAAA;AAAA,OACZ;AAAA,MACA,OAAA,EAAS,CAAC,EAAE,YAAc,EAAA,QAAA,EACxB,KAAA,IAAI,aAAc,CAAA,EAAE,YAAc,EAAA,QAAA,EAAU;AAAA,KAC/C;AAAA;AAEL,CAAC;AAEY,MAAA,yBAAA,GAA4B,aAAa,IAAK,CAAA;AAAA,EACzD,IAAM,EAAA,kBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,SAAS,gBAAiB,CAAA;AAAA,MACxB,GAAK,EAAA,qBAAA;AAAA,MACL,IAAA,EAAM,EAAE,UAAA,EAAY,aAAc,EAAA;AAAA,MAClC,OAAA,EAAS,CAAC,EAAE,UAAA,OACV,IAAI,yBAAA,CAA0B,EAAE,UAAA,EAAY;AAAA,KAC/C;AAAA;AAEL,CAAC;AAEY,MAAA,qBAAA,GAAwB,aAAa,IAAK,CAAA;AAAA,EACrD,IAAM,EAAA,qBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,SAAS,gBAAiB,CAAA;AAAA,MACxB,GAAK,EAAA,wBAAA;AAAA,MACL,IAAA,EAAM,EAAE,aAAA,EAAe,aAAc,EAAA;AAAA,MACrC,OAAA,EAAS,CAAC,EAAE,aAAc,EAAA,KACxB,6BAA6B,MAAO,CAAA,EAAE,UAAY,EAAA,aAAA,EAAe;AAAA,KACpE;AAAA;AAEL,CAAC;AAED,WAAe,CAAC,UAAY,EAAA,yBAAA,EAA2B,qBAAqB,CAAA;;;;"}
1
+ {"version":3,"file":"apis.esm.js","sources":["../../src/alpha/apis.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 discoveryApiRef,\n fetchApiRef,\n storageApiRef,\n} from '@backstage/core-plugin-api';\nimport { CatalogClient } from '@backstage/catalog-client';\nimport { ApiBlueprint } from '@backstage/frontend-plugin-api';\nimport {\n catalogApiRef,\n entityPresentationApiRef,\n starredEntitiesApiRef,\n} from '@backstage/plugin-catalog-react';\nimport {\n DefaultEntityPresentationApi,\n DefaultStarredEntitiesApi,\n} from '../apis';\n\nexport const catalogApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: catalogApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ discoveryApi, fetchApi }) =>\n new CatalogClient({ discoveryApi, fetchApi }),\n }),\n});\n\nexport const catalogStarredEntitiesApi = ApiBlueprint.make({\n name: 'starred-entities',\n params: defineParams =>\n defineParams({\n api: starredEntitiesApiRef,\n deps: { storageApi: storageApiRef },\n factory: ({ storageApi }) =>\n new DefaultStarredEntitiesApi({ storageApi }),\n }),\n});\n\nexport const entityPresentationApi = ApiBlueprint.make({\n name: 'entity-presentation',\n params: defineParams =>\n defineParams({\n api: entityPresentationApiRef,\n deps: { catalogApiImp: catalogApiRef },\n factory: ({ catalogApiImp }) =>\n DefaultEntityPresentationApi.create({ catalogApi: catalogApiImp }),\n }),\n});\n\nexport default [catalogApi, catalogStarredEntitiesApi, entityPresentationApi];\n"],"names":[],"mappings":";;;;;;;AAiCa,MAAA,UAAA,GAAa,aAAa,IAAK,CAAA;AAAA,EAC1C,MAAA,EAAQ,kBACN,YAAa,CAAA;AAAA,IACX,GAAK,EAAA,aAAA;AAAA,IACL,IAAM,EAAA;AAAA,MACJ,YAAc,EAAA,eAAA;AAAA,MACd,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,OAAA,EAAS,CAAC,EAAE,YAAc,EAAA,QAAA,EACxB,KAAA,IAAI,aAAc,CAAA,EAAE,YAAc,EAAA,QAAA,EAAU;AAAA,GAC/C;AACL,CAAC;AAEY,MAAA,yBAAA,GAA4B,aAAa,IAAK,CAAA;AAAA,EACzD,IAAM,EAAA,kBAAA;AAAA,EACN,MAAA,EAAQ,kBACN,YAAa,CAAA;AAAA,IACX,GAAK,EAAA,qBAAA;AAAA,IACL,IAAA,EAAM,EAAE,UAAA,EAAY,aAAc,EAAA;AAAA,IAClC,OAAA,EAAS,CAAC,EAAE,UAAA,OACV,IAAI,yBAAA,CAA0B,EAAE,UAAA,EAAY;AAAA,GAC/C;AACL,CAAC;AAEY,MAAA,qBAAA,GAAwB,aAAa,IAAK,CAAA;AAAA,EACrD,IAAM,EAAA,qBAAA;AAAA,EACN,MAAA,EAAQ,kBACN,YAAa,CAAA;AAAA,IACX,GAAK,EAAA,wBAAA;AAAA,IACL,IAAA,EAAM,EAAE,aAAA,EAAe,aAAc,EAAA;AAAA,IACrC,OAAA,EAAS,CAAC,EAAE,aAAc,EAAA,KACxB,6BAA6B,MAAO,CAAA,EAAE,UAAY,EAAA,aAAA,EAAe;AAAA,GACpE;AACL,CAAC;AAED,WAAe,CAAC,UAAY,EAAA,yBAAA,EAA2B,qBAAqB,CAAA;;;;"}
@@ -22,9 +22,9 @@ const catalogOverviewEntityContent = EntityContentBlueprint.makeWithOverrides({
22
22
  },
23
23
  factory: (originalFactory, { node, inputs }) => {
24
24
  return originalFactory({
25
- defaultPath: "/",
26
- defaultTitle: "Overview",
27
- defaultGroup: "overview",
25
+ path: "/",
26
+ title: "Overview",
27
+ group: "overview",
28
28
  loader: async () => {
29
29
  const LazyDefaultLayoutComponent = lazy(
30
30
  () => import('./DefaultEntityContentLayout.esm.js').then((m) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"entityContents.esm.js","sources":["../../src/alpha/entityContents.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 { lazy as reactLazy } from 'react';\nimport {\n coreExtensionData,\n createExtensionInput,\n ExtensionBoundary,\n} from '@backstage/frontend-plugin-api';\nimport {\n EntityCardBlueprint,\n EntityContentBlueprint,\n EntityContentLayoutBlueprint,\n EntityContentLayoutProps,\n} from '@backstage/plugin-catalog-react/alpha';\nimport { buildFilterFn } from './filter/FilterWrapper';\nimport { useEntity } from '@backstage/plugin-catalog-react';\n\nexport const catalogOverviewEntityContent =\n EntityContentBlueprint.makeWithOverrides({\n name: 'overview',\n inputs: {\n layouts: createExtensionInput([\n EntityContentLayoutBlueprint.dataRefs.filterFunction.optional(),\n EntityContentLayoutBlueprint.dataRefs.filterExpression.optional(),\n EntityContentLayoutBlueprint.dataRefs.component,\n ]),\n cards: createExtensionInput([\n coreExtensionData.reactElement,\n EntityContentBlueprint.dataRefs.filterFunction.optional(),\n EntityContentBlueprint.dataRefs.filterExpression.optional(),\n EntityCardBlueprint.dataRefs.type.optional(),\n ]),\n },\n factory: (originalFactory, { node, inputs }) => {\n return originalFactory({\n defaultPath: '/',\n defaultTitle: 'Overview',\n defaultGroup: 'overview',\n loader: async () => {\n const LazyDefaultLayoutComponent = reactLazy(() =>\n import('./DefaultEntityContentLayout').then(m => ({\n default: m.DefaultEntityContentLayout,\n })),\n );\n\n const DefaultLayoutComponent = (props: EntityContentLayoutProps) => {\n return (\n <ExtensionBoundary node={node}>\n <LazyDefaultLayoutComponent {...props} />\n </ExtensionBoundary>\n );\n };\n\n const layouts = [\n ...inputs.layouts.map(layout => ({\n filter: buildFilterFn(\n layout.get(\n EntityContentLayoutBlueprint.dataRefs.filterFunction,\n ),\n layout.get(\n EntityContentLayoutBlueprint.dataRefs.filterExpression,\n ),\n ),\n Component: layout.get(\n EntityContentLayoutBlueprint.dataRefs.component,\n ),\n })),\n {\n filter: buildFilterFn(),\n Component: DefaultLayoutComponent,\n },\n ];\n\n const cards = inputs.cards.map(card => ({\n element: card.get(coreExtensionData.reactElement),\n type: card.get(EntityCardBlueprint.dataRefs.type),\n filter: buildFilterFn(\n card.get(EntityContentBlueprint.dataRefs.filterFunction),\n card.get(EntityContentBlueprint.dataRefs.filterExpression),\n ),\n }));\n\n const Component = () => {\n const { entity } = useEntity();\n\n // Use the first layout that matches the entity filter\n const layout = layouts.find(l => l.filter(entity));\n if (!layout) {\n throw new Error('No layout found for entity'); // Shouldn't be able to happen\n }\n\n return (\n <layout.Component\n cards={cards.filter(card => card.filter(entity))}\n />\n );\n };\n\n return <Component />;\n },\n });\n },\n });\n\nexport default [catalogOverviewEntityContent];\n"],"names":["reactLazy"],"mappings":"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"}
1
+ {"version":3,"file":"entityContents.esm.js","sources":["../../src/alpha/entityContents.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 { lazy as reactLazy } from 'react';\nimport {\n coreExtensionData,\n createExtensionInput,\n ExtensionBoundary,\n} from '@backstage/frontend-plugin-api';\nimport {\n EntityCardBlueprint,\n EntityContentBlueprint,\n EntityContentLayoutBlueprint,\n EntityContentLayoutProps,\n} from '@backstage/plugin-catalog-react/alpha';\nimport { buildFilterFn } from './filter/FilterWrapper';\nimport { useEntity } from '@backstage/plugin-catalog-react';\n\nexport const catalogOverviewEntityContent =\n EntityContentBlueprint.makeWithOverrides({\n name: 'overview',\n inputs: {\n layouts: createExtensionInput([\n EntityContentLayoutBlueprint.dataRefs.filterFunction.optional(),\n EntityContentLayoutBlueprint.dataRefs.filterExpression.optional(),\n EntityContentLayoutBlueprint.dataRefs.component,\n ]),\n cards: createExtensionInput([\n coreExtensionData.reactElement,\n EntityContentBlueprint.dataRefs.filterFunction.optional(),\n EntityContentBlueprint.dataRefs.filterExpression.optional(),\n EntityCardBlueprint.dataRefs.type.optional(),\n ]),\n },\n factory: (originalFactory, { node, inputs }) => {\n return originalFactory({\n path: '/',\n title: 'Overview',\n group: 'overview',\n loader: async () => {\n const LazyDefaultLayoutComponent = reactLazy(() =>\n import('./DefaultEntityContentLayout').then(m => ({\n default: m.DefaultEntityContentLayout,\n })),\n );\n\n const DefaultLayoutComponent = (props: EntityContentLayoutProps) => {\n return (\n <ExtensionBoundary node={node}>\n <LazyDefaultLayoutComponent {...props} />\n </ExtensionBoundary>\n );\n };\n\n const layouts = [\n ...inputs.layouts.map(layout => ({\n filter: buildFilterFn(\n layout.get(\n EntityContentLayoutBlueprint.dataRefs.filterFunction,\n ),\n layout.get(\n EntityContentLayoutBlueprint.dataRefs.filterExpression,\n ),\n ),\n Component: layout.get(\n EntityContentLayoutBlueprint.dataRefs.component,\n ),\n })),\n {\n filter: buildFilterFn(),\n Component: DefaultLayoutComponent,\n },\n ];\n\n const cards = inputs.cards.map(card => ({\n element: card.get(coreExtensionData.reactElement),\n type: card.get(EntityCardBlueprint.dataRefs.type),\n filter: buildFilterFn(\n card.get(EntityContentBlueprint.dataRefs.filterFunction),\n card.get(EntityContentBlueprint.dataRefs.filterExpression),\n ),\n }));\n\n const Component = () => {\n const { entity } = useEntity();\n\n // Use the first layout that matches the entity filter\n const layout = layouts.find(l => l.filter(entity));\n if (!layout) {\n throw new Error('No layout found for entity'); // Shouldn't be able to happen\n }\n\n return (\n <layout.Component\n cards={cards.filter(card => card.filter(entity))}\n />\n );\n };\n\n return <Component />;\n },\n });\n },\n });\n\nexport default [catalogOverviewEntityContent];\n"],"names":["reactLazy"],"mappings":"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"}
@@ -25,7 +25,7 @@ const catalogPage = PageBlueprint.makeWithOverrides({
25
25
  },
26
26
  factory(originalFactory, { inputs, config }) {
27
27
  return originalFactory({
28
- defaultPath: "/catalog",
28
+ path: "/catalog",
29
29
  routeRef: convertLegacyRouteRef(rootRouteRef),
30
30
  loader: async () => {
31
31
  const { BaseCatalogPage } = await import('../components/CatalogPage/index.esm.js');
@@ -73,7 +73,7 @@ const catalogEntityPage = PageBlueprint.makeWithOverrides({
73
73
  },
74
74
  factory(originalFactory, { config, inputs }) {
75
75
  return originalFactory({
76
- defaultPath: "/catalog/:namespace/:kind/:name",
76
+ path: "/catalog/:namespace/:kind/:name",
77
77
  routeRef: convertLegacyRouteRef(entityRouteRef),
78
78
  loader: async () => {
79
79
  const { EntityLayout } = await import('./components/EntityLayout/index.esm.js');
@@ -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 defaultPath: '/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 defaultPath: '/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 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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"}
package/dist/alpha.d.ts CHANGED
@@ -33,33 +33,27 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
33
33
  name: undefined;
34
34
  config: {};
35
35
  configInput: {};
36
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.AnyApiFactory, "core.api.factory", {}>;
36
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.AnyApiFactory, "core.api.factory", {}>;
37
37
  inputs: {};
38
- params: {
39
- factory: _backstage_frontend_plugin_api.AnyApiFactory;
40
- };
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>;
41
39
  }>;
42
40
  "api:catalog/entity-presentation": _backstage_frontend_plugin_api.ExtensionDefinition<{
43
41
  kind: "api";
44
42
  name: "entity-presentation";
45
43
  config: {};
46
44
  configInput: {};
47
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.AnyApiFactory, "core.api.factory", {}>;
45
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.AnyApiFactory, "core.api.factory", {}>;
48
46
  inputs: {};
49
- params: {
50
- factory: _backstage_frontend_plugin_api.AnyApiFactory;
51
- };
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>;
52
48
  }>;
53
49
  "api:catalog/starred-entities": _backstage_frontend_plugin_api.ExtensionDefinition<{
54
50
  kind: "api";
55
51
  name: "starred-entities";
56
52
  config: {};
57
53
  configInput: {};
58
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.AnyApiFactory, "core.api.factory", {}>;
54
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.AnyApiFactory, "core.api.factory", {}>;
59
55
  inputs: {};
60
- params: {
61
- factory: _backstage_frontend_plugin_api.AnyApiFactory;
62
- };
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>;
63
57
  }>;
64
58
  "catalog-filter:catalog/kind": _backstage_frontend_plugin_api.ExtensionDefinition<{
65
59
  config: {
@@ -68,9 +62,9 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
68
62
  configInput: {
69
63
  initialFilter?: string | undefined;
70
64
  };
71
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
65
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
72
66
  inputs: {
73
- [x: string]: _backstage_frontend_plugin_api.ExtensionInput<_backstage_frontend_plugin_api.AnyExtensionDataRef, {
67
+ [x: string]: _backstage_frontend_plugin_api.ExtensionInput<_backstage_frontend_plugin_api.ExtensionDataRef, {
74
68
  optional: boolean;
75
69
  singleton: boolean;
76
70
  }>;
@@ -86,7 +80,7 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
86
80
  name: "lifecycle";
87
81
  config: {};
88
82
  configInput: {};
89
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
83
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
90
84
  inputs: {};
91
85
  params: {
92
86
  loader: () => Promise<JSX.Element>;
@@ -99,9 +93,9 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
99
93
  configInput: {
100
94
  initialFilter?: "all" | "owned" | "starred" | undefined;
101
95
  };
102
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
96
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
103
97
  inputs: {
104
- [x: string]: _backstage_frontend_plugin_api.ExtensionInput<_backstage_frontend_plugin_api.AnyExtensionDataRef, {
98
+ [x: string]: _backstage_frontend_plugin_api.ExtensionInput<_backstage_frontend_plugin_api.ExtensionDataRef, {
105
99
  optional: boolean;
106
100
  singleton: boolean;
107
101
  }>;
@@ -119,9 +113,9 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
119
113
  configInput: {
120
114
  mode?: "all" | "owners-only" | undefined;
121
115
  };
122
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
116
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
123
117
  inputs: {
124
- [x: string]: _backstage_frontend_plugin_api.ExtensionInput<_backstage_frontend_plugin_api.AnyExtensionDataRef, {
118
+ [x: string]: _backstage_frontend_plugin_api.ExtensionInput<_backstage_frontend_plugin_api.ExtensionDataRef, {
125
119
  optional: boolean;
126
120
  singleton: boolean;
127
121
  }>;
@@ -137,7 +131,7 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
137
131
  name: "namespace";
138
132
  config: {};
139
133
  configInput: {};
140
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
134
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
141
135
  inputs: {};
142
136
  params: {
143
137
  loader: () => Promise<JSX.Element>;
@@ -148,7 +142,7 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
148
142
  name: "processing-status";
149
143
  config: {};
150
144
  configInput: {};
151
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
145
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
152
146
  inputs: {};
153
147
  params: {
154
148
  loader: () => Promise<JSX.Element>;
@@ -159,7 +153,7 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
159
153
  name: "tag";
160
154
  config: {};
161
155
  configInput: {};
162
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
156
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
163
157
  inputs: {};
164
158
  params: {
165
159
  loader: () => Promise<JSX.Element>;
@@ -170,7 +164,7 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
170
164
  name: "type";
171
165
  config: {};
172
166
  configInput: {};
173
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
167
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}>;
174
168
  inputs: {};
175
169
  params: {
176
170
  loader: () => Promise<JSX.Element>;
@@ -185,11 +179,11 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
185
179
  filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
186
180
  type?: "content" | "summary" | "info" | undefined;
187
181
  };
188
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
182
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
189
183
  optional: true;
190
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
184
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
191
185
  optional: true;
192
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
186
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
193
187
  optional: true;
194
188
  }>;
195
189
  inputs: {
@@ -221,11 +215,11 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
221
215
  filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
222
216
  type?: "content" | "summary" | "info" | undefined;
223
217
  };
224
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
218
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
225
219
  optional: true;
226
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
220
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
227
221
  optional: true;
228
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
222
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
229
223
  optional: true;
230
224
  }>;
231
225
  inputs: {};
@@ -246,11 +240,11 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
246
240
  filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
247
241
  type?: "content" | "summary" | "info" | undefined;
248
242
  };
249
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
243
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
250
244
  optional: true;
251
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
245
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
252
246
  optional: true;
253
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
247
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
254
248
  optional: true;
255
249
  }>;
256
250
  inputs: {};
@@ -271,11 +265,11 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
271
265
  filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
272
266
  type?: "content" | "summary" | "info" | undefined;
273
267
  };
274
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
268
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
275
269
  optional: true;
276
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
270
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
277
271
  optional: true;
278
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
272
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
279
273
  optional: true;
280
274
  }>;
281
275
  inputs: {};
@@ -296,11 +290,11 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
296
290
  filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
297
291
  type?: "content" | "summary" | "info" | undefined;
298
292
  };
299
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
293
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
300
294
  optional: true;
301
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
295
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
302
296
  optional: true;
303
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
297
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
304
298
  optional: true;
305
299
  }>;
306
300
  inputs: {};
@@ -321,11 +315,11 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
321
315
  filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
322
316
  type?: "content" | "summary" | "info" | undefined;
323
317
  };
324
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
318
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
325
319
  optional: true;
326
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
320
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
327
321
  optional: true;
328
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
322
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
329
323
  optional: true;
330
324
  }>;
331
325
  inputs: {};
@@ -346,11 +340,11 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
346
340
  filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
347
341
  type?: "content" | "summary" | "info" | undefined;
348
342
  };
349
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
343
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
350
344
  optional: true;
351
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
345
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
352
346
  optional: true;
353
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
347
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
354
348
  optional: true;
355
349
  }>;
356
350
  inputs: {};
@@ -371,11 +365,11 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
371
365
  filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
372
366
  type?: "content" | "summary" | "info" | undefined;
373
367
  };
374
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
368
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
375
369
  optional: true;
376
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
370
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
377
371
  optional: true;
378
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
372
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
379
373
  optional: true;
380
374
  }>;
381
375
  inputs: {};
@@ -396,11 +390,11 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
396
390
  filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
397
391
  type?: "content" | "summary" | "info" | undefined;
398
392
  };
399
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
393
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
400
394
  optional: true;
401
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
395
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
402
396
  optional: true;
403
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
397
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
404
398
  optional: true;
405
399
  }>;
406
400
  inputs: {};
@@ -421,11 +415,11 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
421
415
  filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
422
416
  type?: "content" | "summary" | "info" | undefined;
423
417
  };
424
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
418
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
425
419
  optional: true;
426
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
420
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
427
421
  optional: true;
428
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
422
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_plugin_catalog_react_alpha.EntityCardType, "catalog.entity-card-type", {
429
423
  optional: true;
430
424
  }>;
431
425
  inputs: {};
@@ -448,13 +442,13 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
448
442
  path?: string | undefined;
449
443
  group?: string | false | undefined;
450
444
  };
451
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
445
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
452
446
  optional: true;
453
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-content-title", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
447
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
454
448
  optional: true;
455
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
449
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
456
450
  optional: true;
457
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-content-group", {
451
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-content-title", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-content-group", {
458
452
  optional: true;
459
453
  }>;
460
454
  inputs: {
@@ -480,10 +474,13 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
480
474
  kind: "entity-content";
481
475
  name: "overview";
482
476
  params: {
477
+ defaultPath?: [Error: `Use the 'path' param instead`];
478
+ path: string;
479
+ defaultTitle?: [Error: `Use the 'title' param instead`];
480
+ title: string;
481
+ defaultGroup?: [Error: `Use the 'group' param instead`];
482
+ group?: keyof typeof _backstage_plugin_catalog_react_alpha.defaultEntityContentGroups | (string & {});
483
483
  loader: () => Promise<JSX.Element>;
484
- defaultPath: string;
485
- defaultTitle: string;
486
- defaultGroup?: keyof typeof _backstage_plugin_catalog_react_alpha.defaultEntityContentGroups | (string & {});
487
484
  routeRef?: _backstage_frontend_plugin_api.RouteRef;
488
485
  filter?: string | _backstage_plugin_catalog_react_alpha.EntityPredicate | ((entity: _backstage_catalog_model.Entity) => boolean);
489
486
  };
@@ -497,7 +494,7 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
497
494
  configInput: {
498
495
  filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
499
496
  };
500
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
497
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
501
498
  optional: true;
502
499
  }>;
503
500
  inputs: {};
@@ -512,7 +509,7 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
512
509
  configInput: {
513
510
  filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
514
511
  };
515
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
512
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
516
513
  optional: true;
517
514
  }>;
518
515
  inputs: {};
@@ -527,7 +524,7 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
527
524
  configInput: {
528
525
  filter?: _backstage_plugin_catalog_react_alpha.EntityPredicate | undefined;
529
526
  };
530
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
527
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
531
528
  optional: true;
532
529
  }>;
533
530
  inputs: {};
@@ -546,11 +543,11 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
546
543
  label?: string | undefined;
547
544
  title?: string | undefined;
548
545
  };
549
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
546
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
550
547
  optional: true;
551
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
548
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<string, "catalog.entity-filter-expression", {
552
549
  optional: true;
553
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<() => _backstage_core_components.IconLinkVerticalProps, "entity-icon-link-props", {}>;
550
+ }> | _backstage_frontend_plugin_api.ExtensionDataRef<() => _backstage_core_components.IconLinkVerticalProps, "entity-icon-link-props", {}>;
554
551
  inputs: {};
555
552
  params: {
556
553
  useProps: () => Omit<_backstage_core_components.IconLinkVerticalProps, "color">;
@@ -562,7 +559,7 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
562
559
  name: undefined;
563
560
  config: {};
564
561
  configInput: {};
565
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<{
562
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<{
566
563
  title: string;
567
564
  icon: _backstage_core_plugin_api.IconComponent;
568
565
  routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
@@ -593,7 +590,7 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
593
590
  } & {
594
591
  path?: string | undefined;
595
592
  };
596
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
593
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
597
594
  optional: true;
598
595
  }>;
599
596
  inputs: {
@@ -605,7 +602,8 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
605
602
  kind: "page";
606
603
  name: undefined;
607
604
  params: {
608
- defaultPath: string;
605
+ defaultPath?: [Error: `Use the 'path' param instead`];
606
+ path: string;
609
607
  loader: () => Promise<JSX.Element>;
610
608
  routeRef?: _backstage_frontend_plugin_api.RouteRef;
611
609
  };
@@ -625,7 +623,7 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
625
623
  } & {
626
624
  path?: string | undefined;
627
625
  };
628
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
626
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
629
627
  optional: true;
630
628
  }>;
631
629
  inputs: {
@@ -659,7 +657,8 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
659
657
  kind: "page";
660
658
  name: "entity";
661
659
  params: {
662
- defaultPath: string;
660
+ defaultPath?: [Error: `Use the 'path' param instead`];
661
+ path: string;
663
662
  loader: () => Promise<JSX.Element>;
664
663
  routeRef?: _backstage_frontend_plugin_api.RouteRef;
665
664
  };
@@ -673,7 +672,7 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
673
672
  configInput: {
674
673
  noTrack?: boolean | undefined;
675
674
  };
676
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<{
675
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<{
677
676
  predicate?: _backstage_plugin_search_react_alpha.SearchResultItemExtensionPredicate;
678
677
  component: _backstage_plugin_search_react_alpha.SearchResultItemExtensionComponent;
679
678
  }, "search.search-result-list-item.item", {}>;
@@ -1,5 +1,5 @@
1
1
  var name = "@backstage/plugin-catalog";
2
- var version = "1.31.2-next.0";
2
+ var version = "1.31.2-next.2";
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.31.2-next.0",
3
+ "version": "1.31.2-next.2",
4
4
  "description": "The Backstage plugin for browsing the Backstage catalog",
5
5
  "backstage": {
6
6
  "role": "frontend-plugin",
@@ -70,22 +70,22 @@
70
70
  "test": "backstage-cli package test"
71
71
  },
72
72
  "dependencies": {
73
- "@backstage/catalog-client": "1.10.2",
73
+ "@backstage/catalog-client": "1.11.0-next.0",
74
74
  "@backstage/catalog-model": "1.7.5",
75
- "@backstage/core-compat-api": "0.4.5-next.0",
76
- "@backstage/core-components": "0.17.4",
75
+ "@backstage/core-compat-api": "0.5.0-next.2",
76
+ "@backstage/core-components": "0.17.5-next.1",
77
77
  "@backstage/core-plugin-api": "1.10.9",
78
78
  "@backstage/errors": "1.2.7",
79
- "@backstage/frontend-plugin-api": "0.10.4",
79
+ "@backstage/frontend-plugin-api": "0.11.0-next.1",
80
80
  "@backstage/integration-react": "1.2.9",
81
81
  "@backstage/plugin-catalog-common": "1.1.5",
82
- "@backstage/plugin-catalog-react": "1.19.2-next.0",
82
+ "@backstage/plugin-catalog-react": "1.20.0-next.2",
83
83
  "@backstage/plugin-permission-react": "0.4.36",
84
- "@backstage/plugin-scaffolder-common": "1.6.0",
84
+ "@backstage/plugin-scaffolder-common": "1.7.0-next.0",
85
85
  "@backstage/plugin-search-common": "1.2.19",
86
- "@backstage/plugin-search-react": "1.9.2",
86
+ "@backstage/plugin-search-react": "1.9.3-next.1",
87
87
  "@backstage/plugin-techdocs-common": "0.1.1",
88
- "@backstage/plugin-techdocs-react": "1.3.1",
88
+ "@backstage/plugin-techdocs-react": "1.3.2-next.0",
89
89
  "@backstage/types": "1.2.1",
90
90
  "@backstage/version-bridge": "1.0.11",
91
91
  "@material-ui/core": "^4.12.2",
@@ -102,12 +102,12 @@
102
102
  "zen-observable": "^0.10.0"
103
103
  },
104
104
  "devDependencies": {
105
- "@backstage/cli": "0.33.1",
105
+ "@backstage/cli": "0.34.0-next.1",
106
106
  "@backstage/core-app-api": "1.18.0",
107
- "@backstage/dev-utils": "1.1.13-next.0",
108
- "@backstage/frontend-test-utils": "0.3.5-next.0",
107
+ "@backstage/dev-utils": "1.1.13-next.1",
108
+ "@backstage/frontend-test-utils": "0.3.5-next.2",
109
109
  "@backstage/plugin-permission-common": "0.9.1",
110
- "@backstage/test-utils": "1.7.10",
110
+ "@backstage/test-utils": "1.7.11-next.0",
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",