@backstage/plugin-catalog-react 1.21.6-next.0 → 1.22.0-next.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,24 @@
1
1
  # @backstage/plugin-catalog-react
2
2
 
3
+ ## 1.22.0-next.1
4
+
5
+ ### Minor Changes
6
+
7
+ - 0e9578d: Migrated `UnregisterEntityDialog` from Material UI to Backstage UI components.
8
+ - e8258d0: **BREAKING**: Removed the 'summary' entity card type from `EntityCardType`. Users should migrate to using 'content' or 'info' card types instead.
9
+
10
+ TypeScript will now show errors if you try to use `type: 'summary'` when creating entity cards.
11
+
12
+ ### Patch Changes
13
+
14
+ - Updated dependencies
15
+ - @backstage/frontend-test-utils@0.4.6-next.1
16
+ - @backstage/ui@0.12.0-next.1
17
+ - @backstage/frontend-plugin-api@0.14.0-next.1
18
+ - @backstage/core-compat-api@0.5.8-next.1
19
+ - @backstage/core-components@0.18.7-next.1
20
+ - @backstage/integration-react@1.2.15-next.1
21
+
3
22
  ## 1.21.6-next.0
4
23
 
5
24
  ### Patch Changes
@@ -19,7 +19,6 @@ const entityContentGroupDataRef = createExtensionDataRef().with({
19
19
  id: "catalog.entity-content-group"
20
20
  });
21
21
  const entityCardTypes = [
22
- "summary",
23
22
  "info",
24
23
  "content"
25
24
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"extensionData.esm.js","sources":["../../../src/alpha/blueprints/extensionData.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\nimport { createExtensionDataRef } from '@backstage/frontend-plugin-api';\n\n/** @internal */\nexport const entityContentTitleDataRef = createExtensionDataRef<string>().with({\n id: 'catalog.entity-content-title',\n});\n\n/** @internal */\nexport const entityFilterFunctionDataRef = createExtensionDataRef<\n (entity: Entity) => boolean\n>().with({ id: 'catalog.entity-filter-function' });\n\n/** @internal */\nexport const entityFilterExpressionDataRef =\n createExtensionDataRef<string>().with({\n id: 'catalog.entity-filter-expression',\n });\n\n/**\n * @alpha\n * Default entity content groups.\n */\nexport const defaultEntityContentGroups = {\n overview: 'Overview',\n documentation: 'Documentation',\n development: 'Development',\n deployment: 'Deployment',\n operation: 'Operation',\n observability: 'Observability',\n};\n\n/** @internal */\nexport const entityContentGroupDataRef = createExtensionDataRef<string>().with({\n id: 'catalog.entity-content-group',\n});\n\n/**\n * @internal\n * Available entity card types\n */\nexport const entityCardTypes = [\n 'summary',\n 'info',\n 'content',\n] as const satisfies readonly EntityCardType[];\n\n/** @alpha */\nexport type EntityCardType = 'summary' | 'info' | 'content';\n\n/** @internal */\nexport const entityCardTypeDataRef =\n createExtensionDataRef<EntityCardType>().with({\n id: 'catalog.entity-card-type',\n });\n"],"names":[],"mappings":";;AAoBO,MAAM,yBAAA,GAA4B,sBAAA,EAA+B,CAAE,IAAA,CAAK;AAAA,EAC7E,EAAA,EAAI;AACN,CAAC;AAGM,MAAM,8BAA8B,sBAAA,EAEzC,CAAE,KAAK,EAAE,EAAA,EAAI,kCAAkC;AAG1C,MAAM,6BAAA,GACX,sBAAA,EAA+B,CAAE,IAAA,CAAK;AAAA,EACpC,EAAA,EAAI;AACN,CAAC;AAMI,MAAM,0BAAA,GAA6B;AAAA,EACxC,QAAA,EAAU,UAAA;AAAA,EACV,aAAA,EAAe,eAAA;AAAA,EACf,WAAA,EAAa,aAAA;AAAA,EACb,UAAA,EAAY,YAAA;AAAA,EACZ,SAAA,EAAW,WAAA;AAAA,EACX,aAAA,EAAe;AACjB;AAGO,MAAM,yBAAA,GAA4B,sBAAA,EAA+B,CAAE,IAAA,CAAK;AAAA,EAC7E,EAAA,EAAI;AACN,CAAC;AAMM,MAAM,eAAA,GAAkB;AAAA,EAC7B,SAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF;AAMO,MAAM,qBAAA,GACX,sBAAA,EAAuC,CAAE,IAAA,CAAK;AAAA,EAC5C,EAAA,EAAI;AACN,CAAC;;;;"}
1
+ {"version":3,"file":"extensionData.esm.js","sources":["../../../src/alpha/blueprints/extensionData.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\nimport { createExtensionDataRef } from '@backstage/frontend-plugin-api';\n\n/** @internal */\nexport const entityContentTitleDataRef = createExtensionDataRef<string>().with({\n id: 'catalog.entity-content-title',\n});\n\n/** @internal */\nexport const entityFilterFunctionDataRef = createExtensionDataRef<\n (entity: Entity) => boolean\n>().with({ id: 'catalog.entity-filter-function' });\n\n/** @internal */\nexport const entityFilterExpressionDataRef =\n createExtensionDataRef<string>().with({\n id: 'catalog.entity-filter-expression',\n });\n\n/**\n * @alpha\n * Default entity content groups.\n */\nexport const defaultEntityContentGroups = {\n overview: 'Overview',\n documentation: 'Documentation',\n development: 'Development',\n deployment: 'Deployment',\n operation: 'Operation',\n observability: 'Observability',\n};\n\n/** @internal */\nexport const entityContentGroupDataRef = createExtensionDataRef<string>().with({\n id: 'catalog.entity-content-group',\n});\n\n/**\n * @internal\n * Available entity card types\n */\nexport const entityCardTypes = [\n 'info',\n 'content',\n] as const satisfies readonly EntityCardType[];\n\n/** @alpha */\nexport type EntityCardType = 'info' | 'content';\n\n/** @internal */\nexport const entityCardTypeDataRef =\n createExtensionDataRef<EntityCardType>().with({\n id: 'catalog.entity-card-type',\n });\n"],"names":[],"mappings":";;AAoBO,MAAM,yBAAA,GAA4B,sBAAA,EAA+B,CAAE,IAAA,CAAK;AAAA,EAC7E,EAAA,EAAI;AACN,CAAC;AAGM,MAAM,8BAA8B,sBAAA,EAEzC,CAAE,KAAK,EAAE,EAAA,EAAI,kCAAkC;AAG1C,MAAM,6BAAA,GACX,sBAAA,EAA+B,CAAE,IAAA,CAAK;AAAA,EACpC,EAAA,EAAI;AACN,CAAC;AAMI,MAAM,0BAAA,GAA6B;AAAA,EACxC,QAAA,EAAU,UAAA;AAAA,EACV,aAAA,EAAe,eAAA;AAAA,EACf,WAAA,EAAa,aAAA;AAAA,EACb,UAAA,EAAY,YAAA;AAAA,EACZ,SAAA,EAAW,WAAA;AAAA,EACX,aAAA,EAAe;AACjB;AAGO,MAAM,yBAAA,GAA4B,sBAAA,EAA+B,CAAE,IAAA,CAAK;AAAA,EAC7E,EAAA,EAAI;AACN,CAAC;AAMM,MAAM,eAAA,GAAkB;AAAA,EAC7B,MAAA;AAAA,EACA;AACF;AAMO,MAAM,qBAAA,GACX,sBAAA,EAAuC,CAAE,IAAA,CAAK;AAAA,EAC5C,EAAA,EAAI;AACN,CAAC;;;;"}
package/dist/alpha.d.ts CHANGED
@@ -47,7 +47,7 @@ declare const defaultEntityContentGroups: {
47
47
  observability: string;
48
48
  };
