@backstage/plugin-catalog 1.18.1 → 1.19.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -0
- package/alpha/package.json +1 -1
- package/dist/alpha.esm.js +1 -1
- package/dist/esm/{CatalogTable-BvyJNYOs.esm.js → CatalogTable-D9UBRyWs.esm.js} +30 -8
- package/dist/esm/CatalogTable-D9UBRyWs.esm.js.map +1 -0
- package/dist/esm/{EntityOverviewPage-j7yeui2y.esm.js → EntityOverviewPage-Bzd86gsX.esm.js} +2 -2
- package/dist/esm/{EntityOverviewPage-j7yeui2y.esm.js.map → EntityOverviewPage-Bzd86gsX.esm.js.map} +1 -1
- package/dist/esm/{alpha-C2vJQr2i.esm.js → alpha-DdRYU8jw.esm.js} +3 -3
- package/dist/esm/{alpha-C2vJQr2i.esm.js.map → alpha-DdRYU8jw.esm.js.map} +1 -1
- package/dist/esm/{index-BIX2jJZf.esm.js → index-tUif74w6.esm.js} +3 -2
- package/dist/esm/{index-BIX2jJZf.esm.js.map → index-tUif74w6.esm.js.map} +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.esm.js +7 -3
- package/dist/index.esm.js.map +1 -1
- package/package.json +12 -12
- package/dist/esm/CatalogTable-BvyJNYOs.esm.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,53 @@
|
|
|
1
1
|
# @backstage/plugin-catalog
|
|
2
2
|
|
|
3
|
+
## 1.19.0-next.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 18c7f12: Add `isApiType()` to EntitySwitch routing functions.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies
|
|
12
|
+
- @backstage/core-components@0.14.4-next.0
|
|
13
|
+
- @backstage/catalog-client@1.6.3
|
|
14
|
+
- @backstage/catalog-model@1.4.5
|
|
15
|
+
- @backstage/core-compat-api@0.2.4-next.0
|
|
16
|
+
- @backstage/core-plugin-api@1.9.1
|
|
17
|
+
- @backstage/errors@1.2.4
|
|
18
|
+
- @backstage/frontend-plugin-api@0.6.4-next.0
|
|
19
|
+
- @backstage/integration-react@1.1.26-next.0
|
|
20
|
+
- @backstage/types@1.1.1
|
|
21
|
+
- @backstage/plugin-catalog-common@1.0.22
|
|
22
|
+
- @backstage/plugin-catalog-react@1.11.3-next.0
|
|
23
|
+
- @backstage/plugin-permission-react@0.4.21
|
|
24
|
+
- @backstage/plugin-scaffolder-common@1.5.1
|
|
25
|
+
- @backstage/plugin-search-common@1.2.11
|
|
26
|
+
- @backstage/plugin-search-react@1.7.10-next.0
|
|
27
|
+
|
|
28
|
+
## 1.18.2
|
|
29
|
+
|
|
30
|
+
### Patch Changes
|
|
31
|
+
|
|
32
|
+
- e8f026a: Use ESM exports of react-use library
|
|
33
|
+
- bbbd510: `CatalogIndexPage` now uses `EntitySearchBar` for text-based filtering of entities, saving the search text in the query parameters and debouncing the server requests.
|
|
34
|
+
- Updated dependencies
|
|
35
|
+
- @backstage/catalog-client@1.6.3
|
|
36
|
+
- @backstage/core-components@0.14.3
|
|
37
|
+
- @backstage/plugin-catalog-react@1.11.2
|
|
38
|
+
- @backstage/plugin-search-react@1.7.9
|
|
39
|
+
- @backstage/frontend-plugin-api@0.6.3
|
|
40
|
+
- @backstage/integration-react@1.1.25
|
|
41
|
+
- @backstage/core-compat-api@0.2.3
|
|
42
|
+
- @backstage/core-plugin-api@1.9.1
|
|
43
|
+
- @backstage/catalog-model@1.4.5
|
|
44
|
+
- @backstage/errors@1.2.4
|
|
45
|
+
- @backstage/types@1.1.1
|
|
46
|
+
- @backstage/plugin-catalog-common@1.0.22
|
|
47
|
+
- @backstage/plugin-permission-react@0.4.21
|
|
48
|
+
- @backstage/plugin-scaffolder-common@1.5.1
|
|
49
|
+
- @backstage/plugin-search-common@1.2.11
|
|
50
|
+
|
|
3
51
|
## 1.18.1
|
|
4
52
|
|
|
5
53
|
### Patch Changes
|
package/alpha/package.json
CHANGED
package/dist/alpha.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { c as createCatalogFilterExtension, p as default } from './esm/alpha-
|
|
1
|
+
export { c as createCatalogFilterExtension, p as default } from './esm/alpha-DdRYU8jw.esm.js';
|
|
2
2
|
import '@backstage/core-compat-api';
|
|
3
3
|
import '@backstage/frontend-plugin-api';
|
|
4
4
|
import '@backstage/plugin-catalog-react';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { RELATION_PART_OF, RELATION_OWNED_BY, stringifyEntityRef, ANNOTATION_VIEW_URL, ANNOTATION_EDIT_URL } from '@backstage/catalog-model';
|
|
2
2
|
import { OverflowTooltip, Table, WarningPanel, CodeSnippet } from '@backstage/core-components';
|
|
3
|
-
import { EntityRefLink, EntityRefLinks, humanizeEntityRef,
|
|
3
|
+
import { EntityRefLink, EntityRefLinks, humanizeEntityRef, EntitySearchBar, useStarredEntities, useEntityList, getEntityRelations } from '@backstage/plugin-catalog-react';
|
|
4
4
|
import Typography from '@material-ui/core/Typography';
|
|
5
|
-
import { withStyles } from '@material-ui/core/styles';
|
|
5
|
+
import { makeStyles, withStyles } from '@material-ui/core/styles';
|
|
6
6
|
import { visuallyHidden } from '@mui/utils';
|
|
7
7
|
import EditIcon from '@material-ui/icons/Edit';
|
|
8
8
|
import OpenInNew from '@material-ui/icons/OpenInNew';
|
|
@@ -12,6 +12,7 @@ import { capitalize } from 'lodash';
|
|
|
12
12
|
import pluralize from 'pluralize';
|
|
13
13
|
import React, { useMemo } from 'react';
|
|
14
14
|
import Chip from '@material-ui/core/Chip';
|
|
15
|
+
import Toolbar from '@material-ui/core/Toolbar';
|
|
15
16
|
|
|
16
17
|
const columnFactories = Object.freeze({
|
|
17
18
|
createNameColumn(options) {
|
|
@@ -178,9 +179,30 @@ const columnFactories = Object.freeze({
|
|
|
178
179
|
}
|
|
179
180
|
});
|
|
180
181
|
|
|
182
|
+
const useToolbarStyles = makeStyles(
|
|
183
|
+
(theme) => ({
|
|
184
|
+
root: {
|
|
185
|
+
paddingTop: theme.spacing(1.25),
|
|
186
|
+
paddingLeft: theme.spacing(2.5),
|
|
187
|
+
paddingBottom: theme.spacing(0.75),
|
|
188
|
+
display: "flex",
|
|
189
|
+
justifyContent: "space-between"
|
|
190
|
+
},
|
|
191
|
+
text: {
|
|
192
|
+
whiteSpace: "nowrap",
|
|
193
|
+
overflow: "hidden",
|
|
194
|
+
textOverflow: "ellipsis"
|
|
195
|
+
}
|
|
196
|
+
}),
|
|
197
|
+
{ name: "BackstageTableToolbar" }
|
|
198
|
+
);
|
|
199
|
+
function CatalogTableToolbar(props) {
|
|
200
|
+
const styles = useToolbarStyles();
|
|
201
|
+
return /* @__PURE__ */ React.createElement(Toolbar, { className: styles.root }, /* @__PURE__ */ React.createElement(Typography, { variant: "h5", className: styles.text }, props.title), /* @__PURE__ */ React.createElement(EntitySearchBar, null));
|
|
202
|
+
}
|
|
203
|
+
|
|
181
204
|
function PaginatedCatalogTable(props) {
|
|
182
205
|
const { columns, data, next, prev, title, isLoading, options } = props;
|
|
183
|
-
const { updateFilters } = useEntityList();
|
|
184
206
|
return /* @__PURE__ */ React.createElement(
|
|
185
207
|
Table,
|
|
186
208
|
{
|
|
@@ -196,9 +218,6 @@ function PaginatedCatalogTable(props) {
|
|
|
196
218
|
pageSize: Number.MAX_SAFE_INTEGER,
|
|
197
219
|
emptyRowsWhenPaging: false
|
|
198
220
|
},
|
|
199
|
-
onSearchChange: (searchText) => updateFilters({
|
|
200
|
-
text: searchText ? new EntityTextFilter(searchText) : void 0
|
|
201
|
-
}),
|
|
202
221
|
onPageChange: (page) => {
|
|
203
222
|
if (page > 0) {
|
|
204
223
|
next == null ? void 0 : next();
|
|
@@ -206,6 +225,9 @@ function PaginatedCatalogTable(props) {
|
|
|
206
225
|
prev == null ? void 0 : prev();
|
|
207
226
|
}
|
|
208
227
|
},
|
|
228
|
+
components: {
|
|
229
|
+
Toolbar: CatalogTableToolbar
|
|
230
|
+
},
|
|
209
231
|
page: prev ? 1 : 0,
|
|
210
232
|
totalCount: next ? Number.MAX_VALUE : Number.MAX_SAFE_INTEGER,
|
|
211
233
|
localization: { pagination: { labelDisplayedRows: "" } }
|
|
@@ -355,7 +377,7 @@ const CatalogTable = (props) => {
|
|
|
355
377
|
columns: tableColumns,
|
|
356
378
|
emptyContent,
|
|
357
379
|
isLoading: loading,
|
|
358
|
-
title,
|
|
380
|
+
title: titleDisplay,
|
|
359
381
|
actions,
|
|
360
382
|
subtitle,
|
|
361
383
|
options,
|
|
@@ -417,4 +439,4 @@ function toEntityRow(entity) {
|
|
|
417
439
|
}
|
|
418
440
|
|
|
419
441
|
export { CatalogTable as C };
|
|
420
|
-
//# sourceMappingURL=CatalogTable-
|
|
442
|
+
//# sourceMappingURL=CatalogTable-D9UBRyWs.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CatalogTable-D9UBRyWs.esm.js","sources":["../../src/components/CatalogTable/columns.tsx","../../src/components/CatalogTable/CatalogTableToolbar.tsx","../../src/components/CatalogTable/PaginatedCatalogTable.tsx","../../src/components/CatalogTable/defaultCatalogTableColumnsFunc.tsx","../../src/components/CatalogTable/CatalogTable.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport {\n humanizeEntityRef,\n EntityRefLink,\n EntityRefLinks,\n} from '@backstage/plugin-catalog-react';\nimport Chip from '@material-ui/core/Chip';\nimport { CatalogTableRow } from './types';\nimport { OverflowTooltip, TableColumn } from '@backstage/core-components';\nimport { Entity } from '@backstage/catalog-model';\nimport { JsonArray } from '@backstage/types';\n\n// The columnFactories symbol is not directly exported, but through the\n// CatalogTable.columns field.\n/** @public */\nexport const columnFactories = Object.freeze({\n createNameColumn(options?: {\n defaultKind?: string;\n }): TableColumn<CatalogTableRow> {\n function formatContent(entity: Entity): string {\n return (\n entity.metadata?.title ||\n humanizeEntityRef(entity, {\n defaultKind: options?.defaultKind,\n })\n );\n }\n\n return {\n title: 'Name',\n field: 'resolved.entityRef',\n highlight: true,\n customSort({ entity: entity1 }, { entity: entity2 }) {\n // TODO: We could implement this more efficiently by comparing field by field.\n // This has similar issues as above.\n return formatContent(entity1).localeCompare(formatContent(entity2));\n },\n render: ({ entity }) => (\n <EntityRefLink\n entityRef={entity}\n defaultKind={options?.defaultKind || 'Component'}\n />\n ),\n };\n },\n createSystemColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'System',\n field: 'resolved.partOfSystemRelationTitle',\n render: ({ resolved }) => (\n <EntityRefLinks\n entityRefs={resolved.partOfSystemRelations}\n defaultKind=\"system\"\n />\n ),\n };\n },\n createOwnerColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Owner',\n field: 'resolved.ownedByRelationsTitle',\n render: ({ resolved }) => (\n <EntityRefLinks\n entityRefs={resolved.ownedByRelations}\n defaultKind=\"group\"\n />\n ),\n };\n },\n createSpecTargetsColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Targets',\n field: 'entity.spec.targets',\n customFilterAndSearch: (query, row) => {\n let targets: JsonArray = [];\n if (\n row.entity?.spec?.targets &&\n Array.isArray(row.entity?.spec?.targets)\n ) {\n targets = row.entity?.spec?.targets;\n } else if (row.entity?.spec?.target) {\n targets = [row.entity?.spec?.target];\n }\n return targets\n .join(', ')\n .toLocaleUpperCase('en-US')\n .includes(query.toLocaleUpperCase('en-US'));\n },\n render: ({ entity }) => (\n <>\n {(entity?.spec?.targets || entity?.spec?.target) && (\n <OverflowTooltip\n text={(\n (entity!.spec!.targets as JsonArray) || [entity.spec.target]\n ).join(', ')}\n placement=\"bottom-start\"\n />\n )}\n </>\n ),\n };\n },\n createSpecTypeColumn(\n options: {\n hidden: boolean;\n } = { hidden: false },\n ): TableColumn<CatalogTableRow> {\n return {\n title: 'Type',\n field: 'entity.spec.type',\n hidden: options.hidden,\n width: 'auto',\n };\n },\n createSpecLifecycleColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Lifecycle',\n field: 'entity.spec.lifecycle',\n };\n },\n createMetadataDescriptionColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Description',\n field: 'entity.metadata.description',\n render: ({ entity }) => (\n <OverflowTooltip\n text={entity.metadata.description}\n placement=\"bottom-start\"\n />\n ),\n width: 'auto',\n };\n },\n createTagsColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Tags',\n field: 'entity.metadata.tags',\n cellStyle: {\n padding: '0px 16px 0px 20px',\n },\n render: ({ entity }) => (\n <>\n {entity.metadata.tags &&\n entity.metadata.tags.map(t => (\n <Chip\n key={t}\n label={t}\n size=\"small\"\n variant=\"outlined\"\n style={{ marginBottom: '0px' }}\n />\n ))}\n </>\n ),\n width: 'auto',\n };\n },\n createTitleColumn(options?: {\n hidden?: boolean;\n }): TableColumn<CatalogTableRow> {\n return {\n title: 'Title',\n field: 'entity.metadata.title',\n hidden: options?.hidden,\n searchable: true,\n };\n },\n createLabelColumn(\n key: string,\n options?: { title?: string; defaultValue?: string },\n ): TableColumn<CatalogTableRow> {\n return {\n title: options?.title || 'Label',\n field: 'entity.metadata.labels',\n cellStyle: {\n padding: '0px 16px 0px 20px',\n },\n render: ({ entity }: { entity: Entity }) => {\n const labels: Record<string, string> | undefined =\n entity.metadata?.labels;\n const specifiedLabelValue =\n (labels && labels[key]) || options?.defaultValue;\n return (\n <>\n {specifiedLabelValue && (\n <Chip\n key={specifiedLabelValue}\n label={specifiedLabelValue}\n size=\"small\"\n variant=\"outlined\"\n />\n )}\n </>\n );\n },\n width: 'auto',\n };\n },\n createNamespaceColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Namespace',\n field: 'entity.metadata.namespace',\n width: 'auto',\n };\n },\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 */\nimport React from 'react';\nimport { EntitySearchBar } from '@backstage/plugin-catalog-react';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useToolbarStyles = makeStyles(\n theme => ({\n root: {\n paddingTop: theme.spacing(1.25),\n paddingLeft: theme.spacing(2.5),\n paddingBottom: theme.spacing(0.75),\n display: 'flex',\n justifyContent: 'space-between',\n },\n text: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n }),\n { name: 'BackstageTableToolbar' },\n);\n\nexport function CatalogTableToolbar(props: {\n title?: string | React.ReactElement<any>;\n}) {\n const styles = useToolbarStyles();\n return (\n <Toolbar className={styles.root}>\n <Typography variant=\"h5\" className={styles.text}>\n {props.title}\n </Typography>\n <EntitySearchBar />\n </Toolbar>\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';\n\nimport { Table, TableProps } from '@backstage/core-components';\nimport { CatalogTableRow } from './types';\nimport { CatalogTableToolbar } from './CatalogTableToolbar';\n\ntype PaginatedCatalogTableProps = {\n prev?(): void;\n next?(): void;\n} & TableProps<CatalogTableRow>;\n\n/**\n * @internal\n */\nexport function PaginatedCatalogTable(props: PaginatedCatalogTableProps) {\n const { columns, data, next, prev, title, isLoading, options } = props;\n\n return (\n <Table\n title={isLoading ? '' : title}\n columns={columns}\n data={data}\n options={{\n ...options,\n // These settings are configured to force server side pagination\n paginationPosition: 'both',\n pageSizeOptions: [],\n showFirstLastPageButtons: false,\n pageSize: Number.MAX_SAFE_INTEGER,\n emptyRowsWhenPaging: false,\n }}\n onPageChange={page => {\n if (page > 0) {\n next?.();\n } else {\n prev?.();\n }\n }}\n components={{\n Toolbar: CatalogTableToolbar,\n }}\n /* this will enable the prev button accordingly */\n page={prev ? 1 : 0}\n /* this will enable the next button accordingly */\n totalCount={next ? Number.MAX_VALUE : Number.MAX_SAFE_INTEGER}\n localization={{ pagination: { labelDisplayedRows: '' } }}\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 { TableColumn } from '@backstage/core-components';\nimport { columnFactories } from './columns';\nimport { CatalogTableColumnsFunc, CatalogTableRow } from './types';\n\n// The defaultCatalogTableColumnsFunc symbol is not directly exported, but through the\n// CatalogTable.defaultColumnsFunc field.\n/** @public */\nexport const defaultCatalogTableColumnsFunc: CatalogTableColumnsFunc = ({\n filters,\n entities,\n}) => {\n const showTypeColumn = filters.type === undefined;\n\n return [\n columnFactories.createTitleColumn({ hidden: true }),\n columnFactories.createNameColumn({ defaultKind: filters.kind?.value }),\n ...createEntitySpecificColumns(),\n columnFactories.createMetadataDescriptionColumn(),\n columnFactories.createTagsColumn(),\n ];\n\n function createEntitySpecificColumns(): TableColumn<CatalogTableRow>[] {\n const baseColumns = [\n columnFactories.createSystemColumn(),\n columnFactories.createOwnerColumn(),\n columnFactories.createSpecTypeColumn({ hidden: !showTypeColumn }),\n columnFactories.createSpecLifecycleColumn(),\n ];\n switch (filters.kind?.value) {\n case 'user':\n return [];\n case 'domain':\n case 'system':\n return [columnFactories.createOwnerColumn()];\n case 'group':\n case 'template':\n return [\n columnFactories.createSpecTypeColumn({ hidden: !showTypeColumn }),\n ];\n case 'location':\n return [\n columnFactories.createSpecTypeColumn({ hidden: !showTypeColumn }),\n columnFactories.createSpecTargetsColumn(),\n ];\n default:\n return entities.every(entity => entity.metadata.namespace === 'default')\n ? baseColumns\n : [...baseColumns, columnFactories.createNamespaceColumn()];\n }\n }\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n ANNOTATION_EDIT_URL,\n ANNOTATION_VIEW_URL,\n Entity,\n RELATION_OWNED_BY,\n RELATION_PART_OF,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport {\n CodeSnippet,\n Table,\n TableColumn,\n TableProps,\n WarningPanel,\n} from '@backstage/core-components';\nimport {\n getEntityRelations,\n humanizeEntityRef,\n useEntityList,\n useStarredEntities,\n} from '@backstage/plugin-catalog-react';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles } from '@material-ui/core/styles';\nimport { visuallyHidden } from '@mui/utils';\nimport Edit from '@material-ui/icons/Edit';\nimport OpenInNew from '@material-ui/icons/OpenInNew';\nimport Star from '@material-ui/icons/Star';\nimport StarBorder from '@material-ui/icons/StarBorder';\nimport { capitalize } from 'lodash';\nimport pluralize from 'pluralize';\nimport React, { ReactNode, useMemo } from 'react';\nimport { columnFactories } from './columns';\nimport { CatalogTableColumnsFunc, CatalogTableRow } from './types';\nimport { PaginatedCatalogTable } from './PaginatedCatalogTable';\nimport { defaultCatalogTableColumnsFunc } from './defaultCatalogTableColumnsFunc';\n\n/**\n * Props for {@link CatalogTable}.\n *\n * @public\n */\nexport interface CatalogTableProps {\n columns?: TableColumn<CatalogTableRow>[] | CatalogTableColumnsFunc;\n actions?: TableProps<CatalogTableRow>['actions'];\n tableOptions?: TableProps<CatalogTableRow>['options'];\n emptyContent?: ReactNode;\n subtitle?: string;\n}\n\nconst YellowStar = withStyles({\n root: {\n color: '#f3ba37',\n },\n})(Star);\n\nconst refCompare = (a: Entity, b: Entity) => {\n const toRef = (entity: Entity) =>\n entity.metadata.title ||\n humanizeEntityRef(entity, {\n defaultKind: 'Component',\n });\n\n return toRef(a).localeCompare(toRef(b));\n};\n\n/** @public */\nexport const CatalogTable = (props: CatalogTableProps) => {\n const {\n columns = defaultCatalogTableColumnsFunc,\n tableOptions,\n subtitle,\n emptyContent,\n } = props;\n const { isStarredEntity, toggleStarredEntity } = useStarredEntities();\n const entityListContext = useEntityList();\n const { loading, error, entities, filters, pageInfo, totalItems } =\n entityListContext;\n const enablePagination = !!pageInfo;\n\n const tableColumns = useMemo(\n () =>\n typeof columns === 'function' ? columns(entityListContext) : columns,\n [columns, entityListContext],\n );\n\n if (error) {\n return (\n <div>\n <WarningPanel\n severity=\"error\"\n title=\"Could not fetch catalog entities.\"\n >\n <CodeSnippet language=\"text\" text={error.toString()} />\n </WarningPanel>\n </div>\n );\n }\n\n const defaultActions: TableProps<CatalogTableRow>['actions'] = [\n ({ entity }) => {\n const url = entity.metadata.annotations?.[ANNOTATION_VIEW_URL];\n const title = 'View';\n\n return {\n icon: () => (\n <>\n <Typography style={visuallyHidden}>{title}</Typography>\n <OpenInNew fontSize=\"small\" />\n </>\n ),\n tooltip: title,\n disabled: !url,\n onClick: () => {\n if (!url) return;\n window.open(url, '_blank');\n },\n };\n },\n ({ entity }) => {\n const url = entity.metadata.annotations?.[ANNOTATION_EDIT_URL];\n const title = 'Edit';\n\n return {\n icon: () => (\n <>\n <Typography style={visuallyHidden}>{title}</Typography>\n <Edit fontSize=\"small\" />\n </>\n ),\n tooltip: title,\n disabled: !url,\n onClick: () => {\n if (!url) return;\n window.open(url, '_blank');\n },\n };\n },\n ({ entity }) => {\n const isStarred = isStarredEntity(entity);\n const title = isStarred ? 'Remove from favorites' : 'Add to favorites';\n\n return {\n cellStyle: { paddingLeft: '1em' },\n icon: () => (\n <>\n <Typography style={visuallyHidden}>{title}</Typography>\n {isStarred ? <YellowStar /> : <StarBorder />}\n </>\n ),\n tooltip: title,\n onClick: () => toggleStarredEntity(entity),\n };\n },\n ];\n\n const currentKind = filters.kind?.value || '';\n const currentType = filters.type?.value || '';\n // TODO(timbonicus): remove the title from the CatalogTable once using EntitySearchBar\n const titlePreamble = capitalize(filters.user?.value ?? 'all');\n const titleDisplay = [titlePreamble, currentType, pluralize(currentKind)]\n .filter(s => s)\n .join(' ');\n\n const title = `${titleDisplay} (${totalItems})`;\n const actions = props.actions || defaultActions;\n const options = {\n actionsColumnIndex: -1,\n loadingType: 'linear' as const,\n showEmptyDataSourceMessage: !loading,\n padding: 'dense' as const,\n ...tableOptions,\n };\n\n if (enablePagination) {\n return (\n <PaginatedCatalogTable\n columns={tableColumns}\n emptyContent={emptyContent}\n isLoading={loading}\n title={titleDisplay}\n actions={actions}\n subtitle={subtitle}\n options={options}\n data={entities.map(toEntityRow)}\n next={pageInfo.next}\n prev={pageInfo.prev}\n />\n );\n }\n\n const rows = entities.sort(refCompare).map(toEntityRow);\n const pageSize = 20;\n const showPagination = rows.length > pageSize;\n\n return (\n <Table<CatalogTableRow>\n isLoading={loading}\n columns={tableColumns}\n options={{\n paging: showPagination,\n pageSize: pageSize,\n pageSizeOptions: [20, 50, 100],\n ...options,\n }}\n title={title}\n data={rows}\n actions={actions}\n subtitle={subtitle}\n emptyContent={emptyContent}\n />\n );\n};\n\nCatalogTable.columns = columnFactories;\nCatalogTable.defaultColumnsFunc = defaultCatalogTableColumnsFunc;\n\nfunction toEntityRow(entity: Entity) {\n const partOfSystemRelations = getEntityRelations(entity, RELATION_PART_OF, {\n kind: 'system',\n });\n const ownedByRelations = getEntityRelations(entity, RELATION_OWNED_BY);\n\n return {\n entity,\n resolved: {\n // This name is here for backwards compatibility mostly; the\n // presentation of refs in the table should in general be handled with\n // EntityRefLink / EntityName components\n name: humanizeEntityRef(entity, {\n defaultKind: 'Component',\n }),\n entityRef: stringifyEntityRef(entity),\n ownedByRelationsTitle: ownedByRelations\n .map(r => humanizeEntityRef(r, { defaultKind: 'group' }))\n .join(', '),\n ownedByRelations,\n partOfSystemRelationTitle: partOfSystemRelations\n .map(r =>\n humanizeEntityRef(r, {\n defaultKind: 'system',\n }),\n )\n .join(', '),\n partOfSystemRelations,\n },\n };\n}\n"],"names":["_a","title","Edit"],"mappings":"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"}
|
|
@@ -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-
|
|
4
|
+
import { F as FilterWrapper } from './alpha-DdRYU8jw.esm.js';
|
|
5
5
|
import { E as EntitySwitch, i as isOrphan, a as EntityOrphanWarning, h as hasRelationWarnings, b as EntityRelationWarning, c as hasCatalogProcessingErrors, d as EntityProcessingErrorsPanel } from './EntitySwitch-D82_YYhG.esm.js';
|
|
6
6
|
import '@backstage/core-compat-api';
|
|
7
7
|
import '@backstage/frontend-plugin-api';
|
|
@@ -46,4 +46,4 @@ function EntityOverviewPage(props) {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
export { EntityOverviewPage };
|
|
49
|
-
//# sourceMappingURL=EntityOverviewPage-
|
|
49
|
+
//# sourceMappingURL=EntityOverviewPage-Bzd86gsX.esm.js.map
|
package/dist/esm/{EntityOverviewPage-j7yeui2y.esm.js.map → EntityOverviewPage-Bzd86gsX.esm.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityOverviewPage-
|
|
1
|
+
{"version":3,"file":"EntityOverviewPage-Bzd86gsX.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-
|
|
202
|
+
const { BaseCatalogPage } = await import('./index-tUif74w6.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-
|
|
435
|
+
loader: async ({ inputs }) => import('./EntityOverviewPage-Bzd86gsX.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-
|
|
471
|
+
//# sourceMappingURL=alpha-DdRYU8jw.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alpha-C2vJQr2i.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-DdRYU8jw.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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"}
|
|
@@ -4,7 +4,7 @@ import { PageWithHeader, Content, ContentHeader, CreateButton, SupportButton } f
|
|
|
4
4
|
import { useApi, configApiRef, useRouteRef } from '@backstage/core-plugin-api';
|
|
5
5
|
import { EntityListProvider, CatalogFilterLayout, DefaultFilters } from '@backstage/plugin-catalog-react';
|
|
6
6
|
import { c as createComponentRouteRef } from './routes-D5H5grpG.esm.js';
|
|
7
|
-
import { C as CatalogTable } from './CatalogTable-
|
|
7
|
+
import { C as CatalogTable } from './CatalogTable-D9UBRyWs.esm.js';
|
|
8
8
|
import { createTranslationRef, useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
9
9
|
import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha';
|
|
10
10
|
import { usePermission } from '@backstage/plugin-permission-react';
|
|
@@ -32,6 +32,7 @@ import '@material-ui/icons/Star';
|
|
|
32
32
|
import '@material-ui/icons/StarBorder';
|
|
33
33
|
import 'pluralize';
|
|
34
34
|
import '@material-ui/core/Chip';
|
|
35
|
+
import '@material-ui/core/Toolbar';
|
|
35
36
|
|
|
36
37
|
const catalogTranslationRef = createTranslationRef({
|
|
37
38
|
id: "catalog",
|
|
@@ -105,4 +106,4 @@ function CatalogPage(props) {
|
|
|
105
106
|
}
|
|
106
107
|
|
|
107
108
|
export { BaseCatalogPage, CatalogPage, DefaultCatalogPage };
|
|
108
|
-
//# sourceMappingURL=index-
|
|
109
|
+
//# sourceMappingURL=index-tUif74w6.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-tUif74w6.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 initiallySelectedNamespaces?: string[];\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 initiallySelectedNamespaces,\n } = props;\n\n return (\n <BaseCatalogPage\n filters={\n filters ?? (\n <DefaultFilters\n initialKind={initialKind}\n initiallySelectedFilter={initiallySelectedFilter}\n ownerPickerMode={ownerPickerMode}\n initiallySelectedNamespaces={initiallySelectedNamespaces}\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":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -407,6 +407,11 @@ declare function isComponentType(types: string | string[]): (entity: Entity) =>
|
|
|
407
407
|
* @public
|
|
408
408
|
*/
|
|
409
409
|
declare function isResourceType(types: string | string[]): (entity: Entity) => boolean;
|
|
410
|
+
/**
|
|
411
|
+
* For use in EntitySwitch.Case. Matches if the entity is an API of a given spec.type.
|
|
412
|
+
* @public
|
|
413
|
+
*/
|
|
414
|
+
declare function isApiType(types: string | string[]): (entity: Entity) => boolean;
|
|
410
415
|
/**
|
|
411
416
|
* For use in EntitySwitch.Case. Matches if the entity is the specified kind and type (if present).
|
|
412
417
|
* @public
|
|
@@ -636,4 +641,4 @@ declare const RelatedEntitiesCard: <T extends Entity>(props: RelatedEntitiesCard
|
|
|
636
641
|
/** @public */
|
|
637
642
|
declare const CatalogSearchResultListItem: (props: SearchResultListItemExtensionProps<CatalogSearchResultListItemProps>) => JSX.Element | null;
|
|
638
643
|
|
|
639
|
-
export { type AboutCardProps, AboutContent, type AboutContentProps, AboutField, type AboutFieldProps, type BackstageOverrides, type Breakpoint, CatalogEntityPage, CatalogIndexPage, CatalogKindHeader, type CatalogKindHeaderProps, CatalogSearchResultListItem, type CatalogSearchResultListItemProps, CatalogTable, type CatalogTableColumnsFunc, type CatalogTableProps, type CatalogTableRow, type ColumnBreakpoints, type DefaultCatalogPageProps, DefaultEntityPresentationApi, type DefaultEntityPresentationApiOptions, type DefaultEntityPresentationApiRenderer, DefaultStarredEntitiesApi, type DependencyOfComponentsCardProps, type DependsOnComponentsCardProps, type DependsOnResourcesCardProps, EntityAboutCard, type EntityContextMenuClassKey, EntityDependencyOfComponentsCard, EntityDependsOnComponentsCard, EntityDependsOnResourcesCard, EntityHasComponentsCard, EntityHasResourcesCard, EntityHasSubcomponentsCard, EntityHasSystemsCard, EntityLabelsCard, type EntityLabelsCardProps, EntityLayout, type EntityLayoutProps, type EntityLayoutRouteProps, EntityLinksCard, type EntityLinksCardProps, type EntityLinksEmptyStateClassKey, EntityListContainer, EntityOrphanWarning, type EntityPredicates, EntityProcessingErrorsPanel, EntityRelationWarning, EntitySwitch, type EntitySwitchCaseProps, type EntitySwitchProps, FilterContainer, FilteredEntityLayout, type HasComponentsCardProps, type HasResourcesCardProps, type HasSubcomponentsCardProps, type HasSystemsCardProps, type PluginCatalogComponentsNameToClassKey, RelatedEntitiesCard, type RelatedEntitiesCardProps, type SystemDiagramCardClassKey, catalogPlugin, hasCatalogProcessingErrors, hasLabels, hasRelationWarnings, isComponentType, isEntityWith, isKind, isNamespace, isOrphan, isResourceType };
|
|
644
|
+
export { type AboutCardProps, AboutContent, type AboutContentProps, AboutField, type AboutFieldProps, type BackstageOverrides, type Breakpoint, CatalogEntityPage, CatalogIndexPage, CatalogKindHeader, type CatalogKindHeaderProps, CatalogSearchResultListItem, type CatalogSearchResultListItemProps, CatalogTable, type CatalogTableColumnsFunc, type CatalogTableProps, type CatalogTableRow, type ColumnBreakpoints, type DefaultCatalogPageProps, DefaultEntityPresentationApi, type DefaultEntityPresentationApiOptions, type DefaultEntityPresentationApiRenderer, DefaultStarredEntitiesApi, type DependencyOfComponentsCardProps, type DependsOnComponentsCardProps, type DependsOnResourcesCardProps, EntityAboutCard, type EntityContextMenuClassKey, EntityDependencyOfComponentsCard, EntityDependsOnComponentsCard, EntityDependsOnResourcesCard, EntityHasComponentsCard, EntityHasResourcesCard, EntityHasSubcomponentsCard, EntityHasSystemsCard, EntityLabelsCard, type EntityLabelsCardProps, EntityLayout, type EntityLayoutProps, type EntityLayoutRouteProps, EntityLinksCard, type EntityLinksCardProps, type EntityLinksEmptyStateClassKey, EntityListContainer, EntityOrphanWarning, type EntityPredicates, EntityProcessingErrorsPanel, EntityRelationWarning, EntitySwitch, type EntitySwitchCaseProps, type EntitySwitchProps, FilterContainer, FilteredEntityLayout, type HasComponentsCardProps, type HasResourcesCardProps, type HasSubcomponentsCardProps, type HasSystemsCardProps, type PluginCatalogComponentsNameToClassKey, RelatedEntitiesCard, type RelatedEntitiesCardProps, type SystemDiagramCardClassKey, catalogPlugin, hasCatalogProcessingErrors, hasLabels, hasRelationWarnings, isApiType, isComponentType, isEntityWith, isKind, isNamespace, isOrphan, isResourceType };
|
package/dist/index.esm.js
CHANGED
|
@@ -9,7 +9,7 @@ import { catalogApiRef, useEntityList, EntityKindFilter, CatalogFilterLayout, st
|
|
|
9
9
|
import pluralize from 'pluralize';
|
|
10
10
|
import { useApi, createPlugin, createApiFactory, discoveryApiRef, fetchApiRef, storageApiRef, createRoutableExtension, createComponentExtension } from '@backstage/core-plugin-api';
|
|
11
11
|
import useAsync from 'react-use/esm/useAsync';
|
|
12
|
-
export { C as CatalogTable } from './esm/CatalogTable-
|
|
12
|
+
export { C as CatalogTable } from './esm/CatalogTable-D9UBRyWs.esm.js';
|
|
13
13
|
export { E as EntityLayout } from './esm/EntityLayout-DJ8fmLlG.esm.js';
|
|
14
14
|
export { a as EntityOrphanWarning, d as EntityProcessingErrorsPanel, b as EntityRelationWarning, E as EntitySwitch, c as hasCatalogProcessingErrors, h as hasRelationWarnings, i as isOrphan } from './esm/EntitySwitch-D82_YYhG.esm.js';
|
|
15
15
|
export { h as hasLabels } from './esm/conditions-D3nrPoMz.esm.js';
|
|
@@ -57,6 +57,7 @@ import '@mui/utils';
|
|
|
57
57
|
import '@material-ui/icons/OpenInNew';
|
|
58
58
|
import '@material-ui/icons/Star';
|
|
59
59
|
import '@material-ui/icons/StarBorder';
|
|
60
|
+
import '@material-ui/core/Toolbar';
|
|
60
61
|
import '@material-ui/lab/Alert';
|
|
61
62
|
import 'react-router-dom';
|
|
62
63
|
import '@material-ui/core/ListItemIcon';
|
|
@@ -181,6 +182,9 @@ function isComponentType(types) {
|
|
|
181
182
|
function isResourceType(types) {
|
|
182
183
|
return isEntityWith({ kind: "resource", type: types });
|
|
183
184
|
}
|
|
185
|
+
function isApiType(types) {
|
|
186
|
+
return isEntityWith({ kind: "api", type: types });
|
|
187
|
+
}
|
|
184
188
|
function isEntityWith(predicate) {
|
|
185
189
|
return (entity) => {
|
|
186
190
|
var _a;
|
|
@@ -240,7 +244,7 @@ const catalogPlugin = createPlugin({
|
|
|
240
244
|
const CatalogIndexPage = catalogPlugin.provide(
|
|
241
245
|
createRoutableExtension({
|
|
242
246
|
name: "CatalogIndexPage",
|
|
243
|
-
component: () => import('./esm/index-
|
|
247
|
+
component: () => import('./esm/index-tUif74w6.esm.js').then((m) => m.CatalogPage),
|
|
244
248
|
mountPoint: rootRouteRef
|
|
245
249
|
})
|
|
246
250
|
);
|
|
@@ -359,5 +363,5 @@ const CatalogSearchResultListItem = catalogPlugin.provide(
|
|
|
359
363
|
})
|
|
360
364
|
);
|
|
361
365
|
|
|
362
|
-
export { CatalogEntityPage, CatalogIndexPage, CatalogKindHeader, CatalogSearchResultListItem, DefaultEntityPresentationApi, DefaultStarredEntitiesApi, EntityAboutCard, EntityDependencyOfComponentsCard, EntityDependsOnComponentsCard, EntityDependsOnResourcesCard, EntityHasComponentsCard, EntityHasResourcesCard, EntityHasSubcomponentsCard, EntityHasSystemsCard, EntityLabelsCard, EntityLinksCard, EntityListContainer, FilterContainer, FilteredEntityLayout, RelatedEntitiesCard, catalogPlugin, isComponentType, isEntityWith, isKind, isNamespace, isResourceType };
|
|
366
|
+
export { CatalogEntityPage, CatalogIndexPage, CatalogKindHeader, CatalogSearchResultListItem, DefaultEntityPresentationApi, DefaultStarredEntitiesApi, EntityAboutCard, EntityDependencyOfComponentsCard, EntityDependsOnComponentsCard, EntityDependsOnResourcesCard, EntityHasComponentsCard, EntityHasResourcesCard, EntityHasSubcomponentsCard, EntityHasSystemsCard, EntityLabelsCard, EntityLinksCard, EntityListContainer, FilterContainer, FilteredEntityLayout, RelatedEntitiesCard, catalogPlugin, isApiType, isComponentType, isEntityWith, isKind, isNamespace, isResourceType };
|
|
363
367
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/components/CatalogKindHeader/kindFilterUtils.ts","../src/components/CatalogKindHeader/CatalogKindHeader.tsx","../src/components/EntitySwitch/conditions.ts","../src/components/FilteredEntityLayout/index.ts","../src/plugin.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport useAsync from 'react-use/esm/useAsync';\n\n/**\n * Fetch and return all availible kinds.\n */\nexport function useAllKinds(): {\n loading: boolean;\n error?: Error;\n allKinds: string[];\n} {\n const catalogApi = useApi(catalogApiRef);\n\n const {\n error,\n loading,\n value: allKinds,\n } = useAsync(async () => {\n const items = await catalogApi\n .getEntityFacets({ facets: ['kind'] })\n .then(response => response.facets.kind?.map(f => f.value).sort() || []);\n return items;\n }, [catalogApi]);\n\n return { loading, error, allKinds: allKinds ?? [] };\n}\n\n/**\n * Filter and capitalize accessible kinds.\n */\nexport function filterKinds(\n allKinds: string[],\n allowedKinds?: string[],\n forcedKinds?: string,\n): Record<string, string> {\n // Before allKinds is loaded, or when a kind is entered manually in the URL, selectedKind may not\n // be present in allKinds. It should still be shown in the dropdown, but may not have the nice\n // enforced casing from the catalog-backend. This makes a key/value record for the Select options,\n // including selectedKind if it's unknown - but allows the selectedKind to get clobbered by the\n // more proper catalog kind if it exists.\n let availableKinds = allKinds;\n if (allowedKinds) {\n availableKinds = availableKinds.filter(k =>\n allowedKinds.some(\n a => a.toLocaleLowerCase('en-US') === k.toLocaleLowerCase('en-US'),\n ),\n );\n }\n if (\n forcedKinds &&\n !allKinds.some(\n a =>\n a.toLocaleLowerCase('en-US') === forcedKinds.toLocaleLowerCase('en-US'),\n )\n ) {\n availableKinds = availableKinds.concat([forcedKinds]);\n }\n\n const kindsMap = availableKinds.sort().reduce((acc, kind) => {\n acc[kind.toLocaleLowerCase('en-US')] = kind;\n return acc;\n }, {} as Record<string, string>);\n\n return kindsMap;\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, { useEffect, useState, useMemo } from 'react';\nimport InputBase from '@material-ui/core/InputBase';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Select from '@material-ui/core/Select';\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport {\n EntityKindFilter,\n useEntityList,\n} from '@backstage/plugin-catalog-react';\nimport pluralize from 'pluralize';\nimport { filterKinds, useAllKinds } from './kindFilterUtils';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n ...theme.typography.h4,\n },\n }),\n);\n\n/**\n * Props for {@link CatalogKindHeader}.\n *\n * @public\n */\nexport interface CatalogKindHeaderProps {\n /**\n * Entity kinds to show in the dropdown; by default all kinds are fetched from the catalog and\n * displayed.\n */\n allowedKinds?: string[];\n /**\n * The initial kind to select; defaults to 'component'. A kind filter entered directly in the\n * query parameter will override this value.\n */\n initialFilter?: string;\n}\n\n/**\n * @public\n * @deprecated This component has been deprecated in favour of the EntityKindPicker in the list of filters. If you wish to keep this component long term make sure to raise an issue at github.com/backstage/backstage\n */\nexport function CatalogKindHeader(props: CatalogKindHeaderProps) {\n const { initialFilter = 'component', allowedKinds } = props;\n const classes = useStyles();\n const { allKinds } = useAllKinds();\n const {\n filters,\n updateFilters,\n queryParameters: { kind: kindParameter },\n } = useEntityList();\n\n const queryParamKind = useMemo(\n () => [kindParameter].flat()[0],\n [kindParameter],\n );\n\n const [selectedKind, setSelectedKind] = useState(\n queryParamKind ?? filters.kind?.value ?? initialFilter,\n );\n\n // Set selected kinds on query parameter updates; this happens at initial page load and from\n // external updates to the page location.\n useEffect(() => {\n if (queryParamKind) {\n setSelectedKind(queryParamKind);\n }\n }, [queryParamKind]);\n\n // Set selected kind from filters; this happens when the kind filter is\n // updated from another component\n useEffect(() => {\n if (filters.kind?.value) {\n setSelectedKind(filters.kind?.value);\n }\n }, [filters.kind]);\n\n useEffect(() => {\n updateFilters({\n kind: selectedKind ? new EntityKindFilter(selectedKind) : undefined,\n });\n }, [selectedKind, updateFilters]);\n\n const options = filterKinds(allKinds, allowedKinds, selectedKind);\n\n return (\n <Select\n input={<InputBase />}\n value={selectedKind.toLocaleLowerCase('en-US')}\n onChange={e => setSelectedKind(e.target.value as string)}\n classes={classes}\n >\n {Object.keys(options).map(kind => (\n <MenuItem value={kind} key={kind}>\n {`${pluralize(options[kind])}`}\n </MenuItem>\n ))}\n </Select>\n );\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\n\n/** @public */\nexport interface EntityPredicates {\n kind?: string | string[];\n type?: string | string[];\n}\n\nfunction strCmp(a: unknown, b: string | undefined): boolean {\n return Boolean(\n a &&\n typeof a === 'string' &&\n a?.toLocaleLowerCase('en-US') === b?.toLocaleLowerCase('en-US'),\n );\n}\n\nfunction strCmpAll(value: unknown, cmpValues: string | string[]) {\n return typeof cmpValues === 'string'\n ? strCmp(value, cmpValues)\n : cmpValues.length === 0 || cmpValues.some(cmpVal => strCmp(value, cmpVal));\n}\n\n/**\n * For use in EntitySwitch.Case. Matches if the entity is of a given kind.\n * @public\n */\nexport function isKind(kinds: string | string[]) {\n return isEntityWith({ kind: kinds });\n}\n\n/**\n * For use in EntitySwitch.Case. Matches if the entity is a Component of a given spec.type.\n * @public\n */\nexport function isComponentType(types: string | string[]) {\n return isEntityWith({ kind: 'component', type: types });\n}\n\n/**\n * For use in EntitySwitch.Case. Matches if the entity is a Resource of a given spec.type.\n * @public\n */\nexport function isResourceType(types: string | string[]) {\n return isEntityWith({ kind: 'resource', type: types });\n}\n\n/**\n * For use in EntitySwitch.Case. Matches if the entity is the specified kind and type (if present).\n * @public\n */\nexport function isEntityWith(predicate: EntityPredicates) {\n return (entity: Entity) => {\n if (predicate.kind && !strCmpAll(entity.kind, predicate.kind)) {\n return false;\n }\n\n if (predicate.type && !strCmpAll(entity.spec?.type, predicate.type)) {\n return false;\n }\n\n // there's no type check, return true\n return true;\n };\n}\n\n/**\n * For use in EntitySwitch.Case. Matches if the entity is in a given namespace.\n * @public\n */\nexport function isNamespace(namespaces: string | string[]) {\n return (entity: Entity) => strCmpAll(entity.metadata?.namespace, namespaces);\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 { CatalogFilterLayout } from '@backstage/plugin-catalog-react';\n\n/**\n * @public\n * @deprecated Use `CatalogFilterLayout` from `@backstage/plugin-catalog-react` instead.\n */\nexport const FilteredEntityLayout = CatalogFilterLayout as (props: {\n children: React.ReactNode;\n}) => JSX.Element;\n\n/**\n * @public\n * @deprecated Use `CatalogFilterLayout.Filters` from `@backstage/plugin-catalog-react` instead.\n */\nexport const FilterContainer = CatalogFilterLayout.Filters;\n\n/**\n * @public\n * @deprecated Use `CatalogFilterLayout.Content` from `@backstage/plugin-catalog-react` instead.\n */\nexport const EntityListContainer = CatalogFilterLayout.Content;\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CatalogClient } from '@backstage/catalog-client';\nimport { Entity } from '@backstage/catalog-model';\nimport {\n catalogApiRef,\n entityPresentationApiRef,\n entityRouteRef,\n starredEntitiesApiRef,\n} from '@backstage/plugin-catalog-react';\nimport {\n createComponentRouteRef,\n createFromTemplateRouteRef,\n unregisterRedirectRouteRef,\n viewTechDocRouteRef,\n} from './routes';\nimport {\n createApiFactory,\n createComponentExtension,\n createPlugin,\n createRoutableExtension,\n discoveryApiRef,\n fetchApiRef,\n storageApiRef,\n} from '@backstage/core-plugin-api';\nimport {\n createSearchResultListItemExtension,\n SearchResultListItemExtensionProps,\n} from '@backstage/plugin-search-react';\nimport { DefaultStarredEntitiesApi } from './apis';\nimport { AboutCardProps } from './components/AboutCard';\nimport { DefaultCatalogPageProps } from './components/CatalogPage';\nimport { DependencyOfComponentsCardProps } from './components/DependencyOfComponentsCard';\nimport { DependsOnComponentsCardProps } from './components/DependsOnComponentsCard';\nimport { DependsOnResourcesCardProps } from './components/DependsOnResourcesCard';\nimport { HasComponentsCardProps } from './components/HasComponentsCard';\nimport { HasResourcesCardProps } from './components/HasResourcesCard';\nimport { HasSubcomponentsCardProps } from './components/HasSubcomponentsCard';\nimport { HasSystemsCardProps } from './components/HasSystemsCard';\nimport { RelatedEntitiesCardProps } from './components/RelatedEntitiesCard';\nimport { CatalogSearchResultListItemProps } from './components/CatalogSearchResultListItem';\nimport { rootRouteRef } from './routes';\nimport { DefaultEntityPresentationApi } from './apis/EntityPresentationApi';\n\n/** @public */\nexport const catalogPlugin = createPlugin({\n id: 'catalog',\n apis: [\n createApiFactory({\n api: catalogApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ discoveryApi, fetchApi }) =>\n new CatalogClient({ discoveryApi, fetchApi }),\n }),\n createApiFactory({\n api: starredEntitiesApiRef,\n deps: { storageApi: storageApiRef },\n factory: ({ storageApi }) =>\n new DefaultStarredEntitiesApi({ storageApi }),\n }),\n createApiFactory({\n api: entityPresentationApiRef,\n deps: { catalogApi: catalogApiRef },\n factory: ({ catalogApi }) =>\n DefaultEntityPresentationApi.create({ catalogApi }),\n }),\n ],\n routes: {\n catalogIndex: rootRouteRef,\n catalogEntity: entityRouteRef,\n },\n externalRoutes: {\n createComponent: createComponentRouteRef,\n viewTechDoc: viewTechDocRouteRef,\n createFromTemplate: createFromTemplateRouteRef,\n unregisterRedirect: unregisterRedirectRouteRef,\n },\n});\n\n/** @public */\nexport const CatalogIndexPage: (props: DefaultCatalogPageProps) => JSX.Element =\n catalogPlugin.provide(\n createRoutableExtension({\n name: 'CatalogIndexPage',\n component: () =>\n import('./components/CatalogPage').then(m => m.CatalogPage),\n mountPoint: rootRouteRef,\n }),\n );\n\n/** @public */\nexport const CatalogEntityPage: () => JSX.Element = catalogPlugin.provide(\n createRoutableExtension({\n name: 'CatalogEntityPage',\n component: () =>\n import('./components/CatalogEntityPage').then(m => m.CatalogEntityPage),\n mountPoint: entityRouteRef,\n }),\n);\n\n/** @public */\nexport const EntityAboutCard: (props: AboutCardProps) => JSX.Element =\n catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityAboutCard',\n component: {\n lazy: () => import('./components/AboutCard').then(m => m.AboutCard),\n },\n }),\n );\n\n/** @public */\nexport const EntityLinksCard = catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityLinksCard',\n component: {\n lazy: () =>\n import('./components/EntityLinksCard').then(m => m.EntityLinksCard),\n },\n }),\n);\n\n/** @public */\nexport const EntityLabelsCard = catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityLabelsCard',\n component: {\n lazy: () =>\n import('./components/EntityLabelsCard').then(m => m.EntityLabelsCard),\n },\n }),\n);\n\n/** @public */\nexport const EntityHasSystemsCard: (props: HasSystemsCardProps) => JSX.Element =\n catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityHasSystemsCard',\n component: {\n lazy: () =>\n import('./components/HasSystemsCard').then(m => m.HasSystemsCard),\n },\n }),\n );\n\n/** @public */\nexport const EntityHasComponentsCard: (\n props: HasComponentsCardProps,\n) => JSX.Element = catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityHasComponentsCard',\n component: {\n lazy: () =>\n import('./components/HasComponentsCard').then(m => m.HasComponentsCard),\n },\n }),\n);\n\n/** @public */\nexport const EntityHasSubcomponentsCard: (\n props: HasSubcomponentsCardProps,\n) => JSX.Element = catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityHasSubcomponentsCard',\n component: {\n lazy: () =>\n import('./components/HasSubcomponentsCard').then(\n m => m.HasSubcomponentsCard,\n ),\n },\n }),\n);\n\n/** @public */\nexport const EntityHasResourcesCard: (\n props: HasResourcesCardProps,\n) => JSX.Element = catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityHasResourcesCard',\n component: {\n lazy: () =>\n import('./components/HasResourcesCard').then(m => m.HasResourcesCard),\n },\n }),\n);\n\n/** @public */\nexport const EntityDependsOnComponentsCard: (\n props: DependsOnComponentsCardProps,\n) => JSX.Element = catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityDependsOnComponentsCard',\n component: {\n lazy: () =>\n import('./components/DependsOnComponentsCard').then(\n m => m.DependsOnComponentsCard,\n ),\n },\n }),\n);\n\n/** @public */\nexport const EntityDependencyOfComponentsCard: (\n props: DependencyOfComponentsCardProps,\n) => JSX.Element = catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityDependencyOfComponentsCard',\n component: {\n lazy: () =>\n import('./components/DependencyOfComponentsCard').then(\n m => m.DependencyOfComponentsCard,\n ),\n },\n }),\n);\n\n/** @public */\nexport const EntityDependsOnResourcesCard: (\n props: DependsOnResourcesCardProps,\n) => JSX.Element = catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityDependsOnResourcesCard',\n component: {\n lazy: () =>\n import('./components/DependsOnResourcesCard').then(\n m => m.DependsOnResourcesCard,\n ),\n },\n }),\n);\n\n/** @public */\nexport const RelatedEntitiesCard: <T extends Entity>(\n props: RelatedEntitiesCardProps<T>,\n) => JSX.Element = catalogPlugin.provide(\n createComponentExtension({\n name: 'RelatedEntitiesCard',\n component: {\n lazy: () =>\n import('./components/RelatedEntitiesCard').then(\n m => m.RelatedEntitiesCard,\n ),\n },\n }),\n);\n\n/** @public */\nexport const CatalogSearchResultListItem: (\n props: SearchResultListItemExtensionProps<CatalogSearchResultListItemProps>,\n) => JSX.Element | null = catalogPlugin.provide(\n createSearchResultListItemExtension({\n name: 'CatalogSearchResultListItem',\n component: () =>\n import('./components/CatalogSearchResultListItem').then(\n m => m.CatalogSearchResultListItem,\n ),\n predicate: result => result.type === 'software-catalog',\n }),\n);\n"],"names":["_a","_b"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/components/CatalogKindHeader/kindFilterUtils.ts","../src/components/CatalogKindHeader/CatalogKindHeader.tsx","../src/components/EntitySwitch/conditions.ts","../src/components/FilteredEntityLayout/index.ts","../src/plugin.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport useAsync from 'react-use/esm/useAsync';\n\n/**\n * Fetch and return all availible kinds.\n */\nexport function useAllKinds(): {\n loading: boolean;\n error?: Error;\n allKinds: string[];\n} {\n const catalogApi = useApi(catalogApiRef);\n\n const {\n error,\n loading,\n value: allKinds,\n } = useAsync(async () => {\n const items = await catalogApi\n .getEntityFacets({ facets: ['kind'] })\n .then(response => response.facets.kind?.map(f => f.value).sort() || []);\n return items;\n }, [catalogApi]);\n\n return { loading, error, allKinds: allKinds ?? [] };\n}\n\n/**\n * Filter and capitalize accessible kinds.\n */\nexport function filterKinds(\n allKinds: string[],\n allowedKinds?: string[],\n forcedKinds?: string,\n): Record<string, string> {\n // Before allKinds is loaded, or when a kind is entered manually in the URL, selectedKind may not\n // be present in allKinds. It should still be shown in the dropdown, but may not have the nice\n // enforced casing from the catalog-backend. This makes a key/value record for the Select options,\n // including selectedKind if it's unknown - but allows the selectedKind to get clobbered by the\n // more proper catalog kind if it exists.\n let availableKinds = allKinds;\n if (allowedKinds) {\n availableKinds = availableKinds.filter(k =>\n allowedKinds.some(\n a => a.toLocaleLowerCase('en-US') === k.toLocaleLowerCase('en-US'),\n ),\n );\n }\n if (\n forcedKinds &&\n !allKinds.some(\n a =>\n a.toLocaleLowerCase('en-US') === forcedKinds.toLocaleLowerCase('en-US'),\n )\n ) {\n availableKinds = availableKinds.concat([forcedKinds]);\n }\n\n const kindsMap = availableKinds.sort().reduce((acc, kind) => {\n acc[kind.toLocaleLowerCase('en-US')] = kind;\n return acc;\n }, {} as Record<string, string>);\n\n return kindsMap;\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, { useEffect, useState, useMemo } from 'react';\nimport InputBase from '@material-ui/core/InputBase';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Select from '@material-ui/core/Select';\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport {\n EntityKindFilter,\n useEntityList,\n} from '@backstage/plugin-catalog-react';\nimport pluralize from 'pluralize';\nimport { filterKinds, useAllKinds } from './kindFilterUtils';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n ...theme.typography.h4,\n },\n }),\n);\n\n/**\n * Props for {@link CatalogKindHeader}.\n *\n * @public\n */\nexport interface CatalogKindHeaderProps {\n /**\n * Entity kinds to show in the dropdown; by default all kinds are fetched from the catalog and\n * displayed.\n */\n allowedKinds?: string[];\n /**\n * The initial kind to select; defaults to 'component'. A kind filter entered directly in the\n * query parameter will override this value.\n */\n initialFilter?: string;\n}\n\n/**\n * @public\n * @deprecated This component has been deprecated in favour of the EntityKindPicker in the list of filters. If you wish to keep this component long term make sure to raise an issue at github.com/backstage/backstage\n */\nexport function CatalogKindHeader(props: CatalogKindHeaderProps) {\n const { initialFilter = 'component', allowedKinds } = props;\n const classes = useStyles();\n const { allKinds } = useAllKinds();\n const {\n filters,\n updateFilters,\n queryParameters: { kind: kindParameter },\n } = useEntityList();\n\n const queryParamKind = useMemo(\n () => [kindParameter].flat()[0],\n [kindParameter],\n );\n\n const [selectedKind, setSelectedKind] = useState(\n queryParamKind ?? filters.kind?.value ?? initialFilter,\n );\n\n // Set selected kinds on query parameter updates; this happens at initial page load and from\n // external updates to the page location.\n useEffect(() => {\n if (queryParamKind) {\n setSelectedKind(queryParamKind);\n }\n }, [queryParamKind]);\n\n // Set selected kind from filters; this happens when the kind filter is\n // updated from another component\n useEffect(() => {\n if (filters.kind?.value) {\n setSelectedKind(filters.kind?.value);\n }\n }, [filters.kind]);\n\n useEffect(() => {\n updateFilters({\n kind: selectedKind ? new EntityKindFilter(selectedKind) : undefined,\n });\n }, [selectedKind, updateFilters]);\n\n const options = filterKinds(allKinds, allowedKinds, selectedKind);\n\n return (\n <Select\n input={<InputBase />}\n value={selectedKind.toLocaleLowerCase('en-US')}\n onChange={e => setSelectedKind(e.target.value as string)}\n classes={classes}\n >\n {Object.keys(options).map(kind => (\n <MenuItem value={kind} key={kind}>\n {`${pluralize(options[kind])}`}\n </MenuItem>\n ))}\n </Select>\n );\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\n\n/** @public */\nexport interface EntityPredicates {\n kind?: string | string[];\n type?: string | string[];\n}\n\nfunction strCmp(a: unknown, b: string | undefined): boolean {\n return Boolean(\n a &&\n typeof a === 'string' &&\n a?.toLocaleLowerCase('en-US') === b?.toLocaleLowerCase('en-US'),\n );\n}\n\nfunction strCmpAll(value: unknown, cmpValues: string | string[]) {\n return typeof cmpValues === 'string'\n ? strCmp(value, cmpValues)\n : cmpValues.length === 0 || cmpValues.some(cmpVal => strCmp(value, cmpVal));\n}\n\n/**\n * For use in EntitySwitch.Case. Matches if the entity is of a given kind.\n * @public\n */\nexport function isKind(kinds: string | string[]) {\n return isEntityWith({ kind: kinds });\n}\n\n/**\n * For use in EntitySwitch.Case. Matches if the entity is a Component of a given spec.type.\n * @public\n */\nexport function isComponentType(types: string | string[]) {\n return isEntityWith({ kind: 'component', type: types });\n}\n\n/**\n * For use in EntitySwitch.Case. Matches if the entity is a Resource of a given spec.type.\n * @public\n */\nexport function isResourceType(types: string | string[]) {\n return isEntityWith({ kind: 'resource', type: types });\n}\n\n/**\n * For use in EntitySwitch.Case. Matches if the entity is an API of a given spec.type.\n * @public\n */\nexport function isApiType(types: string | string[]) {\n return isEntityWith({ kind: 'api', type: types });\n}\n\n/**\n * For use in EntitySwitch.Case. Matches if the entity is the specified kind and type (if present).\n * @public\n */\nexport function isEntityWith(predicate: EntityPredicates) {\n return (entity: Entity) => {\n if (predicate.kind && !strCmpAll(entity.kind, predicate.kind)) {\n return false;\n }\n\n if (predicate.type && !strCmpAll(entity.spec?.type, predicate.type)) {\n return false;\n }\n\n // there's no type check, return true\n return true;\n };\n}\n\n/**\n * For use in EntitySwitch.Case. Matches if the entity is in a given namespace.\n * @public\n */\nexport function isNamespace(namespaces: string | string[]) {\n return (entity: Entity) => strCmpAll(entity.metadata?.namespace, namespaces);\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 { CatalogFilterLayout } from '@backstage/plugin-catalog-react';\n\n/**\n * @public\n * @deprecated Use `CatalogFilterLayout` from `@backstage/plugin-catalog-react` instead.\n */\nexport const FilteredEntityLayout = CatalogFilterLayout as (props: {\n children: React.ReactNode;\n}) => JSX.Element;\n\n/**\n * @public\n * @deprecated Use `CatalogFilterLayout.Filters` from `@backstage/plugin-catalog-react` instead.\n */\nexport const FilterContainer = CatalogFilterLayout.Filters;\n\n/**\n * @public\n * @deprecated Use `CatalogFilterLayout.Content` from `@backstage/plugin-catalog-react` instead.\n */\nexport const EntityListContainer = CatalogFilterLayout.Content;\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CatalogClient } from '@backstage/catalog-client';\nimport { Entity } from '@backstage/catalog-model';\nimport {\n catalogApiRef,\n entityPresentationApiRef,\n entityRouteRef,\n starredEntitiesApiRef,\n} from '@backstage/plugin-catalog-react';\nimport {\n createComponentRouteRef,\n createFromTemplateRouteRef,\n unregisterRedirectRouteRef,\n viewTechDocRouteRef,\n} from './routes';\nimport {\n createApiFactory,\n createComponentExtension,\n createPlugin,\n createRoutableExtension,\n discoveryApiRef,\n fetchApiRef,\n storageApiRef,\n} from '@backstage/core-plugin-api';\nimport {\n createSearchResultListItemExtension,\n SearchResultListItemExtensionProps,\n} from '@backstage/plugin-search-react';\nimport { DefaultStarredEntitiesApi } from './apis';\nimport { AboutCardProps } from './components/AboutCard';\nimport { DefaultCatalogPageProps } from './components/CatalogPage';\nimport { DependencyOfComponentsCardProps } from './components/DependencyOfComponentsCard';\nimport { DependsOnComponentsCardProps } from './components/DependsOnComponentsCard';\nimport { DependsOnResourcesCardProps } from './components/DependsOnResourcesCard';\nimport { HasComponentsCardProps } from './components/HasComponentsCard';\nimport { HasResourcesCardProps } from './components/HasResourcesCard';\nimport { HasSubcomponentsCardProps } from './components/HasSubcomponentsCard';\nimport { HasSystemsCardProps } from './components/HasSystemsCard';\nimport { RelatedEntitiesCardProps } from './components/RelatedEntitiesCard';\nimport { CatalogSearchResultListItemProps } from './components/CatalogSearchResultListItem';\nimport { rootRouteRef } from './routes';\nimport { DefaultEntityPresentationApi } from './apis/EntityPresentationApi';\n\n/** @public */\nexport const catalogPlugin = createPlugin({\n id: 'catalog',\n apis: [\n createApiFactory({\n api: catalogApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ discoveryApi, fetchApi }) =>\n new CatalogClient({ discoveryApi, fetchApi }),\n }),\n createApiFactory({\n api: starredEntitiesApiRef,\n deps: { storageApi: storageApiRef },\n factory: ({ storageApi }) =>\n new DefaultStarredEntitiesApi({ storageApi }),\n }),\n createApiFactory({\n api: entityPresentationApiRef,\n deps: { catalogApi: catalogApiRef },\n factory: ({ catalogApi }) =>\n DefaultEntityPresentationApi.create({ catalogApi }),\n }),\n ],\n routes: {\n catalogIndex: rootRouteRef,\n catalogEntity: entityRouteRef,\n },\n externalRoutes: {\n createComponent: createComponentRouteRef,\n viewTechDoc: viewTechDocRouteRef,\n createFromTemplate: createFromTemplateRouteRef,\n unregisterRedirect: unregisterRedirectRouteRef,\n },\n});\n\n/** @public */\nexport const CatalogIndexPage: (props: DefaultCatalogPageProps) => JSX.Element =\n catalogPlugin.provide(\n createRoutableExtension({\n name: 'CatalogIndexPage',\n component: () =>\n import('./components/CatalogPage').then(m => m.CatalogPage),\n mountPoint: rootRouteRef,\n }),\n );\n\n/** @public */\nexport const CatalogEntityPage: () => JSX.Element = catalogPlugin.provide(\n createRoutableExtension({\n name: 'CatalogEntityPage',\n component: () =>\n import('./components/CatalogEntityPage').then(m => m.CatalogEntityPage),\n mountPoint: entityRouteRef,\n }),\n);\n\n/** @public */\nexport const EntityAboutCard: (props: AboutCardProps) => JSX.Element =\n catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityAboutCard',\n component: {\n lazy: () => import('./components/AboutCard').then(m => m.AboutCard),\n },\n }),\n );\n\n/** @public */\nexport const EntityLinksCard = catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityLinksCard',\n component: {\n lazy: () =>\n import('./components/EntityLinksCard').then(m => m.EntityLinksCard),\n },\n }),\n);\n\n/** @public */\nexport const EntityLabelsCard = catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityLabelsCard',\n component: {\n lazy: () =>\n import('./components/EntityLabelsCard').then(m => m.EntityLabelsCard),\n },\n }),\n);\n\n/** @public */\nexport const EntityHasSystemsCard: (props: HasSystemsCardProps) => JSX.Element =\n catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityHasSystemsCard',\n component: {\n lazy: () =>\n import('./components/HasSystemsCard').then(m => m.HasSystemsCard),\n },\n }),\n );\n\n/** @public */\nexport const EntityHasComponentsCard: (\n props: HasComponentsCardProps,\n) => JSX.Element = catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityHasComponentsCard',\n component: {\n lazy: () =>\n import('./components/HasComponentsCard').then(m => m.HasComponentsCard),\n },\n }),\n);\n\n/** @public */\nexport const EntityHasSubcomponentsCard: (\n props: HasSubcomponentsCardProps,\n) => JSX.Element = catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityHasSubcomponentsCard',\n component: {\n lazy: () =>\n import('./components/HasSubcomponentsCard').then(\n m => m.HasSubcomponentsCard,\n ),\n },\n }),\n);\n\n/** @public */\nexport const EntityHasResourcesCard: (\n props: HasResourcesCardProps,\n) => JSX.Element = catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityHasResourcesCard',\n component: {\n lazy: () =>\n import('./components/HasResourcesCard').then(m => m.HasResourcesCard),\n },\n }),\n);\n\n/** @public */\nexport const EntityDependsOnComponentsCard: (\n props: DependsOnComponentsCardProps,\n) => JSX.Element = catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityDependsOnComponentsCard',\n component: {\n lazy: () =>\n import('./components/DependsOnComponentsCard').then(\n m => m.DependsOnComponentsCard,\n ),\n },\n }),\n);\n\n/** @public */\nexport const EntityDependencyOfComponentsCard: (\n props: DependencyOfComponentsCardProps,\n) => JSX.Element = catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityDependencyOfComponentsCard',\n component: {\n lazy: () =>\n import('./components/DependencyOfComponentsCard').then(\n m => m.DependencyOfComponentsCard,\n ),\n },\n }),\n);\n\n/** @public */\nexport const EntityDependsOnResourcesCard: (\n props: DependsOnResourcesCardProps,\n) => JSX.Element = catalogPlugin.provide(\n createComponentExtension({\n name: 'EntityDependsOnResourcesCard',\n component: {\n lazy: () =>\n import('./components/DependsOnResourcesCard').then(\n m => m.DependsOnResourcesCard,\n ),\n },\n }),\n);\n\n/** @public */\nexport const RelatedEntitiesCard: <T extends Entity>(\n props: RelatedEntitiesCardProps<T>,\n) => JSX.Element = catalogPlugin.provide(\n createComponentExtension({\n name: 'RelatedEntitiesCard',\n component: {\n lazy: () =>\n import('./components/RelatedEntitiesCard').then(\n m => m.RelatedEntitiesCard,\n ),\n },\n }),\n);\n\n/** @public */\nexport const CatalogSearchResultListItem: (\n props: SearchResultListItemExtensionProps<CatalogSearchResultListItemProps>,\n) => JSX.Element | null = catalogPlugin.provide(\n createSearchResultListItemExtension({\n name: 'CatalogSearchResultListItem',\n component: () =>\n import('./components/CatalogSearchResultListItem').then(\n m => m.CatalogSearchResultListItem,\n ),\n predicate: result => result.type === 'software-catalog',\n }),\n);\n"],"names":["_a","_b"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/plugin-catalog",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.19.0-next.0",
|
|
4
4
|
"description": "The Backstage plugin for browsing the Backstage catalog",
|
|
5
5
|
"backstage": {
|
|
6
6
|
"role": "frontend-plugin"
|
|
@@ -49,20 +49,20 @@
|
|
|
49
49
|
"test": "backstage-cli package test"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@backstage/catalog-client": "^1.6.
|
|
52
|
+
"@backstage/catalog-client": "^1.6.3",
|
|
53
53
|
"@backstage/catalog-model": "^1.4.5",
|
|
54
|
-
"@backstage/core-compat-api": "^0.2.
|
|
55
|
-
"@backstage/core-components": "^0.14.
|
|
54
|
+
"@backstage/core-compat-api": "^0.2.4-next.0",
|
|
55
|
+
"@backstage/core-components": "^0.14.4-next.0",
|
|
56
56
|
"@backstage/core-plugin-api": "^1.9.1",
|
|
57
57
|
"@backstage/errors": "^1.2.4",
|
|
58
|
-
"@backstage/frontend-plugin-api": "^0.6.
|
|
59
|
-
"@backstage/integration-react": "^1.1.
|
|
58
|
+
"@backstage/frontend-plugin-api": "^0.6.4-next.0",
|
|
59
|
+
"@backstage/integration-react": "^1.1.26-next.0",
|
|
60
60
|
"@backstage/plugin-catalog-common": "^1.0.22",
|
|
61
|
-
"@backstage/plugin-catalog-react": "^1.11.
|
|
61
|
+
"@backstage/plugin-catalog-react": "^1.11.3-next.0",
|
|
62
62
|
"@backstage/plugin-permission-react": "^0.4.21",
|
|
63
63
|
"@backstage/plugin-scaffolder-common": "^1.5.1",
|
|
64
64
|
"@backstage/plugin-search-common": "^1.2.11",
|
|
65
|
-
"@backstage/plugin-search-react": "^1.7.
|
|
65
|
+
"@backstage/plugin-search-react": "^1.7.10-next.0",
|
|
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.26.
|
|
82
|
-
"@backstage/core-app-api": "^1.12.
|
|
83
|
-
"@backstage/dev-utils": "^1.0.
|
|
81
|
+
"@backstage/cli": "^0.26.3-next.0",
|
|
82
|
+
"@backstage/core-app-api": "^1.12.3",
|
|
83
|
+
"@backstage/dev-utils": "^1.0.31-next.0",
|
|
84
84
|
"@backstage/plugin-permission-common": "^0.7.13",
|
|
85
|
-
"@backstage/test-utils": "^1.5.
|
|
85
|
+
"@backstage/test-utils": "^1.5.3",
|
|
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":"CatalogTable-BvyJNYOs.esm.js","sources":["../../src/components/CatalogTable/columns.tsx","../../src/components/CatalogTable/PaginatedCatalogTable.tsx","../../src/components/CatalogTable/defaultCatalogTableColumnsFunc.tsx","../../src/components/CatalogTable/CatalogTable.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport {\n humanizeEntityRef,\n EntityRefLink,\n EntityRefLinks,\n} from '@backstage/plugin-catalog-react';\nimport Chip from '@material-ui/core/Chip';\nimport { CatalogTableRow } from './types';\nimport { OverflowTooltip, TableColumn } from '@backstage/core-components';\nimport { Entity } from '@backstage/catalog-model';\nimport { JsonArray } from '@backstage/types';\n\n// The columnFactories symbol is not directly exported, but through the\n// CatalogTable.columns field.\n/** @public */\nexport const columnFactories = Object.freeze({\n createNameColumn(options?: {\n defaultKind?: string;\n }): TableColumn<CatalogTableRow> {\n function formatContent(entity: Entity): string {\n return (\n entity.metadata?.title ||\n humanizeEntityRef(entity, {\n defaultKind: options?.defaultKind,\n })\n );\n }\n\n return {\n title: 'Name',\n field: 'resolved.entityRef',\n highlight: true,\n customSort({ entity: entity1 }, { entity: entity2 }) {\n // TODO: We could implement this more efficiently by comparing field by field.\n // This has similar issues as above.\n return formatContent(entity1).localeCompare(formatContent(entity2));\n },\n render: ({ entity }) => (\n <EntityRefLink\n entityRef={entity}\n defaultKind={options?.defaultKind || 'Component'}\n />\n ),\n };\n },\n createSystemColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'System',\n field: 'resolved.partOfSystemRelationTitle',\n render: ({ resolved }) => (\n <EntityRefLinks\n entityRefs={resolved.partOfSystemRelations}\n defaultKind=\"system\"\n />\n ),\n };\n },\n createOwnerColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Owner',\n field: 'resolved.ownedByRelationsTitle',\n render: ({ resolved }) => (\n <EntityRefLinks\n entityRefs={resolved.ownedByRelations}\n defaultKind=\"group\"\n />\n ),\n };\n },\n createSpecTargetsColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Targets',\n field: 'entity.spec.targets',\n customFilterAndSearch: (query, row) => {\n let targets: JsonArray = [];\n if (\n row.entity?.spec?.targets &&\n Array.isArray(row.entity?.spec?.targets)\n ) {\n targets = row.entity?.spec?.targets;\n } else if (row.entity?.spec?.target) {\n targets = [row.entity?.spec?.target];\n }\n return targets\n .join(', ')\n .toLocaleUpperCase('en-US')\n .includes(query.toLocaleUpperCase('en-US'));\n },\n render: ({ entity }) => (\n <>\n {(entity?.spec?.targets || entity?.spec?.target) && (\n <OverflowTooltip\n text={(\n (entity!.spec!.targets as JsonArray) || [entity.spec.target]\n ).join(', ')}\n placement=\"bottom-start\"\n />\n )}\n </>\n ),\n };\n },\n createSpecTypeColumn(\n options: {\n hidden: boolean;\n } = { hidden: false },\n ): TableColumn<CatalogTableRow> {\n return {\n title: 'Type',\n field: 'entity.spec.type',\n hidden: options.hidden,\n width: 'auto',\n };\n },\n createSpecLifecycleColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Lifecycle',\n field: 'entity.spec.lifecycle',\n };\n },\n createMetadataDescriptionColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Description',\n field: 'entity.metadata.description',\n render: ({ entity }) => (\n <OverflowTooltip\n text={entity.metadata.description}\n placement=\"bottom-start\"\n />\n ),\n width: 'auto',\n };\n },\n createTagsColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Tags',\n field: 'entity.metadata.tags',\n cellStyle: {\n padding: '0px 16px 0px 20px',\n },\n render: ({ entity }) => (\n <>\n {entity.metadata.tags &&\n entity.metadata.tags.map(t => (\n <Chip\n key={t}\n label={t}\n size=\"small\"\n variant=\"outlined\"\n style={{ marginBottom: '0px' }}\n />\n ))}\n </>\n ),\n width: 'auto',\n };\n },\n createTitleColumn(options?: {\n hidden?: boolean;\n }): TableColumn<CatalogTableRow> {\n return {\n title: 'Title',\n field: 'entity.metadata.title',\n hidden: options?.hidden,\n searchable: true,\n };\n },\n createLabelColumn(\n key: string,\n options?: { title?: string; defaultValue?: string },\n ): TableColumn<CatalogTableRow> {\n return {\n title: options?.title || 'Label',\n field: 'entity.metadata.labels',\n cellStyle: {\n padding: '0px 16px 0px 20px',\n },\n render: ({ entity }: { entity: Entity }) => {\n const labels: Record<string, string> | undefined =\n entity.metadata?.labels;\n const specifiedLabelValue =\n (labels && labels[key]) || options?.defaultValue;\n return (\n <>\n {specifiedLabelValue && (\n <Chip\n key={specifiedLabelValue}\n label={specifiedLabelValue}\n size=\"small\"\n variant=\"outlined\"\n />\n )}\n </>\n );\n },\n width: 'auto',\n };\n },\n createNamespaceColumn(): TableColumn<CatalogTableRow> {\n return {\n title: 'Namespace',\n field: 'entity.metadata.namespace',\n width: 'auto',\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';\n\nimport { Table, TableProps } from '@backstage/core-components';\nimport { CatalogTableRow } from './types';\nimport {\n EntityTextFilter,\n useEntityList,\n} from '@backstage/plugin-catalog-react';\n\ntype PaginatedCatalogTableProps = {\n prev?(): void;\n next?(): void;\n} & TableProps<CatalogTableRow>;\n\n/**\n * @internal\n */\nexport function PaginatedCatalogTable(props: PaginatedCatalogTableProps) {\n const { columns, data, next, prev, title, isLoading, options } = props;\n const { updateFilters } = useEntityList();\n\n return (\n <Table\n title={isLoading ? '' : title}\n columns={columns}\n data={data}\n options={{\n ...options,\n // These settings are configured to force server side pagination\n paginationPosition: 'both',\n pageSizeOptions: [],\n showFirstLastPageButtons: false,\n pageSize: Number.MAX_SAFE_INTEGER,\n emptyRowsWhenPaging: false,\n }}\n onSearchChange={(searchText: string) =>\n updateFilters({\n text: searchText ? new EntityTextFilter(searchText) : undefined,\n })\n }\n onPageChange={page => {\n if (page > 0) {\n next?.();\n } else {\n prev?.();\n }\n }}\n /* this will enable the prev button accordingly */\n page={prev ? 1 : 0}\n /* this will enable the next button accordingly */\n totalCount={next ? Number.MAX_VALUE : Number.MAX_SAFE_INTEGER}\n localization={{ pagination: { labelDisplayedRows: '' } }}\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 { TableColumn } from '@backstage/core-components';\nimport { columnFactories } from './columns';\nimport { CatalogTableColumnsFunc, CatalogTableRow } from './types';\n\n// The defaultCatalogTableColumnsFunc symbol is not directly exported, but through the\n// CatalogTable.defaultColumnsFunc field.\n/** @public */\nexport const defaultCatalogTableColumnsFunc: CatalogTableColumnsFunc = ({\n filters,\n entities,\n}) => {\n const showTypeColumn = filters.type === undefined;\n\n return [\n columnFactories.createTitleColumn({ hidden: true }),\n columnFactories.createNameColumn({ defaultKind: filters.kind?.value }),\n ...createEntitySpecificColumns(),\n columnFactories.createMetadataDescriptionColumn(),\n columnFactories.createTagsColumn(),\n ];\n\n function createEntitySpecificColumns(): TableColumn<CatalogTableRow>[] {\n const baseColumns = [\n columnFactories.createSystemColumn(),\n columnFactories.createOwnerColumn(),\n columnFactories.createSpecTypeColumn({ hidden: !showTypeColumn }),\n columnFactories.createSpecLifecycleColumn(),\n ];\n switch (filters.kind?.value) {\n case 'user':\n return [];\n case 'domain':\n case 'system':\n return [columnFactories.createOwnerColumn()];\n case 'group':\n case 'template':\n return [\n columnFactories.createSpecTypeColumn({ hidden: !showTypeColumn }),\n ];\n case 'location':\n return [\n columnFactories.createSpecTypeColumn({ hidden: !showTypeColumn }),\n columnFactories.createSpecTargetsColumn(),\n ];\n default:\n return entities.every(entity => entity.metadata.namespace === 'default')\n ? baseColumns\n : [...baseColumns, columnFactories.createNamespaceColumn()];\n }\n }\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n ANNOTATION_EDIT_URL,\n ANNOTATION_VIEW_URL,\n Entity,\n RELATION_OWNED_BY,\n RELATION_PART_OF,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport {\n CodeSnippet,\n Table,\n TableColumn,\n TableProps,\n WarningPanel,\n} from '@backstage/core-components';\nimport {\n getEntityRelations,\n humanizeEntityRef,\n useEntityList,\n useStarredEntities,\n} from '@backstage/plugin-catalog-react';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles } from '@material-ui/core/styles';\nimport { visuallyHidden } from '@mui/utils';\nimport Edit from '@material-ui/icons/Edit';\nimport OpenInNew from '@material-ui/icons/OpenInNew';\nimport Star from '@material-ui/icons/Star';\nimport StarBorder from '@material-ui/icons/StarBorder';\nimport { capitalize } from 'lodash';\nimport pluralize from 'pluralize';\nimport React, { ReactNode, useMemo } from 'react';\nimport { columnFactories } from './columns';\nimport { CatalogTableColumnsFunc, CatalogTableRow } from './types';\nimport { PaginatedCatalogTable } from './PaginatedCatalogTable';\nimport { defaultCatalogTableColumnsFunc } from './defaultCatalogTableColumnsFunc';\n\n/**\n * Props for {@link CatalogTable}.\n *\n * @public\n */\nexport interface CatalogTableProps {\n columns?: TableColumn<CatalogTableRow>[] | CatalogTableColumnsFunc;\n actions?: TableProps<CatalogTableRow>['actions'];\n tableOptions?: TableProps<CatalogTableRow>['options'];\n emptyContent?: ReactNode;\n subtitle?: string;\n}\n\nconst YellowStar = withStyles({\n root: {\n color: '#f3ba37',\n },\n})(Star);\n\nconst refCompare = (a: Entity, b: Entity) => {\n const toRef = (entity: Entity) =>\n entity.metadata.title ||\n humanizeEntityRef(entity, {\n defaultKind: 'Component',\n });\n\n return toRef(a).localeCompare(toRef(b));\n};\n\n/** @public */\nexport const CatalogTable = (props: CatalogTableProps) => {\n const {\n columns = defaultCatalogTableColumnsFunc,\n tableOptions,\n subtitle,\n emptyContent,\n } = props;\n const { isStarredEntity, toggleStarredEntity } = useStarredEntities();\n const entityListContext = useEntityList();\n const { loading, error, entities, filters, pageInfo, totalItems } =\n entityListContext;\n const enablePagination = !!pageInfo;\n\n const tableColumns = useMemo(\n () =>\n typeof columns === 'function' ? columns(entityListContext) : columns,\n [columns, entityListContext],\n );\n\n if (error) {\n return (\n <div>\n <WarningPanel\n severity=\"error\"\n title=\"Could not fetch catalog entities.\"\n >\n <CodeSnippet language=\"text\" text={error.toString()} />\n </WarningPanel>\n </div>\n );\n }\n\n const defaultActions: TableProps<CatalogTableRow>['actions'] = [\n ({ entity }) => {\n const url = entity.metadata.annotations?.[ANNOTATION_VIEW_URL];\n const title = 'View';\n\n return {\n icon: () => (\n <>\n <Typography style={visuallyHidden}>{title}</Typography>\n <OpenInNew fontSize=\"small\" />\n </>\n ),\n tooltip: title,\n disabled: !url,\n onClick: () => {\n if (!url) return;\n window.open(url, '_blank');\n },\n };\n },\n ({ entity }) => {\n const url = entity.metadata.annotations?.[ANNOTATION_EDIT_URL];\n const title = 'Edit';\n\n return {\n icon: () => (\n <>\n <Typography style={visuallyHidden}>{title}</Typography>\n <Edit fontSize=\"small\" />\n </>\n ),\n tooltip: title,\n disabled: !url,\n onClick: () => {\n if (!url) return;\n window.open(url, '_blank');\n },\n };\n },\n ({ entity }) => {\n const isStarred = isStarredEntity(entity);\n const title = isStarred ? 'Remove from favorites' : 'Add to favorites';\n\n return {\n cellStyle: { paddingLeft: '1em' },\n icon: () => (\n <>\n <Typography style={visuallyHidden}>{title}</Typography>\n {isStarred ? <YellowStar /> : <StarBorder />}\n </>\n ),\n tooltip: title,\n onClick: () => toggleStarredEntity(entity),\n };\n },\n ];\n\n const currentKind = filters.kind?.value || '';\n const currentType = filters.type?.value || '';\n // TODO(timbonicus): remove the title from the CatalogTable once using EntitySearchBar\n const titlePreamble = capitalize(filters.user?.value ?? 'all');\n const titleDisplay = [titlePreamble, currentType, pluralize(currentKind)]\n .filter(s => s)\n .join(' ');\n\n const title = `${titleDisplay} (${totalItems})`;\n const actions = props.actions || defaultActions;\n const options = {\n actionsColumnIndex: -1,\n loadingType: 'linear' as const,\n showEmptyDataSourceMessage: !loading,\n padding: 'dense' as const,\n ...tableOptions,\n };\n\n if (enablePagination) {\n return (\n <PaginatedCatalogTable\n columns={tableColumns}\n emptyContent={emptyContent}\n isLoading={loading}\n title={title}\n actions={actions}\n subtitle={subtitle}\n options={options}\n data={entities.map(toEntityRow)}\n next={pageInfo.next}\n prev={pageInfo.prev}\n />\n );\n }\n\n const rows = entities.sort(refCompare).map(toEntityRow);\n const pageSize = 20;\n const showPagination = rows.length > pageSize;\n\n return (\n <Table<CatalogTableRow>\n isLoading={loading}\n columns={tableColumns}\n options={{\n paging: showPagination,\n pageSize: pageSize,\n pageSizeOptions: [20, 50, 100],\n ...options,\n }}\n title={title}\n data={rows}\n actions={actions}\n subtitle={subtitle}\n emptyContent={emptyContent}\n />\n );\n};\n\nCatalogTable.columns = columnFactories;\nCatalogTable.defaultColumnsFunc = defaultCatalogTableColumnsFunc;\n\nfunction toEntityRow(entity: Entity) {\n const partOfSystemRelations = getEntityRelations(entity, RELATION_PART_OF, {\n kind: 'system',\n });\n const ownedByRelations = getEntityRelations(entity, RELATION_OWNED_BY);\n\n return {\n entity,\n resolved: {\n // This name is here for backwards compatibility mostly; the\n // presentation of refs in the table should in general be handled with\n // EntityRefLink / EntityName components\n name: humanizeEntityRef(entity, {\n defaultKind: 'Component',\n }),\n entityRef: stringifyEntityRef(entity),\n ownedByRelationsTitle: ownedByRelations\n .map(r => humanizeEntityRef(r, { defaultKind: 'group' }))\n .join(', '),\n ownedByRelations,\n partOfSystemRelationTitle: partOfSystemRelations\n .map(r =>\n humanizeEntityRef(r, {\n defaultKind: 'system',\n }),\n )\n .join(', '),\n partOfSystemRelations,\n },\n };\n}\n"],"names":["_a","title","Edit"],"mappings":"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"}
|