@backstage/plugin-catalog 1.17.1-next.0 → 1.17.1-next.1

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,27 @@
1
1
  # @backstage/plugin-catalog
2
2
 
3
+ ## 1.17.1-next.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 2ac1630: Added support for passing in custom filters to `CatalogIndexPage`
8
+ - Updated dependencies
9
+ - @backstage/core-components@0.14.1-next.1
10
+ - @backstage/plugin-catalog-react@1.10.1-next.1
11
+ - @backstage/core-plugin-api@1.9.1-next.1
12
+ - @backstage/integration-react@1.1.25-next.1
13
+ - @backstage/plugin-permission-react@0.4.21-next.1
14
+ - @backstage/frontend-plugin-api@0.6.1-next.1
15
+ - @backstage/plugin-search-react@1.7.7-next.1
16
+ - @backstage/catalog-client@1.6.1-next.0
17
+ - @backstage/catalog-model@1.4.5-next.0
18
+ - @backstage/core-compat-api@0.2.1-next.1
19
+ - @backstage/errors@1.2.4-next.0
20
+ - @backstage/types@1.1.1
21
+ - @backstage/plugin-catalog-common@1.0.22-next.1
22
+ - @backstage/plugin-scaffolder-common@1.5.1-next.1
23
+ - @backstage/plugin-search-common@1.2.11-next.1
24
+
3
25
  ## 1.17.1-next.0
4
26
 
5
27
  ### Patch Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-catalog",
3
- "version": "1.17.1-next.0",
3
+ "version": "1.17.1-next.1",
4
4
  "main": "../dist/alpha.esm.js",
5
5
  "module": "../dist/alpha.esm.js",
6
6
  "types": "../dist/alpha.d.ts"
package/dist/alpha.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- export { c as createCatalogFilterExtension, p as default } from './esm/alpha-c0cbae2d.esm.js';
1
+ export { c as createCatalogFilterExtension, p as default } from './esm/alpha-a48529f6.esm.js';
2
2
  import '@backstage/core-compat-api';
3
3
  import '@backstage/frontend-plugin-api';
4
4
  import '@backstage/plugin-catalog-react';
@@ -1,7 +1,7 @@
1
1
  import { useEntity } from '@backstage/plugin-catalog-react';
2
2
  import Grid from '@material-ui/core/Grid';
3
3
  import React from 'react';
4
- import { F as FilterWrapper } from './alpha-c0cbae2d.esm.js';
4
+ import { F as FilterWrapper } from './alpha-a48529f6.esm.js';
5
5
  import { d as EntitySwitch, i as isOrphan, E as EntityOrphanWarning, h as hasRelationWarnings, a as EntityRelationWarning, c as hasCatalogProcessingErrors, b as EntityProcessingErrorsPanel } from './EntitySwitch-b8889a58.esm.js';
6
6
  import '@backstage/core-compat-api';
7
7
  import '@backstage/frontend-plugin-api';
@@ -42,4 +42,4 @@ function EntityOverviewPage(props) {
42
42
  }
43
43
 
44
44
  export { EntityOverviewPage };
45
- //# sourceMappingURL=EntityOverviewPage-65f737c4.esm.js.map
45
+ //# sourceMappingURL=EntityOverviewPage-d6f1b492.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityOverviewPage-65f737c4.esm.js","sources":["../../src/alpha/EntityOverviewPage.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 { Entity } from '@backstage/catalog-model';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport Grid from '@material-ui/core/Grid';\nimport React from 'react';\nimport { FilterWrapper } from './filter/FilterWrapper';\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';\n\ninterface EntityOverviewPageProps {\n cards: Array<{\n element: React.JSX.Element;\n filterFunction?: (entity: Entity) => boolean;\n filterExpression?: string;\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 EntityOverviewPage(props: EntityOverviewPageProps) {\n const { entity } = useEntity();\n return (\n <Grid container spacing={3} alignItems=\"stretch\">\n {entityWarningContent}\n {props.cards.map((card, index) => (\n <FilterWrapper key={index} entity={entity} {...card} />\n ))}\n </Grid>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,MAAM,oBACJ,mBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBACG,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,YAAA,CAAa,IAAb,EAAA,EAAkB,EAAI,EAAA,QAAA,EAAA,kBACpB,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,mBAAA,EAAA,IAAoB,CACvB,CACF,CACF,CAAA,kBAEC,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,YAAA,CAAa,IAAb,EAAA,EAAkB,EAAI,EAAA,mBAAA,EAAA,kBACpB,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,qBAAA,EAAA,IAAsB,CACzB,CACF,CACF,CAAA,kBAEC,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,YAAA,CAAa,IAAb,EAAA,EAAkB,EAAI,EAAA,0BAAA,EAAA,kBACpB,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,2BAAA,EAAA,IAA4B,CAC/B,CACF,CACF,CACF,CAAA,CAAA;AAGK,SAAS,mBAAmB,KAAgC,EAAA;AACjE,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA,CAAA;AAC7B,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,QAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CAAG,EAAA,UAAA,EAAW,SACpC,EAAA,EAAA,oBAAA,EACA,KAAM,CAAA,KAAA,CAAM,IAAI,CAAC,IAAA,EAAM,KACtB,qBAAA,KAAA,CAAA,aAAA,CAAC,aAAc,EAAA,EAAA,GAAA,EAAK,OAAO,MAAiB,EAAA,GAAG,IAAM,EAAA,CACtD,CACH,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"EntityOverviewPage-d6f1b492.esm.js","sources":["../../src/alpha/EntityOverviewPage.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 { Entity } from '@backstage/catalog-model';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport Grid from '@material-ui/core/Grid';\nimport React from 'react';\nimport { FilterWrapper } from './filter/FilterWrapper';\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';\n\ninterface EntityOverviewPageProps {\n cards: Array<{\n element: React.JSX.Element;\n filterFunction?: (entity: Entity) => boolean;\n filterExpression?: string;\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 EntityOverviewPage(props: EntityOverviewPageProps) {\n const { entity } = useEntity();\n return (\n <Grid container spacing={3} alignItems=\"stretch\">\n {entityWarningContent}\n {props.cards.map((card, index) => (\n <FilterWrapper key={index} entity={entity} {...card} />\n ))}\n </Grid>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,MAAM,oBACJ,mBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBACG,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,YAAA,CAAa,IAAb,EAAA,EAAkB,EAAI,EAAA,QAAA,EAAA,kBACpB,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,mBAAA,EAAA,IAAoB,CACvB,CACF,CACF,CAAA,kBAEC,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,YAAA,CAAa,IAAb,EAAA,EAAkB,EAAI,EAAA,mBAAA,EAAA,kBACpB,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,qBAAA,EAAA,IAAsB,CACzB,CACF,CACF,CAAA,kBAEC,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,YAAA,CAAa,IAAb,EAAA,EAAkB,EAAI,EAAA,0BAAA,EAAA,kBACpB,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,2BAAA,EAAA,IAA4B,CAC/B,CACF,CACF,CACF,CAAA,CAAA;AAGK,SAAS,mBAAmB,KAAgC,EAAA;AACjE,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA,CAAA;AAC7B,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,QAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CAAG,EAAA,UAAA,EAAW,SACpC,EAAA,EAAA,oBAAA,EACA,KAAM,CAAA,KAAA,CAAM,IAAI,CAAC,IAAA,EAAM,KACtB,qBAAA,KAAA,CAAA,aAAA,CAAC,aAAc,EAAA,EAAA,GAAA,EAAK,OAAO,MAAiB,EAAA,GAAG,IAAM,EAAA,CACtD,CACH,CAAA,CAAA;AAEJ;;;;"}
@@ -199,7 +199,7 @@ const catalogPage = createPageExtension({
199
199
  })
200
200
  },
201
201
  loader: async ({ inputs }) => {
202
- const { BaseCatalogPage } = await import('./index-fa99b6d9.esm.js');
202
+ const { BaseCatalogPage } = await import('./index-4080b52a.esm.js');
203
203
  const filters = inputs.filters.map((filter) => filter.output.element);
204
204
  return compatWrapper(/* @__PURE__ */ React.createElement(BaseCatalogPage, { filters: /* @__PURE__ */ React.createElement(React.Fragment, null, filters) }));
205
205
  }
@@ -432,7 +432,7 @@ const catalogOverviewEntityContent = createEntityContentExtension({
432
432
  filterExpression: catalogExtensionData.entityFilterExpression.optional()
433
433
  })
434
434
  },
435
- loader: async ({ inputs }) => import('./EntityOverviewPage-65f737c4.esm.js').then((m) => /* @__PURE__ */ React.createElement(m.EntityOverviewPage, { cards: inputs.cards.map((c) => c.output) }))
435
+ loader: async ({ inputs }) => import('./EntityOverviewPage-d6f1b492.esm.js').then((m) => /* @__PURE__ */ React.createElement(m.EntityOverviewPage, { cards: inputs.cards.map((c) => c.output) }))
436
436
  });
437
437
  var entityContents = [catalogOverviewEntityContent];
438
438
 
@@ -468,4 +468,4 @@ var plugin = createPlugin({
468
468
  });
469
469
 
470
470
  export { FilterWrapper as F, createCatalogFilterExtension as c, plugin as p };
