@bcgov/plugin-catalog-dataset 0.2.5-feature.test-aps-4105.2176aa9c → 0.2.6-main.91ee0be1
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.
|
@@ -4,8 +4,8 @@ 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
6
|
import { useAsync } from 'react-use';
|
|
7
|
-
import { getOpenApiSummary } from '@bcgov/plugin-catalog-common-bc-data-catalogue';
|
|
8
7
|
|
|
8
|
+
const GAP = "Gap";
|
|
9
9
|
const DatasetApisDialog = ({
|
|
10
10
|
open,
|
|
11
11
|
onClose,
|
|
@@ -39,19 +39,24 @@ const DatasetApisDialog = ({
|
|
|
39
39
|
if (!open || !apiEntities?.length) {
|
|
40
40
|
return [];
|
|
41
41
|
}
|
|
42
|
-
return
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
42
|
+
return apiEntities.map((api) => {
|
|
43
|
+
const apiSpec = api.spec ?? {};
|
|
44
|
+
const technicalReference = apiSpec.technicalReference ?? {};
|
|
45
|
+
const environments = Array.isArray(apiSpec.environments) ? apiSpec.environments : [];
|
|
46
|
+
const isOpenApi = api.kind === "OpenApi";
|
|
47
|
+
return {
|
|
48
|
+
entityRef: stringifyEntityRef(api),
|
|
49
|
+
title: api.metadata.title ?? api.metadata.name,
|
|
50
|
+
type: apiSpec.type ?? "\u2014",
|
|
51
|
+
security: isOpenApi && Array.isArray(technicalReference.authentication) ? technicalReference.authentication : [],
|
|
52
|
+
environments: isOpenApi ? environments.map((environment) => ({
|
|
53
|
+
name: typeof environment?.name === "string" ? environment.name : void 0,
|
|
54
|
+
url: typeof environment?.url === "string" ? environment.url : void 0,
|
|
55
|
+
description: typeof environment?.description === "string" ? environment.description : void 0
|
|
56
|
+
})) : [],
|
|
57
|
+
isOpenApi
|
|
58
|
+
};
|
|
59
|
+
});
|
|
55
60
|
},
|
|
56
61
|
[open, apiEntities]
|
|
57
62
|
);
|
|
@@ -106,9 +111,9 @@ const DatasetApisDialog = ({
|
|
|
106
111
|
api.type
|
|
107
112
|
] }),
|
|
108
113
|
/* @__PURE__ */ jsx(Typography, { variant: "body1", style: { marginTop: 8 }, children: /* @__PURE__ */ jsx("strong", { children: "Security:" }) }),
|
|
109
|
-
api.security.length ? /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: 20 }, children: api.security.map((
|
|
114
|
+
api.security.length ? /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: 20 }, children: api.security.map((security, i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Typography, { variant: "body2", children: security }) }, i)) }) : /* @__PURE__ */ jsx(Typography, { variant: "body2", children: api.isOpenApi ? "\u2014" : GAP }),
|
|
110
115
|
/* @__PURE__ */ jsx(Typography, { variant: "body1", style: { marginTop: 8 }, children: /* @__PURE__ */ jsx("strong", { children: "Environments:" }) }),
|
|
111
|
-
api.environments.length ? /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: 20 }, children: api.environments.map((
|
|
116
|
+
api.environments.length ? /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: 20 }, children: api.environments.map((environment, i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(Typography, { variant: "body2", children: environment.name || environment.description || environment.url || "\u2014" }) }, i)) }) : /* @__PURE__ */ jsx(Typography, { variant: "body2", children: api.isOpenApi ? "\u2014" : GAP })
|
|
112
117
|
] })
|
|
113
118
|
}
|
|
114
119
|
) }, api.entityRef)) }) : /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: 20 }, children: apiEntityRefs.map((apiRef) => {
|
|
@@ -116,13 +121,7 @@ const DatasetApisDialog = ({
|
|
|
116
121
|
defaultKind: "API",
|
|
117
122
|
defaultNamespace: namespace ?? "default"
|
|
118
123
|
});
|
|
119
|
-
return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
|
|
120
|
-
EntityRefLink,
|
|
121
|
-
{
|
|
122
|
-
entityRef: apiRef,
|
|
123
|
-
title: parsed.name
|
|
124
|
-
}
|
|
125
|
-
) }, apiRef);
|
|
124
|
+
return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(EntityRefLink, { entityRef: apiRef, title: parsed.name }) }, apiRef);
|
|
126
125
|
}) })
|
|
127
126
|
] }),
|
|
128
127
|
/* @__PURE__ */ jsx(DialogActions, { children: /* @__PURE__ */ jsx(
|
|
@@ -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';\nimport { getOpenApiSummary } from '@bcgov/plugin-catalog-common-bc-data-catalogue';\n\ntype Props = {\n open: boolean;\n onClose: () => void;\n datasetTitle: string;\n apiEntityRefs: string[];\n namespace?: string;\n};\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 () => {\n if (!open || !apiEntities?.length) {\n return [];\n }\n\n return await Promise.all(\n apiEntities.map(async api => {\n const apiSpec = (api.spec ?? {}) as Record<string, any>;\n const openApiSummary = await getOpenApiSummary(apiSpec.definition);\n\n return {\n entityRef: stringifyEntityRef(api),\n title: api.metadata.title ?? api.metadata.name,\n type: apiSpec.type ?? '—',\n security: openApiSummary.securityRequirements ?? [],\n environments: openApiSummary.environments ?? [],\n };\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\">\n Dataset: {datasetTitle}\n </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\">\n Type: {api.type}\n </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((s: string, i: number) => (\n <li key={i}>\n <Typography variant=\"body2\">{s}</Typography>\n </li>\n ))}\n </ul>\n ) : (\n <Typography variant=\"body2\">—</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((e: string, i: number) => (\n <li key={i}>\n <Typography variant=\"body2\">{e}</Typography>\n </li>\n ))}\n </ul>\n ) : (\n <Typography variant=\"body2\">—</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\n entityRef={apiRef}\n title={parsed.name}\n />\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 { 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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bcgov/plugin-catalog-dataset",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6-main.91ee0be1",
|
|
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.
|
|
38
|
+
"@bcgov/plugin-catalog-common-bc-data-catalogue": "0.2.6-main.91ee0be1",
|
|
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",
|