49
49
  /** @alpha */
50
- type EntityCardType = 'summary' | 'info' | 'content';
50
+ type EntityCardType = 'info' | 'content';
51
51
 
52
52
  /** @alpha */
53
53
  type EntityPredicate = EntityPredicateExpression | EntityPredicatePrimitive | {
@@ -101,11 +101,11 @@ declare const EntityCardBlueprint: _backstage_frontend_plugin_api.ExtensionBluep
101
101
  inputs: {};
102
102
  config: {
103
103
  filter: EntityPredicate | undefined;
104
- type: "content" | "summary" | "info" | undefined;
104
+ type: "content" | "info" | undefined;
105
105
  };
106
106
  configInput: {
107
107
  filter?: EntityPredicate | undefined;
108
- type?: "content" | "summary" | "info" | undefined;
108
+ type?: "content" | "info" | undefined;
109
109
  };
110
110
  dataRefs: {
111
111
  filterFunction: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: Entity) => boolean, "catalog.entity-filter-function", {}>;
@@ -1,206 +1,273 @@
1
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { EntityRefLink } from '../EntityRefLink/EntityRefLink.esm.js';
3
3
  import '@backstage/catalog-model';
4
4
  import { useState, useCallback } from 'react';
5
5
  import 'lodash/get';
6
- import Box from '@material-ui/core/Box';
7
- import Button from '@material-ui/core/Button';
8
- import Dialog from '@material-ui/core/Dialog';
9
- import DialogActions from '@material-ui/core/DialogActions';
10
- import DialogContent from '@material-ui/core/DialogContent';
11
- import DialogContentText from '@material-ui/core/DialogContentText';
12
- import DialogTitle from '@material-ui/core/DialogTitle';
13
- import Divider from '@material-ui/core/Divider';
14
6
  import { makeStyles } from '@material-ui/core/styles';
15
- import Alert from '@material-ui/lab/Alert';
16
7
  import { useUnregisterEntityDialogState } from './useUnregisterEntityDialogState.esm.js';
17
- import { useApi, alertApiRef, configApiRef } from '@backstage/core-plugin-api';
18
- import { Progress, ResponseErrorPanel } from '@backstage/core-components';
8
+ import { useApi, configApiRef, alertApiRef } from '@backstage/core-plugin-api';
9
+ import { ResponseErrorPanel, Progress } from '@backstage/core-components';
19
10
  import { assertError } from '@backstage/errors';
20
11
  import { catalogReactTranslationRef } from '../../translation.esm.js';
21
12
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
13
+ import { Dialog, DialogHeader, DialogBody, DialogFooter, Button, Alert, Text, Box, Accordion, AccordionTrigger, AccordionPanel } from '@backstage/ui';
22
14
 
23
15
  const useStyles = makeStyles({
24
- advancedButton: {
25
- fontSize: "0.7em"
26
- },
27
- dialogActions: {
28
- display: "inline-block"
16
+ bodyContent: {
17
+ overflowWrap: "break-word"
29
18
  }
30
19
  });
31
- const Contents = ({
32
- entity,
33
- onConfirm,
34
- onClose
35
- }) => {
20
+ function useUnregisterDialogHandlers(entity, onConfirm, onClose) {
36
21
  const alertApi = useApi(alertApiRef);
37
- const configApi = useApi(configApiRef);
38
- const classes = useStyles();
39
22
  const state = useUnregisterEntityDialogState(entity);
40
- const [showDelete, setShowDelete] = useState(false);
41
- const [busy, setBusy] = useState(false);
42
- const appTitle = configApi.getOptionalString("app.title") ?? "Backstage";
23
+ const [busyAction, setBusyAction] = useState(
24
+ null
25
+ );
43
26
  const { t } = useTranslationRef(catalogReactTranslationRef);
44
- const onUnregister = useCallback(
45
- async function onUnregisterFn() {
46
- if ("unregisterLocation" in state) {
47
- setBusy(true);
48
- try {
49
- await state.unregisterLocation();
50
- onConfirm();
51
- } catch (err) {
52
- assertError(err);
53
- alertApi.post({ message: err.message });
54
- } finally {
55
- setBusy(false);
56
- }
27
+ const onUnregister = useCallback(async () => {
28
+ if ("unregisterLocation" in state) {
29
+ setBusyAction("unregister");
30
+ try {
31
+ await state.unregisterLocation();
32
+ onConfirm();
33
+ } catch (err) {
34
+ assertError(err);
35
+ alertApi.post({ message: err.message });
36
+ } finally {
37
+ setBusyAction(null);
57
38
  }
58
- },
59
- [alertApi, onConfirm, state]
60
- );
61
- const onDelete = useCallback(
62
- async function onDeleteFn() {
63
- if ("deleteEntity" in state) {
64
- setBusy(true);
65
- try {
66
- await state.deleteEntity();
67
- const entityName = entity.metadata.title ?? entity.metadata.name;
68
- onConfirm();
69
- alertApi.post({
70
- message: t("unregisterEntityDialog.deleteEntitySuccessMessage", {
71
- entityName
72
- }),
73
- severity: "success",
74
- display: "transient"
75
- });
76
- } catch (err) {
77
- assertError(err);
78
- alertApi.post({ message: err.message });
79
- } finally {
80
- setBusy(false);
81
- }
39
+ }
40
+ }, [alertApi, onConfirm, state]);
41
+ const onDelete = useCallback(async () => {
42
+ if ("deleteEntity" in state) {
43
+ setBusyAction("delete");
44
+ try {
45
+ await state.deleteEntity();
46
+ const entityName = entity.metadata.title ?? entity.metadata.name;
47
+ onConfirm();
48
+ alertApi.post({
49
+ message: t("unregisterEntityDialog.deleteEntitySuccessMessage", {
50
+ entityName
51
+ }),
52
+ severity: "success",
53
+ display: "transient"
54
+ });
55
+ } catch (err) {
56
+ assertError(err);
57
+ alertApi.post({ message: err.message });
58
+ } finally {
59
+ setBusyAction(null);
82
60
  }
83
- },
84
- [alertApi, onConfirm, state, entity, t]
85
- );
86
- const DialogActionsPanel = () => /* @__PURE__ */ jsx(DialogActions, { className: classes.dialogActions, children: /* @__PURE__ */ jsx(Button, { onClick: onClose, color: "primary", children: t("unregisterEntityDialog.cancelButtonTitle") }) });
87
- if (state.type === "loading") {
88
- return /* @__PURE__ */ jsx(Progress, {});
89
- }
90
- if (state.type === "error") {
91
- return /* @__PURE__ */ jsx(ResponseErrorPanel, { error: state.error });
92
- }
93
- if (state.type === "bootstrap") {
94
- return /* @__PURE__ */ jsxs(Fragment, { children: [
95
- /* @__PURE__ */ jsx(Alert, { severity: "info", children: t("unregisterEntityDialog.bootstrapState.title", {
96
- appTitle,
97
- location: state.location
98
- }) }),
99
- /* @__PURE__ */ jsxs(Box, { marginTop: 2, children: [
100
- !showDelete && /* @__PURE__ */ jsxs(Fragment, { children: [
101
- /* @__PURE__ */ jsx(
102
- Button,
103
- {
104
- variant: "text",
105
- size: "small",
106
- color: "primary",
107
- className: classes.advancedButton,
108
- onClick: () => setShowDelete(true),
109
- children: t("unregisterEntityDialog.bootstrapState.advancedOptions")
110
- }
111
- ),
112
- /* @__PURE__ */ jsx(DialogActionsPanel, {})
113
- ] }),
114
- showDelete && /* @__PURE__ */ jsxs(Fragment, { children: [
115
- /* @__PURE__ */ jsx(DialogContentText, { children: t("unregisterEntityDialog.bootstrapState.advancedDescription") }),
116
- /* @__PURE__ */ jsx(
117
- Button,
118
- {
119
- variant: "contained",
120
- color: "secondary",
121
- disabled: busy,
122
- onClick: onDelete,
123
- children: t("unregisterEntityDialog.deleteButtonTitle")
124
- }
125
- ),
126
- /* @__PURE__ */ jsx(DialogActionsPanel, {})
127
- ] })
128
- ] })
129
- ] });
130
- }
131
- if (state.type === "only-delete") {
132
- return /* @__PURE__ */ jsxs(Fragment, { children: [
133
- /* @__PURE__ */ jsx(DialogContentText, { children: t("unregisterEntityDialog.onlyDeleteStateTitle") }),
134
- /* @__PURE__ */ jsx(
61
+ }
62
+ }, [alertApi, onConfirm, state, entity, t]);
63
+ return { state, busyAction, onUnregister, onDelete, onClose };
64
+ }
65
+ function AdvancedDeleteAccordion({
66
+ triggerTitle,
67
+ description,
68
+ onDelete,
69
+ busyAction
70
+ }) {
71
+ const { t } = useTranslationRef(catalogReactTranslationRef);
72
+ return /* @__PURE__ */ jsx(Box, { mt: "4", children: /* @__PURE__ */ jsxs(Accordion, { children: [
73
+ /* @__PURE__ */ jsx(AccordionTrigger, { title: triggerTitle }),
74
+ /* @__PURE__ */ jsxs(AccordionPanel, { children: [
75
+ /* @__PURE__ */ jsx(Text, { as: "p", children: description }),
76
+ /* @__PURE__ */ jsx(Box, { mt: "4", children: /* @__PURE__ */ jsx(
135
77
  Button,
136
78
  {
137
- variant: "contained",
138
- color: "secondary",
139
- disabled: busy,
140
- onClick: onDelete,
79
+ variant: "primary",
80
+ destructive: true,
81
+ loading: busyAction === "delete",
82
+ isDisabled: busyAction !== null && busyAction !== "delete",
83
+ onPress: onDelete,
141
84
  children: t("unregisterEntityDialog.deleteButtonTitle")
142
85
  }
143
- ),
144
- /* @__PURE__ */ jsx(DialogActionsPanel, {})
145
- ] });
146
- }
147
- if (state.type === "unregister") {
148
- return /* @__PURE__ */ jsxs(Fragment, { children: [
149
- /* @__PURE__ */ jsx(DialogContentText, { children: t("unregisterEntityDialog.unregisterState.title") }),
150
- /* @__PURE__ */ jsx(DialogContentText, { component: "ul", children: state.colocatedEntities.map((e) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(EntityRefLink, { entityRef: e }) }, `${e.kind}:${e.namespace}/${e.name}`)) }),
151
- /* @__PURE__ */ jsx(DialogContentText, { children: t("unregisterEntityDialog.unregisterState.subTitle") }),
152
- /* @__PURE__ */ jsx(DialogContentText, { component: "ul", children: /* @__PURE__ */ jsx("li", { children: state.location }) }),
153
- /* @__PURE__ */ jsx(DialogContentText, { children: t("unregisterEntityDialog.unregisterState.description", {
154
- appTitle
155
- }) }),
156
- /* @__PURE__ */ jsxs(Box, { marginTop: 2, children: [
157
- /* @__PURE__ */ jsx(
158
- Button,
86
+ ) })
87
+ ] })
88
+ ] }) });
89
+ }
90
+ function BootstrapBody({
91
+ location,
92
+ appTitle,
93
+ onDelete,
94
+ busyAction
95
+ }) {
96
+ const { t } = useTranslationRef(catalogReactTranslationRef);
97
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
98
+ /* @__PURE__ */ jsx(
99
+ Alert,
100
+ {
101
+ status: "info",
102
+ icon: true,
103
+ description: t("unregisterEntityDialog.bootstrapState.title", {
104
+ appTitle,
105
+ location
106
+ })
107
+ }
108
+ ),
109
+ /* @__PURE__ */ jsx(
110
+ AdvancedDeleteAccordion,
111
+ {
112
+ triggerTitle: t(
113
+ "unregisterEntityDialog.bootstrapState.advancedOptions"
114
+ ),
115
+ description: t(
116
+ "unregisterEntityDialog.bootstrapState.advancedDescription"
117
+ ),
118
+ onDelete,
119
+ busyAction
120
+ }
121
+ )
122
+ ] });
123
+ }
124
+ function OnlyDeleteBody() {
125
+ const { t } = useTranslationRef(catalogReactTranslationRef);
126
+ return /* @__PURE__ */ jsx(Text, { as: "p", children: t("unregisterEntityDialog.onlyDeleteStateTitle") });
127
+ }
128
+ function UnregisterBody({
129
+ state,
130
+ appTitle,
131
+ onDelete,
132
+ busyAction
133
+ }) {
134
+ const { t } = useTranslationRef(catalogReactTranslationRef);
135
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
136
+ /* @__PURE__ */ jsx(Text, { as: "p", children: t("unregisterEntityDialog.unregisterState.title") }),
137
+ /* @__PURE__ */ jsx("ul", { children: state.colocatedEntities.map((e) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(EntityRefLink, { entityRef: e }) }, `${e.kind}:${e.namespace}/${e.name}`)) }),
138
+ /* @__PURE__ */ jsx(Text, { as: "p", children: t("unregisterEntityDialog.unregisterState.subTitle") }),
139
+ /* @__PURE__ */ jsx("ul", { children: /* @__PURE__ */ jsx("li", { children: state.location }) }),
140
+ /* @__PURE__ */ jsx(Text, { as: "p", children: t("unregisterEntityDialog.unregisterState.description", {
141
+ appTitle
142
+ }) }),
143
+ /* @__PURE__ */ jsx(
144
+ AdvancedDeleteAccordion,
145
+ {
146
+ triggerTitle: t(
147
+ "unregisterEntityDialog.unregisterState.advancedOptions"
148
+ ),
149
+ description: t(
150
+ "unregisterEntityDialog.unregisterState.advancedDescription"
151
+ ),
152
+ onDelete,
153
+ busyAction
154
+ }
155
+ )
156
+ ] });
157
+ }
158
+ function useDialogContent(handlers, appTitle) {
159
+ const { t } = useTranslationRef(catalogReactTranslationRef);
160
+ const { state, busyAction, onUnregister, onDelete } = handlers;
161
+ switch (state.type) {
162
+ case "loading":
163
+ return { body: /* @__PURE__ */ jsx(Progress, {}), actionButton: null };
164
+ case "error":
165
+ return {
166
+ body: /* @__PURE__ */ jsx(ResponseErrorPanel, { error: state.error }),
167
+ actionButton: null
168
+ };
169
+ case "bootstrap":
170
+ return {
171
+ body: /* @__PURE__ */ jsx(
172
+ BootstrapBody,
159
173
  {
160
- variant: "contained",
161
- color: "secondary",
162
- disabled: busy,
163
- onClick: onUnregister,
164
- children: t("unregisterEntityDialog.unregisterState.unregisterButtonTitle")
174
+ location: state.location,
175
+ appTitle,
176
+ onDelete,
177
+ busyAction
165
178
  }
166
179
  ),
167
- !showDelete && /* @__PURE__ */ jsx(Box, { component: "span", marginLeft: 2, children: /* @__PURE__ */ jsx(
180
+ actionButton: null
181
+ };
182
+ case "only-delete":
183
+ return {
184
+ body: /* @__PURE__ */ jsx(OnlyDeleteBody, {}),
185
+ actionButton: /* @__PURE__ */ jsx(
168
186
  Button,
169
187
  {
170
- variant: "text",
171
- size: "small",
172
- color: "primary",
173
- className: classes.advancedButton,
174
- onClick: () => setShowDelete(true),
175
- children: t("unregisterEntityDialog.unregisterState.advancedOptions")
188
+ variant: "primary",
189
+ destructive: true,
190
+ loading: busyAction === "delete",
191
+ isDisabled: busyAction !== null && busyAction !== "delete",
192
+ onPress: onDelete,
193
+ children: t("unregisterEntityDialog.deleteButtonTitle")
194
+ }
195
+ )
196
+ };
197
+ case "unregister":
198
+ return {
199
+ body: /* @__PURE__ */ jsx(
200
+ UnregisterBody,
201
+ {
202
+ state,
203
+ appTitle,
204
+ onDelete,
205
+ busyAction
176
206
  }
177
- ) })
178
- ] }),
179
- showDelete && /* @__PURE__ */ jsxs(Fragment, { children: [
180
- /* @__PURE__ */ jsx(Box, { paddingTop: 4, paddingBottom: 4, children: /* @__PURE__ */ jsx(Divider, {}) }),
181
- /* @__PURE__ */ jsx(DialogContentText, { children: t("unregisterEntityDialog.unregisterState.advancedDescription") }),
182
- /* @__PURE__ */ jsx(
207
+ ),
208
+ actionButton: /* @__PURE__ */ jsx(
183
209
  Button,
184
210
  {
185
- variant: "contained",
186
- color: "secondary",
187
- disabled: busy,
188
- onClick: onDelete,
189
- children: t("unregisterEntityDialog.deleteButtonTitle")
211
+ variant: "primary",
212
+ destructive: true,
213
+ loading: busyAction === "unregister",
214
+ isDisabled: busyAction !== null && busyAction !== "unregister",
215
+ onPress: onUnregister,
216
+ children: t("unregisterEntityDialog.unregisterState.unregisterButtonTitle")
190
217
  }
191
218
  )
192
- ] })
193
- ] });
219
+ };
220
+ default:
221
+ return {
222
+ body: /* @__PURE__ */ jsx(
223
+ Alert,
224
+ {
225
+ status: "danger",
226
+ description: t("unregisterEntityDialog.errorStateTitle")
227
+ }
228
+ ),
229
+ actionButton: null
230
+ };
194
231
  }
