@backstage/plugin-catalog-unprocessed-entities 0.1.9-next.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,52 @@
1
1
  # @backstage/plugin-catalog-unprocessed-entities
2
2
 
3
+ ## 0.2.1
4
+
5
+ ### Patch Changes
6
+
7
+ - e8f026a: Use ESM exports of react-use library
8
+ - Updated dependencies
9
+ - @backstage/core-components@0.14.2
10
+ - @backstage/core-plugin-api@1.9.1
11
+ - @backstage/catalog-model@1.4.5
12
+ - @backstage/errors@1.2.4
13
+
14
+ ## 0.2.0
15
+
16
+ ### Minor Changes
17
+
18
+ - 924c1ac: **BREAKING**- the `@backstage/plugin-catalog-backend-module-unprocessed` constructor is now private, and have been moved to using the static `.create` method instead which now requires a `PermissionService` and `DiscoveryService`.
19
+
20
+ If you're using this module in the old backend system you'll need to migrate to using the `.create` method and pass in the new required parameters in `packages/backend/src/plugins/catalog.ts`.
21
+
22
+ No changes should be required if you're using the new backend system.
23
+
24
+ ```diff
25
+ - const unprocessed = new UnprocessedEntitiesModule(
26
+ - await env.database.getClient(),
27
+ - router,
28
+ - );
29
+ + const unprocessed = UnprocessedEntitiesModule.create({
30
+ + database: await env.database.getClient(),
31
+ + router,
32
+ + permissions: env.permissions,
33
+ + discovery: env.discovery,
34
+ + });
35
+
36
+ unprocessed.registerRoutes();
37
+ ```
38
+
39
+ Adds the ability to delete an unprocessed entity from the `refresh_state` table. This change requires enabling permissions for your Backstage instance.
40
+
41
+ ### Patch Changes
42
+
43
+ - 2b397fe: Added the `no-top-level-material-ui-4-imports` ESLint rule to aid with the migration to Material UI v5
44
+ - Updated dependencies
45
+ - @backstage/core-components@0.14.1
46
+ - @backstage/errors@1.2.4
47
+ - @backstage/catalog-model@1.4.5
48
+ - @backstage/core-plugin-api@1.9.1
49
+
3
50
  ## 0.1.9-next.2
4
51
 
5
52
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -89,6 +89,10 @@ interface CatalogUnprocessedEntitiesApi {
89
89
  * Returns a list of entities with state 'failed'
90
90
  */
91
91
  failed(): Promise<CatalogUnprocessedEntitiesApiResponse>;
92
+ /**
93
+ * Deletes an entity from the refresh_state table
94
+ */
95
+ delete(entityId: string): Promise<void>;
92
96
  }
93
97
 
94
- export { CatalogUnprocessedEntitiesApi, CatalogUnprocessedEntitiesApiResponse, CatalogUnprocessedEntitiesPage, UnprocessedEntitiesContent, UnprocessedEntity, UnprocessedEntityCache, UnprocessedEntityError, catalogUnprocessedEntitiesApiRef, catalogUnprocessedEntitiesPlugin };
98
+ export { type CatalogUnprocessedEntitiesApi, type CatalogUnprocessedEntitiesApiResponse, CatalogUnprocessedEntitiesPage, UnprocessedEntitiesContent, type UnprocessedEntity, type UnprocessedEntityCache, type UnprocessedEntityError, catalogUnprocessedEntitiesApiRef, catalogUnprocessedEntitiesPlugin };
package/dist/index.esm.js CHANGED
@@ -1,17 +1,22 @@
1
- import { createRouteRef, createApiRef, createPlugin, createApiFactory, discoveryApiRef, fetchApiRef, createRoutableExtension, useApi } from '@backstage/core-plugin-api';
1
+ import { createRouteRef, createApiRef, createPlugin, createApiFactory, discoveryApiRef, fetchApiRef, createRoutableExtension, useApi, alertApiRef } from '@backstage/core-plugin-api';
2
2
  import { ResponseError } from '@backstage/errors';
3
3
  import React, { useState } from 'react';
4
4
  import { CodeSnippet, Progress, ErrorPanel, Table, MarkdownContent, Page, Header, Content } from '@backstage/core-components';
5
- import { makeStyles as makeStyles$1, Typography, Box, Tab } from '@material-ui/core';
6
- import { TabContext, TabList, TabPanel } from '@material-ui/lab';
5
+ import Tab from '@material-ui/core/Tab';
6
+ import { makeStyles, createStyles } from '@material-ui/core/styles';
7
+ import TabContext from '@material-ui/lab/TabContext';
8
+ import TabList from '@material-ui/lab/TabList';
9
+ import TabPanel from '@material-ui/lab/TabPanel';
10
+ import Box from '@material-ui/core/Box';
11
+ import Typography from '@material-ui/core/Typography';
12
+ import IconButton from '@material-ui/core/IconButton';
7
13
  import Dialog from '@material-ui/core/Dialog';
8
14
  import DialogContent from '@material-ui/core/DialogContent';
9
15
  import DialogTitle from '@material-ui/core/DialogTitle';
10
- import IconButton from '@material-ui/core/IconButton';
11
- import { makeStyles, createStyles } from '@material-ui/core/styles';
12
16
  import CloseIcon from '@material-ui/icons/Close';
13
17
  import DescriptionIcon from '@material-ui/icons/Description';
14
- import useAsync from 'react-use/lib/useAsync';
18
+ import useAsync from 'react-use/esm/useAsync';
19
+ import DeleteIcon from '@material-ui/icons/Delete';
15
20
 