471
- //# sourceMappingURL=alpha-c0cbae2d.esm.js.map
471
+ //# sourceMappingURL=alpha-a48529f6.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alpha-c0cbae2d.esm.js","sources":["../../src/alpha/apis.tsx","../../src/alpha/filter/matrchers/createKindMatcher.ts","../../src/alpha/filter/matrchers/createTypeMatcher.ts","../../src/alpha/filter/matrchers/createIsMatcher.ts","../../src/alpha/filter/matrchers/createHasMatcher.ts","../../src/alpha/filter/parseFilterExpression.ts","../../src/alpha/filter/FilterWrapper.tsx","../../src/alpha/pages.tsx","../../src/alpha/createCatalogFilterExtension.tsx","../../src/alpha/filters.tsx","../../src/alpha/navItems.tsx","../../src/alpha/entityCards.tsx","../../src/alpha/entityContents.tsx","../../src/alpha/searchResultItems.tsx","../../src/alpha/plugin.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 { createApiExtension } from '@backstage/frontend-plugin-api';\nimport {\n catalogApiRef,\n starredEntitiesApiRef,\n} from '@backstage/plugin-catalog-react';\nimport { DefaultStarredEntitiesApi } from '../apis';\n\nexport const catalogApi = createApiExtension({\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\nexport const catalogStarredEntitiesApi = createApiExtension({\n factory: createApiFactory({\n api: starredEntitiesApiRef,\n deps: { storageApi: storageApiRef },\n factory: ({ storageApi }) => new DefaultStarredEntitiesApi({ storageApi }),\n }),\n});\n\nexport default [catalogApi, catalogStarredEntitiesApi];\n","/*\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 { EntityMatcherFn } from './types';\n\n/**\n * Matches on kind\n */\nexport function createKindMatcher(\n parameters: string[],\n _onParseError: (error: Error) => void,\n): EntityMatcherFn {\n const items = parameters.map(p => p.toLocaleLowerCase('en-US'));\n return entity => items.includes(entity.kind.toLocaleLowerCase('en-US'));\n}\n","/*\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 { EntityMatcherFn } from './types';\n\n/**\n * Matches on spec.type\n */\nexport function createTypeMatcher(\n parameters: string[],\n _onParseError: (error: Error) => void,\n): EntityMatcherFn {\n const items = parameters.map(p => p.toLocaleLowerCase('en-US'));\n return entity => {\n const value = entity.spec?.type;\n return (\n typeof value === 'string' &&\n items.includes(value.toLocaleLowerCase('en-US'))\n );\n };\n}\n","/*\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 { InputError } from '@backstage/errors';\nimport { EntityMatcherFn } from './types';\n\nconst allowedMatchers: Record<string, EntityMatcherFn> = {\n orphan: entity =>\n Boolean(entity.metadata.annotations?.['backstage.io/orphan']),\n};\n\n/**\n * Matches on different semantic properties of the entity\n */\nexport function createIsMatcher(\n parameters: string[],\n onParseError: (error: Error) => void,\n): EntityMatcherFn {\n const matchers = parameters.flatMap(parameter => {\n const matcher = allowedMatchers[parameter.toLocaleLowerCase('en-US')];\n if (!matcher) {\n const known = Object.keys(allowedMatchers).map(m => `'${m}'`);\n onParseError(\n new InputError(\n `'${parameter}' is not a valid parameter for 'is' filter expressions, expected one of ${known}`,\n ),\n );\n return [];\n }\n return [matcher];\n });\n\n return entity =>\n matchers.length ? matchers.some(matcher => matcher(entity)) : true;\n}\n","/*\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 { InputError } from '@backstage/errors';\nimport { EntityMatcherFn } from './types';\n\nconst allowedMatchers: Record<string, EntityMatcherFn> = {\n labels: entity => {\n return Object.keys(entity.metadata.labels ?? {}).length > 0;\n },\n links: entity => {\n return (entity.metadata.links ?? []).length > 0;\n },\n};\n\n/**\n * Matches on the non-empty presence of different parts of the entity\n */\nexport function createHasMatcher(\n parameters: string[],\n onParseError: (error: Error) => void,\n): EntityMatcherFn {\n const matchers = parameters.flatMap(parameter => {\n const matcher = allowedMatchers[parameter.toLocaleLowerCase('en-US')];\n if (!matcher) {\n const known = Object.keys(allowedMatchers).map(m => `'${m}'`);\n onParseError(\n new InputError(\n `'${parameter}' is not a valid parameter for 'has' filter expressions, expected one of ${known}`,\n ),\n );\n return [];\n }\n return [matcher];\n });\n\n return entity =>\n matchers.length ? matchers.some(matcher => matcher(entity)) : true;\n}\n","/*\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 { Entity } from '@backstage/catalog-model';\nimport { InputError } from '@backstage/errors';\nimport { EntityMatcherFn } from './matrchers/types';\nimport { createKindMatcher } from './matrchers/createKindMatcher';\nimport { createTypeMatcher } from './matrchers/createTypeMatcher';\nimport { createIsMatcher } from './matrchers/createIsMatcher';\nimport { createHasMatcher } from './matrchers/createHasMatcher';\n\nconst rootMatcherFactories: Record<\n string,\n (\n parameters: string[],\n onParseError: (error: Error) => void,\n ) => EntityMatcherFn\n> = {\n kind: createKindMatcher,\n type: createTypeMatcher,\n is: createIsMatcher,\n has: createHasMatcher,\n};\n\n/**\n * Parses a filter expression that decides whether to render an entity component\n * or not. Returns a function that matches entities based on that expression.\n *\n * @remarks\n *\n * Filter strings are on the form `kind:user,group is:orphan`. There's\n * effectively an AND between the space separated parts, and an OR between comma\n * separated parameters. So the example filter string semantically means\n * \"entities that are of either User or Group kind, and also are orphans\".\n *\n * The `expressionParseErrors` array contains any errors that were encountered\n * during initial parsing of the expression. Note that the parts of the input\n * expression that had errors are ignored entirely and parsing continues as if\n * they didn't exist.\n */\nexport function parseFilterExpression(expression: string): {\n filterFn: (entity: Entity) => boolean;\n expressionParseErrors: Error[];\n} {\n const expressionParseErrors: Error[] = [];\n\n const parts = splitFilterExpression(expression, e =>\n expressionParseErrors.push(e),\n );\n\n const matchers = parts.flatMap(part => {\n const factory = rootMatcherFactories[part.key];\n if (!factory) {\n const known = Object.keys(rootMatcherFactories).map(m => `'${m}'`);\n expressionParseErrors.push(\n new InputError(\n `'${part.key}' is not a valid filter expression key, expected one of ${known}`,\n ),\n );\n return [];\n }\n\n const matcher = factory(part.parameters, e =>\n expressionParseErrors.push(e),\n );\n return [matcher];\n });\n\n const filterFn = (entity: Entity) =>\n matchers.every(matcher => {\n try {\n return matcher(entity);\n } catch {\n return false;\n }\n });\n\n return {\n filterFn,\n expressionParseErrors,\n };\n}\n\nexport function splitFilterExpression(\n expression: string,\n onParseError: (error: Error) => void,\n): Array<{ key: string; parameters: string[] }> {\n const words = expression\n .split(' ')\n .map(w => w.trim())\n .filter(Boolean);\n\n const result = new Array<{ key: string; parameters: string[] }>();\n\n for (const word of words) {\n const match = word.match(/^([^:]+):(.+)$/);\n if (!match) {\n onParseError(\n new InputError(\n `'${word}' is not a valid filter expression, expected 'key:parameter' form`,\n ),\n );\n continue;\n }\n\n const key = match[1];\n const parameters = match[2].split(',').filter(Boolean); // silently ignore double commas\n\n result.push({ key, parameters });\n }\n\n return result;\n}\n","/*\n * Copyright 2024 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 { Entity } from '@backstage/catalog-model';\nimport Grid from '@material-ui/core/Grid';\nimport React, { useMemo } from 'react';\nimport { parseFilterExpression } from './parseFilterExpression';\n\n// Keeps track of what filter expression strings that we've seen duplicates of\n// with functions, or which emitted parsing errors for so far\nconst seenParseErrorExpressionStrings = new Set<string>();\nconst seenDuplicateExpressionStrings = new Set<string>();\n\n// Given an optional filter function and an optional filter expression, make\n// sure that at most one of them was given, and return a filter function that\n// does the right thing.\nexport function buildFilterFn(\n filterFunction?: (entity: Entity) => boolean,\n filterExpression?: string,\n): (entity: Entity) => boolean {\n if (\n filterFunction &&\n filterExpression &&\n !seenDuplicateExpressionStrings.has(filterExpression)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n `Duplicate entity filter methods found, both '${filterExpression}' as well as a callback function, which is not permitted - using the callback`,\n );\n seenDuplicateExpressionStrings.add(filterExpression);\n }\n\n const filter = filterFunction || filterExpression;\n if (!filter) {\n return () => true;\n } else if (typeof filter === 'function') {\n return subject => filter(subject);\n }\n\n const result = parseFilterExpression(filter);\n if (\n result.expressionParseErrors.length &&\n !seenParseErrorExpressionStrings.has(filter)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n `Error(s) in entity filter expression '${filter}'`,\n result.expressionParseErrors,\n );\n seenParseErrorExpressionStrings.add(filter);\n }\n\n return result.filterFn;\n}\n\n// Handles the memoized parsing of filter expressions\nexport function FilterWrapper(props: {\n entity: Entity;\n element: React.JSX.Element;\n filterFunction?: (entity: Entity) => boolean;\n filterExpression?: string;\n}) {\n const { entity, element, filterFunction, filterExpression } = props;\n\n const filterFn = useMemo(\n () => buildFilterFn(filterFunction, filterExpression),\n [filterFunction, filterExpression],\n );\n\n return filterFn(entity) ? (\n <Grid item md={6} xs={12}>\n {element}\n </Grid>\n ) : null;\n}\n","/*\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 React from 'react';\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n} from '@backstage/core-compat-api';\nimport {\n createPageExtension,\n coreExtensionData,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\nimport {\n AsyncEntityProvider,\n entityRouteRef,\n} from '@backstage/plugin-catalog-react';\nimport { catalogExtensionData } 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 = createPageExtension({\n defaultPath: '/catalog',\n routeRef: convertLegacyRouteRef(rootRouteRef),\n inputs: {\n filters: createExtensionInput({\n element: coreExtensionData.reactElement,\n }),\n },\n loader: async ({ inputs }) => {\n const { BaseCatalogPage } = await import('../components/CatalogPage');\n const filters = inputs.filters.map(filter => filter.output.element);\n return compatWrapper(<BaseCatalogPage filters={<>{filters}</>} />);\n },\n});\n\nexport const catalogEntityPage = createPageExtension({\n name: 'entity',\n defaultPath: '/catalog/:namespace/:kind/:name',\n routeRef: convertLegacyRouteRef(entityRouteRef),\n inputs: {\n contents: createExtensionInput({\n element: coreExtensionData.reactElement,\n path: coreExtensionData.routePath,\n routeRef: coreExtensionData.routeRef.optional(),\n title: catalogExtensionData.entityContentTitle,\n filterFunction: catalogExtensionData.entityFilterFunction.optional(),\n filterExpression: catalogExtensionData.entityFilterExpression.optional(),\n }),\n },\n loader: async ({ inputs }) => {\n const { EntityLayout } = await import('../components/EntityLayout');\n const Component = () => {\n return (\n <AsyncEntityProvider {...useEntityFromUrl()}>\n <EntityLayout>\n {inputs.contents.map(({ output }) => (\n <EntityLayout.Route\n key={output.path}\n path={output.path}\n title={output.title}\n if={buildFilterFn(\n output.filterFunction,\n output.filterExpression,\n )}\n >\n {output.element}\n </EntityLayout.Route>\n ))}\n </EntityLayout>\n </AsyncEntityProvider>\n );\n };\n return compatWrapper(<Component />);\n },\n});\n\nexport default [catalogPage, catalogEntityPage];\n","/*\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 React, { lazy } from 'react';\nimport {\n AnyExtensionInputMap,\n ExtensionBoundary,\n PortableSchema,\n coreExtensionData,\n createExtension,\n} from '@backstage/frontend-plugin-api';\n\n/** @alpha */\nexport function createCatalogFilterExtension<\n TInputs extends AnyExtensionInputMap,\n TConfig = never,\n>(options: {\n namespace?: string;\n name?: string;\n inputs?: TInputs;\n configSchema?: PortableSchema<TConfig>;\n loader: (options: { config: TConfig }) => Promise<JSX.Element>;\n}) {\n return createExtension({\n kind: 'catalog-filter',\n namespace: options.namespace,\n name: options.name,\n attachTo: { id: 'page:catalog', input: 'filters' },\n inputs: options.inputs ?? {},\n configSchema: options.configSchema,\n output: {\n element: coreExtensionData.reactElement,\n },\n factory({ config, node }) {\n const ExtensionComponent = lazy(() =>\n options\n .loader({ config })\n .then(element => ({ default: () => element })),\n );\n\n return {\n element: (\n <ExtensionBoundary node={node}>\n <ExtensionComponent />\n </ExtensionBoundary>\n ),\n };\n },\n });\n}\n","/*\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 React from 'react';\nimport { createCatalogFilterExtension } from './createCatalogFilterExtension';\nimport { createSchemaFromZod } from '@backstage/frontend-plugin-api';\n\nconst catalogTagCatalogFilter = createCatalogFilterExtension({\n name: 'tag',\n loader: async () => {\n const { EntityTagPicker } = await import('@backstage/plugin-catalog-react');\n return <EntityTagPicker />;\n },\n});\n\nconst catalogKindCatalogFilter = createCatalogFilterExtension({\n name: 'kind',\n configSchema: createSchemaFromZod(z =>\n z.object({\n initialFilter: z.string().default('component'),\n }),\n ),\n loader: async ({ config }) => {\n const { EntityKindPicker } = await import(\n '@backstage/plugin-catalog-react'\n );\n return <EntityKindPicker initialFilter={config.initialFilter} />;\n },\n});\n\nconst catalogTypeCatalogFilter = createCatalogFilterExtension({\n name: 'type',\n loader: async () => {\n const { EntityTypePicker } = await import(\n '@backstage/plugin-catalog-react'\n );\n return <EntityTypePicker />;\n },\n});\n\nconst catalogModeCatalogFilter = createCatalogFilterExtension({\n name: 'mode',\n configSchema: createSchemaFromZod(z =>\n z.object({\n mode: z.enum(['owners-only', 'all']).optional(),\n }),\n ),\n loader: async ({ config }) => {\n const { EntityOwnerPicker } = await import(\n '@backstage/plugin-catalog-react'\n );\n return <EntityOwnerPicker mode={config.mode} />;\n },\n});\n\nconst catalogNamespaceCatalogFilter = createCatalogFilterExtension({\n name: 'namespace',\n loader: async () => {\n const { EntityNamespacePicker } = await import(\n '@backstage/plugin-catalog-react'\n );\n return <EntityNamespacePicker />;\n },\n});\n\nconst catalogLifecycleCatalogFilter = createCatalogFilterExtension({\n name: 'lifecycle',\n loader: async () => {\n const { EntityLifecyclePicker } = await import(\n '@backstage/plugin-catalog-react'\n );\n return <EntityLifecyclePicker />;\n },\n});\n\nconst catalogProcessingStatusCatalogFilter = createCatalogFilterExtension({\n name: 'processing-status',\n loader: async () => {\n const { EntityProcessingStatusPicker } = await import(\n '@backstage/plugin-catalog-react'\n );\n return <EntityProcessingStatusPicker />;\n },\n});\n\nconst catalogListCatalogFilter = createCatalogFilterExtension({\n name: 'list',\n configSchema: createSchemaFromZod(z =>\n z.object({\n initialFilter: z.enum(['owned', 'starred', 'all']).default('owned'),\n }),\n ),\n loader: async ({ config }) => {\n const { UserListPicker } = await import('@backstage/plugin-catalog-react');\n return <UserListPicker initialFilter={config.initialFilter} />;\n },\n});\n\nexport default [\n catalogTagCatalogFilter,\n catalogKindCatalogFilter,\n catalogTypeCatalogFilter,\n catalogModeCatalogFilter,\n catalogNamespaceCatalogFilter,\n catalogLifecycleCatalogFilter,\n catalogProcessingStatusCatalogFilter,\n catalogListCatalogFilter,\n];\n","/*\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 HomeIcon from '@material-ui/icons/Home';\nimport { convertLegacyRouteRef } from '@backstage/core-compat-api';\nimport { createNavItemExtension } from '@backstage/frontend-plugin-api';\nimport { rootRouteRef } from '../routes';\n\nexport const catalogNavItem = createNavItemExtension({\n routeRef: convertLegacyRouteRef(rootRouteRef),\n title: 'Catalog',\n icon: HomeIcon,\n});\n\nexport default [catalogNavItem];\n","/*\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 React from 'react';\nimport { createEntityCardExtension } from '@backstage/plugin-catalog-react/alpha';\nimport { compatWrapper } from '@backstage/core-compat-api';\n\nexport const catalogAboutEntityCard = createEntityCardExtension({\n name: 'about',\n loader: async () =>\n import('../components/AboutCard').then(m =>\n compatWrapper(<m.AboutCard variant=\"gridItem\" />),\n ),\n});\n\nexport const catalogLinksEntityCard = createEntityCardExtension({\n name: 'links',\n filter: 'has:links',\n loader: async () =>\n import('../components/EntityLinksCard').then(m =>\n compatWrapper(<m.EntityLinksCard variant=\"gridItem\" />),\n ),\n});\n\nexport const catalogLabelsEntityCard = createEntityCardExtension({\n name: 'labels',\n filter: 'has:labels',\n loader: async () =>\n import('../components/EntityLabelsCard').then(m =>\n compatWrapper(<m.EntityLabelsCard variant=\"gridItem\" />),\n ),\n});\n\nexport const catalogDependsOnComponentsEntityCard = createEntityCardExtension({\n name: 'depends-on-components',\n loader: async () =>\n import('../components/DependsOnComponentsCard').then(m =>\n compatWrapper(<m.DependsOnComponentsCard variant=\"gridItem\" />),\n ),\n});\n\nexport const catalogDependsOnResourcesEntityCard = createEntityCardExtension({\n name: 'depends-on-resources',\n loader: async () =>\n import('../components/DependsOnResourcesCard').then(m =>\n compatWrapper(<m.DependsOnResourcesCard variant=\"gridItem\" />),\n ),\n});\n\nexport const catalogHasComponentsEntityCard = createEntityCardExtension({\n name: 'has-components',\n loader: async () =>\n import('../components/HasComponentsCard').then(m =>\n compatWrapper(<m.HasComponentsCard variant=\"gridItem\" />),\n ),\n});\n\nexport const catalogHasResourcesEntityCard = createEntityCardExtension({\n name: 'has-resources',\n loader: async () =>\n import('../components/HasResourcesCard').then(m =>\n compatWrapper(<m.HasResourcesCard variant=\"gridItem\" />),\n ),\n});\n\nexport const catalogHasSubcomponentsEntityCard = createEntityCardExtension({\n name: 'has-subcomponents',\n loader: async () =>\n import('../components/HasSubcomponentsCard').then(m =>\n compatWrapper(<m.HasSubcomponentsCard variant=\"gridItem\" />),\n ),\n});\n\nexport const catalogHasSystemsEntityCard = createEntityCardExtension({\n name: 'has-systems',\n loader: async () =>\n import('../components/HasSystemsCard').then(m =>\n compatWrapper(<m.HasSystemsCard variant=\"gridItem\" />),\n ),\n});\n\nexport default [\n catalogAboutEntityCard,\n catalogLinksEntityCard,\n catalogLabelsEntityCard,\n catalogDependsOnComponentsEntityCard,\n catalogDependsOnResourcesEntityCard,\n catalogHasComponentsEntityCard,\n catalogHasResourcesEntityCard,\n catalogHasSubcomponentsEntityCard,\n catalogHasSystemsEntityCard,\n];\n","/*\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 React from 'react';\nimport {\n coreExtensionData,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\nimport {\n createEntityContentExtension,\n catalogExtensionData,\n} from '@backstage/plugin-catalog-react/alpha';\n\nexport const catalogOverviewEntityContent = createEntityContentExtension({\n name: 'overview',\n defaultPath: '/',\n defaultTitle: 'Overview',\n disabled: false,\n inputs: {\n cards: createExtensionInput({\n element: coreExtensionData.reactElement,\n filterFunction: catalogExtensionData.entityFilterFunction.optional(),\n filterExpression: catalogExtensionData.entityFilterExpression.optional(),\n }),\n },\n loader: async ({ inputs }) =>\n import('./EntityOverviewPage').then(m => (\n <m.EntityOverviewPage cards={inputs.cards.map(c => c.output)} />\n )),\n});\n\nexport default [catalogOverviewEntityContent];\n","/*\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 { createSearchResultListItemExtension } from '@backstage/plugin-search-react/alpha';\n\nexport const catalogSearchResultListItem = createSearchResultListItemExtension({\n predicate: result => result.type === 'software-catalog',\n component: () =>\n import('../components/CatalogSearchResultListItem').then(\n m => m.CatalogSearchResultListItem,\n ),\n});\n\nexport default [catalogSearchResultListItem];\n","/*\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 { convertLegacyRouteRefs } from '@backstage/core-compat-api';\nimport { createPlugin } from '@backstage/frontend-plugin-api';\n\nimport { entityRouteRef } from '@backstage/plugin-catalog-react';\n\nimport {\n createComponentRouteRef,\n createFromTemplateRouteRef,\n rootRouteRef,\n unregisterRedirectRouteRef,\n viewTechDocRouteRef,\n} from '../routes';\n\nimport apis from './apis';\nimport pages from './pages';\nimport filters from './filters';\nimport navItems from './navItems';\nimport entityCards from './entityCards';\nimport entityContents from './entityContents';\nimport searchResultItems from './searchResultItems';\n\n/** @alpha */\nexport default createPlugin({\n id: 'catalog',\n routes: convertLegacyRouteRefs({\n catalogIndex: rootRouteRef,\n catalogEntity: entityRouteRef,\n }),\n externalRoutes: convertLegacyRouteRefs({\n viewTechDoc: viewTechDocRouteRef,\n createComponent: createComponentRouteRef,\n createFromTemplate: createFromTemplateRouteRef,\n unregisterRedirect: unregisterRedirectRouteRef,\n }),\n extensions: [\n ...apis,\n ...pages,\n ...filters,\n ...navItems,\n ...entityCards,\n ...entityContents,\n ...searchResultItems,\n ],\n});\n"],"names":["allowedMatchers"],"mappings":"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"}
1
+ {"version":3,"file":"alpha-a48529f6.esm.js","sources":["../../src/alpha/apis.tsx","../../src/alpha/filter/matrchers/createKindMatcher.ts","../../src/alpha/filter/matrchers/createTypeMatcher.ts","../../src/alpha/filter/matrchers/createIsMatcher.ts","../../src/alpha/filter/matrchers/createHasMatcher.ts","../../src/alpha/filter/parseFilterExpression.ts","../../src/alpha/filter/FilterWrapper.tsx","../../src/alpha/pages.tsx","../../src/alpha/createCatalogFilterExtension.tsx","../../src/alpha/filters.tsx","../../src/alpha/navItems.tsx","../../src/alpha/entityCards.tsx","../../src/alpha/entityContents.tsx","../../src/alpha/searchResultItems.tsx","../../src/alpha/plugin.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 { createApiExtension } from '@backstage/frontend-plugin-api';\nimport {\n catalogApiRef,\n starredEntitiesApiRef,\n} from '@backstage/plugin-catalog-react';\nimport { DefaultStarredEntitiesApi } from '../apis';\n\nexport const catalogApi = createApiExtension({\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\nexport const catalogStarredEntitiesApi = createApiExtension({\n factory: createApiFactory({\n api: starredEntitiesApiRef,\n deps: { storageApi: storageApiRef },\n factory: ({ storageApi }) => new DefaultStarredEntitiesApi({ storageApi }),\n }),\n});\n\nexport default [catalogApi, catalogStarredEntitiesApi];\n","/*\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 { EntityMatcherFn } from './types';\n\n/**\n * Matches on kind\n */\nexport function createKindMatcher(\n parameters: string[],\n _onParseError: (error: Error) => void,\n): EntityMatcherFn {\n const items = parameters.map(p => p.toLocaleLowerCase('en-US'));\n return entity => items.includes(entity.kind.toLocaleLowerCase('en-US'));\n}\n","/*\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 { EntityMatcherFn } from './types';\n\n/**\n * Matches on spec.type\n */\nexport function createTypeMatcher(\n parameters: string[],\n _onParseError: (error: Error) => void,\n): EntityMatcherFn {\n const items = parameters.map(p => p.toLocaleLowerCase('en-US'));\n return entity => {\n const value = entity.spec?.type;\n return (\n typeof value === 'string' &&\n items.includes(value.toLocaleLowerCase('en-US'))\n );\n };\n}\n","/*\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 { InputError } from '@backstage/errors';\nimport { EntityMatcherFn } from './types';\n\nconst allowedMatchers: Record<string, EntityMatcherFn> = {\n orphan: entity =>\n Boolean(entity.metadata.annotations?.['backstage.io/orphan']),\n};\n\n/**\n * Matches on different semantic properties of the entity\n */\nexport function createIsMatcher(\n parameters: string[],\n onParseError: (error: Error) => void,\n): EntityMatcherFn {\n const matchers = parameters.flatMap(parameter => {\n const matcher = allowedMatchers[parameter.toLocaleLowerCase('en-US')];\n if (!matcher) {\n const known = Object.keys(allowedMatchers).map(m => `'${m}'`);\n onParseError(\n new InputError(\n `'${parameter}' is not a valid parameter for 'is' filter expressions, expected one of ${known}`,\n ),\n );\n return [];\n }\n return [matcher];\n });\n\n return entity =>\n matchers.length ? matchers.some(matcher => matcher(entity)) : true;\n}\n","/*\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 { InputError } from '@backstage/errors';\nimport { EntityMatcherFn } from './types';\n\nconst allowedMatchers: Record<string, EntityMatcherFn> = {\n labels: entity => {\n return Object.keys(entity.metadata.labels ?? {}).length > 0;\n },\n links: entity => {\n return (entity.metadata.links ?? []).length > 0;\n },\n};\n\n/**\n * Matches on the non-empty presence of different parts of the entity\n */\nexport function createHasMatcher(\n parameters: string[],\n onParseError: (error: Error) => void,\n): EntityMatcherFn {\n const matchers = parameters.flatMap(parameter => {\n const matcher = allowedMatchers[parameter.toLocaleLowerCase('en-US')];\n if (!matcher) {\n const known = Object.keys(allowedMatchers).map(m => `'${m}'`);\n onParseError(\n new InputError(\n `'${parameter}' is not a valid parameter for 'has' filter expressions, expected one of ${known}`,\n ),\n );\n return [];\n }\n return [matcher];\n });\n\n return entity =>\n matchers.length ? matchers.some(matcher => matcher(entity)) : true;\n}\n","/*\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 { Entity } from '@backstage/catalog-model';\nimport { InputError } from '@backstage/errors';\nimport { EntityMatcherFn } from './matrchers/types';\nimport { createKindMatcher } from './matrchers/createKindMatcher';\nimport { createTypeMatcher } from './matrchers/createTypeMatcher';\nimport { createIsMatcher } from './matrchers/createIsMatcher';\nimport { createHasMatcher } from './matrchers/createHasMatcher';\n\nconst rootMatcherFactories: Record<\n string,\n (\n parameters: string[],\n onParseError: (error: Error) => void,\n ) => EntityMatcherFn\n> = {\n kind: createKindMatcher,\n type: createTypeMatcher,\n is: createIsMatcher,\n has: createHasMatcher,\n};\n\n/**\n * Parses a filter expression that decides whether to render an entity component\n * or not. Returns a function that matches entities based on that expression.\n *\n * @remarks\n *\n * Filter strings are on the form `kind:user,group is:orphan`. There's\n * effectively an AND between the space separated parts, and an OR between comma\n * separated parameters. So the example filter string semantically means\n * \"entities that are of either User or Group kind, and also are orphans\".\n *\n * The `expressionParseErrors` array contains any errors that were encountered\n * during initial parsing of the expression. Note that the parts of the input\n * expression that had errors are ignored entirely and parsing continues as if\n * they didn't exist.\n */\nexport function parseFilterExpression(expression: string): {\n filterFn: (entity: Entity) => boolean;\n expressionParseErrors: Error[];\n} {\n const expressionParseErrors: Error[] = [];\n\n const parts = splitFilterExpression(expression, e =>\n expressionParseErrors.push(e),\n );\n\n const matchers = parts.flatMap(part => {\n const factory = rootMatcherFactories[part.key];\n if (!factory) {\n const known = Object.keys(rootMatcherFactories).map(m => `'${m}'`);\n expressionParseErrors.push(\n new InputError(\n `'${part.key}' is not a valid filter expression key, expected one of ${known}`,\n ),\n );\n return [];\n }\n\n const matcher = factory(part.parameters, e =>\n expressionParseErrors.push(e),\n );\n return [matcher];\n });\n\n const filterFn = (entity: Entity) =>\n matchers.every(matcher => {\n try {\n return matcher(entity);\n } catch {\n return false;\n }\n });\n\n return {\n filterFn,\n expressionParseErrors,\n };\n}\n\nexport function splitFilterExpression(\n expression: string,\n onParseError: (error: Error) => void,\n): Array<{ key: string; parameters: string[] }> {\n const words = expression\n .split(' ')\n .map(w => w.trim())\n .filter(Boolean);\n\n const result = new Array<{ key: string; parameters: string[] }>();\n\n for (const word of words) {\n const match = word.match(/^([^:]+):(.+)$/);\n if (!match) {\n onParseError(\n new InputError(\n `'${word}' is not a valid filter expression, expected 'key:parameter' form`,\n ),\n );\n continue;\n }\n\n const key = match[1];\n const parameters = match[2].split(',').filter(Boolean); // silently ignore double commas\n\n result.push({ key, parameters });\n }\n\n return result;\n}\n","/*\n * Copyright 2024 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 { Entity } from '@backstage/catalog-model';\nimport Grid from '@material-ui/core/Grid';\nimport React, { useMemo } from 'react';\nimport { parseFilterExpression } from './parseFilterExpression';\n\n// Keeps track of what filter expression strings that we've seen duplicates of\n// with functions, or which emitted parsing errors for so far\nconst seenParseErrorExpressionStrings = new Set<string>();\nconst seenDuplicateExpressionStrings = new Set<string>();\n\n// Given an optional filter function and an optional filter expression, make\n// sure that at most one of them was given, and return a filter function that\n// does the right thing.\nexport function buildFilterFn(\n filterFunction?: (entity: Entity) => boolean,\n filterExpression?: string,\n): (entity: Entity) => boolean {\n if (\n filterFunction &&\n filterExpression &&\n !seenDuplicateExpressionStrings.has(filterExpression)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n `Duplicate entity filter methods found, both '${filterExpression}' as well as a callback function, which is not permitted - using the callback`,\n );\n seenDuplicateExpressionStrings.add(filterExpression);\n }\n\n const filter = filterFunction || filterExpression;\n if (!filter) {\n return () => true;\n } else if (typeof filter === 'function') {\n return subject => filter(subject);\n }\n\n const result = parseFilterExpression(filter);\n if (\n result.expressionParseErrors.length &&\n !seenParseErrorExpressionStrings.has(filter)\n ) {\n // eslint-disable-next-line no-console\n console.warn(\n `Error(s) in entity filter expression '${filter}'`,\n result.expressionParseErrors,\n );\n seenParseErrorExpressionStrings.add(filter);\n }\n\n return result.filterFn;\n}\n\n// Handles the memoized parsing of filter expressions\nexport function FilterWrapper(props: {\n entity: Entity;\n element: React.JSX.Element;\n filterFunction?: (entity: Entity) => boolean;\n filterExpression?: string;\n}) {\n const { entity, element, filterFunction, filterExpression } = props;\n\n const filterFn = useMemo(\n () => buildFilterFn(filterFunction, filterExpression),\n [filterFunction, filterExpression],\n );\n\n return filterFn(entity) ? (\n <Grid item md={6} xs={12}>\n {element}\n </Grid>\n ) : null;\n}\n","/*\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 React from 'react';\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n} from '@backstage/core-compat-api';\nimport {\n createPageExtension,\n coreExtensionData,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\nimport {\n AsyncEntityProvider,\n entityRouteRef,\n} from '@backstage/plugin-catalog-react';\nimport { catalogExtensionData } 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 = createPageExtension({\n defaultPath: '/catalog',\n routeRef: convertLegacyRouteRef(rootRouteRef),\n inputs: {\n filters: createExtensionInput({\n element: coreExtensionData.reactElement,\n }),\n },\n loader: async ({ inputs }) => {\n const { BaseCatalogPage } = await import('../components/CatalogPage');\n const filters = inputs.filters.map(filter => filter.output.element);\n return compatWrapper(<BaseCatalogPage filters={<>{filters}</>} />);\n },\n});\n\nexport const catalogEntityPage = createPageExtension({\n name: 'entity',\n defaultPath: '/catalog/:namespace/:kind/:name',\n routeRef: convertLegacyRouteRef(entityRouteRef),\n inputs: {\n contents: createExtensionInput({\n element: coreExtensionData.reactElement,\n path: coreExtensionData.routePath,\n routeRef: coreExtensionData.routeRef.optional(),\n title: catalogExtensionData.entityContentTitle,\n filterFunction: catalogExtensionData.entityFilterFunction.optional(),\n filterExpression: catalogExtensionData.entityFilterExpression.optional(),\n }),\n },\n loader: async ({ inputs }) => {\n const { EntityLayout } = await import('../components/EntityLayout');\n const Component = () => {\n return (\n <AsyncEntityProvider {...useEntityFromUrl()}>\n <EntityLayout>\n {inputs.contents.map(({ output }) => (\n <EntityLayout.Route\n key={output.path}\n path={output.path}\n title={output.title}\n if={buildFilterFn(\n output.filterFunction,\n output.filterExpression,\n )}\n >\n {output.element}\n </EntityLayout.Route>\n ))}\n </EntityLayout>\n </AsyncEntityProvider>\n );\n };\n return compatWrapper(<Component />);\n },\n});\n\nexport default [catalogPage, catalogEntityPage];\n","/*\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 React, { lazy } from 'react';\nimport {\n AnyExtensionInputMap,\n ExtensionBoundary,\n PortableSchema,\n coreExtensionData,\n createExtension,\n} from '@backstage/frontend-plugin-api';\n\n/** @alpha */\nexport function createCatalogFilterExtension<\n TInputs extends AnyExtensionInputMap,\n TConfig = never,\n>(options: {\n namespace?: string;\n name?: string;\n inputs?: TInputs;\n configSchema?: PortableSchema<TConfig>;\n loader: (options: { config: TConfig }) => Promise<JSX.Element>;\n}) {\n return createExtension({\n kind: 'catalog-filter',\n namespace: options.namespace,\n name: options.name,\n attachTo: { id: 'page:catalog', input: 'filters' },\n inputs: options.inputs ?? {},\n configSchema: options.configSchema,\n output: {\n element: coreExtensionData.reactElement,\n },\n factory({ config, node }) {\n const ExtensionComponent = lazy(() =>\n options\n .loader({ config })\n .then(element => ({ default: () => element })),\n );\n\n return {\n element: (\n <ExtensionBoundary node={node}>\n <ExtensionComponent />\n </ExtensionBoundary>\n ),\n };\n },\n });\n}\n","/*\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 React from 'react';\nimport { createCatalogFilterExtension } from './createCatalogFilterExtension';\nimport { createSchemaFromZod } from '@backstage/frontend-plugin-api';\n\nconst catalogTagCatalogFilter = createCatalogFilterExtension({\n name: 'tag',\n loader: async () => {\n const { EntityTagPicker } = await import('@backstage/plugin-catalog-react');\n return <EntityTagPicker />;\n },\n});\n\nconst catalogKindCatalogFilter = createCatalogFilterExtension({\n name: 'kind',\n configSchema: createSchemaFromZod(z =>\n z.object({\n initialFilter: z.string().default('component'),\n }),\n ),\n loader: async ({ config }) => {\n const { EntityKindPicker } = await import(\n '@backstage/plugin-catalog-react'\n );\n return <EntityKindPicker initialFilter={config.initialFilter} />;\n },\n});\n\nconst catalogTypeCatalogFilter = createCatalogFilterExtension({\n name: 'type',\n loader: async () => {\n const { EntityTypePicker } = await import(\n '@backstage/plugin-catalog-react'\n );\n return <EntityTypePicker />;\n },\n});\n\nconst catalogModeCatalogFilter = createCatalogFilterExtension({\n name: 'mode',\n configSchema: createSchemaFromZod(z =>\n z.object({\n mode: z.enum(['owners-only', 'all']).optional(),\n }),\n ),\n loader: async ({ config }) => {\n const { EntityOwnerPicker } = await import(\n '@backstage/plugin-catalog-react'\n );\n return <EntityOwnerPicker mode={config.mode} />;\n },\n});\n\nconst catalogNamespaceCatalogFilter = createCatalogFilterExtension({\n name: 'namespace',\n loader: async () => {\n const { EntityNamespacePicker } = await import(\n '@backstage/plugin-catalog-react'\n );\n return <EntityNamespacePicker />;\n },\n});\n\nconst catalogLifecycleCatalogFilter = createCatalogFilterExtension({\n name: 'lifecycle',\n loader: async () => {\n const { EntityLifecyclePicker } = await import(\n '@backstage/plugin-catalog-react'\n );\n return <EntityLifecyclePicker />;\n },\n});\n\nconst catalogProcessingStatusCatalogFilter = createCatalogFilterExtension({\n name: 'processing-status',\n loader: async () => {\n const { EntityProcessingStatusPicker } = await import(\n '@backstage/plugin-catalog-react'\n );\n return <EntityProcessingStatusPicker />;\n },\n});\n\nconst catalogListCatalogFilter = createCatalogFilterExtension({\n name: 'list',\n configSchema: createSchemaFromZod(z =>\n z.object({\n initialFilter: z.enum(['owned', 'starred', 'all']).default('owned'),\n }),\n ),\n loader: async ({ config }) => {\n const { UserListPicker } = await import('@backstage/plugin-catalog-react');\n return <UserListPicker initialFilter={config.initialFilter} />;\n },\n});\n\nexport default [\n catalogTagCatalogFilter,\n catalogKindCatalogFilter,\n catalogTypeCatalogFilter,\n catalogModeCatalogFilter,\n catalogNamespaceCatalogFilter,\n catalogLifecycleCatalogFilter,\n catalogProcessingStatusCatalogFilter,\n catalogListCatalogFilter,\n];\n","/*\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 HomeIcon from '@material-ui/icons/Home';\nimport { convertLegacyRouteRef } from '@backstage/core-compat-api';\nimport { createNavItemExtension } from '@backstage/frontend-plugin-api';\nimport { rootRouteRef } from '../routes';\n\nexport const catalogNavItem = createNavItemExtension({\n routeRef: convertLegacyRouteRef(rootRouteRef),\n title: 'Catalog',\n icon: HomeIcon,\n});\n\nexport default [catalogNavItem];\n","/*\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 React from 'react';\nimport { createEntityCardExtension } from '@backstage/plugin-catalog-react/alpha';\nimport { compatWrapper } from '@backstage/core-compat-api';\n\nexport const catalogAboutEntityCard = createEntityCardExtension({\n name: 'about',\n loader: async () =>\n import('../components/AboutCard').then(m =>\n compatWrapper(<m.AboutCard variant=\"gridItem\" />),\n ),\n});\n\nexport const catalogLinksEntityCard = createEntityCardExtension({\n name: 'links',\n filter: 'has:links',\n loader: async () =>\n import('../components/EntityLinksCard').then(m =>\n compatWrapper(<m.EntityLinksCard variant=\"gridItem\" />),\n ),\n});\n\nexport const catalogLabelsEntityCard = createEntityCardExtension({\n name: 'labels',\n filter: 'has:labels',\n loader: async () =>\n import('../components/EntityLabelsCard').then(m =>\n compatWrapper(<m.EntityLabelsCard variant=\"gridItem\" />),\n ),\n});\n\nexport const catalogDependsOnComponentsEntityCard = createEntityCardExtension({\n name: 'depends-on-components',\n loader: async () =>\n import('../components/DependsOnComponentsCard').then(m =>\n compatWrapper(<m.DependsOnComponentsCard variant=\"gridItem\" />),\n ),\n});\n\nexport const catalogDependsOnResourcesEntityCard = createEntityCardExtension({\n name: 'depends-on-resources',\n loader: async () =>\n import('../components/DependsOnResourcesCard').then(m =>\n compatWrapper(<m.DependsOnResourcesCard variant=\"gridItem\" />),\n ),\n});\n\nexport const catalogHasComponentsEntityCard = createEntityCardExtension({\n name: 'has-components',\n loader: async () =>\n import('../components/HasComponentsCard').then(m =>\n compatWrapper(<m.HasComponentsCard variant=\"gridItem\" />),\n ),\n});\n\nexport const catalogHasResourcesEntityCard = createEntityCardExtension({\n name: 'has-resources',\n loader: async () =>\n import('../components/HasResourcesCard').then(m =>\n compatWrapper(<m.HasResourcesCard variant=\"gridItem\" />),\n ),\n});\n\nexport const catalogHasSubcomponentsEntityCard = createEntityCardExtension({\n name: 'has-subcomponents',\n loader: async () =>\n import('../components/HasSubcomponentsCard').then(m =>\n compatWrapper(<m.HasSubcomponentsCard variant=\"gridItem\" />),\n ),\n});\n\nexport const catalogHasSystemsEntityCard = createEntityCardExtension({\n name: 'has-systems',\n loader: async () =>\n import('../components/HasSystemsCard').then(m =>\n compatWrapper(<m.HasSystemsCard variant=\"gridItem\" />),\n ),\n});\n\nexport default [\n catalogAboutEntityCard,\n catalogLinksEntityCard,\n catalogLabelsEntityCard,\n catalogDependsOnComponentsEntityCard,\n catalogDependsOnResourcesEntityCard,\n catalogHasComponentsEntityCard,\n catalogHasResourcesEntityCard,\n catalogHasSubcomponentsEntityCard,\n catalogHasSystemsEntityCard,\n];\n","/*\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 React from 'react';\nimport {\n coreExtensionData,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\nimport {\n createEntityContentExtension,\n catalogExtensionData,\n} from '@backstage/plugin-catalog-react/alpha';\n\nexport const catalogOverviewEntityContent = createEntityContentExtension({\n name: 'overview',\n defaultPath: '/',\n defaultTitle: 'Overview',\n disabled: false,\n inputs: {\n cards: createExtensionInput({\n element: coreExtensionData.reactElement,\n filterFunction: catalogExtensionData.entityFilterFunction.optional(),\n filterExpression: catalogExtensionData.entityFilterExpression.optional(),\n }),\n },\n loader: async ({ inputs }) =>\n import('./EntityOverviewPage').then(m => (\n <m.EntityOverviewPage cards={inputs.cards.map(c => c.output)} />\n )),\n});\n\nexport default [catalogOverviewEntityContent];\n","/*\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 { createSearchResultListItemExtension } from '@backstage/plugin-search-react/alpha';\n\nexport const catalogSearchResultListItem = createSearchResultListItemExtension({\n predicate: result => result.type === 'software-catalog',\n component: () =>\n import('../components/CatalogSearchResultListItem').then(\n m => m.CatalogSearchResultListItem,\n ),\n});\n\nexport default [catalogSearchResultListItem];\n","/*\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 { convertLegacyRouteRefs } from '@backstage/core-compat-api';\nimport { createPlugin } from '@backstage/frontend-plugin-api';\n\nimport { entityRouteRef } from '@backstage/plugin-catalog-react';\n\nimport {\n createComponentRouteRef,\n createFromTemplateRouteRef,\n rootRouteRef,\n unregisterRedirectRouteRef,\n viewTechDocRouteRef,\n} from '../routes';\n\nimport apis from './apis';\nimport pages from './pages';\nimport filters from './filters';\nimport navItems from './navItems';\nimport entityCards from './entityCards';\nimport entityContents from './entityContents';\nimport searchResultItems from './searchResultItems';\n\n/** @alpha */\nexport default createPlugin({\n id: 'catalog',\n routes: convertLegacyRouteRefs({\n catalogIndex: rootRouteRef,\n catalogEntity: entityRouteRef,\n }),\n externalRoutes: convertLegacyRouteRefs({\n viewTechDoc: viewTechDocRouteRef,\n createComponent: createComponentRouteRef,\n createFromTemplate: createFromTemplateRouteRef,\n unregisterRedirect: unregisterRedirectRouteRef,\n }),\n extensions: [\n ...apis,\n ...pages,\n ...filters,\n ...navItems,\n ...entityCards,\n ...entityContents,\n ...searchResultItems,\n ],\n});\n"],"names":["allowedMatchers"],"mappings":"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"}
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { useOutlet } from 'react-router-dom';
3
3
  import { PageWithHeader, Content, ContentHeader, CreateButton, SupportButton } from '@backstage/core-components';