195
- return /* @__PURE__ */ jsx(Alert, { severity: "error", children: t("unregisterEntityDialog.errorStateTitle") });
196
- };
197
- const UnregisterEntityDialog = (props) => {
198
- const { open, onConfirm, onClose, entity } = props;
232
+ }
233
+ function DialogContents({
234
+ entity,
235
+ onConfirm,
236
+ onClose
237
+ }) {
238
+ const classes = useStyles();
199
239
  const { t } = useTranslationRef(catalogReactTranslationRef);
200
- return /* @__PURE__ */ jsxs(Dialog, { open, onClose, children: [
201
- /* @__PURE__ */ jsx(DialogTitle, { id: "responsive-dialog-title", children: t("unregisterEntityDialog.title") }),
202
- /* @__PURE__ */ jsx(DialogContent, { children: /* @__PURE__ */ jsx(Contents, { entity, onConfirm, onClose }) })
240
+ const configApi = useApi(configApiRef);
241
+ const appTitle = configApi.getOptionalString("app.title") ?? "Backstage";
242
+ const handlers = useUnregisterDialogHandlers(entity, onConfirm, onClose);
243
+ const { body, actionButton } = useDialogContent(handlers, appTitle);
244
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
245
+ /* @__PURE__ */ jsx(DialogHeader, { children: t("unregisterEntityDialog.title") }),
246
+ /* @__PURE__ */ jsx(DialogBody, { className: classes.bodyContent, children: body }),
247
+ /* @__PURE__ */ jsxs(DialogFooter, { children: [
248
+ /* @__PURE__ */ jsx(Button, { variant: "secondary", onPress: onClose, children: t("unregisterEntityDialog.cancelButtonTitle") }),
249
+ actionButton
250
+ ] })
203
251
  ] });
252
+ }
253
+ const UnregisterEntityDialog = (props) => {
254
+ const { open, onConfirm, onClose, entity } = props;
255
+ return /* @__PURE__ */ jsx(
256
+ Dialog,
257
+ {
258
+ isOpen: open,
259
+ onOpenChange: (isOpen) => !isOpen && onClose(),
260
+ width: 600,
261
+ children: open && /* @__PURE__ */ jsx(
262
+ DialogContents,
263
+ {
264
+ entity,
265
+ onConfirm,
266
+ onClose
267
+ }
268
+ )
269
+ }
270
+ );
204
271
  };
