@terasky/backstage-plugin-vcf-automation 1.14.1 → 1.15.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.
@@ -79,33 +79,31 @@ const VCFAutomationVMPowerManagement = ({
79
79
  isStandalone: true,
80
80
  vmData: vmStatus
81
81
  };
82
- } else {
83
- const [powerOnAction, powerOffAction] = await Promise.all([
84
- api.checkVmPowerAction(resourceId, "PowerOn", instanceName),
85
- api.checkVmPowerAction(resourceId, "PowerOff", instanceName)
86
- ]);
87
- const powerState = powerOnAction.valid ? "PoweredOff" : "PoweredOn";
88
- return {
89
- powerState,
90
- isStandalone: false,
91
- availableActions: {
92
- PowerOn: powerOnAction,
93
- PowerOff: powerOffAction
94
- }
95
- };
96
82
  }
83
+ const [powerOnAction, powerOffAction] = await Promise.all([
84
+ api.checkVmPowerAction(resourceId, "PowerOn", instanceName),
85
+ api.checkVmPowerAction(resourceId, "PowerOff", instanceName)
86
+ ]);
87
+ const powerState = powerOnAction.valid ? "PoweredOff" : "PoweredOn";
88
+ return {
89
+ powerState,
90
+ isStandalone: false,
91
+ availableActions: {
92
+ PowerOn: powerOnAction,
93
+ PowerOff: powerOffAction
94
+ }
95
+ };
97
96
  }, [resourceId, instanceName, isStandalone, vmName, namespaceName, namespaceUrnId]);
98
97
  const availableAction = useMemo(() => {
99
98
  if (!vmData) return null;
100
99
  if (isStandalone) {
101
100
  return vmData.powerState === "PoweredOff" ? "PowerOn" : "PowerOff";
102
- } else {
103
- const powerOnValid = vmData.availableActions?.PowerOn?.valid;
104
- const powerOffValid = vmData.availableActions?.PowerOff?.valid;
105
- if (powerOnValid) return "PowerOn";
106
- if (powerOffValid) return "PowerOff";
107
- return null;
108
101
  }
102
+ const powerOnValid = vmData.availableActions?.PowerOn?.valid;
103
+ const powerOffValid = vmData.availableActions?.PowerOff?.valid;
104
+ if (powerOnValid) return "PowerOn";
105
+ if (powerOffValid) return "PowerOff";
106
+ return null;
109
107
  }, [vmData, isStandalone]);
