@bcgov/plugin-catalog-dataset 0.2.10-feature.aps-4600-use-built-in-api-entity.91b201f2 → 0.2.10-feature.aps-4600-use-built-in-api-entity.cb2d711a
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/dist/components/CatalogDataset/CatalogDatasetPage.esm.js +82 -78
- package/dist/components/CatalogDataset/CatalogDatasetPage.esm.js.map +1 -1
- package/dist/components/CatalogDataset/DatasetApisDialog.esm.js +6 -4
- package/dist/components/CatalogDataset/DatasetApisDialog.esm.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { Grid, Card, CardContent, Typography, Link } from '@material-ui/core';
|
|
3
3
|
import { EntityLayout, EntityRelationWarning } from '@backstage/plugin-catalog';
|
|
4
4
|
import { useEntity, catalogApiRef } from '@backstage/plugin-catalog-react';
|
|
5
5
|
import { useApi } from '@backstage/core-plugin-api';
|
|
6
6
|
import { useAsync } from 'react-use';
|
|
7
7
|
import { RELATION_PROVIDES_API } from '@backstage/catalog-model';
|
|
8
|
+
import { EntityCatalogGraphCard } from '@backstage/plugin-catalog-graph';
|
|
8
9
|
import { useState, useMemo } from 'react';
|
|
9
10
|
import { AboutDatasetCard } from './AboutDatasetCard.esm.js';
|
|
10
11
|
import { AuthoritativeDesignationCard } from './AuthoritativeDesignationCard.esm.js';
|
|
@@ -38,83 +39,86 @@ const CatalogDatasetPage = () => {
|
|
|
38
39
|
const refs = entity.relations?.filter((relation) => relation.type === RELATION_PROVIDES_API).map((relation) => relation.targetRef) ?? spec.providesApis ?? [];
|
|
39
40
|
return [...new Set(refs)];
|
|
40
41
|
}, [entity.relations, spec.providesApis]);
|
|
41
|
-
return /* @__PURE__ */
|
|
42
|
-
/* @__PURE__ */ jsx(
|
|
43
|
-
|
|
44
|
-
/* @__PURE__ */
|
|
45
|
-
/* @__PURE__ */ jsx(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
/* @__PURE__ */
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
42
|
+
return /* @__PURE__ */ jsxs(EntityLayout, { children: [
|
|
43
|
+
/* @__PURE__ */ jsx(EntityLayout.Route, { path: "/", title: "Overview", children: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
44
|
+
/* @__PURE__ */ jsx(EntityRelationWarning, {}),
|
|
45
|
+
/* @__PURE__ */ jsxs(Grid, { container: true, spacing: 3, children: [
|
|
46
|
+
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 4, children: /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsxs(CardContent, { children: [
|
|
47
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", style: { marginBottom: 8 }, children: "On this page" }),
|
|
48
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#overview", children: "Overview" }) }),
|
|
49
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#about-this-dataset", children: "About this Dataset" }) }),
|
|
50
|
+
entity.metadata.tags?.includes("authoritative-data-register") ? /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#authoritative-designation", children: "Authoritative Designation" }) }) : null,
|
|
51
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#access-methods", children: "Access Methods" }) }),
|
|
52
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#schema", children: "Schema" }) }),
|
|
53
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#fields-and-definitions", children: "Fields & definitions" }) }),
|
|
54
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#lineage-and-quality", children: "Lineage and Quality" }) }),
|
|
55
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#versioning-and-change-governance", children: "Versioning and Change Governance" }) }),
|
|
56
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#support", children: "Support" }) }),
|
|
57
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#related-resources", children: "Related Resources" }) })
|
|
58
|
+
] }) }) }),
|
|
59
|
+
/* @__PURE__ */ jsxs(Grid, { item: true, xs: 12, md: 8, children: [
|
|
60
|
+
/* @__PURE__ */ jsx("div", { id: "overview", children: /* @__PURE__ */ jsx(
|
|
61
|
+
MainCard,
|
|
62
|
+
{
|
|
63
|
+
entity,
|
|
64
|
+
spec,
|
|
65
|
+
ownerLabel,
|
|
66
|
+
onViewApis: () => setApisOpen(true)
|
|
67
|
+
}
|
|
68
|
+
) }),
|
|
69
|
+
/* @__PURE__ */ jsx("div", { id: "about-this-dataset", children: /* @__PURE__ */ jsx(AboutDatasetCard, { description: spec.about?.description }) }),
|
|
70
|
+
entity.metadata.tags?.includes("authoritative-data-register") ? /* @__PURE__ */ jsx("div", { id: "authoritative-designation", children: /* @__PURE__ */ jsx(AuthoritativeDesignationCard, {}) }) : null,
|
|
71
|
+
/* @__PURE__ */ jsx("div", { id: "access-methods", children: /* @__PURE__ */ jsx(
|
|
72
|
+
AccessMethodsCard,
|
|
73
|
+
{
|
|
74
|
+
accessMethods: spec.accessMethods,
|
|
75
|
+
apiEntityRefs
|
|
76
|
+
}
|
|
77
|
+
) }),
|
|
78
|
+
/* @__PURE__ */ jsx("div", { id: "schema", children: /* @__PURE__ */ jsx(SchemaCard, { tables: spec.schema?.tables }) }),
|
|
79
|
+
/* @__PURE__ */ jsx("div", { id: "fields-and-definitions", children: /* @__PURE__ */ jsx(FieldsAndDefinitionCard, {}) }),
|
|
80
|
+
/* @__PURE__ */ jsx("div", { id: "lineage-and-quality", children: /* @__PURE__ */ jsx(
|
|
81
|
+
LineageAndQualityCard,
|
|
82
|
+
{
|
|
83
|
+
sourceSystem: spec.lineage?.sourceSystem,
|
|
84
|
+
transformation: spec.lineage?.transformation,
|
|
85
|
+
validation: spec.quality?.validation,
|
|
86
|
+
refresh: spec.lineage?.refresh,
|
|
87
|
+
qualityControls: spec.quality?.controls
|
|
88
|
+
}
|
|
89
|
+
) }),
|
|
90
|
+
/* @__PURE__ */ jsx("div", { id: "versioning-and-change-governance", children: /* @__PURE__ */ jsx(
|
|
91
|
+
VersioningAndChangeGovernanceCard,
|
|
92
|
+
{
|
|
93
|
+
currentVersion: spec.versioning?.currentVersion,
|
|
94
|
+
initialRelease: spec.versioning?.initialRelease,
|
|
95
|
+
lastUpdated: spec.versioning?.lastUpdated,
|
|
96
|
+
versioningDescription: spec.versioning?.description,
|
|
97
|
+
governanceDescription: spec.governance?.description
|
|
98
|
+
}
|
|
99
|
+
) }),
|
|
100
|
+
/* @__PURE__ */ jsx("div", { id: "support", children: /* @__PURE__ */ jsx(SupportCard, { support: spec.support }) }),
|
|
101
|
+
/* @__PURE__ */ jsx("div", { id: "related-resources", children: /* @__PURE__ */ jsx(
|
|
102
|
+
RelatedResourcesCard,
|
|
103
|
+
{
|
|
104
|
+
relatedResources: spec.relatedResources
|
|
105
|
+
}
|
|
106
|
+
) })
|
|
107
|
+
] })
|
|
108
|
+
] }),
|
|
109
|
+
/* @__PURE__ */ jsx(
|
|
110
|
+
DatasetApisDialog,
|
|
111
|
+
{
|
|
112
|
+
open: apisOpen,
|
|
113
|
+
onClose: () => setApisOpen(false),
|
|
114
|
+
datasetTitle,
|
|
115
|
+
apiEntityRefs,
|
|
116
|
+
namespace: entity.metadata.namespace
|
|
117
|
+
}
|
|
118
|
+
)
|
|
119
|
+
] }) }),
|
|
120
|
+
/* @__PURE__ */ jsx(EntityLayout.Route, { path: "/catalog", title: "Catalog", children: /* @__PURE__ */ jsx(Grid, { container: true, spacing: 3, children: /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(EntityCatalogGraphCard, { title: "Relations", height: 700 }) }) }) })
|
|
121
|
+
] });
|
|
118
122
|
};
|
|
119
123
|
|
|
120
124
|
export { CatalogDatasetPage };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CatalogDatasetPage.esm.js","sources":["../../../src/components/CatalogDataset/CatalogDatasetPage.tsx"],"sourcesContent":["import { Grid, Card, CardContent, Typography, Link } from '@material-ui/core';\nimport { EntityLayout, EntityRelationWarning } from '@backstage/plugin-catalog';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport type { DatasetEntity } from '@bcgov/plugin-catalog-common-bc-data-catalogue';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport { useAsync } from 'react-use';\nimport { RELATION_PROVIDES_API } from '@backstage/catalog-model';\nimport { useMemo, useState } from 'react';\nimport { AboutDatasetCard } from './AboutDatasetCard';\nimport { AuthoritativeDesignationCard } from './AuthoritativeDesignationCard';\nimport { AccessMethodsCard } from './AccessMethodsCard';\nimport { SchemaCard } from './SchemaCard';\nimport { FieldsAndDefinitionCard } from './FieldsAndDefinitionCard';\nimport { MainCard } from './MainCard';\nimport { LineageAndQualityCard } from './LineageAndQualityCard';\nimport { VersioningAndChangeGovernanceCard } from './VersioningAndChangeGovernanceCard';\nimport { SupportCard } from './SupportCard';\nimport { DatasetApisDialog } from './DatasetApisDialog';\nimport { RelatedResourcesCard } from './RelatedResourcesCard';\n\nexport const CatalogDatasetPage = () => {\n const { entity } = useEntity();\n const spec = (entity as DatasetEntity).spec;\n\n const catalogApi = useApi(catalogApiRef);\n const [apisOpen, setApisOpen] = useState(false);\n\n const datasetTitle = entity.metadata.title ?? entity.metadata.name;\n\n const { value: ownerEntity } = useAsync(\n async () => {\n if (!spec.owner) {\n return undefined;\n }\n return await catalogApi.getEntityByRef(spec.owner);\n },\n [catalogApi, spec.owner],\n );\n\n const ownerLabel =\n (ownerEntity?.spec?.profile as { displayName?: string } | undefined)?.displayName ??\n ownerEntity?.metadata.title ??\n ownerEntity?.metadata.name ??\n spec.owner;\n\n const apiEntityRefs = useMemo(() => {\n const refs =\n entity.relations\n ?.filter(relation => relation.type === RELATION_PROVIDES_API)\n .map(relation => relation.targetRef) ??\n spec.providesApis ??\n [];\n\n return [...new Set(refs)];\n }, [entity.relations, spec.providesApis]);\n\n return (\n <EntityLayout>\n <EntityLayout.Route path=\"/\" title=\"Overview\">\n <>\n <EntityRelationWarning />\n <Grid container spacing={3}>\n <Grid item xs={12} md={4}>\n <Card>\n <CardContent>\n <Typography variant=\"body2\" style={{ marginBottom: 8 }}>\n On this page\n </Typography>\n <Typography variant=\"body2\">\n <Link href=\"#overview\">\n Overview\n </Link>\n </Typography>\n <Typography variant=\"body2\">\n <Link href=\"#about-this-dataset\">\n About this Dataset\n </Link>\n </Typography>\n {entity.metadata.tags?.includes('authoritative-data-register') ? (\n <Typography variant=\"body2\">\n <Link href=\"#authoritative-designation\">\n Authoritative Designation\n </Link>\n </Typography>\n ) : null}\n <Typography variant=\"body2\">\n <Link href=\"#access-methods\">\n Access Methods\n </Link>\n </Typography>\n <Typography variant=\"body2\">\n <Link href=\"#schema\">\n Schema\n </Link>\n </Typography>\n <Typography variant=\"body2\">\n <Link href=\"#fields-and-definitions\">\n Fields & definitions\n </Link>\n </Typography>\n <Typography variant=\"body2\">\n <Link href=\"#lineage-and-quality\">\n Lineage and Quality\n </Link>\n </Typography>\n <Typography variant=\"body2\">\n <Link href=\"#versioning-and-change-governance\">\n Versioning and Change Governance\n </Link>\n </Typography>\n <Typography variant=\"body2\">\n <Link href=\"#support\">\n Support\n </Link>\n </Typography>\n <Typography variant=\"body2\">\n <Link href=\"#related-resources\">\n Related Resources\n </Link>\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n\n <Grid item xs={12} md={8}>\n <div id=\"overview\">\n <MainCard\n entity={entity}\n spec={spec}\n ownerLabel={ownerLabel}\n onViewApis={() => setApisOpen(true)}\n />\n </div>\n\n <div id=\"about-this-dataset\">\n <AboutDatasetCard description={spec.about?.description} />\n </div>\n\n {entity.metadata.tags?.includes('authoritative-data-register') ? (\n <div id=\"authoritative-designation\">\n <AuthoritativeDesignationCard />\n </div>\n ) : null}\n\n <div id=\"access-methods\">\n <AccessMethodsCard\n accessMethods={spec.accessMethods}\n apiEntityRefs={apiEntityRefs}\n />\n </div>\n\n <div id=\"schema\">\n <SchemaCard tables={spec.schema?.tables} />\n </div>\n\n <div id=\"fields-and-definitions\">\n <FieldsAndDefinitionCard />\n </div>\n\n <div id=\"lineage-and-quality\">\n <LineageAndQualityCard\n sourceSystem={spec.lineage?.sourceSystem}\n transformation={spec.lineage?.transformation}\n validation={spec.quality?.validation}\n refresh={spec.lineage?.refresh}\n qualityControls={spec.quality?.controls}\n />\n </div>\n\n <div id=\"versioning-and-change-governance\">\n <VersioningAndChangeGovernanceCard\n currentVersion={spec.versioning?.currentVersion}\n initialRelease={spec.versioning?.initialRelease}\n lastUpdated={spec.versioning?.lastUpdated}\n versioningDescription={spec.versioning?.description}\n governanceDescription={spec.governance?.description}\n />\n </div>\n\n <div id=\"support\">\n <SupportCard support={spec.support} />\n </div>\n\n <div id=\"related-resources\">\n <RelatedResourcesCard\n relatedResources={spec.relatedResources}\n />\n </div>\n </Grid>\n </Grid>\n\n <DatasetApisDialog\n open={apisOpen}\n onClose={() => setApisOpen(false)}\n datasetTitle={datasetTitle}\n apiEntityRefs={apiEntityRefs}\n namespace={entity.metadata.namespace}\n />\n </>\n </EntityLayout.Route>\n </EntityLayout>\n );\n};"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CatalogDatasetPage.esm.js","sources":["../../../src/components/CatalogDataset/CatalogDatasetPage.tsx"],"sourcesContent":["import { Grid, Card, CardContent, Typography, Link } from '@material-ui/core';\nimport { EntityLayout, EntityRelationWarning } from '@backstage/plugin-catalog';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport type { DatasetEntity } from '@bcgov/plugin-catalog-common-bc-data-catalogue';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport { useAsync } from 'react-use';\nimport { RELATION_PROVIDES_API } from '@backstage/catalog-model';\nimport { EntityCatalogGraphCard } from '@backstage/plugin-catalog-graph';\nimport { useMemo, useState } from 'react';\nimport { AboutDatasetCard } from './AboutDatasetCard';\nimport { AuthoritativeDesignationCard } from './AuthoritativeDesignationCard';\nimport { AccessMethodsCard } from './AccessMethodsCard';\nimport { SchemaCard } from './SchemaCard';\nimport { FieldsAndDefinitionCard } from './FieldsAndDefinitionCard';\nimport { MainCard } from './MainCard';\nimport { LineageAndQualityCard } from './LineageAndQualityCard';\nimport { VersioningAndChangeGovernanceCard } from './VersioningAndChangeGovernanceCard';\nimport { SupportCard } from './SupportCard';\nimport { DatasetApisDialog } from './DatasetApisDialog';\nimport { RelatedResourcesCard } from './RelatedResourcesCard';\n\nexport const CatalogDatasetPage = () => {\n const { entity } = useEntity();\n const spec = (entity as DatasetEntity).spec;\n\n const catalogApi = useApi(catalogApiRef);\n const [apisOpen, setApisOpen] = useState(false);\n\n const datasetTitle = entity.metadata.title ?? entity.metadata.name;\n\n const { value: ownerEntity } = useAsync(\n async () => {\n if (!spec.owner) {\n return undefined;\n }\n return await catalogApi.getEntityByRef(spec.owner);\n },\n [catalogApi, spec.owner],\n );\n\n const ownerLabel =\n (ownerEntity?.spec?.profile as { displayName?: string } | undefined)?.displayName ??\n ownerEntity?.metadata.title ??\n ownerEntity?.metadata.name ??\n spec.owner;\n\n const apiEntityRefs = useMemo(() => {\n const refs =\n entity.relations\n ?.filter(relation => relation.type === RELATION_PROVIDES_API)\n .map(relation => relation.targetRef) ??\n spec.providesApis ??\n [];\n\n return [...new Set(refs)];\n }, [entity.relations, spec.providesApis]);\n\n return (\n <EntityLayout>\n <EntityLayout.Route path=\"/\" title=\"Overview\">\n <>\n <EntityRelationWarning />\n <Grid container spacing={3}>\n <Grid item xs={12} md={4}>\n <Card>\n <CardContent>\n <Typography variant=\"body2\" style={{ marginBottom: 8 }}>\n On this page\n </Typography>\n <Typography variant=\"body2\">\n <Link href=\"#overview\">\n Overview\n </Link>\n </Typography>\n <Typography variant=\"body2\">\n <Link href=\"#about-this-dataset\">\n About this Dataset\n </Link>\n </Typography>\n {entity.metadata.tags?.includes('authoritative-data-register') ? (\n <Typography variant=\"body2\">\n <Link href=\"#authoritative-designation\">\n Authoritative Designation\n </Link>\n </Typography>\n ) : null}\n <Typography variant=\"body2\">\n <Link href=\"#access-methods\">\n Access Methods\n </Link>\n </Typography>\n <Typography variant=\"body2\">\n <Link href=\"#schema\">\n Schema\n </Link>\n </Typography>\n <Typography variant=\"body2\">\n <Link href=\"#fields-and-definitions\">\n Fields & definitions\n </Link>\n </Typography>\n <Typography variant=\"body2\">\n <Link href=\"#lineage-and-quality\">\n Lineage and Quality\n </Link>\n </Typography>\n <Typography variant=\"body2\">\n <Link href=\"#versioning-and-change-governance\">\n Versioning and Change Governance\n </Link>\n </Typography>\n <Typography variant=\"body2\">\n <Link href=\"#support\">\n Support\n </Link>\n </Typography>\n <Typography variant=\"body2\">\n <Link href=\"#related-resources\">\n Related Resources\n </Link>\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n\n <Grid item xs={12} md={8}>\n <div id=\"overview\">\n <MainCard\n entity={entity}\n spec={spec}\n ownerLabel={ownerLabel}\n onViewApis={() => setApisOpen(true)}\n />\n </div>\n\n <div id=\"about-this-dataset\">\n <AboutDatasetCard description={spec.about?.description} />\n </div>\n\n {entity.metadata.tags?.includes('authoritative-data-register') ? (\n <div id=\"authoritative-designation\">\n <AuthoritativeDesignationCard />\n </div>\n ) : null}\n\n <div id=\"access-methods\">\n <AccessMethodsCard\n accessMethods={spec.accessMethods}\n apiEntityRefs={apiEntityRefs}\n />\n </div>\n\n <div id=\"schema\">\n <SchemaCard tables={spec.schema?.tables} />\n </div>\n\n <div id=\"fields-and-definitions\">\n <FieldsAndDefinitionCard />\n </div>\n\n <div id=\"lineage-and-quality\">\n <LineageAndQualityCard\n sourceSystem={spec.lineage?.sourceSystem}\n transformation={spec.lineage?.transformation}\n validation={spec.quality?.validation}\n refresh={spec.lineage?.refresh}\n qualityControls={spec.quality?.controls}\n />\n </div>\n\n <div id=\"versioning-and-change-governance\">\n <VersioningAndChangeGovernanceCard\n currentVersion={spec.versioning?.currentVersion}\n initialRelease={spec.versioning?.initialRelease}\n lastUpdated={spec.versioning?.lastUpdated}\n versioningDescription={spec.versioning?.description}\n governanceDescription={spec.governance?.description}\n />\n </div>\n\n <div id=\"support\">\n <SupportCard support={spec.support} />\n </div>\n\n <div id=\"related-resources\">\n <RelatedResourcesCard\n relatedResources={spec.relatedResources}\n />\n </div>\n </Grid>\n </Grid>\n\n <DatasetApisDialog\n open={apisOpen}\n onClose={() => setApisOpen(false)}\n datasetTitle={datasetTitle}\n apiEntityRefs={apiEntityRefs}\n namespace={entity.metadata.namespace}\n />\n </>\n </EntityLayout.Route>\n\n <EntityLayout.Route path=\"/catalog\" title=\"Catalog\">\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <EntityCatalogGraphCard title=\"Relations\" height={700} />\n </Grid>\n </Grid>\n </EntityLayout.Route>\n </EntityLayout>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { Dialog, DialogTitle, Typography, DialogContent, Grid, Card, CardContent
|
|
|
3
3
|
import { useApi } from '@backstage/core-plugin-api';
|
|
4
4
|
import { catalogApiRef, EntityRefLink } from '@backstage/plugin-catalog-react';
|
|
5
5
|
import { stringifyEntityRef, parseEntityRef } from '@backstage/catalog-model';
|
|
6
|
+
import { isOpenApiEntity } from '@bcgov/plugin-catalog-common-bc-data-catalogue';
|
|
6
7
|
import { useAsync } from 'react-use';
|
|
7
8
|
|
|
8
9
|
const GAP = "Gap";
|
|
@@ -41,13 +42,14 @@ const DatasetApisDialog = ({
|
|
|
41
42
|
}
|
|
42
43
|
return apiEntities.map((api) => {
|
|
43
44
|
const apiSpec = api.spec ?? {};
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
const
|
|
45
|
+
const isOpenApi = isOpenApiEntity(api);
|
|
46
|
+
const customMetadata = isOpenApi ? api.metadata.customMetadata : void 0;
|
|
47
|
+
const technicalReference = customMetadata?.technicalReference ?? {};
|
|
48
|
+
const environments = Array.isArray(customMetadata?.environments) ? customMetadata.environments : [];
|
|
47
49
|
return {
|
|
48
50
|
entityRef: stringifyEntityRef(api),
|
|
49
51
|
title: api.metadata.title ?? api.metadata.name,
|
|
50
|
-
type: apiSpec.type
|
|
52
|
+
type: typeof apiSpec.type === "string" ? apiSpec.type : "\u2014",
|
|
51
53
|
security: isOpenApi && Array.isArray(technicalReference.authentication) ? technicalReference.authentication : [],
|
|
52
54
|
environments: isOpenApi ? environments.map((environment) => ({
|
|
53
55
|
name: typeof environment?.name === "string" ? environment.name : void 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatasetApisDialog.esm.js","sources":["../../../src/components/CatalogDataset/DatasetApisDialog.tsx"],"sourcesContent":["import {\n Button,\n Card,\n CardContent,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n Typography,\n} from '@material-ui/core';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef, EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model';\nimport { useAsync } from 'react-use';\n\ntype Props = {\n open: boolean;\n onClose: () => void;\n datasetTitle: string;\n apiEntityRefs: string[];\n namespace?: string;\n};\n\ntype ApiCard = {\n entityRef: string;\n title: string;\n type: string;\n security: string[];\n environments: Array<{\n name?: string;\n url?: string;\n description?: string;\n }>;\n isOpenApi: boolean;\n};\n\nconst GAP = 'Gap';\n\nexport const DatasetApisDialog = ({\n open,\n onClose,\n datasetTitle,\n apiEntityRefs,\n namespace,\n}: Props) => {\n const catalogApi = useApi(catalogApiRef);\n\n const { value: apiEntities, loading: apiEntitiesLoading } = useAsync(\n async () => {\n if (!open || !apiEntityRefs.length) {\n return [];\n }\n\n const resolved = await Promise.all(\n apiEntityRefs.map(async apiRef => {\n try {\n return await catalogApi.getEntityByRef(apiRef);\n } catch {\n return undefined;\n }\n }),\n );\n\n return resolved.filter(\n (api): api is NonNullable<typeof api> => Boolean(api),\n );\n },\n [open, apiEntityRefs, catalogApi],\n );\n\n const { value: apiCards = [], loading: apiCardsLoading } = useAsync(\n async (): Promise<ApiCard[]> => {\n if (!open || !apiEntities?.length) {\n return [];\n }\n\n return apiEntities.map(api => {\n const apiSpec = (api.spec ?? {}) as Record<string, any>;\n const technicalReference =\n (apiSpec.technicalReference as Record<string, any> | undefined) ?? {};\n const environments = Array.isArray(apiSpec.environments)\n ? apiSpec.environments\n : [];\n const isOpenApi = api.kind === 'OpenApi';\n\n return {\n entityRef: stringifyEntityRef(api),\n title: api.metadata.title ?? api.metadata.name,\n type: apiSpec.type ?? '—',\n security:\n isOpenApi && Array.isArray(technicalReference.authentication)\n ? technicalReference.authentication\n : [],\n environments: isOpenApi\n ? environments.map(environment => ({\n name:\n typeof environment?.name === 'string'\n ? environment.name\n : undefined,\n url:\n typeof environment?.url === 'string'\n ? environment.url\n : undefined,\n description:\n typeof environment?.description === 'string'\n ? environment.description\n : undefined,\n }))\n : [],\n isOpenApi,\n };\n });\n },\n [open, apiEntities],\n );\n\n return (\n <Dialog open={open} onClose={onClose} fullWidth maxWidth=\"lg\">\n <DialogTitle disableTypography>\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n paddingBottom: 8,\n }}\n >\n <div>\n <Typography variant=\"h3\" component=\"h2\" gutterBottom>\n APIs\n </Typography>\n <Typography variant=\"body1\">Dataset: {datasetTitle}</Typography>\n </div>\n </div>\n </DialogTitle>\n\n <DialogContent dividers>\n <Typography variant=\"h6\" gutterBottom style={{ marginBottom: 20 }}>\n Consumed by:\n </Typography>\n\n {apiEntitiesLoading || apiCardsLoading ? (\n <Typography variant=\"body2\">Loading...</Typography>\n ) : apiCards.length ? (\n <Grid container spacing={3}>\n {apiCards.map(api => (\n <Grid item xs={12} md={6} lg={4} key={api.entityRef}>\n <Card\n variant=\"outlined\"\n style={{\n height: '100%',\n borderWidth: 2,\n borderRadius: 8,\n }}\n >\n <CardContent>\n <Typography\n variant=\"h6\"\n gutterBottom\n style={{ fontWeight: 600, textDecoration: 'underline' }}\n >\n <EntityRefLink\n entityRef={api.entityRef}\n title={api.title}\n />\n </Typography>\n\n <Typography variant=\"body1\">Type: {api.type}</Typography>\n\n <Typography variant=\"body1\" style={{ marginTop: 8 }}>\n <strong>Security:</strong>\n </Typography>\n {api.security.length ? (\n <ul style={{ margin: 0, paddingLeft: 20 }}>\n {api.security.map((security, i) => (\n <li key={i}>\n <Typography variant=\"body2\">\n {security}\n </Typography>\n </li>\n ))}\n </ul>\n ) : (\n <Typography variant=\"body2\">\n {api.isOpenApi ? '—' : GAP}\n </Typography>\n )}\n\n <Typography variant=\"body1\" style={{ marginTop: 8 }}>\n <strong>Environments:</strong>\n </Typography>\n {api.environments.length ? (\n <ul style={{ margin: 0, paddingLeft: 20 }}>\n {api.environments.map((environment, i) => (\n <li key={i}>\n <Typography variant=\"body2\">\n {environment.name ||\n environment.description ||\n environment.url ||\n '—'}\n </Typography>\n </li>\n ))}\n </ul>\n ) : (\n <Typography variant=\"body2\">\n {api.isOpenApi ? '—' : GAP}\n </Typography>\n )}\n </CardContent>\n </Card>\n </Grid>\n ))}\n </Grid>\n ) : (\n <ul style={{ margin: 0, paddingLeft: 20 }}>\n {apiEntityRefs.map(apiRef => {\n const parsed = parseEntityRef(apiRef, {\n defaultKind: 'API',\n defaultNamespace: namespace ?? 'default',\n });\n\n return (\n <li key={apiRef}>\n <EntityRefLink entityRef={apiRef} title={parsed.name} />\n </li>\n );\n })}\n </ul>\n )}\n </DialogContent>\n\n <DialogActions>\n <Button\n onClick={onClose}\n color=\"default\"\n style={{ minWidth: 'auto', padding: 0, textTransform: 'none' }}\n >\n <Typography variant=\"h6\" style={{ textDecoration: 'underline' }}>\n X Close\n </Typography>\n </Button>\n </DialogActions>\n </Dialog>\n );\n};"],"names":[],"mappings":";;;;;;;AAqCA,MAAM,GAAA,GAAM,KAAA;AAEL,MAAM,oBAAoB,CAAC;AAAA,EAChC,IAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,KAAa;AACX,EAAA,MAAM,UAAA,GAAa,OAAO,aAAa,CAAA;AAEvC,EAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAa,OAAA,EAAS,oBAAmB,GAAI,QAAA;AAAA,IAC1D,YAAY;AACV,MAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,aAAA,CAAc,MAAA,EAAQ;AAClC,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA;AAAA,QAC7B,aAAA,CAAc,GAAA,CAAI,OAAM,MAAA,KAAU;AAChC,UAAA,IAAI;AACF,YAAA,OAAO,MAAM,UAAA,CAAW,cAAA,CAAe,MAAM,CAAA;AAAA,UAC/C,CAAA,CAAA,MAAQ;AACN,YAAA,OAAO,MAAA;AAAA,UACT;AAAA,QACF,CAAC;AAAA,OACH;AAEA,MAAA,OAAO,QAAA,CAAS,MAAA;AAAA,QACd,CAAC,GAAA,KAAwC,OAAA,CAAQ,GAAG;AAAA,OACtD;AAAA,IACF,CAAA;AAAA,IACA,CAAC,IAAA,EAAM,aAAA,EAAe,UAAU;AAAA,GAClC;AAEA,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,GAAW,EAAC,EAAG,OAAA,EAAS,iBAAgB,GAAI,QAAA;AAAA,IACzD,YAAgC;AAC9B,MAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,WAAA,EAAa,MAAA,EAAQ;AACjC,QAAA,OAAO,EAAC;AAAA,MACV;AAEA,MAAA,OAAO,WAAA,CAAY,IAAI,CAAA,GAAA,KAAO;AAC5B,QAAA,MAAM,OAAA,GAAW,GAAA,CAAI,IAAA,IAAQ,EAAC;AAC9B,QAAA,MAAM,kBAAA,GACH,OAAA,CAAQ,kBAAA,IAA0D,EAAC;AACtE,QAAA,MAAM,YAAA,GAAe,MAAM,OAAA,CAAQ,OAAA,CAAQ,YAAY,CAAA,GACnD,OAAA,CAAQ,eACR,EAAC;AACL,QAAA,MAAM,SAAA,GAAY,IAAI,IAAA,KAAS,SAAA;AAE/B,QAAA,OAAO;AAAA,UACL,SAAA,EAAW,mBAAmB,GAAG,CAAA;AAAA,UACjC,KAAA,EAAO,GAAA,CAAI,QAAA,CAAS,KAAA,IAAS,IAAI,QAAA,CAAS,IAAA;AAAA,UAC1C,IAAA,EAAM,QAAQ,IAAA,IAAQ,QAAA;AAAA,UACtB,QAAA,EACE,aAAa,KAAA,CAAM,OAAA,CAAQ,mBAAmB,cAAc,CAAA,GACxD,kBAAA,CAAmB,cAAA,GACnB,EAAC;AAAA,UACP,YAAA,EAAc,SAAA,GACV,YAAA,CAAa,GAAA,CAAI,CAAA,WAAA,MAAgB;AAAA,YAC/B,MACE,OAAO,WAAA,EAAa,IAAA,KAAS,QAAA,GACzB,YAAY,IAAA,GACZ,MAAA;AAAA,YACN,KACE,OAAO,WAAA,EAAa,GAAA,KAAQ,QAAA,GACxB,YAAY,GAAA,GACZ,MAAA;AAAA,YACN,aACE,OAAO,WAAA,EAAa,WAAA,KAAgB,QAAA,GAChC,YAAY,WAAA,GACZ;AAAA,WACR,CAAE,IACF,EAAC;AAAA,UACL;AAAA,SACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,MAAM,WAAW;AAAA,GACpB;AAEA,EAAA,4BACG,MAAA,EAAA,EAAO,IAAA,EAAY,SAAkB,SAAA,EAAS,IAAA,EAAC,UAAS,IAAA,EACvD,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,mBAAiB,IAAA,EAC5B,QAAA,kBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,cAAA,EAAgB,eAAA;AAAA,UAChB,UAAA,EAAY,YAAA;AAAA,UACZ,aAAA,EAAe;AAAA,SACjB;AAAA,QAEA,+BAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,cAAW,OAAA,EAAQ,IAAA,EAAK,WAAU,IAAA,EAAK,YAAA,EAAY,MAAC,QAAA,EAAA,MAAA,EAErD,CAAA;AAAA,0BACA,IAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,QAAA,EAAA;AAAA,YAAA,WAAA;AAAA,YAAU;AAAA,WAAA,EAAa;AAAA,SAAA,EACrD;AAAA;AAAA,KACF,EACF,CAAA;AAAA,oBAEA,IAAA,CAAC,aAAA,EAAA,EAAc,QAAA,EAAQ,IAAA,EACrB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EAAK,YAAA,EAAY,IAAA,EAAC,OAAO,EAAE,YAAA,EAAc,EAAA,EAAG,EAAG,QAAA,EAAA,cAAA,EAEnE,CAAA;AAAA,MAEC,kBAAA,IAAsB,eAAA,mBACrB,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,QAAA,EAAA,YAAA,EAAU,CAAA,GACpC,QAAA,CAAS,MAAA,mBACX,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAS,IAAA,EAAC,OAAA,EAAS,CAAA,EACtB,QAAA,EAAA,QAAA,CAAS,GAAA,CAAI,CAAA,GAAA,qBACZ,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,CAAA,EAAG,EAAA,EAAI,CAAA,EAC5B,QAAA,kBAAA,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,UAAA;AAAA,UACR,KAAA,EAAO;AAAA,YACL,MAAA,EAAQ,MAAA;AAAA,YACR,WAAA,EAAa,CAAA;AAAA,YACb,YAAA,EAAc;AAAA,WAChB;AAAA,UAEA,+BAAC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,IAAA;AAAA,gBACR,YAAA,EAAY,IAAA;AAAA,gBACZ,KAAA,EAAO,EAAE,UAAA,EAAY,GAAA,EAAK,gBAAgB,WAAA,EAAY;AAAA,gBAEtD,QAAA,kBAAA,GAAA;AAAA,kBAAC,aAAA;AAAA,kBAAA;AAAA,oBACC,WAAW,GAAA,CAAI,SAAA;AAAA,oBACf,OAAO,GAAA,CAAI;AAAA;AAAA;AACb;AAAA,aACF;AAAA,4BAEA,IAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,QAAA,EAAA;AAAA,cAAA,QAAA;AAAA,cAAO,GAAA,CAAI;AAAA,aAAA,EAAK,CAAA;AAAA,4BAE5C,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,KAAA,EAAO,EAAE,SAAA,EAAW,CAAA,EAAE,EAChD,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAO,QAAA,EAAA,WAAA,EAAS,CAAA,EACnB,CAAA;AAAA,YACC,IAAI,QAAA,CAAS,MAAA,mBACZ,GAAA,CAAC,IAAA,EAAA,EAAG,OAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,WAAA,EAAa,IAAG,EACrC,QAAA,EAAA,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAC,QAAA,EAAU,CAAA,qBAC3B,GAAA,CAAC,IAAA,EAAA,EACC,8BAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EACjB,QAAA,EAAA,QAAA,EACH,KAHO,CAIT,CACD,CAAA,EACH,CAAA,uBAEC,UAAA,EAAA,EAAW,OAAA,EAAQ,SACjB,QAAA,EAAA,GAAA,CAAI,SAAA,GAAY,WAAM,GAAA,EACzB,CAAA;AAAA,4BAGF,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,KAAA,EAAO,EAAE,SAAA,EAAW,CAAA,EAAE,EAChD,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAO,QAAA,EAAA,eAAA,EAAa,CAAA,EACvB,CAAA;AAAA,YACC,IAAI,YAAA,CAAa,MAAA,uBACf,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,aAAa,EAAA,EAAG,EACrC,cAAI,YAAA,CAAa,GAAA,CAAI,CAAC,WAAA,EAAa,CAAA,yBACjC,IAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,cAAW,OAAA,EAAQ,OAAA,EACjB,sBAAY,IAAA,IACX,WAAA,CAAY,eACZ,WAAA,CAAY,GAAA,IACZ,UACJ,CAAA,EAAA,EANO,CAOT,CACD,CAAA,EACH,CAAA,uBAEC,UAAA,EAAA,EAAW,OAAA,EAAQ,SACjB,QAAA,EAAA,GAAA,CAAI,SAAA,GAAY,WAAM,GAAA,EACzB;AAAA,WAAA,EAEJ;AAAA;AAAA,WA/DkC,GAAA,CAAI,SAiE1C,CACD,CAAA,EACH,oBAEA,GAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,QAAQ,CAAA,EAAG,WAAA,EAAa,IAAG,EACrC,QAAA,EAAA,aAAA,CAAc,IAAI,CAAA,MAAA,KAAU;AAC3B,QAAA,MAAM,MAAA,GAAS,eAAe,MAAA,EAAQ;AAAA,UACpC,WAAA,EAAa,KAAA;AAAA,UACb,kBAAkB,SAAA,IAAa;AAAA,SAChC,CAAA;AAED,QAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAW,QAAQ,KAAA,EAAO,MAAA,CAAO,IAAA,EAAM,CAAA,EAAA,EAD/C,MAET,CAAA;AAAA,MAEJ,CAAC,CAAA,EACH;AAAA,KAAA,EAEJ,CAAA;AAAA,wBAEC,aAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,OAAA;AAAA,QACT,KAAA,EAAM,SAAA;AAAA,QACN,OAAO,EAAE,QAAA,EAAU,QAAQ,OAAA,EAAS,CAAA,EAAG,eAAe,MAAA,EAAO;AAAA,QAE7D,QAAA,kBAAA,GAAA,CAAC,cAAW,OAAA,EAAQ,IAAA,EAAK,OAAO,EAAE,cAAA,EAAgB,WAAA,EAAY,EAAG,QAAA,EAAA,SAAA,EAEjE;AAAA;AAAA,KACF,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"DatasetApisDialog.esm.js","sources":["../../../src/components/CatalogDataset/DatasetApisDialog.tsx"],"sourcesContent":["import {\n Button,\n Card,\n CardContent,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Grid,\n Typography,\n} from '@material-ui/core';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef, EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { parseEntityRef, stringifyEntityRef } from '@backstage/catalog-model';\nimport { isOpenApiEntity } from '@bcgov/plugin-catalog-common-bc-data-catalogue';\nimport { useAsync } from 'react-use';\n\ntype Props = {\n open: boolean;\n onClose: () => void;\n datasetTitle: string;\n apiEntityRefs: string[];\n namespace?: string;\n};\n\ntype ApiCard = {\n entityRef: string;\n title: string;\n type: string;\n security: string[];\n environments: Array<{\n name?: string;\n url?: string;\n description?: string;\n }>;\n isOpenApi: boolean;\n};\n\nconst GAP = 'Gap';\n\nexport const DatasetApisDialog = ({\n open,\n onClose,\n datasetTitle,\n apiEntityRefs,\n namespace,\n}: Props) => {\n const catalogApi = useApi(catalogApiRef);\n\n const { value: apiEntities, loading: apiEntitiesLoading } = useAsync(\n async () => {\n if (!open || !apiEntityRefs.length) {\n return [];\n }\n\n const resolved = await Promise.all(\n apiEntityRefs.map(async apiRef => {\n try {\n return await catalogApi.getEntityByRef(apiRef);\n } catch {\n return undefined;\n }\n }),\n );\n\n return resolved.filter(\n (api): api is NonNullable<typeof api> => Boolean(api),\n );\n },\n [open, apiEntityRefs, catalogApi],\n );\n\n const { value: apiCards = [], loading: apiCardsLoading } = useAsync(\n async (): Promise<ApiCard[]> => {\n if (!open || !apiEntities?.length) {\n return [];\n }\n\n return apiEntities.map(api => {\n const apiSpec = (api.spec ?? {}) as Record<string, unknown>;\n const isOpenApi = isOpenApiEntity(api);\n const customMetadata = isOpenApi\n ? api.metadata.customMetadata\n : undefined;\n const technicalReference = customMetadata?.technicalReference ?? {};\n const environments = Array.isArray(customMetadata?.environments)\n ? customMetadata.environments\n : [];\n\n return {\n entityRef: stringifyEntityRef(api),\n title: api.metadata.title ?? api.metadata.name,\n type: typeof apiSpec.type === 'string' ? apiSpec.type : '—',\n security:\n isOpenApi && Array.isArray(technicalReference.authentication)\n ? technicalReference.authentication\n : [],\n environments: isOpenApi\n ? environments.map(environment => ({\n name:\n typeof environment?.name === 'string'\n ? environment.name\n : undefined,\n url:\n typeof environment?.url === 'string'\n ? environment.url\n : undefined,\n description:\n typeof environment?.description === 'string'\n ? environment.description\n : undefined,\n }))\n : [],\n isOpenApi,\n };\n });\n },\n [open, apiEntities],\n );\n\n return (\n <Dialog open={open} onClose={onClose} fullWidth maxWidth=\"lg\">\n <DialogTitle disableTypography>\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n paddingBottom: 8,\n }}\n >\n <div>\n <Typography variant=\"h3\" component=\"h2\" gutterBottom>\n APIs\n </Typography>\n <Typography variant=\"body1\">Dataset: {datasetTitle}</Typography>\n </div>\n </div>\n </DialogTitle>\n\n <DialogContent dividers>\n <Typography variant=\"h6\" gutterBottom style={{ marginBottom: 20 }}>\n Consumed by:\n </Typography>\n\n {apiEntitiesLoading || apiCardsLoading ? (\n <Typography variant=\"body2\">Loading...</Typography>\n ) : apiCards.length ? (\n <Grid container spacing={3}>\n {apiCards.map(api => (\n <Grid item xs={12} md={6} lg={4} key={api.entityRef}>\n <Card\n variant=\"outlined\"\n style={{\n height: '100%',\n borderWidth: 2,\n borderRadius: 8,\n }}\n >\n <CardContent>\n <Typography\n variant=\"h6\"\n gutterBottom\n style={{ fontWeight: 600, textDecoration: 'underline' }}\n >\n <EntityRefLink\n entityRef={api.entityRef}\n title={api.title}\n />\n </Typography>\n\n <Typography variant=\"body1\">Type: {api.type}</Typography>\n\n <Typography variant=\"body1\" style={{ marginTop: 8 }}>\n <strong>Security:</strong>\n </Typography>\n {api.security.length ? (\n <ul style={{ margin: 0, paddingLeft: 20 }}>\n {api.security.map((security, i) => (\n <li key={i}>\n <Typography variant=\"body2\">\n {security}\n </Typography>\n </li>\n ))}\n </ul>\n ) : (\n <Typography variant=\"body2\">\n {api.isOpenApi ? '—' : GAP}\n </Typography>\n )}\n\n <Typography variant=\"body1\" style={{ marginTop: 8 }}>\n <strong>Environments:</strong>\n </Typography>\n {api.environments.length ? (\n <ul style={{ margin: 0, paddingLeft: 20 }}>\n {api.environments.map((environment, i) => (\n <li key={i}>\n <Typography variant=\"body2\">\n {environment.name ||\n environment.description ||\n environment.url ||\n '—'}\n </Typography>\n </li>\n ))}\n </ul>\n ) : (\n <Typography variant=\"body2\">\n {api.isOpenApi ? '—' : GAP}\n </Typography>\n )}\n </CardContent>\n </Card>\n </Grid>\n ))}\n </Grid>\n ) : (\n <ul style={{ margin: 0, paddingLeft: 20 }}>\n {apiEntityRefs.map(apiRef => {\n const parsed = parseEntityRef(apiRef, {\n defaultKind: 'API',\n defaultNamespace: namespace ?? 'default',\n });\n\n return (\n <li key={apiRef}>\n <EntityRefLink entityRef={apiRef} title={parsed.name} />\n </li>\n );\n })}\n </ul>\n )}\n </DialogContent>\n\n <DialogActions>\n <Button\n onClick={onClose}\n color=\"default\"\n style={{ minWidth: 'auto', padding: 0, textTransform: 'none' }}\n >\n <Typography variant=\"h6\" style={{ textDecoration: 'underline' }}>\n X Close\n </Typography>\n </Button>\n </DialogActions>\n </Dialog>\n );\n};"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bcgov/plugin-catalog-dataset",
|
|
3
|
-
"version": "0.2.10-feature.aps-4600-use-built-in-api-entity.
|
|
3
|
+
"version": "0.2.10-feature.aps-4600-use-built-in-api-entity.cb2d711a",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"@backstage/core-components": "^0.17.3",
|
|
36
36
|
"@backstage/core-plugin-api": "^1.10.9",
|
|
37
37
|
"@backstage/theme": "^0.6.6",
|
|
38
|
-
"@bcgov/plugin-catalog-common-bc-data-catalogue": "0.2.10-feature.aps-4600-use-built-in-api-entity.
|
|
38
|
+
"@bcgov/plugin-catalog-common-bc-data-catalogue": "0.2.10-feature.aps-4600-use-built-in-api-entity.cb2d711a",
|
|
39
39
|
"@material-ui/core": "^4.9.13",
|
|
40
40
|
"@material-ui/icons": "^4.9.1",
|
|
41
41
|
"@material-ui/lab": "^4.0.0-alpha.61",
|