@backstage/plugin-catalog 1.17.1-next.1 → 1.18.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 +57 -0
- package/alpha/package.json +1 -1
- package/dist/alpha.esm.js +1 -1
- package/dist/esm/{AboutCard-4c4d6a9e.esm.js → AboutCard-b794045e.esm.js} +11 -3
- package/dist/esm/AboutCard-b794045e.esm.js.map +1 -0
- package/dist/esm/{CatalogTable-0b3bd448.esm.js → CatalogTable-3bcb90b7.esm.js} +9 -6
- package/dist/esm/CatalogTable-3bcb90b7.esm.js.map +1 -0
- package/dist/esm/{EntityLayout-51caff9c.esm.js → EntityLayout-cf734b83.esm.js} +11 -3
- package/dist/esm/EntityLayout-cf734b83.esm.js.map +1 -0
- package/dist/esm/{EntityOverviewPage-d6f1b492.esm.js → EntityOverviewPage-e5507953.esm.js} +9 -5
- package/dist/esm/{EntityOverviewPage-d6f1b492.esm.js.map → EntityOverviewPage-e5507953.esm.js.map} +1 -1
- package/dist/esm/{EntitySwitch-b8889a58.esm.js → EntitySwitch-309707e4.esm.js} +7 -3
- package/dist/esm/EntitySwitch-309707e4.esm.js.map +1 -0
- package/dist/esm/{LinksGridList-c9dd074c.esm.js → LinksGridList-821b4b9c.esm.js} +7 -2
- package/dist/esm/LinksGridList-821b4b9c.esm.js.map +1 -0
- package/dist/esm/{alpha-a48529f6.esm.js → alpha-9a90bdd6.esm.js} +14 -14
- package/dist/esm/{alpha-a48529f6.esm.js.map → alpha-9a90bdd6.esm.js.map} +1 -1
- package/dist/esm/{conditions-7e166d27.esm.js → conditions-300fa755.esm.js} +4 -2
- package/dist/esm/conditions-300fa755.esm.js.map +1 -0
- package/dist/esm/index-1bc2b166.esm.js +8 -0
- package/dist/esm/index-1bc2b166.esm.js.map +1 -0
- package/dist/esm/{index-b87e664e.esm.js → index-1ecaa213.esm.js} +3 -3
- package/dist/esm/{index-b87e664e.esm.js.map → index-1ecaa213.esm.js.map} +1 -1
- package/dist/esm/{index-226f1855.esm.js → index-2a7fa2ed.esm.js} +3 -3
- package/dist/esm/{index-226f1855.esm.js.map → index-2a7fa2ed.esm.js.map} +1 -1
- package/dist/esm/{index-151a7b53.esm.js → index-57e65874.esm.js} +3 -3
- package/dist/esm/{index-151a7b53.esm.js.map → index-57e65874.esm.js.map} +1 -1
- package/dist/esm/{index-4080b52a.esm.js → index-6b1899f5.esm.js} +7 -5
- package/dist/esm/{index-4080b52a.esm.js.map → index-6b1899f5.esm.js.map} +1 -1
- package/dist/esm/{index-457f1bef.esm.js → index-717a3dda.esm.js} +3 -3
- package/dist/esm/{index-457f1bef.esm.js.map → index-717a3dda.esm.js.map} +1 -1
- package/dist/esm/{index-a73e6d8d.esm.js → index-74eaf56c.esm.js} +7 -2
- package/dist/esm/index-74eaf56c.esm.js.map +1 -0
- package/dist/esm/{index-5d579387.esm.js → index-7615c566.esm.js} +3 -3
- package/dist/esm/{index-5d579387.esm.js.map → index-7615c566.esm.js.map} +1 -1
- package/dist/esm/{index-fcc6ada1.esm.js → index-7f2db8ef.esm.js} +16 -4
- package/dist/esm/index-7f2db8ef.esm.js.map +1 -0
- package/dist/esm/{index-a2f43c63.esm.js → index-88769807.esm.js} +9 -3
- package/dist/esm/index-88769807.esm.js.map +1 -0
- package/dist/esm/{index-2ae6a112.esm.js → index-9b24dbc4.esm.js} +3 -3
- package/dist/esm/{index-2ae6a112.esm.js.map → index-9b24dbc4.esm.js.map} +1 -1
- package/dist/esm/{index-ac18d30d.esm.js → index-d7a31c6a.esm.js} +12 -4
- package/dist/esm/index-d7a31c6a.esm.js.map +1 -0
- package/dist/esm/{index-df2397a2.esm.js → index-f18e5c53.esm.js} +3 -3
- package/dist/esm/{index-df2397a2.esm.js.map → index-f18e5c53.esm.js.map} +1 -1
- package/dist/esm/{index-87a68cf7.esm.js → index-fd6ce238.esm.js} +3 -3
- package/dist/esm/index-fd6ce238.esm.js.map +1 -0
- package/dist/esm/{presets-c708fd7b.esm.js → presets-0a79db75.esm.js} +2 -2
- package/dist/esm/presets-0a79db75.esm.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.esm.js +45 -23
- package/dist/index.esm.js.map +1 -1
- package/package.json +20 -20
- package/dist/esm/AboutCard-4c4d6a9e.esm.js.map +0 -1
- package/dist/esm/CatalogTable-0b3bd448.esm.js.map +0 -1
- package/dist/esm/EntityLayout-51caff9c.esm.js.map +0 -1
- package/dist/esm/EntitySwitch-b8889a58.esm.js.map +0 -1
- package/dist/esm/LinksGridList-c9dd074c.esm.js.map +0 -1
- package/dist/esm/conditions-7e166d27.esm.js.map +0 -1
- package/dist/esm/index-1819df86.esm.js +0 -6
- package/dist/esm/index-1819df86.esm.js.map +0 -1
- package/dist/esm/index-87a68cf7.esm.js.map +0 -1
- package/dist/esm/index-a2f43c63.esm.js.map +0 -1
- package/dist/esm/index-a73e6d8d.esm.js.map +0 -1
- package/dist/esm/index-ac18d30d.esm.js.map +0 -1
- package/dist/esm/index-fcc6ada1.esm.js.map +0 -1
- package/dist/esm/presets-c708fd7b.esm.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,62 @@
|
|
|
1
1
|
# @backstage/plugin-catalog
|
|
2
2
|
|
|
3
|
+
## 1.18.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 72b8827: Adds a title to the `PaginatedCatalogTable` for better visibility on what you're viewing.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 50b6687: Resolved an issue where the `PaginatedCatalogTable` was not propagating table options to its child table.
|
|
12
|
+
- 9332425: The entity page extension provided by the `/alpha` plugin now correctly renders the entity 404 page.
|
|
13
|
+
- 1c0b179: Added the `no-top-level-material-ui-4-imports` ESLint rule to aid with the migration to Material UI v5
|
|
14
|
+
- 2ac1630: Added support for passing in custom filters to `CatalogIndexPage`
|
|
15
|
+
- 298953b: Added support for providing an `initiallySelectedNamespaces` which accepts an array of Namespaces to have selected by default
|
|
16
|
+
- 6727665: Allow the `spec.target` field to be searchable in the catalog table for locations. Previously, only the `spec.targets` field was be searchable. This makes locations generated by providers such as the `GithubEntityProvider` searchable in the catalog table. [#23098](https://github.com/backstage/backstage/issues/23098)
|
|
17
|
+
- Updated dependencies
|
|
18
|
+
- @backstage/core-components@0.14.1
|
|
19
|
+
- @backstage/errors@1.2.4
|
|
20
|
+
- @backstage/integration-react@1.1.25
|
|
21
|
+
- @backstage/plugin-catalog-react@1.11.0
|
|
22
|
+
- @backstage/plugin-search-common@1.2.11
|
|
23
|
+
- @backstage/catalog-client@1.6.1
|
|
24
|
+
- @backstage/catalog-model@1.4.5
|
|
25
|
+
- @backstage/core-compat-api@0.2.1
|
|
26
|
+
- @backstage/core-plugin-api@1.9.1
|
|
27
|
+
- @backstage/frontend-plugin-api@0.6.1
|
|
28
|
+
- @backstage/types@1.1.1
|
|
29
|
+
- @backstage/plugin-catalog-common@1.0.22
|
|
30
|
+
- @backstage/plugin-permission-react@0.4.21
|
|
31
|
+
- @backstage/plugin-scaffolder-common@1.5.1
|
|
32
|
+
- @backstage/plugin-search-react@1.7.7
|
|
33
|
+
|
|
34
|
+
## 1.18.0-next.2
|
|
35
|
+
|
|
36
|
+
### Minor Changes
|
|
37
|
+
|
|
38
|
+
- 72b8827: Adds a title to the `PaginatedCatalogTable` for better visibility on what you're viewing.
|
|
39
|
+
|
|
40
|
+
### Patch Changes
|
|
41
|
+
|
|
42
|
+
- 298953b: Added support for providing an `initiallySelectedNamespaces` which accepts an array of Namespaces to have selected by default
|
|
43
|
+
- Updated dependencies
|
|
44
|
+
- @backstage/core-components@0.14.1-next.2
|
|
45
|
+
- @backstage/plugin-catalog-react@1.11.0-next.2
|
|
46
|
+
- @backstage/catalog-client@1.6.1-next.1
|
|
47
|
+
- @backstage/integration-react@1.1.25-next.2
|
|
48
|
+
- @backstage/frontend-plugin-api@0.6.1-next.2
|
|
49
|
+
- @backstage/plugin-search-react@1.7.7-next.2
|
|
50
|
+
- @backstage/core-compat-api@0.2.1-next.2
|
|
51
|
+
- @backstage/catalog-model@1.4.5-next.0
|
|
52
|
+
- @backstage/core-plugin-api@1.9.1-next.1
|
|
53
|
+
- @backstage/errors@1.2.4-next.0
|
|
54
|
+
- @backstage/types@1.1.1
|
|
55
|
+
- @backstage/plugin-catalog-common@1.0.22-next.1
|
|
56
|
+
- @backstage/plugin-permission-react@0.4.21-next.1
|
|
57
|
+
- @backstage/plugin-scaffolder-common@1.5.1-next.1
|
|
58
|
+
- @backstage/plugin-search-common@1.2.11-next.1
|
|
59
|
+
|
|
3
60
|
## 1.17.1-next.1
|
|
4
61
|
|
|
5
62
|
### 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-9a90bdd6.esm.js';
|
|
2
2
|
import '@backstage/core-compat-api';
|
|
3
3
|
import '@backstage/frontend-plugin-api';
|
|
4
4
|
import '@backstage/plugin-catalog-react';
|
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
import { RELATION_PART_OF, RELATION_OWNED_BY, getEntitySourceLocation, ANNOTATION_EDIT_URL, parseEntityRef, DEFAULT_NAMESPACE, ANNOTATION_LOCATION, stringifyEntityRef } from '@backstage/catalog-model';
|
|
2
|
-
import
|
|
2
|
+
import Card from '@material-ui/core/Card';
|
|
3
|
+
import CardContent from '@material-ui/core/CardContent';
|
|
4
|
+
import CardHeader from '@material-ui/core/CardHeader';
|
|
5
|
+
import Divider from '@material-ui/core/Divider';
|
|
6
|
+
import IconButton from '@material-ui/core/IconButton';
|
|
7
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
3
8
|
import { MarkdownContent, Link, HeaderIconLinkRow } from '@backstage/core-components';
|
|
4
9
|
import React, { useCallback } from 'react';
|
|
5
10
|
import { scmIntegrationsApiRef, ScmIntegrationIcon } from '@backstage/integration-react';
|
|
6
11
|
import { useElementFilter, useApp, useApi, alertApiRef, errorApiRef, useRouteRef } from '@backstage/core-plugin-api';
|
|
7
12
|
import { getEntityRelations, EntityRefLinks, useEntity, catalogApiRef, getEntitySourceLocation as getEntitySourceLocation$1 } from '@backstage/plugin-catalog-react';
|
|
8
13
|
import { v as viewTechDocRouteRef, b as createFromTemplateRouteRef } from './routes-6e97578f.esm.js';
|
|
9
|
-
import
|
|
14
|
+
import Chip from '@material-ui/core/Chip';
|
|
15
|
+
import Grid from '@material-ui/core/Grid';
|
|
16
|
+
import Typography from '@material-ui/core/Typography';
|
|
17
|
+
import { L as LinksGridList } from './LinksGridList-821b4b9c.esm.js';
|
|
10
18
|
import CachedIcon from '@material-ui/icons/Cached';
|
|
11
19
|
import CreateComponentIcon from '@material-ui/icons/AddCircleOutline';
|
|
12
20
|
import DocsIcon from '@material-ui/icons/Description';
|
|
@@ -324,4 +332,4 @@ function AboutCard(props) {
|
|
|
324
332
|
}
|
|
325
333
|
|
|
326
334
|
export { AboutContent as A, AboutField as a, AboutCard as b };
|
|
327
|
-
//# sourceMappingURL=AboutCard-
|
|
335
|
+
//# sourceMappingURL=AboutCard-b794045e.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AboutCard-b794045e.esm.js","sources":["../../src/components/AboutCard/AboutField.tsx","../../src/components/AboutCard/AboutContent.tsx","../../src/components/AboutCard/AboutCard.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useElementFilter } from '@backstage/core-plugin-api';\nimport Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport React from 'react';\n\nconst useStyles = makeStyles(theme => ({\n value: {\n fontWeight: 'bold',\n overflow: 'hidden',\n lineHeight: '24px',\n wordBreak: 'break-word',\n },\n label: {\n color: theme.palette.text.secondary,\n textTransform: 'uppercase',\n fontSize: '10px',\n fontWeight: 'bold',\n letterSpacing: 0.5,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n}));\n\n/**\n * Props for {@link AboutField}.\n *\n * @public\n */\nexport interface AboutFieldProps {\n label: string;\n value?: string;\n gridSizes?: Record<string, number>;\n children?: React.ReactNode;\n}\n\n/** @public */\nexport function AboutField(props: AboutFieldProps) {\n const { label, value, gridSizes, children } = props;\n const classes = useStyles();\n\n const childElements = useElementFilter(children, c => c.getElements());\n\n // Content is either children or a string prop `value`\n const content =\n childElements.length > 0 ? (\n childElements\n ) : (\n <Typography variant=\"body2\" className={classes.value}>\n {value || `unknown`}\n </Typography>\n );\n return (\n <Grid item {...gridSizes}>\n <Typography variant=\"h2\" className={classes.label}>\n {label}\n </Typography>\n {content}\n </Grid>\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 {\n Entity,\n getEntitySourceLocation,\n RELATION_OWNED_BY,\n RELATION_PART_OF,\n} from '@backstage/catalog-model';\nimport {\n EntityRefLinks,\n getEntityRelations,\n} from '@backstage/plugin-catalog-react';\nimport { JsonArray } from '@backstage/types';\nimport Chip from '@material-ui/core/Chip';\nimport Grid from '@material-ui/core/Grid';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { MarkdownContent } from '@backstage/core-components';\nimport React from 'react';\nimport { AboutField } from './AboutField';\nimport { LinksGridList } from '../EntityLinksCard/LinksGridList';\n\nconst useStyles = makeStyles({\n description: {\n wordBreak: 'break-word',\n },\n});\n\n/**\n * Props for {@link AboutContent}.\n *\n * @public\n */\nexport interface AboutContentProps {\n entity: Entity;\n}\n\nfunction getLocationTargetHref(\n target: string,\n type: string,\n entitySourceLocation: {\n type: string;\n target: string;\n },\n): string {\n if (type === 'url' || target.includes('://')) {\n return target;\n }\n\n const srcLocationUrl =\n entitySourceLocation.type === 'file'\n ? `file://${entitySourceLocation.target}`\n : entitySourceLocation.target;\n\n if (type === 'file' || entitySourceLocation.type === 'file') {\n return new URL(target, srcLocationUrl).href;\n }\n\n return srcLocationUrl;\n}\n\n/** @public */\nexport function AboutContent(props: AboutContentProps) {\n const { entity } = props;\n const classes = useStyles();\n const isSystem = entity.kind.toLocaleLowerCase('en-US') === 'system';\n const isResource = entity.kind.toLocaleLowerCase('en-US') === 'resource';\n const isComponent = entity.kind.toLocaleLowerCase('en-US') === 'component';\n const isAPI = entity.kind.toLocaleLowerCase('en-US') === 'api';\n const isTemplate = entity.kind.toLocaleLowerCase('en-US') === 'template';\n const isLocation = entity.kind.toLocaleLowerCase('en-US') === 'location';\n const isGroup = entity.kind.toLocaleLowerCase('en-US') === 'group';\n\n const partOfSystemRelations = getEntityRelations(entity, RELATION_PART_OF, {\n kind: 'system',\n });\n const partOfComponentRelations = getEntityRelations(\n entity,\n RELATION_PART_OF,\n {\n kind: 'component',\n },\n );\n const partOfDomainRelations = getEntityRelations(entity, RELATION_PART_OF, {\n kind: 'domain',\n });\n const ownedByRelations = getEntityRelations(entity, RELATION_OWNED_BY);\n\n let entitySourceLocation:\n | {\n type: string;\n target: string;\n }\n | undefined;\n try {\n entitySourceLocation = getEntitySourceLocation(entity);\n } catch (e) {\n entitySourceLocation = undefined;\n }\n\n return (\n <Grid container>\n <AboutField label=\"Description\" gridSizes={{ xs: 12 }}>\n <MarkdownContent\n className={classes.description}\n content={entity?.metadata?.description || 'No description'}\n />\n </AboutField>\n <AboutField\n label=\"Owner\"\n value=\"No Owner\"\n gridSizes={{ xs: 12, sm: 6, lg: 4 }}\n >\n {ownedByRelations.length > 0 && (\n <EntityRefLinks entityRefs={ownedByRelations} defaultKind=\"group\" />\n )}\n </AboutField>\n {(isSystem || partOfDomainRelations.length > 0) && (\n <AboutField\n label=\"Domain\"\n value=\"No Domain\"\n gridSizes={{ xs: 12, sm: 6, lg: 4 }}\n >\n {partOfDomainRelations.length > 0 && (\n <EntityRefLinks\n entityRefs={partOfDomainRelations}\n defaultKind=\"domain\"\n />\n )}\n </AboutField>\n )}\n {(isAPI ||\n isComponent ||\n isResource ||\n partOfSystemRelations.length > 0) && (\n <AboutField\n label=\"System\"\n value=\"No System\"\n gridSizes={{ xs: 12, sm: 6, lg: 4 }}\n >\n {partOfSystemRelations.length > 0 && (\n <EntityRefLinks\n entityRefs={partOfSystemRelations}\n defaultKind=\"system\"\n />\n )}\n </AboutField>\n )}\n {isComponent && partOfComponentRelations.length > 0 && (\n <AboutField\n label=\"Parent Component\"\n value=\"No Parent Component\"\n gridSizes={{ xs: 12, sm: 6, lg: 4 }}\n >\n <EntityRefLinks\n entityRefs={partOfComponentRelations}\n defaultKind=\"component\"\n />\n </AboutField>\n )}\n {(isAPI ||\n isComponent ||\n isResource ||\n isTemplate ||\n isGroup ||\n isLocation ||\n typeof entity?.spec?.type === 'string') && (\n <AboutField\n label=\"Type\"\n value={entity?.spec?.type as string}\n gridSizes={{ xs: 12, sm: 6, lg: 4 }}\n />\n )}\n {(isAPI ||\n isComponent ||\n typeof entity?.spec?.lifecycle === 'string') && (\n <AboutField\n label=\"Lifecycle\"\n value={entity?.spec?.lifecycle as string}\n gridSizes={{ xs: 12, sm: 6, lg: 4 }}\n />\n )}\n <AboutField\n label=\"Tags\"\n value=\"No Tags\"\n gridSizes={{ xs: 12, sm: 6, lg: 4 }}\n >\n {(entity?.metadata?.tags || []).map(t => (\n <Chip key={t} size=\"small\" label={t} />\n ))}\n </AboutField>\n {isLocation && (entity?.spec?.targets || entity?.spec?.target) && (\n <AboutField label=\"Targets\" gridSizes={{ xs: 12 }}>\n <LinksGridList\n cols={1}\n items={((entity.spec.targets as JsonArray) || [entity.spec.target])\n .map(target => target as string)\n .map(target => ({\n text: target,\n href: getLocationTargetHref(\n target,\n (entity?.spec?.type || 'unknown') as string,\n entitySourceLocation!,\n ),\n }))}\n />\n </AboutField>\n )}\n </Grid>\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_LOCATION,\n CompoundEntityRef,\n DEFAULT_NAMESPACE,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport Divider from '@material-ui/core/Divider';\nimport IconButton from '@material-ui/core/IconButton';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n HeaderIconLinkRow,\n IconLinkVerticalProps,\n InfoCardVariants,\n Link,\n} from '@backstage/core-components';\nimport React, { useCallback } from 'react';\nimport {\n ScmIntegrationIcon,\n scmIntegrationsApiRef,\n} from '@backstage/integration-react';\nimport {\n alertApiRef,\n errorApiRef,\n useApi,\n useApp,\n useRouteRef,\n} from '@backstage/core-plugin-api';\nimport {\n catalogApiRef,\n getEntitySourceLocation,\n useEntity,\n} from '@backstage/plugin-catalog-react';\nimport { createFromTemplateRouteRef, viewTechDocRouteRef } from '../../routes';\n\nimport { AboutContent } from './AboutContent';\nimport CachedIcon from '@material-ui/icons/Cached';\nimport CreateComponentIcon from '@material-ui/icons/AddCircleOutline';\nimport DocsIcon from '@material-ui/icons/Description';\nimport EditIcon from '@material-ui/icons/Edit';\nimport { isTemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { useEntityPermission } from '@backstage/plugin-catalog-react/alpha';\nimport { catalogEntityRefreshPermission } from '@backstage/plugin-catalog-common/alpha';\n\nconst TECHDOCS_ANNOTATION = 'backstage.io/techdocs-ref';\n\nconst TECHDOCS_EXTERNAL_ANNOTATION = 'backstage.io/techdocs-entity';\n\nconst useStyles = makeStyles({\n gridItemCard: {\n display: 'flex',\n flexDirection: 'column',\n height: 'calc(100% - 10px)', // for pages without content header\n marginBottom: '10px',\n },\n fullHeightCard: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n },\n gridItemCardContent: {\n flex: 1,\n },\n fullHeightCardContent: {\n flex: 1,\n },\n});\n\n/**\n * Props for {@link EntityAboutCard}.\n *\n * @public\n */\nexport interface AboutCardProps {\n variant?: InfoCardVariants;\n}\n\n/**\n * Exported publicly via the EntityAboutCard\n */\nexport function AboutCard(props: AboutCardProps) {\n const { variant } = props;\n const app = useApp();\n const classes = useStyles();\n const { entity } = useEntity();\n const scmIntegrationsApi = useApi(scmIntegrationsApiRef);\n const catalogApi = useApi(catalogApiRef);\n const alertApi = useApi(alertApiRef);\n const errorApi = useApi(errorApiRef);\n const viewTechdocLink = useRouteRef(viewTechDocRouteRef);\n const templateRoute = useRouteRef(createFromTemplateRouteRef);\n const { allowed: canRefresh } = useEntityPermission(\n catalogEntityRefreshPermission,\n );\n\n const entitySourceLocation = getEntitySourceLocation(\n entity,\n scmIntegrationsApi,\n );\n const entityMetadataEditUrl =\n entity.metadata.annotations?.[ANNOTATION_EDIT_URL];\n\n let techdocsRef: CompoundEntityRef | undefined;\n\n if (entity.metadata.annotations?.[TECHDOCS_EXTERNAL_ANNOTATION]) {\n try {\n techdocsRef = parseEntityRef(\n entity.metadata.annotations?.[TECHDOCS_EXTERNAL_ANNOTATION],\n );\n // not a fan of this but we don't care if the parseEntityRef fails\n } catch {\n techdocsRef = undefined;\n }\n }\n\n const viewInSource: IconLinkVerticalProps = {\n label: 'View Source',\n disabled: !entitySourceLocation,\n icon: <ScmIntegrationIcon type={entitySourceLocation?.integrationType} />,\n href: entitySourceLocation?.locationTargetUrl,\n };\n const viewInTechDocs: IconLinkVerticalProps = {\n label: 'View TechDocs',\n disabled:\n !(\n entity.metadata.annotations?.[TECHDOCS_ANNOTATION] ||\n entity.metadata.annotations?.[TECHDOCS_EXTERNAL_ANNOTATION]\n ) || !viewTechdocLink,\n icon: <DocsIcon />,\n href:\n viewTechdocLink &&\n (techdocsRef\n ? viewTechdocLink({\n namespace: techdocsRef.namespace || DEFAULT_NAMESPACE,\n kind: techdocsRef.kind,\n name: techdocsRef.name,\n })\n : viewTechdocLink({\n namespace: entity.metadata.namespace || DEFAULT_NAMESPACE,\n kind: entity.kind,\n name: entity.metadata.name,\n })),\n };\n\n const subHeaderLinks = [viewInSource, viewInTechDocs];\n\n if (isTemplateEntityV1beta3(entity)) {\n const Icon = app.getSystemIcon('scaffolder') ?? CreateComponentIcon;\n\n const launchTemplate: IconLinkVerticalProps = {\n label: 'Launch Template',\n icon: <Icon />,\n disabled: !templateRoute,\n href:\n templateRoute &&\n templateRoute({\n templateName: entity.metadata.name,\n namespace: entity.metadata.namespace || DEFAULT_NAMESPACE,\n }),\n };\n\n subHeaderLinks.push(launchTemplate);\n }\n\n let cardClass = '';\n if (variant === 'gridItem') {\n cardClass = classes.gridItemCard;\n } else if (variant === 'fullHeight') {\n cardClass = classes.fullHeightCard;\n }\n\n let cardContentClass = '';\n if (variant === 'gridItem') {\n cardContentClass = classes.gridItemCardContent;\n } else if (variant === 'fullHeight') {\n cardContentClass = classes.fullHeightCardContent;\n }\n\n const entityLocation = entity.metadata.annotations?.[ANNOTATION_LOCATION];\n // Limiting the ability to manually refresh to the less expensive locations\n const allowRefresh =\n entityLocation?.startsWith('url:') || entityLocation?.startsWith('file:');\n const refreshEntity = useCallback(async () => {\n try {\n await catalogApi.refreshEntity(stringifyEntityRef(entity));\n alertApi.post({\n message: 'Refresh scheduled',\n severity: 'info',\n display: 'transient',\n });\n } catch (e) {\n errorApi.post(e);\n }\n }, [catalogApi, alertApi, errorApi, entity]);\n\n return (\n <Card className={cardClass}>\n <CardHeader\n title=\"About\"\n action={\n <>\n {allowRefresh && canRefresh && (\n <IconButton\n aria-label=\"Refresh\"\n title=\"Schedule entity refresh\"\n onClick={refreshEntity}\n >\n <CachedIcon />\n </IconButton>\n )}\n <IconButton\n component={Link}\n aria-label=\"Edit\"\n disabled={!entityMetadataEditUrl}\n title=\"Edit Metadata\"\n to={entityMetadataEditUrl ?? '#'}\n >\n <EditIcon />\n </IconButton>\n </>\n }\n subheader={<HeaderIconLinkRow links={subHeaderLinks} />}\n />\n <Divider />\n <CardContent className={cardContentClass}>\n <AboutContent entity={entity} />\n </CardContent>\n </Card>\n );\n}\n"],"names":["useStyles","_a","getEntitySourceLocation"],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import StarBorder from '@material-ui/icons/StarBorder';
|
|
|
11
11
|
import { capitalize } from 'lodash';
|
|
12
12
|
import pluralize from 'pluralize';
|
|
13
13
|
import React, { useMemo } from 'react';
|
|
14
|
-
import
|
|
14
|
+
import Chip from '@material-ui/core/Chip';
|
|
15
15
|
|
|
16
16
|
const columnFactories = Object.freeze({
|
|
17
17
|
createNameColumn(options) {
|
|
@@ -179,14 +179,17 @@ const columnFactories = Object.freeze({
|
|
|
179
179
|
});
|
|
180
180
|
|
|
181
181
|
function PaginatedCatalogTable(props) {
|
|
182
|
-
const { columns, data, next, prev } = props;
|
|
182
|
+
const { columns, data, next, prev, title, isLoading, options } = props;
|
|
183
183
|
const { updateFilters } = useEntityList();
|
|
184
184
|
return /* @__PURE__ */ React.createElement(
|
|
185
185
|
Table,
|
|
186
186
|
{
|
|
187
|
+
title: isLoading ? "" : title,
|
|
187
188
|
columns,
|
|
188
189
|
data,
|
|
189
190
|
options: {
|
|
191
|
+
...options,
|
|
192
|
+
// These settings are configured to force server side pagination
|
|
190
193
|
paginationPosition: "both",
|
|
191
194
|
pageSizeOptions: [],
|
|
192
195
|
showFirstLastPageButtons: false,
|
|
@@ -274,7 +277,7 @@ const CatalogTable = (props) => {
|
|
|
274
277
|
} = props;
|
|
275
278
|
const { isStarredEntity, toggleStarredEntity } = useStarredEntities();
|
|
276
279
|
const entityListContext = useEntityList();
|
|
277
|
-
const { loading, error, entities, filters, pageInfo } = entityListContext;
|
|
280
|
+
const { loading, error, entities, filters, pageInfo, totalItems } = entityListContext;
|
|
278
281
|
const enablePagination = !!pageInfo;
|
|
279
282
|
const tableColumns = useMemo(
|
|
280
283
|
() => typeof columns === "function" ? columns(entityListContext) : columns,
|
|
@@ -336,7 +339,7 @@ const CatalogTable = (props) => {
|
|
|
336
339
|
const currentType = ((_b = filters.type) == null ? void 0 : _b.value) || "";
|
|
337
340
|
const titlePreamble = capitalize((_d = (_c = filters.user) == null ? void 0 : _c.value) != null ? _d : "all");
|
|
338
341
|
const titleDisplay = [titlePreamble, currentType, pluralize(currentKind)].filter((s) => s).join(" ");
|
|
339
|
-
const title = `${titleDisplay} (${
|
|
342
|
+
const title = `${titleDisplay} (${totalItems})`;
|
|
340
343
|
const actions = props.actions || defaultActions;
|
|
341
344
|
const options = {
|
|
342
345
|
actionsColumnIndex: -1,
|
|
@@ -376,7 +379,7 @@ const CatalogTable = (props) => {
|
|
|
376
379
|
pageSizeOptions: [20, 50, 100],
|
|
377
380
|
...options
|
|
378
381
|
},
|
|
379
|
-
title
|
|
382
|
+
title,
|
|
380
383
|
data: rows,
|
|
381
384
|
actions,
|
|
382
385
|
subtitle,
|
|
@@ -414,4 +417,4 @@ function toEntityRow(entity) {
|
|
|
414
417
|
}
|
|
415
418
|
|
|
416
419
|
export { CatalogTable as C };
|
|
417
|
-
//# sourceMappingURL=CatalogTable-
|
|
420
|
+
//# sourceMappingURL=CatalogTable-3bcb90b7.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CatalogTable-3bcb90b7.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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"}
|
|
@@ -2,10 +2,18 @@ import { DEFAULT_NAMESPACE, RELATION_OWNED_BY } from '@backstage/catalog-model';
|
|
|
2
2
|
import { Page, Header, Progress, RoutedTabs, Content, WarningPanel, Link, HeaderLabel } from '@backstage/core-components';
|
|
3
3
|
import { useApi, alertApiRef, attachComponentData, useRouteRefParams, useElementFilter, useRouteRef } from '@backstage/core-plugin-api';
|
|
4
4
|
import { entityRouteRef, useAsyncEntity, UnregisterEntityDialog, InspectEntityDialog, EntityDisplayName, FavoriteEntity, getEntityRelations, EntityRefLinks } from '@backstage/plugin-catalog-react';
|
|
5
|
-
import
|
|
6
|
-
import
|
|
5
|
+
import Box from '@material-ui/core/Box';
|
|
6
|
+
import Alert from '@material-ui/lab/Alert';
|
|
7
7
|
import React, { useState, useEffect } from 'react';
|
|
8
8
|
import { useLocation, useNavigate } from 'react-router-dom';
|
|
9
|
+
import Divider from '@material-ui/core/Divider';
|
|
10
|
+
import IconButton from '@material-ui/core/IconButton';
|
|
11
|
+
import ListItemIcon from '@material-ui/core/ListItemIcon';
|
|
12
|
+
import ListItemText from '@material-ui/core/ListItemText';
|
|
13
|
+
import MenuItem from '@material-ui/core/MenuItem';
|
|
14
|
+
import MenuList from '@material-ui/core/MenuList';
|
|
15
|
+
import Popover from '@material-ui/core/Popover';
|
|
16
|
+
import Tooltip from '@material-ui/core/Tooltip';
|
|
9
17
|
import { makeStyles } from '@material-ui/core/styles';
|
|
10
18
|
import BugReportIcon from '@material-ui/icons/BugReport';
|
|
11
19
|
import MoreVert from '@material-ui/icons/MoreVert';
|
|
@@ -306,4 +314,4 @@ const EntityLayout = (props) => {
|
|
|
306
314
|
EntityLayout.Route = Route;
|
|
307
315
|
|
|
308
316
|
export { EntityLayout as E };
|
|
309
|
-
//# sourceMappingURL=EntityLayout-
|
|
317
|
+
//# sourceMappingURL=EntityLayout-cf734b83.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityLayout-cf734b83.esm.js","sources":["../../src/components/EntityContextMenu/UnregisterEntity.tsx","../../src/components/EntityContextMenu/EntityContextMenu.tsx","../../src/components/EntityLayout/EntityLayout.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport CancelIcon from '@material-ui/icons/Cancel';\n\ntype VisibleType = 'visible' | 'hidden' | 'disable';\n\nexport type UnregisterEntityOptions = {\n disableUnregister: boolean | VisibleType;\n};\n\ninterface UnregisterEntityProps {\n unregisterEntityOptions?: UnregisterEntityOptions;\n isUnregisterAllowed: boolean;\n onUnregisterEntity: () => void;\n onClose: () => void;\n}\n\nexport function UnregisterEntity(props: UnregisterEntityProps) {\n const {\n unregisterEntityOptions,\n isUnregisterAllowed,\n onUnregisterEntity,\n onClose,\n } = props;\n\n const isBoolean =\n typeof unregisterEntityOptions?.disableUnregister === 'boolean';\n\n const isDisabled =\n (!isUnregisterAllowed ||\n (isBoolean\n ? !!unregisterEntityOptions?.disableUnregister\n : unregisterEntityOptions?.disableUnregister === 'disable')) ??\n false;\n\n let unregisterButton = <></>;\n\n if (unregisterEntityOptions?.disableUnregister !== 'hidden') {\n unregisterButton = (\n <MenuItem\n onClick={() => {\n onClose();\n onUnregisterEntity();\n }}\n disabled={isDisabled}\n >\n <ListItemIcon>\n <CancelIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText primary=\"Unregister entity\" />\n </MenuItem>\n );\n }\n\n return <>{unregisterButton}</>;\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 Divider from '@material-ui/core/Divider';\nimport IconButton from '@material-ui/core/IconButton';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MenuList from '@material-ui/core/MenuList';\nimport Popover from '@material-ui/core/Popover';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport { Theme, makeStyles } from '@material-ui/core/styles';\nimport BugReportIcon from '@material-ui/icons/BugReport';\nimport MoreVert from '@material-ui/icons/MoreVert';\nimport FileCopyTwoToneIcon from '@material-ui/icons/FileCopyTwoTone';\nimport React, { useEffect, useState } from 'react';\nimport { IconComponent } from '@backstage/core-plugin-api';\nimport { useEntityPermission } from '@backstage/plugin-catalog-react/alpha';\nimport { catalogEntityDeletePermission } from '@backstage/plugin-catalog-common/alpha';\nimport { UnregisterEntity, UnregisterEntityOptions } from './UnregisterEntity';\nimport { useApi, alertApiRef } from '@backstage/core-plugin-api';\nimport useCopyToClipboard from 'react-use/lib/useCopyToClipboard';\n\n/** @public */\nexport type EntityContextMenuClassKey = 'button';\n\nconst useStyles = makeStyles(\n (theme: Theme) => {\n return {\n button: {\n color: theme.page.fontColor,\n },\n };\n },\n { name: 'PluginCatalogEntityContextMenu' },\n);\n\n// NOTE(freben): Intentionally not exported at this point, since it's part of\n// the unstable extra context menu items concept below\ninterface ExtraContextMenuItem {\n title: string;\n Icon: IconComponent;\n onClick: () => void;\n}\n\ninterface EntityContextMenuProps {\n UNSTABLE_extraContextMenuItems?: ExtraContextMenuItem[];\n UNSTABLE_contextMenuOptions?: UnregisterEntityOptions;\n onUnregisterEntity: () => void;\n onInspectEntity: () => void;\n}\n\nexport function EntityContextMenu(props: EntityContextMenuProps) {\n const {\n UNSTABLE_extraContextMenuItems,\n UNSTABLE_contextMenuOptions,\n onUnregisterEntity,\n onInspectEntity,\n } = props;\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement>();\n const classes = useStyles();\n const unregisterPermission = useEntityPermission(\n catalogEntityDeletePermission,\n );\n const isAllowed = unregisterPermission.allowed;\n\n const onOpen = (event: React.SyntheticEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const onClose = () => {\n setAnchorEl(undefined);\n };\n\n const alertApi = useApi(alertApiRef);\n const [copyState, copyToClipboard] = useCopyToClipboard();\n useEffect(() => {\n if (!copyState.error && copyState.value) {\n alertApi.post({\n message: 'Copied!',\n severity: 'info',\n display: 'transient',\n });\n }\n }, [copyState, alertApi]);\n\n const extraItems = UNSTABLE_extraContextMenuItems && [\n ...UNSTABLE_extraContextMenuItems.map(item => (\n <MenuItem\n key={item.title}\n onClick={() => {\n onClose();\n item.onClick();\n }}\n >\n <ListItemIcon>\n <item.Icon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText primary={item.title} />\n </MenuItem>\n )),\n <Divider key=\"the divider is here!\" />,\n ];\n\n return (\n <>\n <Tooltip title=\"More\" arrow>\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n aria-expanded={!!anchorEl}\n role=\"button\"\n onClick={onOpen}\n data-testid=\"menu-button\"\n className={classes.button}\n id=\"long-menu\"\n >\n <MoreVert />\n </IconButton>\n </Tooltip>\n <Popover\n open={Boolean(anchorEl)}\n onClose={onClose}\n anchorEl={anchorEl}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n aria-labelledby=\"long-menu\"\n >\n <MenuList autoFocusItem={Boolean(anchorEl)}>\n {extraItems}\n <UnregisterEntity\n unregisterEntityOptions={UNSTABLE_contextMenuOptions}\n isUnregisterAllowed={isAllowed}\n onUnregisterEntity={onUnregisterEntity}\n onClose={onClose}\n />\n <MenuItem\n onClick={() => {\n onClose();\n onInspectEntity();\n }}\n >\n <ListItemIcon>\n <BugReportIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText primary=\"Inspect entity\" />\n </MenuItem>\n <MenuItem\n onClick={() => {\n onClose();\n copyToClipboard(window.location.toString());\n }}\n >\n <ListItemIcon>\n <FileCopyTwoToneIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText primary=\"Copy entity URL\" />\n </MenuItem>\n </MenuList>\n </Popover>\n </>\n );\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Entity,\n DEFAULT_NAMESPACE,\n RELATION_OWNED_BY,\n} from '@backstage/catalog-model';\nimport {\n Content,\n Header,\n HeaderLabel,\n Link,\n Page,\n Progress,\n RoutedTabs,\n WarningPanel,\n} from '@backstage/core-components';\nimport {\n attachComponentData,\n IconComponent,\n useElementFilter,\n useRouteRef,\n useRouteRefParams,\n} from '@backstage/core-plugin-api';\nimport {\n EntityDisplayName,\n EntityRefLinks,\n entityRouteRef,\n FavoriteEntity,\n getEntityRelations,\n InspectEntityDialog,\n UnregisterEntityDialog,\n useAsyncEntity,\n} from '@backstage/plugin-catalog-react';\nimport Box from '@material-ui/core/Box';\nimport { TabProps } from '@material-ui/core/Tab';\nimport Alert from '@material-ui/lab/Alert';\nimport React, { useEffect, useState } from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { EntityContextMenu } from '../EntityContextMenu/EntityContextMenu';\nimport { rootRouteRef, unregisterRedirectRouteRef } from '../../routes';\n\n/** @public */\nexport type EntityLayoutRouteProps = {\n path: string;\n title: string;\n children: JSX.Element;\n if?: (entity: Entity) => boolean;\n tabProps?: TabProps<React.ElementType, { component?: React.ElementType }>;\n};\n\nconst dataKey = 'plugin.catalog.entityLayoutRoute';\n\nconst Route: (props: EntityLayoutRouteProps) => null = () => null;\nattachComponentData(Route, dataKey, true);\nattachComponentData(Route, 'core.gatherMountPoints', true); // This causes all mount points that are discovered within this route to use the path of the route itself\n\nfunction EntityLayoutTitle(props: {\n title: string;\n entity: Entity | undefined;\n}) {\n const { entity, title } = props;\n return (\n <Box display=\"inline-flex\" alignItems=\"center\" height=\"1em\" maxWidth=\"100%\">\n <Box\n component=\"span\"\n textOverflow=\"ellipsis\"\n whiteSpace=\"nowrap\"\n overflow=\"hidden\"\n >\n {entity ? <EntityDisplayName entityRef={entity} hideIcon /> : title}\n </Box>\n {entity && <FavoriteEntity entity={entity} />}\n </Box>\n );\n}\n\nfunction headerProps(\n paramKind: string | undefined,\n paramNamespace: string | undefined,\n paramName: string | undefined,\n entity: Entity | undefined,\n): { headerTitle: string; headerType: string } {\n const kind = paramKind ?? entity?.kind ?? '';\n const namespace = paramNamespace ?? entity?.metadata.namespace ?? '';\n const name =\n entity?.metadata.title ?? paramName ?? entity?.metadata.name ?? '';\n return {\n headerTitle: `${name}${\n namespace && namespace !== DEFAULT_NAMESPACE ? ` in ${namespace}` : ''\n }`,\n headerType: (() => {\n let t = kind.toLocaleLowerCase('en-US');\n if (entity && entity.spec && 'type' in entity.spec) {\n t += ' — ';\n t += (entity.spec as { type: string }).type.toLocaleLowerCase('en-US');\n }\n return t;\n })(),\n };\n}\n\nfunction EntityLabels(props: { entity: Entity }) {\n const { entity } = props;\n const ownedByRelations = getEntityRelations(entity, RELATION_OWNED_BY);\n return (\n <>\n {ownedByRelations.length > 0 && (\n <HeaderLabel\n label=\"Owner\"\n contentTypograpyRootComponent=\"p\"\n value={\n <EntityRefLinks\n entityRefs={ownedByRelations}\n defaultKind=\"Group\"\n color=\"inherit\"\n />\n }\n />\n )}\n {entity.spec?.lifecycle && (\n <HeaderLabel\n label=\"Lifecycle\"\n value={entity.spec.lifecycle?.toString()}\n />\n )}\n </>\n );\n}\n\n// NOTE(freben): Intentionally not exported at this point, since it's part of\n// the unstable extra context menu items concept below\ninterface ExtraContextMenuItem {\n title: string;\n Icon: IconComponent;\n onClick: () => void;\n}\n\ntype VisibleType = 'visible' | 'hidden' | 'disable';\n\n// NOTE(blam): Intentionally not exported at this point, since it's part of\n// unstable context menu option, eg: disable the unregister entity menu\ninterface EntityContextMenuOptions {\n disableUnregister: boolean | VisibleType;\n}\n\n/** @public */\nexport interface EntityLayoutProps {\n UNSTABLE_extraContextMenuItems?: ExtraContextMenuItem[];\n UNSTABLE_contextMenuOptions?: EntityContextMenuOptions;\n children?: React.ReactNode;\n NotFoundComponent?: React.ReactNode;\n}\n\n/**\n * EntityLayout is a compound component, which allows you to define a layout for\n * entities using a sub-navigation mechanism.\n *\n * Consists of two parts: EntityLayout and EntityLayout.Route\n *\n * @example\n * ```jsx\n * <EntityLayout>\n * <EntityLayout.Route path=\"/example\" title=\"Example tab\">\n * <div>This is rendered under /example/anything-here route</div>\n * </EntityLayout.Route>\n * </EntityLayout>\n * ```\n *\n * @public\n */\nexport const EntityLayout = (props: EntityLayoutProps) => {\n const {\n UNSTABLE_extraContextMenuItems,\n UNSTABLE_contextMenuOptions,\n children,\n NotFoundComponent,\n } = props;\n const { kind, namespace, name } = useRouteRefParams(entityRouteRef);\n const { entity, loading, error } = useAsyncEntity();\n const location = useLocation();\n const routes = useElementFilter(\n children,\n elements =>\n elements\n .selectByComponentData({\n key: dataKey,\n withStrictError:\n 'Child of EntityLayout must be an EntityLayout.Route',\n })\n .getElements<EntityLayoutRouteProps>() // all nodes, element data, maintain structure or not?\n .flatMap(({ props: elementProps }) => {\n if (!entity) {\n return [];\n } else if (elementProps.if && !elementProps.if(entity)) {\n return [];\n }\n\n return [\n {\n path: elementProps.path,\n title: elementProps.title,\n children: elementProps.children,\n tabProps: elementProps.tabProps,\n },\n ];\n }),\n [entity],\n );\n\n const { headerTitle, headerType } = headerProps(\n kind,\n namespace,\n name,\n entity,\n );\n\n const [confirmationDialogOpen, setConfirmationDialogOpen] = useState(false);\n const [inspectionDialogOpen, setInspectionDialogOpen] = useState(false);\n const navigate = useNavigate();\n const catalogRoute = useRouteRef(rootRouteRef);\n const unregisterRedirectRoute = useRouteRef(unregisterRedirectRouteRef);\n\n const cleanUpAfterRemoval = async () => {\n setConfirmationDialogOpen(false);\n setInspectionDialogOpen(false);\n navigate(\n unregisterRedirectRoute ? unregisterRedirectRoute() : catalogRoute(),\n );\n };\n\n // Make sure to close the dialog if the user clicks links in it that navigate\n // to another entity.\n useEffect(() => {\n setConfirmationDialogOpen(false);\n setInspectionDialogOpen(false);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location.pathname]);\n\n return (\n <Page themeId={entity?.spec?.type?.toString() ?? 'home'}>\n <Header\n title={<EntityLayoutTitle title={headerTitle} entity={entity!} />}\n pageTitleOverride={headerTitle}\n type={headerType}\n >\n {entity && (\n <>\n <EntityLabels entity={entity} />\n <EntityContextMenu\n UNSTABLE_extraContextMenuItems={UNSTABLE_extraContextMenuItems}\n UNSTABLE_contextMenuOptions={UNSTABLE_contextMenuOptions}\n onUnregisterEntity={() => setConfirmationDialogOpen(true)}\n onInspectEntity={() => setInspectionDialogOpen(true)}\n />\n </>\n )}\n </Header>\n\n {loading && <Progress />}\n\n {entity && <RoutedTabs routes={routes} />}\n\n {error && (\n <Content>\n <Alert severity=\"error\">{error.toString()}</Alert>\n </Content>\n )}\n\n {!loading && !error && !entity && (\n <Content>\n {NotFoundComponent ? (\n NotFoundComponent\n ) : (\n <WarningPanel title=\"Entity not found\">\n There is no {kind} with the requested{' '}\n <Link to=\"https://backstage.io/docs/features/software-catalog/references\">\n kind, namespace, and name\n </Link>\n .\n </WarningPanel>\n )}\n </Content>\n )}\n\n <UnregisterEntityDialog\n open={confirmationDialogOpen}\n entity={entity!}\n onConfirm={cleanUpAfterRemoval}\n onClose={() => setConfirmationDialogOpen(false)}\n />\n <InspectEntityDialog\n open={inspectionDialogOpen}\n entity={entity!}\n onClose={() => setInspectionDialogOpen(false)}\n />\n </Page>\n );\n};\n\nEntityLayout.Route = Route;\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
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-
|
|
5
|
-
import { d as EntitySwitch, i as isOrphan, E as EntityOrphanWarning, h as hasRelationWarnings, a as EntityRelationWarning, c as hasCatalogProcessingErrors, b as EntityProcessingErrorsPanel } from './EntitySwitch-
|
|
4
|
+
import { F as FilterWrapper } from './alpha-9a90bdd6.esm.js';
|
|
5
|
+
import { d as EntitySwitch, i as isOrphan, E as EntityOrphanWarning, h as hasRelationWarnings, a as EntityRelationWarning, c as hasCatalogProcessingErrors, b as EntityProcessingErrorsPanel } from './EntitySwitch-309707e4.esm.js';
|
|
6
6
|
import '@backstage/core-compat-api';
|
|
7
7
|
import '@backstage/frontend-plugin-api';
|
|
8
8
|
import './routes-6e97578f.esm.js';
|
|
@@ -30,9 +30,13 @@ import 'react-use/lib/useAsyncRetry';
|
|
|
30
30
|
import '@backstage/errors';
|
|
31
31
|
import '@material-ui/icons/Home';
|
|
32
32
|
import '@backstage/plugin-search-react/alpha';
|
|
33
|
-
import '@material-ui/lab';
|
|
34
|
-
import '@material-ui/core';
|
|
33
|
+
import '@material-ui/lab/Alert';
|
|
34
|
+
import '@material-ui/core/Button';
|
|
35
|
+
import '@material-ui/core/Dialog';
|
|
36
|
+
import '@material-ui/core/DialogActions';
|
|
37
|
+
import '@material-ui/core/DialogTitle';
|
|
35
38
|
import 'react-use/lib/useAsync';
|
|
39
|
+
import '@material-ui/core/Box';
|
|
36
40
|
import '@backstage/core-components';
|
|
37
41
|
|
|
38
42
|
const entityWarningContent = /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(EntitySwitch, null, /* @__PURE__ */ React.createElement(EntitySwitch.Case, { if: isOrphan }, /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(EntityOrphanWarning, null)))), /* @__PURE__ */ React.createElement(EntitySwitch, null, /* @__PURE__ */ React.createElement(EntitySwitch.Case, { if: hasRelationWarnings }, /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(EntityRelationWarning, null)))), /* @__PURE__ */ React.createElement(EntitySwitch, null, /* @__PURE__ */ React.createElement(EntitySwitch.Case, { if: hasCatalogProcessingErrors }, /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(EntityProcessingErrorsPanel, null)))));
|
|
@@ -42,4 +46,4 @@ function EntityOverviewPage(props) {
|
|
|
42
46
|
}
|
|
43
47
|
|
|
44
48
|
export { EntityOverviewPage };
|
|
45
|
-
//# sourceMappingURL=EntityOverviewPage-
|
|
49
|
+
//# sourceMappingURL=EntityOverviewPage-e5507953.esm.js.map
|
package/dist/esm/{EntityOverviewPage-d6f1b492.esm.js.map → EntityOverviewPage-e5507953.esm.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityOverviewPage-
|
|
1
|
+
{"version":3,"file":"EntityOverviewPage-e5507953.esm.js","sources":["../../src/alpha/EntityOverviewPage.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport Grid from '@material-ui/core/Grid';\nimport React from 'react';\nimport { FilterWrapper } from './filter/FilterWrapper';\nimport { EntitySwitch } from '../components/EntitySwitch';\nimport {\n EntityOrphanWarning,\n isOrphan,\n} from '../components/EntityOrphanWarning';\nimport {\n EntityRelationWarning,\n hasRelationWarnings,\n} from '../components/EntityRelationWarning';\nimport {\n EntityProcessingErrorsPanel,\n hasCatalogProcessingErrors,\n} from '../components/EntityProcessingErrorsPanel';\n\ninterface EntityOverviewPageProps {\n cards: Array<{\n element: React.JSX.Element;\n filterFunction?: (entity: Entity) => boolean;\n filterExpression?: string;\n }>;\n}\n\nconst entityWarningContent = (\n <>\n <EntitySwitch>\n <EntitySwitch.Case if={isOrphan}>\n <Grid item xs={12}>\n <EntityOrphanWarning />\n </Grid>\n </EntitySwitch.Case>\n </EntitySwitch>\n\n <EntitySwitch>\n <EntitySwitch.Case if={hasRelationWarnings}>\n <Grid item xs={12}>\n <EntityRelationWarning />\n </Grid>\n </EntitySwitch.Case>\n </EntitySwitch>\n\n <EntitySwitch>\n <EntitySwitch.Case if={hasCatalogProcessingErrors}>\n <Grid item xs={12}>\n <EntityProcessingErrorsPanel />\n </Grid>\n </EntitySwitch.Case>\n </EntitySwitch>\n </>\n);\n\nexport function EntityOverviewPage(props: EntityOverviewPageProps) {\n const { entity } = useEntity();\n return (\n <Grid container spacing={3} alignItems=\"stretch\">\n {entityWarningContent}\n {props.cards.map((card, index) => (\n <FilterWrapper key={index} entity={entity} {...card} />\n ))}\n </Grid>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,MAAM,oBACJ,mBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBACG,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,YAAA,CAAa,IAAb,EAAA,EAAkB,EAAI,EAAA,QAAA,EAAA,kBACpB,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,mBAAA,EAAA,IAAoB,CACvB,CACF,CACF,CAAA,kBAEC,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,YAAA,CAAa,IAAb,EAAA,EAAkB,EAAI,EAAA,mBAAA,EAAA,kBACpB,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,qBAAA,EAAA,IAAsB,CACzB,CACF,CACF,CAAA,kBAEC,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,YAAA,CAAa,IAAb,EAAA,EAAkB,EAAI,EAAA,0BAAA,EAAA,kBACpB,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,2BAAA,EAAA,IAA4B,CAC/B,CACF,CACF,CACF,CAAA,CAAA;AAGK,SAAS,mBAAmB,KAAgC,EAAA;AACjE,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA,CAAA;AAC7B,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,QAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CAAG,EAAA,UAAA,EAAW,SACpC,EAAA,EAAA,oBAAA,EACA,KAAM,CAAA,KAAA,CAAM,IAAI,CAAC,IAAA,EAAM,KACtB,qBAAA,KAAA,CAAA,aAAA,CAAC,aAAc,EAAA,EAAA,GAAA,EAAK,OAAO,MAAiB,EAAA,GAAG,IAAM,EAAA,CACtD,CACH,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { catalogApiRef, useEntity, EntityRefLink, useAsyncEntity } from '@backstage/plugin-catalog-react';
|
|
2
|
-
import
|
|
2
|
+
import Alert from '@material-ui/lab/Alert';
|
|
3
3
|
import React, { useState } from 'react';
|
|
4
4
|
import { useNavigate } from 'react-router-dom';
|
|
5
|
-
import
|
|
5
|
+
import Button from '@material-ui/core/Button';
|
|
6
|
+
import Dialog from '@material-ui/core/Dialog';
|
|
7
|
+
import DialogActions from '@material-ui/core/DialogActions';
|
|
8
|
+
import DialogTitle from '@material-ui/core/DialogTitle';
|
|
6
9
|
import { useApi, alertApiRef, useRouteRef, attachComponentData, useApiHolder, useElementFilter } from '@backstage/core-plugin-api';
|
|
7
10
|
import { assertError } from '@backstage/errors';
|
|
8
11
|
import { r as rootRouteRef } from './routes-6e97578f.esm.js';
|
|
9
12
|
import useAsync from 'react-use/lib/useAsync';
|
|
13
|
+
import Box from '@material-ui/core/Box';
|
|
10
14
|
import { ResponseErrorPanel } from '@backstage/core-components';
|
|
11
15
|
import { stringifyEntityRef } from '@backstage/catalog-model';
|
|
12
16
|
import { ENTITY_STATUS_CATALOG_PROCESSING_TYPE } from '@backstage/catalog-client';
|
|
@@ -235,4 +239,4 @@ function getDefaultChildren(results) {
|
|
|
235
239
|
EntitySwitch.Case = EntitySwitchCaseComponent;
|
|
236
240
|
|
|
237
241
|
export { EntityOrphanWarning as E, EntityRelationWarning as a, EntityProcessingErrorsPanel as b, hasCatalogProcessingErrors as c, EntitySwitch as d, hasRelationWarnings as h, isOrphan as i };
|
|
238
|
-
//# sourceMappingURL=EntitySwitch-
|
|
242
|
+
//# sourceMappingURL=EntitySwitch-309707e4.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntitySwitch-309707e4.esm.js","sources":["../../src/components/EntityOrphanWarning/DeleteEntityDialog.tsx","../../src/components/EntityOrphanWarning/EntityOrphanWarning.tsx","../../src/components/EntityRelationWarning/EntityRelationWarning.tsx","../../src/components/EntityProcessingErrorsPanel/EntityProcessingErrorsPanel.tsx","../../src/components/EntitySwitch/EntitySwitch.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 */\n\nimport { Entity } from '@backstage/catalog-model';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport React, { useState } from 'react';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport { assertError } from '@backstage/errors';\n\ninterface DeleteEntityDialogProps {\n open: boolean;\n onClose: () => any;\n onConfirm: () => any;\n entity: Entity;\n}\n\nexport function DeleteEntityDialog(props: DeleteEntityDialogProps) {\n const { open, onClose, onConfirm, entity } = props;\n const [busy, setBusy] = useState(false);\n const catalogApi = useApi(catalogApiRef);\n const alertApi = useApi(alertApiRef);\n\n const onDelete = async () => {\n setBusy(true);\n try {\n const uid = entity.metadata.uid;\n await catalogApi.removeEntityByUid(uid!);\n onConfirm();\n } catch (err) {\n assertError(err);\n alertApi.post({ message: err.message });\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogTitle id=\"responsive-dialog-title\">\n Are you sure you want to delete this entity?\n </DialogTitle>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"secondary\"\n disabled={busy}\n onClick={onDelete}\n >\n Delete\n </Button>\n <Button onClick={onClose} color=\"primary\">\n Cancel\n </Button>\n </DialogActions>\n </Dialog>\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 { Entity } from '@backstage/catalog-model';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport Alert from '@material-ui/lab/Alert';\nimport React, { useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { DeleteEntityDialog } from './DeleteEntityDialog';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { rootRouteRef } from '../../routes';\n\n/**\n * Returns true if the given entity has the orphan annotation given by the\n * catalog.\n *\n * @public\n */\nexport function isOrphan(entity: Entity): boolean {\n return entity?.metadata?.annotations?.['backstage.io/orphan'] === 'true';\n}\n\n/**\n * Displays a warning alert if the entity is marked as orphan with the ability\n * to delete said entity.\n *\n * @public\n */\nexport function EntityOrphanWarning() {\n const navigate = useNavigate();\n const catalogLink = useRouteRef(rootRouteRef);\n const [confirmationDialogOpen, setConfirmationDialogOpen] = useState(false);\n const { entity } = useEntity();\n\n const cleanUpAfterRemoval = async () => {\n setConfirmationDialogOpen(false);\n navigate(catalogLink());\n };\n\n return (\n <>\n <Alert severity=\"warning\" onClick={() => setConfirmationDialogOpen(true)}>\n This entity is not referenced by any location and is therefore not\n receiving updates. Click here to delete.\n </Alert>\n <DeleteEntityDialog\n open={confirmationDialogOpen}\n entity={entity!}\n onConfirm={cleanUpAfterRemoval}\n onClose={() => setConfirmationDialogOpen(false)}\n />\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 { Entity } from '@backstage/catalog-model';\nimport {\n CatalogApi,\n catalogApiRef,\n useEntity,\n} from '@backstage/plugin-catalog-react';\nimport Alert from '@material-ui/lab/Alert';\nimport React from 'react';\nimport useAsync from 'react-use/lib/useAsync';\nimport Box from '@material-ui/core/Box';\nimport { ResponseErrorPanel } from '@backstage/core-components';\nimport { useApi, ApiHolder } from '@backstage/core-plugin-api';\n\nasync function getRelationWarnings(entity: Entity, catalogApi: CatalogApi) {\n const entityRefRelations = entity.relations?.map(\n relation => relation.targetRef,\n );\n if (\n !entityRefRelations ||\n entityRefRelations?.length < 1 ||\n entityRefRelations.length > 1000\n ) {\n return [];\n }\n\n const relatedEntities = await catalogApi.getEntitiesByRefs({\n entityRefs: entityRefRelations,\n fields: ['kind', 'metadata.name', 'metadata.namespace'],\n });\n\n return entityRefRelations.filter(\n (_, index) => relatedEntities.items[index] === undefined,\n );\n}\n\n/**\n * Returns true if the given entity has relations to other entities, which\n * don't exist in the catalog\n *\n * @public\n */\nexport async function hasRelationWarnings(\n entity: Entity,\n context: { apis: ApiHolder },\n) {\n const catalogApi = context.apis.get(catalogApiRef);\n if (!catalogApi) {\n throw new Error(`No implementation available for ${catalogApiRef}`);\n }\n\n const relatedEntitiesMissing = await getRelationWarnings(entity, catalogApi);\n return relatedEntitiesMissing.length > 0;\n}\n\n/**\n * Displays a warning alert if the entity has relations to other entities, which\n * don't exist in the catalog\n *\n * @public\n */\nexport function EntityRelationWarning() {\n const { entity } = useEntity();\n const catalogApi = useApi(catalogApiRef);\n const { loading, error, value } = useAsync(async () => {\n return getRelationWarnings(entity, catalogApi);\n }, [entity, catalogApi]);\n\n if (error) {\n return (\n <Box mb={1}>\n <ResponseErrorPanel error={error} />\n </Box>\n );\n }\n\n if (loading || !value || value.length === 0) {\n return null;\n }\n\n return (\n <>\n <Alert severity=\"warning\">\n This entity has relations to other entities, which can't be found in the\n catalog. <br />\n Entities not found are: {value.join(', ')}\n </Alert>\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 { AlphaEntity, EntityStatusItem } from '@backstage/catalog-model/alpha';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport {\n catalogApiRef,\n EntityRefLink,\n useEntity,\n} from '@backstage/plugin-catalog-react';\nimport Box from '@material-ui/core/Box';\nimport React from 'react';\nimport { ResponseErrorPanel } from '@backstage/core-components';\nimport {\n CatalogApi,\n ENTITY_STATUS_CATALOG_PROCESSING_TYPE,\n} from '@backstage/catalog-client';\nimport { useApi, ApiHolder } from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/lib/useAsync';\nimport { SerializedError } from '@backstage/errors';\n\nconst errorFilter = (i: EntityStatusItem) =>\n i.error &&\n i.level === 'error' &&\n i.type === ENTITY_STATUS_CATALOG_PROCESSING_TYPE;\n\ninterface GetOwnAndAncestorsErrorsResponse {\n items: {\n errors: SerializedError[];\n entity: Entity;\n }[];\n}\n\nasync function getOwnAndAncestorsErrors(\n entityRef: string,\n catalogApi: CatalogApi,\n): Promise<GetOwnAndAncestorsErrorsResponse> {\n const ancestors = await catalogApi.getEntityAncestors({ entityRef });\n const items = ancestors.items\n .map(item => {\n const statuses = (item.entity as AlphaEntity).status?.items ?? [];\n const errors = statuses\n .filter(errorFilter)\n .map(e => e.error)\n .filter((e): e is SerializedError => Boolean(e));\n return { errors: errors, entity: item.entity };\n })\n .filter(item => item.errors.length > 0);\n return { items };\n}\n\n/**\n * Returns true if the given entity has any processing errors on it.\n *\n * @public\n */\nexport async function hasCatalogProcessingErrors(\n entity: Entity,\n context: { apis: ApiHolder },\n) {\n const catalogApi = context.apis.get(catalogApiRef);\n if (!catalogApi) {\n throw new Error(`No implementation available for ${catalogApiRef}`);\n }\n\n const errors = await getOwnAndAncestorsErrors(\n stringifyEntityRef(entity),\n catalogApi,\n );\n return errors.items.length > 0;\n}\n\n/**\n * Displays a list of errors from the ancestors of the current entity.\n *\n * @public\n */\nexport function EntityProcessingErrorsPanel() {\n const { entity } = useEntity();\n const entityRef = stringifyEntityRef(entity);\n const catalogApi = useApi(catalogApiRef);\n const { loading, error, value } = useAsync(async () => {\n return getOwnAndAncestorsErrors(entityRef, catalogApi);\n }, [entityRef, catalogApi]);\n\n if (error) {\n return (\n <Box mb={1}>\n <ResponseErrorPanel error={error} />\n </Box>\n );\n }\n\n if (loading || !value) {\n return null;\n }\n\n return (\n <>\n {value.items.map((ancestorError, index) => (\n <Box key={index} mb={1}>\n {stringifyEntityRef(entity) !==\n stringifyEntityRef(ancestorError.entity) && (\n <Box p={1}>\n The error below originates from{' '}\n <EntityRefLink entityRef={ancestorError.entity} />\n </Box>\n )}\n {ancestorError.errors.map((e, i) => (\n <ResponseErrorPanel key={i} error={e} />\n ))}\n </Box>\n ))}\n </>\n );\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\nimport { useAsyncEntity } from '@backstage/plugin-catalog-react';\nimport React, { ReactNode, ReactElement } from 'react';\nimport {\n attachComponentData,\n useApiHolder,\n useElementFilter,\n ApiHolder,\n} from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/lib/useAsync';\n\nconst ENTITY_SWITCH_KEY = 'core.backstage.entitySwitch';\n\n/** @public */\nexport interface EntitySwitchCaseProps {\n if?: (\n entity: Entity,\n context: { apis: ApiHolder },\n ) => boolean | Promise<boolean>;\n children: ReactNode;\n}\n\nconst EntitySwitchCaseComponent = (_props: EntitySwitchCaseProps) => null;\n\nattachComponentData(EntitySwitchCaseComponent, ENTITY_SWITCH_KEY, true);\n\ninterface EntitySwitchCase {\n if?: (\n entity: Entity,\n context: { apis: ApiHolder },\n ) => boolean | Promise<boolean>;\n children: JSX.Element;\n}\n\ntype SwitchCaseResult = {\n if?: boolean | Promise<boolean>;\n children: JSX.Element;\n};\n\n/**\n * Props for the {@link EntitySwitch} component.\n * @public\n */\nexport interface EntitySwitchProps {\n children: ReactNode;\n renderMultipleMatches?: 'first' | 'all';\n}\n\n/** @public */\nexport const EntitySwitch = (props: EntitySwitchProps) => {\n const { entity, loading } = useAsyncEntity();\n const apis = useApiHolder();\n\n const results = useElementFilter(\n props.children,\n collection =>\n collection\n .selectByComponentData({\n key: ENTITY_SWITCH_KEY,\n withStrictError: 'Child of EntitySwitch is not an EntitySwitch.Case',\n })\n .getElements()\n .flatMap<SwitchCaseResult>((element: ReactElement) => {\n if (loading && !entity) {\n return [];\n }\n\n const { if: condition, children: elementsChildren } =\n element.props as EntitySwitchCase;\n\n if (!entity) {\n return [\n {\n if: condition === undefined,\n children: elementsChildren,\n },\n ];\n }\n return [\n {\n if: condition?.(entity, { apis }),\n children: elementsChildren,\n },\n ];\n }),\n [apis, entity, loading],\n );\n\n const hasAsyncCases = results.some(\n r => typeof r.if === 'object' && 'then' in r.if,\n );\n\n if (hasAsyncCases) {\n return (\n <AsyncEntitySwitch\n results={results}\n renderMultipleMatches={props.renderMultipleMatches}\n />\n );\n }\n\n if (props.renderMultipleMatches === 'all') {\n const children = results.filter(r => r.if).map(r => r.children);\n if (children.length === 0) {\n return getDefaultChildren(results);\n }\n return <>{children}</>;\n }\n\n return results.find(r => r.if)?.children ?? getDefaultChildren(results);\n};\n\nfunction AsyncEntitySwitch({\n results,\n renderMultipleMatches,\n}: {\n results: SwitchCaseResult[];\n renderMultipleMatches?: 'first' | 'all';\n}) {\n const { loading, value } = useAsync(async () => {\n const promises = results.map(\n async ({ if: condition, children: output }) => {\n try {\n if (await condition) {\n return output;\n }\n } catch {\n /* ignored */\n }\n return null;\n },\n );\n\n if (renderMultipleMatches === 'all') {\n const children = (await Promise.all(promises)).filter(Boolean);\n if (children.length === 0) {\n return getDefaultChildren(results);\n }\n return <>{children}</>;\n }\n\n return (\n (await Promise.all(promises)).find(Boolean) ?? getDefaultChildren(results)\n );\n }, [results]);\n\n if (loading || !value) {\n return null;\n }\n\n return value;\n}\n\nfunction getDefaultChildren(results: SwitchCaseResult[]) {\n return results.filter(r => r.if === undefined)[0]?.children ?? null;\n}\n\nEntitySwitch.Case = EntitySwitchCaseComponent;\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import ImageList from '@material-ui/core/ImageList';
|
|
2
|
+
import ImageListItem from '@material-ui/core/ImageListItem';
|
|
2
3
|
import React from 'react';
|
|
4
|
+
import Box from '@material-ui/core/Box';
|
|
5
|
+
import Typography from '@material-ui/core/Typography';
|
|
6
|
+
import { makeStyles } from '@material-ui/core/styles';
|
|
3
7
|
import LanguageIcon from '@material-ui/icons/Language';
|
|
4
8
|
import { Link } from '@backstage/core-components';
|
|
9
|
+
import useMediaQuery from '@material-ui/core/useMediaQuery';
|
|
5
10
|
|
|
6
11
|
const useStyles = makeStyles({
|
|
7
12
|
svgIcon: {
|
|
@@ -52,4 +57,4 @@ function LinksGridList(props) {
|
|
|
52
57
|
}
|
|
53
58
|
|
|
54
59
|
export { LinksGridList as L };
|
|
55
|
-
//# sourceMappingURL=LinksGridList-
|
|
60
|
+
//# sourceMappingURL=LinksGridList-821b4b9c.esm.js.map
|