4
4
  import { useApi, configApiRef, useRouteRef } from '@backstage/core-plugin-api';
5
- import { EntityListProvider, CatalogFilterLayout, EntityKindPicker, EntityTypePicker, UserListPicker, EntityOwnerPicker, EntityLifecyclePicker, EntityTagPicker, EntityProcessingStatusPicker, EntityNamespacePicker } from '@backstage/plugin-catalog-react';
5
+ import { EntityListProvider, CatalogFilterLayout, DefaultFilters } from '@backstage/plugin-catalog-react';
6
6
  import { c as createComponentRouteRef } from './routes-6e97578f.esm.js';
7
7
  import { C as CatalogTable } from './CatalogTable-0b3bd448.esm.js';
8
8
  import { createTranslationRef, useTranslationRef } from '@backstage/core-plugin-api/alpha';
@@ -69,12 +69,20 @@ function DefaultCatalogPage(props) {
69
69
  tableOptions = {},
70
70
  emptyContent,
71
71
  pagination,
72
- ownerPickerMode
72
+ ownerPickerMode,
73
+ filters
73
74
  } = props;
74
75
  return /* @__PURE__ */ React.createElement(
75
76
  BaseCatalogPage,
76
77
  {
77
- filters: /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(EntityKindPicker, { initialFilter: initialKind }), /* @__PURE__ */ React.createElement(EntityTypePicker, null), /* @__PURE__ */ React.createElement(UserListPicker, { initialFilter: initiallySelectedFilter }), /* @__PURE__ */ React.createElement(EntityOwnerPicker, { mode: ownerPickerMode }), /* @__PURE__ */ React.createElement(EntityLifecyclePicker, null), /* @__PURE__ */ React.createElement(EntityTagPicker, null), /* @__PURE__ */ React.createElement(EntityProcessingStatusPicker, null), /* @__PURE__ */ React.createElement(EntityNamespacePicker, null)),
78
+ filters: filters != null ? filters : /* @__PURE__ */ React.createElement(
79
+ DefaultFilters,
80
+ {
81
+ initialKind,
82
+ initiallySelectedFilter,
83
+ ownerPickerMode
84
+ }
85
+ ),
78
86
  content: /* @__PURE__ */ React.createElement(
79
87
  CatalogTable,
80
88
  {
@@ -95,4 +103,4 @@ function CatalogPage(props) {
95
103
  }
96
104
 
97
105
  export { BaseCatalogPage, CatalogPage, DefaultCatalogPage };
98
- //# sourceMappingURL=index-fa99b6d9.esm.js.map
106
+ //# sourceMappingURL=index-4080b52a.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-4080b52a.esm.js","sources":["../../src/translation.ts","../../src/components/CatalogPage/DefaultCatalogPage.tsx","../../src/components/CatalogPage/CatalogPage.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 { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/** @alpha */\nexport const catalogTranslationRef = createTranslationRef({\n id: 'catalog',\n messages: {\n indexPage: {\n title: `{{orgName}} Catalog`,\n createButtonTitle: 'Create',\n },\n },\n});\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Content,\n ContentHeader,\n CreateButton,\n PageWithHeader,\n SupportButton,\n TableColumn,\n TableProps,\n} from '@backstage/core-components';\nimport { configApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport {\n CatalogFilterLayout,\n EntityListProvider,\n UserListFilterKind,\n EntityOwnerPickerProps,\n} from '@backstage/plugin-catalog-react';\nimport React, { ReactNode } from 'react';\nimport { createComponentRouteRef } from '../../routes';\nimport { CatalogTable, CatalogTableRow } from '../CatalogTable';\nimport { catalogTranslationRef } from '../../translation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nimport { CatalogTableColumnsFunc } from '../CatalogTable/types';\nimport { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { DefaultFilters } from '@backstage/plugin-catalog-react';\n\n/** @internal */\nexport type BaseCatalogPageProps = {\n filters: ReactNode;\n content?: ReactNode;\n pagination?: boolean | { limit?: number };\n};\n\n/** @internal */\nexport function BaseCatalogPage(props: BaseCatalogPageProps) {\n const { filters, content = <CatalogTable />, pagination } = props;\n const orgName =\n useApi(configApiRef).getOptionalString('organization.name') ?? 'Backstage';\n const createComponentLink = useRouteRef(createComponentRouteRef);\n const { t } = useTranslationRef(catalogTranslationRef);\n const { allowed } = usePermission({\n permission: catalogEntityCreatePermission,\n });\n\n return (\n <PageWithHeader title={t('indexPage.title', { orgName })} themeId=\"home\">\n <Content>\n <ContentHeader title=\"\">\n {allowed && (\n <CreateButton\n title={t('indexPage.createButtonTitle')}\n to={createComponentLink && createComponentLink()}\n />\n )}\n <SupportButton>All your software catalog entities</SupportButton>\n </ContentHeader>\n <EntityListProvider pagination={pagination}>\n <CatalogFilterLayout>\n <CatalogFilterLayout.Filters>{filters}</CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>{content}</CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n </EntityListProvider>\n </Content>\n </PageWithHeader>\n );\n}\n\n/**\n * Props for root catalog pages.\n *\n * @public\n */\nexport interface DefaultCatalogPageProps {\n initiallySelectedFilter?: UserListFilterKind;\n columns?: TableColumn<CatalogTableRow>[] | CatalogTableColumnsFunc;\n actions?: TableProps<CatalogTableRow>['actions'];\n initialKind?: string;\n tableOptions?: TableProps<CatalogTableRow>['options'];\n emptyContent?: ReactNode;\n ownerPickerMode?: EntityOwnerPickerProps['mode'];\n pagination?: boolean | { limit?: number };\n filters?: ReactNode;\n}\n\nexport function DefaultCatalogPage(props: DefaultCatalogPageProps) {\n const {\n columns,\n actions,\n initiallySelectedFilter = 'owned',\n initialKind = 'component',\n tableOptions = {},\n emptyContent,\n pagination,\n ownerPickerMode,\n filters,\n } = props;\n\n return (\n <BaseCatalogPage\n filters={\n filters ?? (\n <DefaultFilters\n initialKind={initialKind}\n initiallySelectedFilter={initiallySelectedFilter}\n ownerPickerMode={ownerPickerMode}\n />\n )\n }\n content={\n <CatalogTable\n columns={columns}\n actions={actions}\n tableOptions={tableOptions}\n emptyContent={emptyContent}\n />\n }\n pagination={pagination}\n />\n );\n}\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { useOutlet } from 'react-router-dom';\nimport {\n DefaultCatalogPage,\n DefaultCatalogPageProps,\n} from './DefaultCatalogPage';\n\nexport function CatalogPage(props: DefaultCatalogPageProps) {\n const outlet = useOutlet();\n\n return outlet || <DefaultCatalogPage {...props} />;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBO,MAAM,wBAAwB,oBAAqB,CAAA;AAAA,EACxD,EAAI,EAAA,SAAA;AAAA,EACJ,QAAU,EAAA;AAAA,IACR,SAAW,EAAA;AAAA,MACT,KAAO,EAAA,CAAA,mBAAA,CAAA;AAAA,MACP,iBAAmB,EAAA,QAAA;AAAA,KACrB;AAAA,GACF;AACF,CAAC,CAAA;;ACwBM,SAAS,gBAAgB,KAA6B,EAAA;AAnD7D,EAAA,IAAA,EAAA,CAAA;AAoDE,EAAA,MAAM,EAAE,OAAS,EAAA,OAAA,uCAAW,YAAa,EAAA,IAAA,CAAA,EAAI,YAAe,GAAA,KAAA,CAAA;AAC5D,EAAA,MAAM,WACJ,EAAO,GAAA,MAAA,CAAA,YAAY,EAAE,iBAAkB,CAAA,mBAAmB,MAA1D,IAA+D,GAAA,EAAA,GAAA,WAAA,CAAA;AACjE,EAAM,MAAA,mBAAA,GAAsB,YAAY,uBAAuB,CAAA,CAAA;AAC/D,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,qBAAqB,CAAA,CAAA;AACrD,EAAM,MAAA,EAAE,OAAQ,EAAA,GAAI,aAAc,CAAA;AAAA,IAChC,UAAY,EAAA,6BAAA;AAAA,GACb,CAAA,CAAA;AAED,EAAA,2CACG,cAAe,EAAA,EAAA,KAAA,EAAO,CAAE,CAAA,iBAAA,EAAmB,EAAE,OAAQ,EAAC,CAAG,EAAA,OAAA,EAAQ,0BAC/D,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,sCACE,aAAc,EAAA,EAAA,KAAA,EAAM,MAClB,OACC,oBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,EAAE,6BAA6B,CAAA;AAAA,MACtC,EAAA,EAAI,uBAAuB,mBAAoB,EAAA;AAAA,KAAA;AAAA,GACjD,kBAED,KAAA,CAAA,aAAA,CAAA,aAAA,EAAA,IAAA,EAAc,oCAAkC,CACnD,mBACC,KAAA,CAAA,aAAA,CAAA,kBAAA,EAAA,EAAmB,UAClB,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,mBACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,oBAAoB,OAApB,EAAA,IAAA,EAA6B,OAAQ,CAAA,kBACrC,KAAA,CAAA,aAAA,CAAA,mBAAA,CAAoB,OAApB,EAAA,IAAA,EAA6B,OAAQ,CACxC,CACF,CACF,CACF,CAAA,CAAA;AAEJ,CAAA;AAmBO,SAAS,mBAAmB,KAAgC,EAAA;AACjE,EAAM,MAAA;AAAA,IACJ,OAAA;AAAA,IACA,OAAA;AAAA,IACA,uBAA0B,GAAA,OAAA;AAAA,IAC1B,WAAc,GAAA,WAAA;AAAA,IACd,eAAe,EAAC;AAAA,IAChB,YAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,OAAA;AAAA,GACE,GAAA,KAAA,CAAA;AAEJ,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,SACE,OACE,IAAA,IAAA,GAAA,OAAA,mBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,WAAA;AAAA,UACA,uBAAA;AAAA,UACA,eAAA;AAAA,SAAA;AAAA,OACF;AAAA,MAGJ,OACE,kBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,OAAA;AAAA,UACA,OAAA;AAAA,UACA,YAAA;AAAA,UACA,YAAA;AAAA,SAAA;AAAA,OACF;AAAA,MAEF,UAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ;;ACjHO,SAAS,YAAY,KAAgC,EAAA;AAC1D,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AAEzB,EAAA,OAAO,MAAU,oBAAA,KAAA,CAAA,aAAA,CAAC,kBAAoB,EAAA,EAAA,GAAG,KAAO,EAAA,CAAA,CAAA;AAClD;;;;"}
package/dist/index.d.ts CHANGED
@@ -509,6 +509,7 @@ interface DefaultCatalogPageProps {
509
509
  pagination?: boolean | {
510
510
  limit?: number;
511
511
  };
512
+ filters?: ReactNode;
512
513
  }
513
514
 
514
515
  /** @public */
package/dist/index.esm.js CHANGED
@@ -219,7 +219,7 @@ const catalogPlugin = createPlugin({
219
219
  const CatalogIndexPage = catalogPlugin.provide(
220
220
  createRoutableExtension({
221
221
  name: "CatalogIndexPage",
222
- component: () => import('./esm/index-fa99b6d9.esm.js').then((m) => m.CatalogPage),
222
+ component: () => import('./esm/index-4080b52a.esm.js').then((m) => m.CatalogPage),
223
223
  mountPoint: rootRouteRef
224
224
  })
225
225
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-catalog",
3
- "version": "1.17.1-next.0",
3
+ "version": "1.17.1-next.1",
4
4
  "description": "The Backstage plugin for browsing the Backstage catalog",
5
5
  "backstage": {
6
6
  "role": "frontend-plugin"
@@ -51,18 +51,18 @@
51
51
  "dependencies": {
52
52
  "@backstage/catalog-client": "^1.6.1-next.0",
53
53
  "@backstage/catalog-model": "^1.4.5-next.0",
54
- "@backstage/core-compat-api": "^0.2.1-next.0",
55
- "@backstage/core-components": "^0.14.1-next.0",
56
- "@backstage/core-plugin-api": "^1.9.1-next.0",
54
+ "@backstage/core-compat-api": "^0.2.1-next.1",
55
+ "@backstage/core-components": "^0.14.1-next.1",
56
+ "@backstage/core-plugin-api": "^1.9.1-next.1",
57
57
  "@backstage/errors": "^1.2.4-next.0",
58
- "@backstage/frontend-plugin-api": "^0.6.1-next.0",
59
- "@backstage/integration-react": "^1.1.25-next.0",
60
- "@backstage/plugin-catalog-common": "^1.0.22-next.0",
61
- "@backstage/plugin-catalog-react": "^1.10.1-next.0",
62
- "@backstage/plugin-permission-react": "^0.4.21-next.0",
63
- "@backstage/plugin-scaffolder-common": "^1.5.1-next.0",
64
- "@backstage/plugin-search-common": "^1.2.11-next.0",
65
- "@backstage/plugin-search-react": "^1.7.7-next.0",
58
+ "@backstage/frontend-plugin-api": "^0.6.1-next.1",
59
+ "@backstage/integration-react": "^1.1.25-next.1",
60
+ "@backstage/plugin-catalog-common": "^1.0.22-next.1",
61
+ "@backstage/plugin-catalog-react": "^1.10.1-next.1",
62
+ "@backstage/plugin-permission-react": "^0.4.21-next.1",
63
+ "@backstage/plugin-scaffolder-common": "^1.5.1-next.1",
64
+ "@backstage/plugin-search-common": "^1.2.11-next.1",
65
+ "@backstage/plugin-search-react": "^1.7.7-next.1",
66
66
  "@backstage/types": "^1.1.1",
67
67
  "@material-ui/core": "^4.12.2",
68
68
  "@material-ui/icons": "^4.9.1",
@@ -78,11 +78,11 @@
78
78
  "zen-observable": "^0.10.0"
79
79
  },
80
80
  "devDependencies": {
81
- "@backstage/cli": "^0.25.3-next.0",
82
- "@backstage/core-app-api": "^1.12.1-next.0",
83
- "@backstage/dev-utils": "^1.0.28-next.0",
84
- "@backstage/plugin-permission-common": "^0.7.13-next.0",
85
- "@backstage/test-utils": "^1.5.1-next.0",
81
+ "@backstage/cli": "^0.25.3-next.1",
82
+ "@backstage/core-app-api": "^1.12.1-next.1",
83
+ "@backstage/dev-utils": "^1.0.28-next.1",
84
+ "@backstage/plugin-permission-common": "^0.7.13-next.1",
85
+ "@backstage/test-utils": "^1.5.1-next.1",
86
86
  "@testing-library/dom": "^9.0.0",
87
87
  "@testing-library/jest-dom": "^6.0.0",
88
88
  "@testing-library/react": "^14.0.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-fa99b6d9.esm.js","sources":["../../src/translation.ts","../../src/components/CatalogPage/DefaultCatalogPage.tsx","../../src/components/CatalogPage/CatalogPage.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 { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/** @alpha */\nexport const catalogTranslationRef = createTranslationRef({\n id: 'catalog',\n messages: {\n indexPage: {\n title: `{{orgName}} Catalog`,\n createButtonTitle: 'Create',\n },\n },\n});\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Content,\n ContentHeader,\n CreateButton,\n PageWithHeader,\n SupportButton,\n TableColumn,\n TableProps,\n} from '@backstage/core-components';\nimport { configApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport {\n CatalogFilterLayout,\n EntityLifecyclePicker,\n EntityListProvider,\n EntityProcessingStatusPicker,\n EntityOwnerPicker,\n EntityTagPicker,\n EntityTypePicker,\n UserListFilterKind,\n UserListPicker,\n EntityKindPicker,\n EntityNamespacePicker,\n EntityOwnerPickerProps,\n} from '@backstage/plugin-catalog-react';\nimport React, { ReactNode } from 'react';\nimport { createComponentRouteRef } from '../../routes';\nimport { CatalogTable, CatalogTableRow } from '../CatalogTable';\nimport { catalogTranslationRef } from '../../translation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nimport { CatalogTableColumnsFunc } from '../CatalogTable/types';\nimport { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\n/** @internal */\nexport type BaseCatalogPageProps = {\n filters: ReactNode;\n content?: ReactNode;\n pagination?: boolean | { limit?: number };\n};\n\n/** @internal */\nexport function BaseCatalogPage(props: BaseCatalogPageProps) {\n const { filters, content = <CatalogTable />, pagination } = props;\n const orgName =\n useApi(configApiRef).getOptionalString('organization.name') ?? 'Backstage';\n const createComponentLink = useRouteRef(createComponentRouteRef);\n const { t } = useTranslationRef(catalogTranslationRef);\n const { allowed } = usePermission({\n permission: catalogEntityCreatePermission,\n });\n\n return (\n <PageWithHeader title={t('indexPage.title', { orgName })} themeId=\"home\">\n <Content>\n <ContentHeader title=\"\">\n {allowed && (\n <CreateButton\n title={t('indexPage.createButtonTitle')}\n to={createComponentLink && createComponentLink()}\n />\n )}\n <SupportButton>All your software catalog entities</SupportButton>\n </ContentHeader>\n <EntityListProvider pagination={pagination}>\n <CatalogFilterLayout>\n <CatalogFilterLayout.Filters>{filters}</CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>{content}</CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n </EntityListProvider>\n </Content>\n </PageWithHeader>\n );\n}\n\n/**\n * Props for root catalog pages.\n *\n * @public\n */\nexport interface DefaultCatalogPageProps {\n initiallySelectedFilter?: UserListFilterKind;\n columns?: TableColumn<CatalogTableRow>[] | CatalogTableColumnsFunc;\n actions?: TableProps<CatalogTableRow>['actions'];\n initialKind?: string;\n tableOptions?: TableProps<CatalogTableRow>['options'];\n emptyContent?: ReactNode;\n ownerPickerMode?: EntityOwnerPickerProps['mode'];\n pagination?: boolean | { limit?: number };\n}\n\nexport function DefaultCatalogPage(props: DefaultCatalogPageProps) {\n const {\n columns,\n actions,\n initiallySelectedFilter = 'owned',\n initialKind = 'component',\n tableOptions = {},\n emptyContent,\n pagination,\n ownerPickerMode,\n } = props;\n\n return (\n <BaseCatalogPage\n filters={\n <>\n <EntityKindPicker initialFilter={initialKind} />\n <EntityTypePicker />\n <UserListPicker initialFilter={initiallySelectedFilter} />\n <EntityOwnerPicker mode={ownerPickerMode} />\n <EntityLifecyclePicker />\n <EntityTagPicker />\n <EntityProcessingStatusPicker />\n <EntityNamespacePicker />\n </>\n }\n content={\n <CatalogTable\n columns={columns}\n actions={actions}\n tableOptions={tableOptions}\n emptyContent={emptyContent}\n />\n }\n pagination={pagination}\n />\n );\n}\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { useOutlet } from 'react-router-dom';\nimport {\n DefaultCatalogPage,\n DefaultCatalogPageProps,\n} from './DefaultCatalogPage';\n\nexport function CatalogPage(props: DefaultCatalogPageProps) {\n const outlet = useOutlet();\n\n return outlet || <DefaultCatalogPage {...props} />;\n}\n"],"names":[],"mappings":"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"}