110
108
  const handleActionClick = useCallback((action) => {
111
109
  if (!hasPermission) return;
@@ -136,10 +134,10 @@ const VCFAutomationVMPowerManagement = ({
136
134
  severity: "success"
137
135
  });
138
136
  setTimeout(() => window.location.reload(), 1e3);
139
- } catch (error2) {
137
+ } catch (caughtError) {
140
138
  setSnackbar({
141
139
  open: true,
142
- message: `Failed to execute ${confirmDialog.action} action: ${error2 instanceof Error ? error2.message : "Unknown error"}`,
140
+ message: `Failed to execute ${confirmDialog.action} action: ${caughtError instanceof Error ? caughtError.message : "Unknown error"}`,
143
141
  severity: "error"
144
142
  });
145
143
  } finally {
@@ -168,6 +166,8 @@ const VCFAutomationVMPowerManagement = ({
168
166
  const buttonIcon = availableAction === "PowerOn" ? /* @__PURE__ */ jsx(PlayArrowIcon, {}) : /* @__PURE__ */ jsx(StopIcon, {});
169
167
  const buttonClass = availableAction === "PowerOn" ? classes.powerOnButton : classes.powerOffButton;
170
168
  const buttonText = availableAction === "PowerOn" ? "Power On" : "Power Off";
169
+ const actionTitle = !availableAction ? "No power action available" : `${buttonText} this virtual machine`;
170
+ const buttonTitle = !hasPermission ? "You do not have permission to manage VM power state" : actionTitle;
171
171
  return /* @__PURE__ */ jsxs(Fragment, { children: [
172
172
  /* @__PURE__ */ jsxs(Box, { className: classes.powerButtons, children: [
173
173
  /* @__PURE__ */ jsx(
@@ -179,7 +179,7 @@ const VCFAutomationVMPowerManagement = ({
179
179
  className: buttonClass,
180
180
  disabled: !canExecuteAction,
181
181
  onClick: () => availableAction && handleActionClick(availableAction),
182
- title: !hasPermission ? "You do not have permission to manage VM power state" : !availableAction ? "No power action available" : `${buttonText} this virtual machine`,
182
+ title: buttonTitle,
183
183
  children: executing ? /* @__PURE__ */ jsx(CircularProgress, { size: 16, color: "inherit" }) : buttonText
184
184
  }
185
185
  ),
@@ -1 +1 @@
1
- {"version":3,"file":"VCFAutomationVMPowerManagement.esm.js","sources":["../../src/components/VCFAutomationVMPowerManagement.tsx"],"sourcesContent":["import React, { useState, useCallback, useMemo } from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { vcfAutomationApiRef } from '../api/VcfAutomationClient';\nimport { VmPowerAction, VmPowerActionType, StandaloneVmStatus } from '../types';\nimport {\n Button,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Typography,\n Box,\n CircularProgress,\n Snackbar,\n Chip,\n} from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport { makeStyles } from '@material-ui/core/styles';\nimport PowerSettingsNewIcon from '@material-ui/icons/PowerSettingsNew';\nimport PlayArrowIcon from '@material-ui/icons/PlayArrow';\nimport StopIcon from '@material-ui/icons/Stop';\nimport useAsync from 'react-use/lib/useAsync';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { vmPowerManagementPermission } from '@terasky/backstage-plugin-vcf-automation-common';\n\nconst useStyles = makeStyles(theme => ({\n powerButtons: {\n display: 'flex',\n gap: theme.spacing(1),\n alignItems: 'center',\n },\n powerOnButton: {\n backgroundColor: theme.palette.success.main,\n color: theme.palette.success.contrastText,\n '&:hover': {\n backgroundColor: theme.palette.success.dark,\n },\n '&:disabled': {\n backgroundColor: theme.palette.action.disabled,\n color: theme.palette.action.disabled,\n },\n },\n powerOffButton: {\n backgroundColor: theme.palette.error.main,\n color: theme.palette.error.contrastText,\n '&:hover': {\n backgroundColor: theme.palette.error.dark,\n },\n '&:disabled': {\n backgroundColor: theme.palette.action.disabled,\n color: theme.palette.action.disabled,\n },\n },\n statusChip: {\n marginLeft: theme.spacing(1),\n },\n}));\n\n// Permission is defined in vcf-automation-common plugin\n\ninterface VCFAutomationVMPowerManagementProps {\n entity: any;\n resourceId: string;\n instanceName?: string;\n isStandalone: boolean;\n vmName?: string;\n namespaceName?: string;\n namespaceUrnId?: string;\n}\n\nexport const VCFAutomationVMPowerManagement: React.FC<VCFAutomationVMPowerManagementProps> = ({\n entity,\n resourceId,\n instanceName,\n isStandalone,\n vmName,\n namespaceName,\n namespaceUrnId,\n}) => {\n const classes = useStyles();\n const api = useApi(vcfAutomationApiRef);\n \n const [confirmDialog, setConfirmDialog] = useState<{\n open: boolean;\n action: VmPowerActionType | null;\n actionDisplayName?: string;\n }>({\n open: false,\n action: null,\n });\n \n const [executing, setExecuting] = useState(false);\n const [snackbar, setSnackbar] = useState<{\n open: boolean;\n message: string;\n severity: 'success' | 'error';\n }>({\n open: false,\n message: '',\n severity: 'success',\n });\n\n // Check permissions\n const { allowed: hasPermission } = usePermission({ \n permission: vmPowerManagementPermission,\n });\n\n // Get current power state and available actions\n const { value: vmData, loading, error } = useAsync(async () => {\n if (isStandalone) {\n if (!vmName || !namespaceName || !namespaceUrnId) {\n throw new Error('Missing required parameters for standalone VM');\n }\n \n // Get standalone VM status\n const vmStatus: StandaloneVmStatus = await api.getStandaloneVmStatus(namespaceUrnId, namespaceName, vmName, instanceName);\n return {\n powerState: vmStatus.spec.powerState,\n isStandalone: true,\n vmData: vmStatus,\n };\n } else {\n // For deployment-managed VMs, check both power actions\n const [powerOnAction, powerOffAction] = await Promise.all([\n api.checkVmPowerAction(resourceId, 'PowerOn', instanceName),\n api.checkVmPowerAction(resourceId, 'PowerOff', instanceName),\n ]);\n \n // Determine current power state based on which action is valid\n const powerState = powerOnAction.valid ? 'PoweredOff' : 'PoweredOn';\n \n return {\n powerState,\n isStandalone: false,\n availableActions: {\n PowerOn: powerOnAction as VmPowerAction,\n PowerOff: powerOffAction as VmPowerAction,\n },\n };\n }\n }, [resourceId, instanceName, isStandalone, vmName, namespaceName, namespaceUrnId]);\n\n // Determine which action is available\n const availableAction = useMemo(() => {\n if (!vmData) return null;\n \n if (isStandalone) {\n return vmData.powerState === 'PoweredOff' ? 'PowerOn' : 'PowerOff';\n } else {\n // For deployment-managed VMs, check which action is valid\n const powerOnValid = vmData.availableActions?.PowerOn?.valid;\n const powerOffValid = vmData.availableActions?.PowerOff?.valid;\n \n if (powerOnValid) return 'PowerOn';\n if (powerOffValid) return 'PowerOff';\n return null;\n }\n }, [vmData, isStandalone]);\n\n const handleActionClick = useCallback((action: VmPowerActionType) => {\n if (!hasPermission) return;\n \n const actionDisplayName = action === 'PowerOn' ? 'Power On' : 'Power Off';\n setConfirmDialog({\n open: true,\n action,\n actionDisplayName,\n });\n }, [hasPermission]);\n\n const handleConfirmAction = useCallback(async () => {\n if (!confirmDialog.action || !vmData) return;\n \n setExecuting(true);\n setConfirmDialog({ open: false, action: null });\n \n try {\n if (isStandalone) {\n if (!vmName || !namespaceName || !namespaceUrnId) {\n throw new Error('Missing required parameters for standalone VM');\n }\n \n const newPowerState = confirmDialog.action === 'PowerOn' ? 'PoweredOn' : 'PoweredOff';\n await api.executeStandaloneVmPowerAction(namespaceUrnId, namespaceName, vmName, newPowerState, vmData.vmData, instanceName);\n } else {\n await api.executeVmPowerAction(resourceId, confirmDialog.action, instanceName);\n }\n \n setSnackbar({\n open: true,\n message: `Successfully executed ${confirmDialog.action} action`,\n severity: 'success',\n });\n \n // Refresh the data\n setTimeout(() => window.location.reload(), 1000); // Wait a bit for the action to take effect\n } catch (error) {\n setSnackbar({\n open: true,\n message: `Failed to execute ${confirmDialog.action} action: ${error instanceof Error ? error.message : 'Unknown error'}`,\n severity: 'error',\n });\n } finally {\n setExecuting(false);\n }\n }, [confirmDialog.action, vmData, isStandalone, vmName, namespaceName, namespaceUrnId, api, instanceName, resourceId]);\n\n const handleCancelAction = useCallback(() => {\n setConfirmDialog({ open: false, action: null });\n }, []);\n\n const handleCloseSnackbar = useCallback(() => {\n setSnackbar(prev => ({ ...prev, open: false }));\n }, []);\n\n if (loading) {\n return (\n <Box className={classes.powerButtons}>\n <CircularProgress size={20} />\n <Typography variant=\"body2\">Loading power status...</Typography>\n </Box>\n );\n }\n\n if (error) {\n return (\n <Box className={classes.powerButtons}>\n <Typography variant=\"body2\" color=\"error\">\n Failed to load power status\n </Typography>\n </Box>\n );\n }\n\n if (!vmData) {\n return null;\n }\n\n const canExecuteAction = hasPermission && availableAction && !executing;\n const buttonIcon = availableAction === 'PowerOn' ? <PlayArrowIcon /> : <StopIcon />;\n const buttonClass = availableAction === 'PowerOn' ? classes.powerOnButton : classes.powerOffButton;\n const buttonText = availableAction === 'PowerOn' ? 'Power On' : 'Power Off';\n\n return (\n <>\n <Box className={classes.powerButtons}>\n <Button\n variant=\"contained\"\n size=\"small\"\n startIcon={buttonIcon}\n className={buttonClass}\n disabled={!canExecuteAction}\n onClick={() => availableAction && handleActionClick(availableAction)}\n title={\n !hasPermission \n ? 'You do not have permission to manage VM power state'\n : !availableAction\n ? 'No power action available'\n : `${buttonText} this virtual machine`\n }\n >\n {executing ? <CircularProgress size={16} color=\"inherit\" /> : buttonText}\n </Button>\n \n <Chip\n label={vmData.powerState}\n size=\"small\"\n className={classes.statusChip}\n color={vmData.powerState === 'PoweredOn' ? 'primary' : 'default'}\n icon={<PowerSettingsNewIcon />}\n />\n </Box>\n\n {/* Confirmation Dialog */}\n <Dialog\n open={confirmDialog.open}\n onClose={handleCancelAction}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>\n Confirm {confirmDialog.actionDisplayName}\n </DialogTitle>\n <DialogContent>\n <Typography>\n Are you sure you want to {confirmDialog.actionDisplayName?.toLowerCase()} this virtual machine?\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" style={{ marginTop: 8 }}>\n VM: {vmName || entity.metadata.name}\n </Typography>\n {isStandalone && (\n <Typography variant=\"body2\" color=\"textSecondary\">\n Namespace: {namespaceName}\n </Typography>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={handleCancelAction} color=\"primary\">\n Cancel\n </Button>\n <Button \n onClick={handleConfirmAction} \n color=\"primary\" \n variant=\"contained\"\n autoFocus\n >\n {confirmDialog.actionDisplayName}\n </Button>\n </DialogActions>\n </Dialog>\n\n {/* Success/Error Snackbar */}\n <Snackbar\n open={snackbar.open}\n autoHideDuration={6000}\n onClose={handleCloseSnackbar}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n >\n <Alert \n onClose={handleCloseSnackbar} \n severity={snackbar.severity}\n variant=\"filled\"\n >\n {snackbar.message}\n </Alert>\n </Snackbar>\n </>\n );\n};"],"names":["error"],"mappings":"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"}
1
+ {"version":3,"file":"VCFAutomationVMPowerManagement.esm.js","sources":["../../src/components/VCFAutomationVMPowerManagement.tsx"],"sourcesContent":["import { useState, useCallback, useMemo } from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { vcfAutomationApiRef } from '../api/VcfAutomationClient';\nimport { VmPowerAction, VmPowerActionType, StandaloneVmStatus } from '../types';\nimport {\n Button,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Typography,\n Box,\n CircularProgress,\n Snackbar,\n Chip,\n} from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport { makeStyles } from '@material-ui/core/styles';\nimport PowerSettingsNewIcon from '@material-ui/icons/PowerSettingsNew';\nimport PlayArrowIcon from '@material-ui/icons/PlayArrow';\nimport StopIcon from '@material-ui/icons/Stop';\nimport useAsync from 'react-use/lib/useAsync';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { vmPowerManagementPermission } from '@terasky/backstage-plugin-vcf-automation-common';\n\nconst useStyles = makeStyles(theme => ({\n powerButtons: {\n display: 'flex',\n gap: theme.spacing(1),\n alignItems: 'center',\n },\n powerOnButton: {\n backgroundColor: theme.palette.success.main,\n color: theme.palette.success.contrastText,\n '&:hover': {\n backgroundColor: theme.palette.success.dark,\n },\n '&:disabled': {\n backgroundColor: theme.palette.action.disabled,\n color: theme.palette.action.disabled,\n },\n },\n powerOffButton: {\n backgroundColor: theme.palette.error.main,\n color: theme.palette.error.contrastText,\n '&:hover': {\n backgroundColor: theme.palette.error.dark,\n },\n '&:disabled': {\n backgroundColor: theme.palette.action.disabled,\n color: theme.palette.action.disabled,\n },\n },\n statusChip: {\n marginLeft: theme.spacing(1),\n },\n}));\n\n// Permission is defined in vcf-automation-common plugin\n\ninterface VCFAutomationVMPowerManagementProps {\n entity: any;\n resourceId: string;\n instanceName?: string;\n isStandalone: boolean;\n vmName?: string;\n namespaceName?: string;\n namespaceUrnId?: string;\n}\n\nexport const VCFAutomationVMPowerManagement: React.FC<VCFAutomationVMPowerManagementProps> = ({\n entity,\n resourceId,\n instanceName,\n isStandalone,\n vmName,\n namespaceName,\n namespaceUrnId,\n}) => {\n const classes = useStyles();\n const api = useApi(vcfAutomationApiRef);\n \n const [confirmDialog, setConfirmDialog] = useState<{\n open: boolean;\n action: VmPowerActionType | null;\n actionDisplayName?: string;\n }>({\n open: false,\n action: null,\n });\n \n const [executing, setExecuting] = useState(false);\n const [snackbar, setSnackbar] = useState<{\n open: boolean;\n message: string;\n severity: 'success' | 'error';\n }>({\n open: false,\n message: '',\n severity: 'success',\n });\n\n // Check permissions\n const { allowed: hasPermission } = usePermission({ \n permission: vmPowerManagementPermission,\n });\n\n // Get current power state and available actions\n const { value: vmData, loading, error } = useAsync(async () => {\n if (isStandalone) {\n if (!vmName || !namespaceName || !namespaceUrnId) {\n throw new Error('Missing required parameters for standalone VM');\n }\n \n // Get standalone VM status\n const vmStatus: StandaloneVmStatus = await api.getStandaloneVmStatus(namespaceUrnId, namespaceName, vmName, instanceName);\n return {\n powerState: vmStatus.spec.powerState,\n isStandalone: true,\n vmData: vmStatus,\n };\n } \n // For deployment-managed VMs, check both power actions\n const [powerOnAction, powerOffAction] = await Promise.all([\n api.checkVmPowerAction(resourceId, 'PowerOn', instanceName),\n api.checkVmPowerAction(resourceId, 'PowerOff', instanceName),\n ]);\n \n // Determine current power state based on which action is valid\n const powerState = powerOnAction.valid ? 'PoweredOff' : 'PoweredOn';\n \n return {\n powerState,\n isStandalone: false,\n availableActions: {\n PowerOn: powerOnAction as VmPowerAction,\n PowerOff: powerOffAction as VmPowerAction,\n },\n };\n \n }, [resourceId, instanceName, isStandalone, vmName, namespaceName, namespaceUrnId]);\n\n // Determine which action is available\n const availableAction = useMemo(() => {\n if (!vmData) return null;\n \n if (isStandalone) {\n return vmData.powerState === 'PoweredOff' ? 'PowerOn' : 'PowerOff';\n } \n // For deployment-managed VMs, check which action is valid\n const powerOnValid = vmData.availableActions?.PowerOn?.valid;\n const powerOffValid = vmData.availableActions?.PowerOff?.valid;\n \n if (powerOnValid) return 'PowerOn';\n if (powerOffValid) return 'PowerOff';\n return null;\n \n }, [vmData, isStandalone]);\n\n const handleActionClick = useCallback((action: VmPowerActionType) => {\n if (!hasPermission) return;\n \n const actionDisplayName = action === 'PowerOn' ? 'Power On' : 'Power Off';\n setConfirmDialog({\n open: true,\n action,\n actionDisplayName,\n });\n }, [hasPermission]);\n\n const handleConfirmAction = useCallback(async () => {\n if (!confirmDialog.action || !vmData) return;\n \n setExecuting(true);\n setConfirmDialog({ open: false, action: null });\n \n try {\n if (isStandalone) {\n if (!vmName || !namespaceName || !namespaceUrnId) {\n throw new Error('Missing required parameters for standalone VM');\n }\n \n const newPowerState = confirmDialog.action === 'PowerOn' ? 'PoweredOn' : 'PoweredOff';\n await api.executeStandaloneVmPowerAction(namespaceUrnId, namespaceName, vmName, newPowerState, vmData.vmData, instanceName);\n } else {\n await api.executeVmPowerAction(resourceId, confirmDialog.action, instanceName);\n }\n \n setSnackbar({\n open: true,\n message: `Successfully executed ${confirmDialog.action} action`,\n severity: 'success',\n });\n \n // Refresh the data\n setTimeout(() => window.location.reload(), 1000); // Wait a bit for the action to take effect\n } catch (caughtError) {\n setSnackbar({\n open: true,\n message: `Failed to execute ${confirmDialog.action} action: ${caughtError instanceof Error ? caughtError.message : 'Unknown error'}`,\n severity: 'error',\n });\n } finally {\n setExecuting(false);\n }\n }, [confirmDialog.action, vmData, isStandalone, vmName, namespaceName, namespaceUrnId, api, instanceName, resourceId]);\n\n const handleCancelAction = useCallback(() => {\n setConfirmDialog({ open: false, action: null });\n }, []);\n\n const handleCloseSnackbar = useCallback(() => {\n setSnackbar(prev => ({ ...prev, open: false }));\n }, []);\n\n if (loading) {\n return (\n <Box className={classes.powerButtons}>\n <CircularProgress size={20} />\n <Typography variant=\"body2\">Loading power status...</Typography>\n </Box>\n );\n }\n\n if (error) {\n return (\n <Box className={classes.powerButtons}>\n <Typography variant=\"body2\" color=\"error\">\n Failed to load power status\n </Typography>\n </Box>\n );\n }\n\n if (!vmData) {\n return null;\n }\n\n const canExecuteAction = hasPermission && availableAction && !executing;\n const buttonIcon = availableAction === 'PowerOn' ? <PlayArrowIcon /> : <StopIcon />;\n const buttonClass = availableAction === 'PowerOn' ? classes.powerOnButton : classes.powerOffButton;\n const buttonText = availableAction === 'PowerOn' ? 'Power On' : 'Power Off';\n const actionTitle = !availableAction ? 'No power action available' : `${buttonText} this virtual machine`;\n const buttonTitle = !hasPermission ? 'You do not have permission to manage VM power state' : actionTitle;\n\n return (\n <>\n <Box className={classes.powerButtons}>\n <Button\n variant=\"contained\"\n size=\"small\"\n startIcon={buttonIcon}\n className={buttonClass}\n disabled={!canExecuteAction}\n onClick={() => availableAction && handleActionClick(availableAction)}\n title={buttonTitle}\n >\n {executing ? <CircularProgress size={16} color=\"inherit\" /> : buttonText}\n </Button>\n \n <Chip\n label={vmData.powerState}\n size=\"small\"\n className={classes.statusChip}\n color={vmData.powerState === 'PoweredOn' ? 'primary' : 'default'}\n icon={<PowerSettingsNewIcon />}\n />\n </Box>\n\n {/* Confirmation Dialog */}\n <Dialog\n open={confirmDialog.open}\n onClose={handleCancelAction}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>\n Confirm {confirmDialog.actionDisplayName}\n </DialogTitle>\n <DialogContent>\n <Typography>\n Are you sure you want to {confirmDialog.actionDisplayName?.toLowerCase()} this virtual machine?\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" style={{ marginTop: 8 }}>\n VM: {vmName || entity.metadata.name}\n </Typography>\n {isStandalone && (\n <Typography variant=\"body2\" color=\"textSecondary\">\n Namespace: {namespaceName}\n </Typography>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={handleCancelAction} color=\"primary\">\n Cancel\n </Button>\n <Button \n onClick={handleConfirmAction} \n color=\"primary\" \n variant=\"contained\"\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus\n >\n {confirmDialog.actionDisplayName}\n </Button>\n </DialogActions>\n </Dialog>\n\n {/* Success/Error Snackbar */}\n <Snackbar\n open={snackbar.open}\n autoHideDuration={6000}\n onClose={handleCloseSnackbar}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n >\n <Alert \n onClose={handleCloseSnackbar} \n severity={snackbar.severity}\n variant=\"filled\"\n >\n {snackbar.message}\n </Alert>\n </Snackbar>\n </>\n );\n};"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
2
2
  import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
- import React from 'react';
5
4
 
6
5
  declare const vcfAutomationPlugin: _backstage_core_plugin_api.BackstagePlugin<{
7
6
  root: _backstage_core_plugin_api.RouteRef<undefined>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@terasky/backstage-plugin-vcf-automation",
3
- "version": "1.14.1",
3
+ "version": "1.15.1",
4
4
  "license": "Apache-2.0",
5
5
  "main": "./dist/index.esm.js",
6
6
  "types": "./dist/index.d.ts",
@@ -36,17 +36,18 @@
36
36
  "postpack": "backstage-cli package postpack"
37
37
  },
38
38
  "dependencies": {
39
- "@backstage/core-components": "^0.18.9",
40
- "@backstage/core-plugin-api": "^1.12.5",
41
- "@backstage/frontend-plugin-api": "^0.16.2",
42
- "@backstage/plugin-catalog-react": "^2.1.4",
43
- "@backstage/plugin-permission-react": "^0.5.0",
39
+ "@backstage/catalog-model": "^1.9.0",
40
+ "@backstage/core-components": "^0.18.10",
41
+ "@backstage/core-plugin-api": "^1.12.6",
42
+ "@backstage/frontend-plugin-api": "^0.17.1",
43
+ "@backstage/plugin-catalog-react": "^3.0.0",
44
+ "@backstage/plugin-permission-react": "^0.5.1",
44
45
  "@backstage/theme": "^0.7.3",
45
46
  "@material-ui/core": "^4.12.4",
46
47
  "@material-ui/icons": "^4.11.3",
47
48
  "@material-ui/lab": "4.0.0-alpha.61",
48
49
  "@monaco-editor/react": "^4.7.0",
49
- "@terasky/backstage-plugin-vcf-automation-common": "^1.2.14",
50
+ "@terasky/backstage-plugin-vcf-automation-common": "^1.2.15",
50
51
  "js-yaml": "^4.1.0",
51
52
  "react-use": "^17.6.0"
52
53
  },
@@ -56,10 +57,10 @@
56
57
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
57
58
  },
58
59
  "devDependencies": {
59
- "@backstage/cli": "^0.36.1",
60
- "@backstage/core-app-api": "^1.20.0",
61
- "@backstage/dev-utils": "^1.1.22",
62
- "@backstage/test-utils": "^1.7.17",
60
+ "@backstage/cli": "^0.36.2",
61
+ "@backstage/core-app-api": "^1.20.1",
62
+ "@backstage/dev-utils": "^1.1.23",
63
+ "@backstage/test-utils": "^1.7.18",
63
64
  "@testing-library/jest-dom": "^5.10.1",
64
65
  "@testing-library/react": "^12.1.3",
65
66
  "@testing-library/user-event": "^14.0.0",