16
21
  const rootRouteRef = createRouteRef({
17
22
  id: "catalog-unprocessed-entities"
@@ -31,7 +36,7 @@ class CatalogUnprocessedEntitiesClient {
31
36
  if (!resp.ok) {
32
37
  throw await ResponseError.fromResponse(resp);
33
38
  }
34
- return await resp.json();
39
+ return resp.status === 204 ? resp : await resp.json();
35
40
  }
36
41
  async pending() {
37
42
  return await this.fetch("entities/unprocessed/pending");
@@ -39,6 +44,11 @@ class CatalogUnprocessedEntitiesClient {
39
44
  async failed() {
40
45
  return await this.fetch("entities/unprocessed/failed");
41
46
  }
47
+ async delete(entityId) {
48
+ await this.fetch(`entities/unprocessed/delete/${entityId}`, {
49
+ method: "DELETE"
50
+ });
51
+ }
42
52
  }
43
53
 
44
54
  const catalogUnprocessedEntitiesPlugin = createPlugin({
@@ -112,7 +122,7 @@ const EntityDialog = ({ entity }) => {
112
122
  )), /* @__PURE__ */ React.createElement(DialogContent, null, dialogContent())));
113
123
  };
114
124
 
115
- const useStyles$2 = makeStyles$1((theme) => ({
125
+ const useStyles$2 = makeStyles((theme) => ({
116
126
  errorBox: {
117
127
  color: theme.palette.status.error,
118
128
  backgroundColor: theme.palette.errorBackground,
@@ -144,6 +154,7 @@ const RenderErrorContext = ({
144
154
  return null;
145
155
  };
146
156
  const FailedEntities = () => {
157
+ var _a;
147
158
  const classes = useStyles$2();
148
159
  const unprocessedApi = useApi(catalogUnprocessedEntitiesApiRef);
149
160
  const {
@@ -152,12 +163,31 @@ const FailedEntities = () => {
152
163
  value: data
153
164
  } = useAsync(async () => await unprocessedApi.failed());
154
165
  const [, setSelectedSearchTerm] = useState("");
166
+ const unprocessedEntityApi = useApi(catalogUnprocessedEntitiesApiRef);
167
+ const alertApi = useApi(alertApiRef);
155
168
  if (loading) {
156
169
  return /* @__PURE__ */ React.createElement(Progress, null);
157
170
  }
158
171
  if (error) {
159
172
  return /* @__PURE__ */ React.createElement(ErrorPanel, { error });
160
173
  }
174
+ const handleDelete = async ({
175
+ entityId,
176
+ entityRef
177
+ }) => {
178
+ try {
179
+ await unprocessedEntityApi.delete(entityId);
180
+ alertApi.post({
181
+ message: `Entity ${entityRef} has been deleted`,
182
+ severity: "success"
183
+ });
184
+ } catch (e) {
185
+ alertApi.post({
186
+ message: `Ran into an issue when deleting ${entityRef}. Please try again later.`,
187
+ severity: "error"
188
+ });
189
+ }
190
+ };
161
191
  const columns = [
162
192
  {
163
193
  title: /* @__PURE__ */ React.createElement(Typography, null, "entityRef"),
@@ -177,28 +207,45 @@ const FailedEntities = () => {
177
207
  sorting: true,
178
208
  field: "unprocessed_entity.spec.owner",
179
209
  render: (rowData) => {
180
- var _a;
181
- return ((_a = rowData.unprocessed_entity.spec) == null ? void 0 : _a.owner) || "unknown";
210
+ var _a2;
211
+ return ((_a2 = rowData.unprocessed_entity.spec) == null ? void 0 : _a2.owner) || "unknown";
182
212
  }
183
213
  },
184
214
  {
185
215
  title: /* @__PURE__ */ React.createElement(Typography, null, "Raw"),
186
216
  sorting: false,
187
217
  render: (rowData) => /* @__PURE__ */ React.createElement(EntityDialog, { entity: rowData })
218
+ },
219
+ {
220
+ title: /* @__PURE__ */ React.createElement(Typography, null, "Actions"),
221
+ render: (rowData) => {
222
+ const { entity_id, entity_ref } = rowData;
223
+ return /* @__PURE__ */ React.createElement(
224
+ IconButton,
225
+ {
226
+ "aria-label": "delete",
227
+ onClick: async () => await handleDelete({
228
+ entityId: entity_id,
229
+ entityRef: entity_ref
230
+ })
231
+ },
232
+ /* @__PURE__ */ React.createElement(DeleteIcon, { fontSize: "small", "data-testid": "delete-icon" })
233
+ );
234
+ }
188
235
  }
189
236
  ];
190
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
237
+ return /* @__PURE__ */ React.createElement(
191
238
  Table,
192
239
  {
193
240
  options: { pageSize: 20, search: true },
194
241
  columns,
195
- data: (data == null ? void 0 : data.entities) || [],
242
+ data: (_a = data == null ? void 0 : data.entities) != null ? _a : [],
196
243
  emptyContent: /* @__PURE__ */ React.createElement(Typography, { className: classes.successMessage }, "No failed entities found"),
197
244
  onSearchChange: (searchTerm) => setSelectedSearchTerm(searchTerm),
198
245
  detailPanel: ({ rowData }) => {
199
246
  const errors = rowData.errors;
200
- return /* @__PURE__ */ React.createElement(React.Fragment, null, errors == null ? void 0 : errors.map((e) => {
201
- return /* @__PURE__ */ React.createElement(Box, { className: classes.errorBox }, /* @__PURE__ */ React.createElement(Typography, { className: classes.errorTitle }, e.name), /* @__PURE__ */ React.createElement(MarkdownContent, { content: e.message }), /* @__PURE__ */ React.createElement(
247
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, errors == null ? void 0 : errors.map((e, idx) => {
248
+ return /* @__PURE__ */ React.createElement(Box, { key: idx, className: classes.errorBox }, /* @__PURE__ */ React.createElement(Typography, { className: classes.errorTitle }, e.name), /* @__PURE__ */ React.createElement(MarkdownContent, { content: e.message }), /* @__PURE__ */ React.createElement(
202
249
  RenderErrorContext,
203
250
  {
204
251
  error: e,
@@ -208,10 +255,10 @@ const FailedEntities = () => {
208
255
  }));
209
256
  }
210
257
  }
211
- ));
258
+ );
212
259
  };
213
260
 
214
- const useStyles$1 = makeStyles$1((theme) => ({
261
+ const useStyles$1 = makeStyles((theme) => ({
215
262
  successMessage: {
216
263
  background: theme.palette.infoBackground,
217
264
  color: theme.palette.infoText,
@@ -274,7 +321,7 @@ const PendingEntities = () => {
274
321
  ));
275
322
  };
276
323
 
277
- const useStyles = makeStyles$1(() => ({
324
+ const useStyles = makeStyles(() => ({
278
325
  tabPanel: {
279
326
  paddingLeft: "0px",
280
327
  paddingRight: "0px"
@@ -294,8 +341,8 @@ const UnprocessedEntities = () => {
294
341
 
295
342
  var UnprocessedEntities$1 = /*#__PURE__*/Object.freeze({
296
343
  __proto__: null,
297
- UnprocessedEntitiesContent: UnprocessedEntitiesContent,
298
- UnprocessedEntities: UnprocessedEntities
344
+ UnprocessedEntities: UnprocessedEntities,
345
+ UnprocessedEntitiesContent: UnprocessedEntitiesContent
299
346
  });
300
347
 
301
348
  export { CatalogUnprocessedEntitiesPage, UnprocessedEntitiesContent, catalogUnprocessedEntitiesApiRef, catalogUnprocessedEntitiesPlugin };
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/routes.ts","../src/api/index.ts","../src/plugin.ts","../src/components/EntityDialog.tsx","../src/components/FailedEntities.tsx","../src/components/PendingEntities.tsx","../src/components/UnprocessedEntities.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createRouteRef } from '@backstage/core-plugin-api';\n\nexport const rootRouteRef = createRouteRef({\n id: 'catalog-unprocessed-entities',\n});\n","/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n DiscoveryApi,\n createApiRef,\n FetchApi,\n} from '@backstage/core-plugin-api';\nimport { ResponseError } from '@backstage/errors';\nimport { UnprocessedEntity } from '../types';\n\n/**\n * {@link @backstage/core-plugin-api#ApiRef} for the {@link CatalogUnprocessedEntitiesApi}\n *\n * @public\n */\nexport const catalogUnprocessedEntitiesApiRef =\n createApiRef<CatalogUnprocessedEntitiesApi>({\n id: 'plugin.catalog-unprocessed-entities.service',\n });\n\n/**\n * Response expected by the {@link CatalogUnprocessedEntitiesApi}\n *\n * @public\n */\nexport type CatalogUnprocessedEntitiesApiResponse = {\n entities: UnprocessedEntity[];\n};\n\n/**\n * Interface for the CatalogUnprocessedEntitiesApi.\n *\n * @public\n */\nexport interface CatalogUnprocessedEntitiesApi {\n /**\n * Returns a list of entities with state 'pending'\n */\n pending(): Promise<CatalogUnprocessedEntitiesApiResponse>;\n /**\n * Returns a list of entities with state 'failed'\n */\n failed(): Promise<CatalogUnprocessedEntitiesApiResponse>;\n}\n\n/**\n * Default API implementation for the Catalog Unprocessed Entities plugin\n *\n * @public\n */\nexport class CatalogUnprocessedEntitiesClient\n implements CatalogUnprocessedEntitiesApi\n{\n constructor(public discovery: DiscoveryApi, public fetchApi: FetchApi) {}\n\n private async fetch<T>(path: string, init?: RequestInit): Promise<T> {\n const url = await this.discovery.getBaseUrl('catalog');\n const resp = await this.fetchApi.fetch(`${url}/${path}`, init);\n if (!resp.ok) {\n throw await ResponseError.fromResponse(resp);\n }\n\n return await resp.json();\n }\n\n async pending(): Promise<CatalogUnprocessedEntitiesApiResponse> {\n return await this.fetch('entities/unprocessed/pending');\n }\n\n async failed(): Promise<CatalogUnprocessedEntitiesApiResponse> {\n return await this.fetch('entities/unprocessed/failed');\n }\n}\n","/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n createApiFactory,\n createPlugin,\n createRoutableExtension,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\n\nimport { rootRouteRef } from './routes';\nimport {\n CatalogUnprocessedEntitiesClient,\n catalogUnprocessedEntitiesApiRef,\n} from './api';\n\n/**\n * Plugin entry point\n *\n * @public\n */\nexport const catalogUnprocessedEntitiesPlugin = createPlugin({\n id: 'catalog-unprocessed-entities',\n routes: {\n root: rootRouteRef,\n },\n apis: [\n createApiFactory({\n api: catalogUnprocessedEntitiesApiRef,\n deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef },\n factory: ({ discoveryApi, fetchApi }) =>\n new CatalogUnprocessedEntitiesClient(discoveryApi, fetchApi),\n }),\n ],\n});\n\n/**\n * Tool page for the Catalog Unprocessed Entities Plugin\n *\n * @public\n */\nexport const CatalogUnprocessedEntitiesPage =\n catalogUnprocessedEntitiesPlugin.provide(\n createRoutableExtension({\n name: 'CatalogUnprocessedEntitiesPage',\n component: () =>\n import('./components/UnprocessedEntities').then(\n m => m.UnprocessedEntities,\n ),\n mountPoint: rootRouteRef,\n }),\n );\n","/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React, { useState } from 'react';\n\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport IconButton from '@material-ui/core/IconButton';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport DescriptionIcon from '@material-ui/icons/Description';\n\nimport { UnprocessedEntity } from './../types';\nimport { CodeSnippet } from '@backstage/core-components';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n entity: {\n overflow: 'scroll',\n width: '100%',\n },\n codeBox: {\n border: '1px solid black',\n padding: '1em',\n },\n }),\n);\n\nexport const EntityDialog = ({ entity }: { entity: UnprocessedEntity }) => {\n const [open, setOpen] = useState(false);\n const classes = useStyles();\n\n const openDialog = () => {\n setOpen(true);\n };\n\n const closeDialog = () => {\n setOpen(false);\n };\n\n const dialogContent = () => {\n return (\n <CodeSnippet\n language=\"json\"\n showLineNumbers\n text={JSON.stringify(entity, null, 4)}\n />\n );\n };\n\n return (\n <>\n <IconButton color=\"primary\" onClick={openDialog}>\n <DescriptionIcon />\n </IconButton>\n <Dialog fullWidth open={open} onClose={closeDialog}>\n <DialogTitle id=\"dialog-title\">\n <IconButton\n aria-label=\"close\"\n className={classes.closeButton}\n onClick={closeDialog}\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n <DialogContent>{dialogContent()}</DialogContent>\n </Dialog>\n </>\n );\n};\n","/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React, { useState } from 'react';\n\nimport {\n ErrorPanel,\n MarkdownContent,\n Progress,\n Table,\n TableColumn,\n} from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { Box, Theme, Typography, makeStyles } from '@material-ui/core';\n\nimport { UnprocessedEntity } from '../types';\nimport { EntityDialog } from './EntityDialog';\nimport { catalogUnprocessedEntitiesApiRef } from '../api';\nimport useAsync from 'react-use/lib/useAsync';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n errorBox: {\n color: theme.palette.status.error,\n backgroundColor: theme.palette.errorBackground,\n padding: '1em',\n margin: '1em',\n border: `1px solid ${theme.palette.status.error}`,\n },\n errorTitle: {\n width: '100%',\n fontWeight: 'bold',\n },\n successMessage: {\n background: theme.palette.infoBackground,\n color: theme.palette.infoText,\n padding: theme.spacing(2),\n },\n}));\n\nconst RenderErrorContext = ({\n error,\n rowData,\n}: {\n error: { message: string };\n rowData: UnprocessedEntity;\n}) => {\n if (error.message.includes('tags.')) {\n return (\n <>\n <Typography>Tags</Typography>\n <ul>\n {rowData.unprocessed_entity.metadata.tags?.map(t => (\n <li>{t}</li>\n ))}\n </ul>\n </>\n );\n }\n\n if (error.message.includes('metadata.name')) {\n return (\n <>\n <Typography>Name</Typography>\n <Typography variant=\"caption\">\n {rowData.unprocessed_entity.metadata.name}\n </Typography>\n </>\n );\n }\n\n return null;\n};\n\nexport const FailedEntities = () => {\n const classes = useStyles();\n const unprocessedApi = useApi(catalogUnprocessedEntitiesApiRef);\n const {\n loading,\n error,\n value: data,\n } = useAsync(async () => await unprocessedApi.failed());\n const [, setSelectedSearchTerm] = useState<string>('');\n\n if (loading) {\n return <Progress />;\n }\n if (error) {\n return <ErrorPanel error={error} />;\n }\n\n const columns: TableColumn[] = [\n {\n title: <Typography>entityRef</Typography>,\n sorting: true,\n field: 'entity_ref',\n customFilterAndSearch: (query, row: any) =>\n row.entity_ref\n .toLocaleUpperCase('en-US')\n .includes(query.toLocaleUpperCase('en-US')),\n render: (rowData: UnprocessedEntity | {}) =>\n (rowData as UnprocessedEntity).entity_ref,\n },\n {\n title: <Typography>Kind</Typography>,\n sorting: true,\n field: 'kind',\n render: (rowData: UnprocessedEntity | {}) =>\n (rowData as UnprocessedEntity).unprocessed_entity.kind,\n },\n {\n title: <Typography>Owner</Typography>,\n sorting: true,\n field: 'unprocessed_entity.spec.owner',\n render: (rowData: UnprocessedEntity | {}) =>\n (rowData as UnprocessedEntity).unprocessed_entity.spec?.owner ||\n 'unknown',\n },\n {\n title: <Typography>Raw</Typography>,\n sorting: false,\n render: (rowData: UnprocessedEntity | {}) => (\n <EntityDialog entity={rowData as UnprocessedEntity} />\n ),\n },\n ];\n return (\n <>\n <Table\n options={{ pageSize: 20, search: true }}\n columns={columns}\n data={data?.entities || []}\n emptyContent={\n <Typography className={classes.successMessage}>\n No failed entities found\n </Typography>\n }\n onSearchChange={(searchTerm: string) =>\n setSelectedSearchTerm(searchTerm)\n }\n detailPanel={({ rowData }) => {\n const errors = (rowData as UnprocessedEntity).errors;\n return (\n <>\n {errors?.map(e => {\n return (\n <Box className={classes.errorBox}>\n <Typography className={classes.errorTitle}>\n {e.name}\n </Typography>\n <MarkdownContent content={e.message} />\n <RenderErrorContext\n error={e}\n rowData={rowData as UnprocessedEntity}\n />\n </Box>\n );\n })}\n </>\n );\n }}\n />\n </>\n );\n};\n","/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React, { useState } from 'react';\n\nimport {\n ErrorPanel,\n Progress,\n TableColumn,\n Table,\n} from '@backstage/core-components';\nimport { Theme, Typography, makeStyles } from '@material-ui/core';\n\nimport { UnprocessedEntity } from '../types';\n\nimport { EntityDialog } from './EntityDialog';\nimport { useApi } from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/lib/useAsync';\nimport { catalogUnprocessedEntitiesApiRef } from '../api';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n successMessage: {\n background: theme.palette.infoBackground,\n color: theme.palette.infoText,\n padding: theme.spacing(2),\n },\n}));\n\nexport const PendingEntities = () => {\n const classes = useStyles();\n const unprocessedApi = useApi(catalogUnprocessedEntitiesApiRef);\n const {\n loading,\n error,\n value: data,\n } = useAsync(async () => await unprocessedApi.pending());\n const [, setSelectedSearchTerm] = useState<string>('');\n\n if (loading) {\n return <Progress />;\n }\n if (error) {\n return <ErrorPanel error={error} />;\n }\n\n const columns: TableColumn[] = [\n {\n title: <Typography>entityRef</Typography>,\n sorting: true,\n field: 'entity_ref',\n customFilterAndSearch: (query, row: any) =>\n row.entity_ref\n .toLocaleUpperCase('en-US')\n .includes(query.toLocaleUpperCase('en-US')),\n render: (rowData: UnprocessedEntity | {}) =>\n (rowData as UnprocessedEntity).entity_ref,\n },\n {\n title: <Typography>Kind</Typography>,\n sorting: true,\n field: 'kind',\n render: (rowData: UnprocessedEntity | {}) =>\n (rowData as UnprocessedEntity).unprocessed_entity.kind,\n },\n {\n title: <Typography>Owner</Typography>,\n sorting: true,\n field: 'unprocessed_entity.spec.owner',\n render: (rowData: UnprocessedEntity | {}) =>\n (rowData as UnprocessedEntity).unprocessed_entity.spec?.owner ||\n 'unknown',\n },\n {\n title: <Typography>Raw</Typography>,\n sorting: false,\n render: (rowData: UnprocessedEntity | {}) => (\n <EntityDialog entity={rowData as UnprocessedEntity} />\n ),\n },\n ];\n return (\n <>\n <Table\n options={{ pageSize: 20 }}\n columns={columns}\n data={data?.entities || []}\n onSearchChange={(searchTerm: string) =>\n setSelectedSearchTerm(searchTerm)\n }\n emptyContent={\n <Typography className={classes.successMessage}>\n No pending entities found\n </Typography>\n }\n />\n </>\n );\n};\n","/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React, { useState } from 'react';\n\nimport { Page, Header, Content } from '@backstage/core-components';\nimport { Tab, makeStyles } from '@material-ui/core';\nimport { TabContext, TabList, TabPanel } from '@material-ui/lab';\n\nimport { FailedEntities } from './FailedEntities';\nimport { PendingEntities } from './PendingEntities';\n\nconst useStyles = makeStyles(() => ({\n tabPanel: {\n paddingLeft: '0px',\n paddingRight: '0px',\n },\n}));\n\n/** @public */\nexport const UnprocessedEntitiesContent = () => {\n const classes = useStyles();\n const [tab, setTab] = useState('failed');\n const handleChange = (_event: React.ChangeEvent<{}>, tabValue: string) => {\n setTab(tabValue);\n };\n\n return (\n <TabContext value={tab}>\n <TabList onChange={handleChange}>\n <Tab label=\"Failed\" value=\"failed\" />\n <Tab label=\"Pending\" value=\"pending\" />\n </TabList>\n <TabPanel value=\"failed\" className={classes.tabPanel}>\n <FailedEntities />\n </TabPanel>\n <TabPanel value=\"pending\" className={classes.tabPanel}>\n <PendingEntities />\n </TabPanel>\n </TabContext>\n );\n};\n\nexport const UnprocessedEntities = () => {\n return (\n <Page themeId=\"tool\">\n <Header title=\"Unprocessed Entities\" />\n <Content>\n <UnprocessedEntitiesContent />\n </Content>\n </Page>\n );\n};\n"],"names":["useStyles","makeStyles"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/routes.ts","../src/api/index.ts","../src/plugin.ts","../src/components/EntityDialog.tsx","../src/components/FailedEntities.tsx","../src/components/PendingEntities.tsx","../src/components/UnprocessedEntities.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createRouteRef } from '@backstage/core-plugin-api';\n\nexport const rootRouteRef = createRouteRef({\n id: 'catalog-unprocessed-entities',\n});\n","/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n DiscoveryApi,\n createApiRef,\n FetchApi,\n} from '@backstage/core-plugin-api';\nimport { ResponseError } from '@backstage/errors';\nimport { UnprocessedEntity } from '../types';\n\n/**\n * {@link @backstage/core-plugin-api#ApiRef} for the {@link CatalogUnprocessedEntitiesApi}\n *\n * @public\n */\nexport const catalogUnprocessedEntitiesApiRef =\n createApiRef<CatalogUnprocessedEntitiesApi>({\n id: 'plugin.catalog-unprocessed-entities.service',\n });\n\n/**\n * Response expected by the {@link CatalogUnprocessedEntitiesApi}\n *\n * @public\n */\nexport type CatalogUnprocessedEntitiesApiResponse = {\n entities: UnprocessedEntity[];\n};\n\n/**\n * Interface for the CatalogUnprocessedEntitiesApi.\n *\n * @public\n */\nexport interface CatalogUnprocessedEntitiesApi {\n /**\n * Returns a list of entities with state 'pending'\n */\n pending(): Promise<CatalogUnprocessedEntitiesApiResponse>;\n /**\n * Returns a list of entities with state 'failed'\n */\n failed(): Promise<CatalogUnprocessedEntitiesApiResponse>;\n /**\n * Deletes an entity from the refresh_state table\n */\n delete(entityId: string): Promise<void>;\n}\n\n/**\n * Default API implementation for the Catalog Unprocessed Entities plugin\n *\n * @public\n */\nexport class CatalogUnprocessedEntitiesClient\n implements CatalogUnprocessedEntitiesApi\n{\n constructor(public discovery: DiscoveryApi, public fetchApi: FetchApi) {}\n\n private async fetch<T>(path: string, init?: RequestInit): Promise<T> {\n const url = await this.discovery.getBaseUrl('catalog');\n const resp = await this.fetchApi.fetch(`${url}/${path}`, init);\n\n if (!resp.ok) {\n throw await ResponseError.fromResponse(resp);\n }\n\n return resp.status === 204 ? (resp as T) : await resp.json();\n }\n\n async pending(): Promise<CatalogUnprocessedEntitiesApiResponse> {\n return await this.fetch('entities/unprocessed/pending');\n }\n\n async failed(): Promise<CatalogUnprocessedEntitiesApiResponse> {\n return await this.fetch('entities/unprocessed/failed');\n }\n\n async delete(entityId: string): Promise<void> {\n await this.fetch(`entities/unprocessed/delete/${entityId}`, {\n method: 'DELETE',\n });\n }\n}\n","/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n createApiFactory,\n createPlugin,\n createRoutableExtension,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\n\nimport { rootRouteRef } from './routes';\nimport {\n CatalogUnprocessedEntitiesClient,\n catalogUnprocessedEntitiesApiRef,\n} from './api';\n\n/**\n * Plugin entry point\n *\n * @public\n */\nexport const catalogUnprocessedEntitiesPlugin = createPlugin({\n id: 'catalog-unprocessed-entities',\n routes: {\n root: rootRouteRef,\n },\n apis: [\n createApiFactory({\n api: catalogUnprocessedEntitiesApiRef,\n deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef },\n factory: ({ discoveryApi, fetchApi }) =>\n new CatalogUnprocessedEntitiesClient(discoveryApi, fetchApi),\n }),\n ],\n});\n\n/**\n * Tool page for the Catalog Unprocessed Entities Plugin\n *\n * @public\n */\nexport const CatalogUnprocessedEntitiesPage =\n catalogUnprocessedEntitiesPlugin.provide(\n createRoutableExtension({\n name: 'CatalogUnprocessedEntitiesPage',\n component: () =>\n import('./components/UnprocessedEntities').then(\n m => m.UnprocessedEntities,\n ),\n mountPoint: rootRouteRef,\n }),\n );\n","/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React, { useState } from 'react';\n\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport IconButton from '@material-ui/core/IconButton';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport DescriptionIcon from '@material-ui/icons/Description';\n\nimport { UnprocessedEntity } from './../types';\nimport { CodeSnippet } from '@backstage/core-components';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n entity: {\n overflow: 'scroll',\n width: '100%',\n },\n codeBox: {\n border: '1px solid black',\n padding: '1em',\n },\n }),\n);\n\nexport const EntityDialog = ({ entity }: { entity: UnprocessedEntity }) => {\n const [open, setOpen] = useState(false);\n const classes = useStyles();\n\n const openDialog = () => {\n setOpen(true);\n };\n\n const closeDialog = () => {\n setOpen(false);\n };\n\n const dialogContent = () => {\n return (\n <CodeSnippet\n language=\"json\"\n showLineNumbers\n text={JSON.stringify(entity, null, 4)}\n />\n );\n };\n\n return (\n <>\n <IconButton color=\"primary\" onClick={openDialog}>\n <DescriptionIcon />\n </IconButton>\n <Dialog fullWidth open={open} onClose={closeDialog}>\n <DialogTitle id=\"dialog-title\">\n <IconButton\n aria-label=\"close\"\n className={classes.closeButton}\n onClick={closeDialog}\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n <DialogContent>{dialogContent()}</DialogContent>\n </Dialog>\n </>\n );\n};\n","/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React, { useState } from 'react';\n\nimport {\n ErrorPanel,\n MarkdownContent,\n Progress,\n Table,\n TableColumn,\n} from '@backstage/core-components';\n\nimport Box from '@material-ui/core/Box';\nimport Typography from '@material-ui/core/Typography';\nimport IconButton from '@material-ui/core/IconButton';\nimport { Theme, makeStyles } from '@material-ui/core/styles';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\n\nimport { UnprocessedEntity } from '../types';\nimport { EntityDialog } from './EntityDialog';\nimport { catalogUnprocessedEntitiesApiRef } from '../api';\nimport useAsync from 'react-use/esm/useAsync';\nimport DeleteIcon from '@material-ui/icons/Delete';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n errorBox: {\n color: theme.palette.status.error,\n backgroundColor: theme.palette.errorBackground,\n padding: '1em',\n margin: '1em',\n border: `1px solid ${theme.palette.status.error}`,\n },\n errorTitle: {\n width: '100%',\n fontWeight: 'bold',\n },\n successMessage: {\n background: theme.palette.infoBackground,\n color: theme.palette.infoText,\n padding: theme.spacing(2),\n },\n}));\n\nconst RenderErrorContext = ({\n error,\n rowData,\n}: {\n error: { message: string };\n rowData: UnprocessedEntity;\n}) => {\n if (error.message.includes('tags.')) {\n return (\n <>\n <Typography>Tags</Typography>\n <ul>\n {rowData.unprocessed_entity.metadata.tags?.map(t => (\n <li>{t}</li>\n ))}\n </ul>\n </>\n );\n }\n\n if (error.message.includes('metadata.name')) {\n return (\n <>\n <Typography>Name</Typography>\n <Typography variant=\"caption\">\n {rowData.unprocessed_entity.metadata.name}\n </Typography>\n </>\n );\n }\n\n return null;\n};\n\nexport const FailedEntities = () => {\n const classes = useStyles();\n const unprocessedApi = useApi(catalogUnprocessedEntitiesApiRef);\n const {\n loading,\n error,\n value: data,\n } = useAsync(async () => await unprocessedApi.failed());\n const [, setSelectedSearchTerm] = useState<string>('');\n const unprocessedEntityApi = useApi(catalogUnprocessedEntitiesApiRef);\n const alertApi = useApi(alertApiRef);\n\n if (loading) {\n return <Progress />;\n }\n if (error) {\n return <ErrorPanel error={error} />;\n }\n\n const handleDelete = async ({\n entityId,\n entityRef,\n }: {\n entityId: string;\n entityRef: string;\n }) => {\n try {\n await unprocessedEntityApi.delete(entityId);\n alertApi.post({\n message: `Entity ${entityRef} has been deleted`,\n severity: 'success',\n });\n } catch (e) {\n alertApi.post({\n message: `Ran into an issue when deleting ${entityRef}. Please try again later.`,\n severity: 'error',\n });\n }\n };\n\n const columns: TableColumn[] = [\n {\n title: <Typography>entityRef</Typography>,\n sorting: true,\n field: 'entity_ref',\n customFilterAndSearch: (query, row: any) =>\n row.entity_ref\n .toLocaleUpperCase('en-US')\n .includes(query.toLocaleUpperCase('en-US')),\n render: (rowData: UnprocessedEntity | {}) =>\n (rowData as UnprocessedEntity).entity_ref,\n },\n {\n title: <Typography>Kind</Typography>,\n sorting: true,\n field: 'kind',\n render: (rowData: UnprocessedEntity | {}) =>\n (rowData as UnprocessedEntity).unprocessed_entity.kind,\n },\n {\n title: <Typography>Owner</Typography>,\n sorting: true,\n field: 'unprocessed_entity.spec.owner',\n render: (rowData: UnprocessedEntity | {}) =>\n (rowData as UnprocessedEntity).unprocessed_entity.spec?.owner ||\n 'unknown',\n },\n {\n title: <Typography>Raw</Typography>,\n sorting: false,\n render: (rowData: UnprocessedEntity | {}) => (\n <EntityDialog entity={rowData as UnprocessedEntity} />\n ),\n },\n {\n title: <Typography>Actions</Typography>,\n render: (rowData: UnprocessedEntity | {}) => {\n const { entity_id, entity_ref } = rowData as UnprocessedEntity;\n\n return (\n <IconButton\n aria-label=\"delete\"\n onClick={async () =>\n await handleDelete({\n entityId: entity_id,\n entityRef: entity_ref,\n })\n }\n >\n <DeleteIcon fontSize=\"small\" data-testid=\"delete-icon\" />\n </IconButton>\n );\n },\n },\n ];\n\n return (\n <Table\n options={{ pageSize: 20, search: true }}\n columns={columns}\n data={data?.entities ?? []}\n emptyContent={\n <Typography className={classes.successMessage}>\n No failed entities found\n </Typography>\n }\n onSearchChange={(searchTerm: string) => setSelectedSearchTerm(searchTerm)}\n detailPanel={({ rowData }) => {\n const errors = (rowData as UnprocessedEntity).errors;\n return (\n <>\n {errors?.map((e, idx) => {\n return (\n <Box key={idx} className={classes.errorBox}>\n <Typography className={classes.errorTitle}>\n {e.name}\n </Typography>\n <MarkdownContent content={e.message} />\n <RenderErrorContext\n error={e}\n rowData={rowData as UnprocessedEntity}\n />\n </Box>\n );\n })}\n </>\n );\n }}\n />\n );\n};\n","/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React, { useState } from 'react';\n\nimport {\n ErrorPanel,\n Progress,\n TableColumn,\n Table,\n} from '@backstage/core-components';\nimport Typography from '@material-ui/core/Typography';\nimport { Theme, makeStyles } from '@material-ui/core/styles';\n\nimport { UnprocessedEntity } from '../types';\n\nimport { EntityDialog } from './EntityDialog';\nimport { useApi } from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/esm/useAsync';\nimport { catalogUnprocessedEntitiesApiRef } from '../api';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n successMessage: {\n background: theme.palette.infoBackground,\n color: theme.palette.infoText,\n padding: theme.spacing(2),\n },\n}));\n\nexport const PendingEntities = () => {\n const classes = useStyles();\n const unprocessedApi = useApi(catalogUnprocessedEntitiesApiRef);\n const {\n loading,\n error,\n value: data,\n } = useAsync(async () => await unprocessedApi.pending());\n const [, setSelectedSearchTerm] = useState<string>('');\n\n if (loading) {\n return <Progress />;\n }\n if (error) {\n return <ErrorPanel error={error} />;\n }\n\n const columns: TableColumn[] = [\n {\n title: <Typography>entityRef</Typography>,\n sorting: true,\n field: 'entity_ref',\n customFilterAndSearch: (query, row: any) =>\n row.entity_ref\n .toLocaleUpperCase('en-US')\n .includes(query.toLocaleUpperCase('en-US')),\n render: (rowData: UnprocessedEntity | {}) =>\n (rowData as UnprocessedEntity).entity_ref,\n },\n {\n title: <Typography>Kind</Typography>,\n sorting: true,\n field: 'kind',\n render: (rowData: UnprocessedEntity | {}) =>\n (rowData as UnprocessedEntity).unprocessed_entity.kind,\n },\n {\n title: <Typography>Owner</Typography>,\n sorting: true,\n field: 'unprocessed_entity.spec.owner',\n render: (rowData: UnprocessedEntity | {}) =>\n (rowData as UnprocessedEntity).unprocessed_entity.spec?.owner ||\n 'unknown',\n },\n {\n title: <Typography>Raw</Typography>,\n sorting: false,\n render: (rowData: UnprocessedEntity | {}) => (\n <EntityDialog entity={rowData as UnprocessedEntity} />\n ),\n },\n ];\n return (\n <>\n <Table\n options={{ pageSize: 20 }}\n columns={columns}\n data={data?.entities || []}\n onSearchChange={(searchTerm: string) =>\n setSelectedSearchTerm(searchTerm)\n }\n emptyContent={\n <Typography className={classes.successMessage}>\n No pending entities found\n </Typography>\n }\n />\n </>\n );\n};\n","/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React, { useState } from 'react';\n\nimport { Page, Header, Content } from '@backstage/core-components';\nimport Tab from '@material-ui/core/Tab';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TabContext from '@material-ui/lab/TabContext';\nimport TabList from '@material-ui/lab/TabList';\nimport TabPanel from '@material-ui/lab/TabPanel';\n\nimport { FailedEntities } from './FailedEntities';\nimport { PendingEntities } from './PendingEntities';\n\nconst useStyles = makeStyles(() => ({\n tabPanel: {\n paddingLeft: '0px',\n paddingRight: '0px',\n },\n}));\n\n/** @public */\nexport const UnprocessedEntitiesContent = () => {\n const classes = useStyles();\n const [tab, setTab] = useState('failed');\n const handleChange = (_event: React.ChangeEvent<{}>, tabValue: string) => {\n setTab(tabValue);\n };\n\n return (\n <TabContext value={tab}>\n <TabList onChange={handleChange}>\n <Tab label=\"Failed\" value=\"failed\" />\n <Tab label=\"Pending\" value=\"pending\" />\n </TabList>\n <TabPanel value=\"failed\" className={classes.tabPanel}>\n <FailedEntities />\n </TabPanel>\n <TabPanel value=\"pending\" className={classes.tabPanel}>\n <PendingEntities />\n </TabPanel>\n </TabContext>\n );\n};\n\nexport const UnprocessedEntities = () => {\n return (\n <Page themeId=\"tool\">\n <Header title=\"Unprocessed Entities\" />\n <Content>\n <UnprocessedEntitiesContent />\n </Content>\n </Page>\n );\n};\n"],"names":["useStyles","_a"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-catalog-unprocessed-entities",
3
- "version": "0.1.9-next.2",
3
+ "version": "0.2.1",
4
4
  "backstage": {
5
5
  "role": "frontend-plugin"
6
6
  },
@@ -32,10 +32,10 @@
32
32
  "test": "backstage-cli package test"
33
33
  },
34
34
  "dependencies": {
35
- "@backstage/catalog-model": "^1.4.5-next.0",
36
- "@backstage/core-components": "^0.14.1-next.2",
37
- "@backstage/core-plugin-api": "^1.9.1-next.1",
38
- "@backstage/errors": "^1.2.4-next.0",
35
+ "@backstage/catalog-model": "^1.4.5",
36
+ "@backstage/core-components": "^0.14.2",
37
+ "@backstage/core-plugin-api": "^1.9.1",
38
+ "@backstage/errors": "^1.2.4",
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.60",
@@ -43,8 +43,8 @@
43
43
  "react-use": "^17.2.4"
44
44
  },
45
45
  "devDependencies": {
46
- "@backstage/cli": "^0.25.3-next.2",
47
- "@backstage/dev-utils": "^1.0.28-next.2",
46
+ "@backstage/cli": "^0.26.1",
47
+ "@backstage/dev-utils": "^1.0.29",
48
48
  "@testing-library/jest-dom": "^6.0.0",
49
49
  "@testing-library/react": "^14.0.0"
50
50
  },