@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.
@@ -1,10 +1,11 @@
1
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
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__ */ jsx(EntityLayout, { children: /* @__PURE__ */ jsx(EntityLayout.Route, { path: "/", title: "Overview", children: /* @__PURE__ */ jsxs(Fragment, { children: [
42
- /* @__PURE__ */ jsx(EntityRelationWarning, {}),
43
- /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 3, children: [
44
- /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 4, children: /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsxs(CardContent, { children: [
45
- /* @__PURE__ */ jsx(Typography, { variant: "body2", style: { marginBottom: 8 }, children: "On this page" }),
46
- /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#overview", children: "Overview" }) }),
47
- /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#about-this-dataset", children: "About this Dataset" }) }),
48
- entity.metadata.tags?.includes("authoritative-data-register") ? /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#authoritative-designation", children: "Authoritative Designation" }) }) : null,
49
- /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#access-methods", children: "Access Methods" }) }),
50
- /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#schema", children: "Schema" }) }),
51
- /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#fields-and-definitions", children: "Fields & definitions" }) }),
52
- /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#lineage-and-quality", children: "Lineage and Quality" }) }),
53
- /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#versioning-and-change-governance", children: "Versioning and Change Governance" }) }),
54
- /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#support", children: "Support" }) }),
55
- /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { href: "#related-resources", children: "Related Resources" }) })
56
- ] }) }) }),
57
- /* @__PURE__ */ jsxs(Grid, { item: true, xs: 12, md: 8, children: [
58
- /* @__PURE__ */ jsx("div", { id: "overview", children: /* @__PURE__ */ jsx(
59
- MainCard,
60
- {
61
- entity,
62
- spec,
63
- ownerLabel,
64
- onViewApis: () => setApisOpen(true)
65
- }
66
- ) }),
67
- /* @__PURE__ */ jsx("div", { id: "about-this-dataset", children: /* @__PURE__ */ jsx(AboutDatasetCard, { description: spec.about?.description }) }),
68
- entity.metadata.tags?.includes("authoritative-data-register") ? /* @__PURE__ */ jsx("div", { id: "authoritative-designation", children: /* @__PURE__ */ jsx(AuthoritativeDesignationCard, {}) }) : null,
69
- /* @__PURE__ */ jsx("div", { id: "access-methods", children: /* @__PURE__ */ jsx(
70
- AccessMethodsCard,
71
- {
72
- accessMethods: spec.accessMethods,
73
- apiEntityRefs
74
- }
75
- ) }),
76
- /* @__PURE__ */ jsx("div", { id: "schema", children: /* @__PURE__ */ jsx(SchemaCard, { tables: spec.schema?.tables }) }),
77
- /* @__PURE__ */ jsx("div", { id: "fields-and-definitions", children: /* @__PURE__ */ jsx(FieldsAndDefinitionCard, {}) }),
78
- /* @__PURE__ */ jsx("div", { id: "lineage-and-quality", children: /* @__PURE__ */ jsx(
79
- LineageAndQualityCard,
80
- {
81
- sourceSystem: spec.lineage?.sourceSystem,
82
- transformation: spec.lineage?.transformation,
83
- validation: spec.quality?.validation,
84
- refresh: spec.lineage?.refresh,
85
- qualityControls: spec.quality?.controls
86
- }
87
- ) }),
88
- /* @__PURE__ */ jsx("div", { id: "versioning-and-change-governance", children: /* @__PURE__ */ jsx(
89
- VersioningAndChangeGovernanceCard,
90
- {
91
- currentVersion: spec.versioning?.currentVersion,
92
- initialRelease: spec.versioning?.initialRelease,
93
- lastUpdated: spec.versioning?.lastUpdated,
94
- versioningDescription: spec.versioning?.description,
95
- governanceDescription: spec.governance?.description
96
- }
97
- ) }),
98
- /* @__PURE__ */ jsx("div", { id: "support", children: /* @__PURE__ */ jsx(SupportCard, { support: spec.support }) }),
99
- /* @__PURE__ */ jsx("div", { id: "related-resources", children: /* @__PURE__ */ jsx(
100
- RelatedResourcesCard,
101
- {
102
- relatedResources: spec.relatedResources
103
- }
104
- ) })
105
- ] })
106
- ] }),
107
- /* @__PURE__ */ jsx(
108
- DatasetApisDialog,
109
- {
110
- open: apisOpen,
111
- onClose: () => setApisOpen(false),
112
- datasetTitle,
113
- apiEntityRefs,
114
- namespace: entity.metadata.namespace
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 &amp; 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 &amp; 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 technicalReference = apiSpec.technicalReference ?? {};
45
- const environments = Array.isArray(apiSpec.environments) ? apiSpec.environments : [];
46
- const isOpenApi = api.kind === "OpenApi";
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 ?? "\u2014",
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":"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"}
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.91b201f2",
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.91b201f2",
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",