205
272
 
206
273
  export { UnregisterEntityDialog };
@@ -1 +1 @@
1
- {"version":3,"file":"UnregisterEntityDialog.esm.js","sources":["../../../src/components/UnregisterEntityDialog/UnregisterEntityDialog.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\nimport { EntityRefLink } from '../EntityRefLink';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Divider from '@material-ui/core/Divider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Alert from '@material-ui/lab/Alert';\nimport { useCallback, useState } from 'react';\nimport { useUnregisterEntityDialogState } from './useUnregisterEntityDialogState';\n\nimport { alertApiRef, configApiRef, useApi } from '@backstage/core-plugin-api';\nimport { Progress, ResponseErrorPanel } from '@backstage/core-components';\nimport { assertError } from '@backstage/errors';\nimport { catalogReactTranslationRef } from '../../translation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst useStyles = makeStyles({\n advancedButton: {\n fontSize: '0.7em',\n },\n dialogActions: {\n display: 'inline-block',\n },\n});\n\nconst Contents = ({\n entity,\n onConfirm,\n onClose,\n}: {\n entity: Entity;\n onConfirm: () => any;\n onClose: () => any;\n}) => {\n const alertApi = useApi(alertApiRef);\n const configApi = useApi(configApiRef);\n const classes = useStyles();\n const state = useUnregisterEntityDialogState(entity);\n const [showDelete, setShowDelete] = useState(false);\n const [busy, setBusy] = useState(false);\n const appTitle = configApi.getOptionalString('app.title') ?? 'Backstage';\n const { t } = useTranslationRef(catalogReactTranslationRef);\n\n const onUnregister = useCallback(\n async function onUnregisterFn() {\n if ('unregisterLocation' in state) {\n setBusy(true);\n try {\n await state.unregisterLocation();\n onConfirm();\n } catch (err) {\n assertError(err);\n alertApi.post({ message: err.message });\n } finally {\n setBusy(false);\n }\n }\n },\n [alertApi, onConfirm, state],\n );\n\n const onDelete = useCallback(\n async function onDeleteFn() {\n if ('deleteEntity' in state) {\n setBusy(true);\n try {\n await state.deleteEntity();\n const entityName = entity.metadata.title ?? entity.metadata.name;\n onConfirm();\n alertApi.post({\n message: t('unregisterEntityDialog.deleteEntitySuccessMessage', {\n entityName,\n }),\n severity: 'success',\n display: 'transient',\n });\n } catch (err) {\n assertError(err);\n alertApi.post({ message: err.message });\n } finally {\n setBusy(false);\n }\n }\n },\n [alertApi, onConfirm, state, entity, t],\n );\n\n const DialogActionsPanel = () => (\n <DialogActions className={classes.dialogActions}>\n <Button onClick={onClose} color=\"primary\">\n {t('unregisterEntityDialog.cancelButtonTitle')}\n </Button>\n </DialogActions>\n );\n\n if (state.type === 'loading') {\n return <Progress />;\n }\n\n if (state.type === 'error') {\n return <ResponseErrorPanel error={state.error} />;\n }\n\n if (state.type === 'bootstrap') {\n return (\n <>\n <Alert severity=\"info\">\n {t('unregisterEntityDialog.bootstrapState.title', {\n appTitle,\n location: state.location,\n })}\n </Alert>\n\n <Box marginTop={2}>\n {!showDelete && (\n <>\n <Button\n variant=\"text\"\n size=\"small\"\n color=\"primary\"\n className={classes.advancedButton}\n onClick={() => setShowDelete(true)}\n >\n {t('unregisterEntityDialog.bootstrapState.advancedOptions')}\n </Button>\n <DialogActionsPanel />\n </>\n )}\n\n {showDelete && (\n <>\n <DialogContentText>\n {t('unregisterEntityDialog.bootstrapState.advancedDescription')}\n </DialogContentText>\n <Button\n variant=\"contained\"\n color=\"secondary\"\n disabled={busy}\n onClick={onDelete}\n >\n {t('unregisterEntityDialog.deleteButtonTitle')}\n </Button>\n <DialogActionsPanel />\n </>\n )}\n </Box>\n </>\n );\n }\n\n if (state.type === 'only-delete') {\n return (\n <>\n <DialogContentText>\n {t('unregisterEntityDialog.onlyDeleteStateTitle')}\n </DialogContentText>\n <Button\n variant=\"contained\"\n color=\"secondary\"\n disabled={busy}\n onClick={onDelete}\n >\n {t('unregisterEntityDialog.deleteButtonTitle')}\n </Button>\n <DialogActionsPanel />\n </>\n );\n }\n\n if (state.type === 'unregister') {\n return (\n <>\n <DialogContentText>\n {t('unregisterEntityDialog.unregisterState.title')}\n </DialogContentText>\n <DialogContentText component=\"ul\">\n {state.colocatedEntities.map(e => (\n <li key={`${e.kind}:${e.namespace}/${e.name}`}>\n <EntityRefLink entityRef={e} />\n </li>\n ))}\n </DialogContentText>\n <DialogContentText>\n {t('unregisterEntityDialog.unregisterState.subTitle')}\n </DialogContentText>\n <DialogContentText component=\"ul\">\n <li>{state.location}</li>\n </DialogContentText>\n <DialogContentText>\n {t('unregisterEntityDialog.unregisterState.description', {\n appTitle,\n })}\n </DialogContentText>\n <Box marginTop={2}>\n <Button\n variant=\"contained\"\n color=\"secondary\"\n disabled={busy}\n onClick={onUnregister}\n >\n {t('unregisterEntityDialog.unregisterState.unregisterButtonTitle')}\n </Button>\n {!showDelete && (\n <Box component=\"span\" marginLeft={2}>\n <Button\n variant=\"text\"\n size=\"small\"\n color=\"primary\"\n className={classes.advancedButton}\n onClick={() => setShowDelete(true)}\n >\n {t('unregisterEntityDialog.unregisterState.advancedOptions')}\n </Button>\n </Box>\n )}\n </Box>\n\n {showDelete && (\n <>\n <Box paddingTop={4} paddingBottom={4}>\n <Divider />\n </Box>\n <DialogContentText>\n {t('unregisterEntityDialog.unregisterState.advancedDescription')}\n </DialogContentText>\n <Button\n variant=\"contained\"\n color=\"secondary\"\n disabled={busy}\n onClick={onDelete}\n >\n {t('unregisterEntityDialog.deleteButtonTitle')}\n </Button>\n </>\n )}\n </>\n );\n }\n\n return (\n <Alert severity=\"error\">\n {t('unregisterEntityDialog.errorStateTitle')}\n </Alert>\n );\n};\n\n/** @public */\nexport type UnregisterEntityDialogProps = {\n open: boolean;\n onConfirm: () => any;\n onClose: () => any;\n entity: Entity;\n};\n\n/** @public */\nexport const UnregisterEntityDialog = (props: UnregisterEntityDialogProps) => {\n const { open, onConfirm, onClose, entity } = props;\n const { t } = useTranslationRef(catalogReactTranslationRef);\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogTitle id=\"responsive-dialog-title\">\n {t('unregisterEntityDialog.title')}\n </DialogTitle>\n <DialogContent>\n <Contents entity={entity} onConfirm={onConfirm} onClose={onClose} />\n </DialogContent>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UnregisterEntityDialog.esm.js","sources":["../../../src/components/UnregisterEntityDialog/UnregisterEntityDialog.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CompoundEntityRef, Entity } from '@backstage/catalog-model';\nimport { EntityRefLink } from '../EntityRefLink';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ReactNode, useCallback, useState } from 'react';\nimport {\n UseUnregisterEntityDialogState,\n useUnregisterEntityDialogState,\n} from './useUnregisterEntityDialogState';\n\nimport { alertApiRef, configApiRef, useApi } from '@backstage/core-plugin-api';\nimport { Progress, ResponseErrorPanel } from '@backstage/core-components';\nimport { assertError } from '@backstage/errors';\nimport { catalogReactTranslationRef } from '../../translation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport {\n Accordion,\n AccordionPanel,\n AccordionTrigger,\n Alert,\n Box,\n Button,\n Dialog,\n DialogBody,\n DialogFooter,\n DialogHeader,\n Text,\n} from '@backstage/ui';\n\nconst useStyles = makeStyles({\n bodyContent: {\n overflowWrap: 'break-word',\n },\n});\n\ntype DialogHandlers = {\n state: UseUnregisterEntityDialogState;\n busyAction: 'unregister' | 'delete' | null;\n onUnregister: () => Promise<void>;\n onDelete: () => Promise<void>;\n onClose: () => void;\n};\n\nfunction useUnregisterDialogHandlers(\n entity: Entity,\n onConfirm: () => void,\n onClose: () => void,\n): DialogHandlers {\n const alertApi = useApi(alertApiRef);\n const state = useUnregisterEntityDialogState(entity);\n const [busyAction, setBusyAction] = useState<'unregister' | 'delete' | null>(\n null,\n );\n const { t } = useTranslationRef(catalogReactTranslationRef);\n\n const onUnregister = useCallback(async () => {\n if ('unregisterLocation' in state) {\n setBusyAction('unregister');\n try {\n await state.unregisterLocation();\n onConfirm();\n } catch (err) {\n assertError(err);\n alertApi.post({ message: err.message });\n } finally {\n setBusyAction(null);\n }\n }\n }, [alertApi, onConfirm, state]);\n\n const onDelete = useCallback(async () => {\n if ('deleteEntity' in state) {\n setBusyAction('delete');\n try {\n await state.deleteEntity();\n const entityName = entity.metadata.title ?? entity.metadata.name;\n onConfirm();\n alertApi.post({\n message: t('unregisterEntityDialog.deleteEntitySuccessMessage', {\n entityName,\n }),\n severity: 'success',\n display: 'transient',\n });\n } catch (err) {\n assertError(err);\n alertApi.post({ message: err.message });\n } finally {\n setBusyAction(null);\n }\n }\n }, [alertApi, onConfirm, state, entity, t]);\n\n return { state, busyAction, onUnregister, onDelete, onClose };\n}\n\nfunction AdvancedDeleteAccordion({\n triggerTitle,\n description,\n onDelete,\n busyAction,\n}: {\n triggerTitle: string;\n description: string;\n onDelete: () => void;\n busyAction: 'unregister' | 'delete' | null;\n}) {\n const { t } = useTranslationRef(catalogReactTranslationRef);\n\n return (\n <Box mt=\"4\">\n <Accordion>\n <AccordionTrigger title={triggerTitle} />\n <AccordionPanel>\n <Text as=\"p\">{description}</Text>\n <Box mt=\"4\">\n <Button\n variant=\"primary\"\n destructive\n loading={busyAction === 'delete'}\n isDisabled={busyAction !== null && busyAction !== 'delete'}\n onPress={onDelete}\n >\n {t('unregisterEntityDialog.deleteButtonTitle')}\n </Button>\n </Box>\n </AccordionPanel>\n </Accordion>\n </Box>\n );\n}\n\nfunction BootstrapBody({\n location,\n appTitle,\n onDelete,\n busyAction,\n}: {\n location: string;\n appTitle: string;\n onDelete: () => void;\n busyAction: 'unregister' | 'delete' | null;\n}) {\n const { t } = useTranslationRef(catalogReactTranslationRef);\n\n return (\n <>\n <Alert\n status=\"info\"\n icon\n description={t('unregisterEntityDialog.bootstrapState.title', {\n appTitle,\n location,\n })}\n />\n <AdvancedDeleteAccordion\n triggerTitle={t(\n 'unregisterEntityDialog.bootstrapState.advancedOptions',\n )}\n description={t(\n 'unregisterEntityDialog.bootstrapState.advancedDescription',\n )}\n onDelete={onDelete}\n busyAction={busyAction}\n />\n </>\n );\n}\n\nfunction OnlyDeleteBody() {\n const { t } = useTranslationRef(catalogReactTranslationRef);\n\n return <Text as=\"p\">{t('unregisterEntityDialog.onlyDeleteStateTitle')}</Text>;\n}\n\nfunction UnregisterBody({\n state,\n appTitle,\n onDelete,\n busyAction,\n}: {\n state: Extract<UseUnregisterEntityDialogState, { type: 'unregister' }>;\n appTitle: string;\n onDelete: () => void;\n busyAction: 'unregister' | 'delete' | null;\n}) {\n const { t } = useTranslationRef(catalogReactTranslationRef);\n\n return (\n <>\n <Text as=\"p\">{t('unregisterEntityDialog.unregisterState.title')}</Text>\n <ul>\n {state.colocatedEntities.map((e: CompoundEntityRef) => (\n <li key={`${e.kind}:${e.namespace}/${e.name}`}>\n <EntityRefLink entityRef={e} />\n </li>\n ))}\n </ul>\n <Text as=\"p\">{t('unregisterEntityDialog.unregisterState.subTitle')}</Text>\n <ul>\n <li>{state.location}</li>\n </ul>\n <Text as=\"p\">\n {t('unregisterEntityDialog.unregisterState.description', {\n appTitle,\n })}\n </Text>\n <AdvancedDeleteAccordion\n triggerTitle={t(\n 'unregisterEntityDialog.unregisterState.advancedOptions',\n )}\n description={t(\n 'unregisterEntityDialog.unregisterState.advancedDescription',\n )}\n onDelete={onDelete}\n busyAction={busyAction}\n />\n </>\n );\n}\n\nfunction useDialogContent(\n handlers: DialogHandlers,\n appTitle: string,\n): { body: ReactNode; actionButton: ReactNode | null } {\n const { t } = useTranslationRef(catalogReactTranslationRef);\n const { state, busyAction, onUnregister, onDelete } = handlers;\n\n switch (state.type) {\n case 'loading':\n return { body: <Progress />, actionButton: null };\n case 'error':\n return {\n body: <ResponseErrorPanel error={state.error} />,\n actionButton: null,\n };\n case 'bootstrap':\n return {\n body: (\n <BootstrapBody\n location={state.location}\n appTitle={appTitle}\n onDelete={onDelete}\n busyAction={busyAction}\n />\n ),\n actionButton: null,\n };\n case 'only-delete':\n return {\n body: <OnlyDeleteBody />,\n actionButton: (\n <Button\n variant=\"primary\"\n destructive\n loading={busyAction === 'delete'}\n isDisabled={busyAction !== null && busyAction !== 'delete'}\n onPress={onDelete}\n >\n {t('unregisterEntityDialog.deleteButtonTitle')}\n </Button>\n ),\n };\n case 'unregister':\n return {\n body: (\n <UnregisterBody\n state={state}\n appTitle={appTitle}\n onDelete={onDelete}\n busyAction={busyAction}\n />\n ),\n actionButton: (\n <Button\n variant=\"primary\"\n destructive\n loading={busyAction === 'unregister'}\n isDisabled={busyAction !== null && busyAction !== 'unregister'}\n onPress={onUnregister}\n >\n {t('unregisterEntityDialog.unregisterState.unregisterButtonTitle')}\n </Button>\n ),\n };\n default:\n return {\n body: (\n <Alert\n status=\"danger\"\n description={t('unregisterEntityDialog.errorStateTitle')}\n />\n ),\n actionButton: null,\n };\n }\n}\n\n/** @public */\nexport type UnregisterEntityDialogProps = {\n open: boolean;\n onConfirm: () => any;\n onClose: () => any;\n entity: Entity;\n};\n\nfunction DialogContents({\n entity,\n onConfirm,\n onClose,\n}: {\n entity: Entity;\n onConfirm: () => void;\n onClose: () => void;\n}) {\n const classes = useStyles();\n const { t } = useTranslationRef(catalogReactTranslationRef);\n const configApi = useApi(configApiRef);\n const appTitle = configApi.getOptionalString('app.title') ?? 'Backstage';\n\n const handlers = useUnregisterDialogHandlers(entity, onConfirm, onClose);\n const { body, actionButton } = useDialogContent(handlers, appTitle);\n\n return (\n <>\n <DialogHeader>{t('unregisterEntityDialog.title')}</DialogHeader>\n <DialogBody className={classes.bodyContent}>{body}</DialogBody>\n <DialogFooter>\n <Button variant=\"secondary\" onPress={onClose}>\n {t('unregisterEntityDialog.cancelButtonTitle')}\n </Button>\n {actionButton}\n </DialogFooter>\n </>\n );\n}\n\n/** @public */\nexport const UnregisterEntityDialog = (props: UnregisterEntityDialogProps) => {\n const { open, onConfirm, onClose, entity } = props;\n\n return (\n <Dialog\n isOpen={open}\n onOpenChange={isOpen => !isOpen && onClose()}\n width={600}\n >\n {open && (\n <DialogContents\n entity={entity}\n onConfirm={onConfirm}\n onClose={onClose}\n />\n )}\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-catalog-react",
3
- "version": "1.21.6-next.0",
3
+ "version": "1.22.0-next.1",
4
4
  "description": "A frontend library that helps other Backstage plugins interact with the catalog",
5
5
  "backstage": {
6
6
  "role": "web-library",
@@ -75,17 +75,18 @@
75
75
  "dependencies": {
76
76
  "@backstage/catalog-client": "1.12.1",
77
77
  "@backstage/catalog-model": "1.7.6",
78
- "@backstage/core-compat-api": "0.5.7-next.0",
79
- "@backstage/core-components": "0.18.6-next.0",
80
- "@backstage/core-plugin-api": "1.12.2-next.0",
78
+ "@backstage/core-compat-api": "0.5.8-next.1",
79
+ "@backstage/core-components": "0.18.7-next.1",
80
+ "@backstage/core-plugin-api": "1.12.3-next.0",
81
81
  "@backstage/errors": "1.2.7",
82
- "@backstage/frontend-plugin-api": "0.14.0-next.0",
83
- "@backstage/frontend-test-utils": "0.4.5-next.0",
84
- "@backstage/integration-react": "1.2.15-next.0",
82
+ "@backstage/frontend-plugin-api": "0.14.0-next.1",
83
+ "@backstage/frontend-test-utils": "0.4.6-next.1",
84
+ "@backstage/integration-react": "1.2.15-next.1",
85
85
  "@backstage/plugin-catalog-common": "1.1.8-next.0",
86
- "@backstage/plugin-permission-common": "0.9.5-next.0",
86
+ "@backstage/plugin-permission-common": "0.9.6-next.0",
87
87
  "@backstage/plugin-permission-react": "0.4.40-next.0",
88
88
  "@backstage/types": "1.2.2",
89
+ "@backstage/ui": "0.12.0-next.1",
89
90
  "@backstage/version-bridge": "1.0.11",
90
91
  "@material-ui/core": "^4.12.2",
91
92
  "@material-ui/icons": "^4.9.1",
@@ -100,11 +101,11 @@
100
101
  "zen-observable": "^0.10.0"
101
102
  },
102
103
  "devDependencies": {
103
- "@backstage/cli": "0.35.3-next.0",
104
- "@backstage/core-app-api": "1.19.4-next.0",
104
+ "@backstage/cli": "0.35.4-next.1",
105
+ "@backstage/core-app-api": "1.19.5-next.0",
105
106
  "@backstage/plugin-catalog-common": "1.1.8-next.0",
106
- "@backstage/plugin-scaffolder-common": "1.7.6-next.0",
107
- "@backstage/test-utils": "1.7.15-next.0",
107
+ "@backstage/plugin-scaffolder-common": "1.7.6-next.1",
108
+ "@backstage/test-utils": "1.7.15-next.1",
108
109
  "@testing-library/dom": "^10.0.0",
109
110
  "@testing-library/jest-dom": "^6.0.0",
110
111
  "@testing-library/react": "^16.0.0",