@terasky/backstage-plugin-vcf-automation 1.14.0 → 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.
- package/dist/components/VCFAutomationCCINamespaceOverview.esm.js +1 -5
- package/dist/components/VCFAutomationCCINamespaceOverview.esm.js.map +1 -1
- package/dist/components/VCFAutomationCCIResourceDetails.esm.js +28 -34
- package/dist/components/VCFAutomationCCIResourceDetails.esm.js.map +1 -1
- package/dist/components/VCFAutomationCCIResourceOverview.esm.js +33 -35
- package/dist/components/VCFAutomationCCIResourceOverview.esm.js.map +1 -1
- package/dist/components/VCFAutomationDeploymentDetails.esm.js +2 -2
- package/dist/components/VCFAutomationDeploymentDetails.esm.js.map +1 -1
- package/dist/components/VCFAutomationGenericResourceOverview.esm.js +4 -4
- package/dist/components/VCFAutomationGenericResourceOverview.esm.js.map +1 -1
- package/dist/components/VCFAutomationVMPowerManagement.esm.js +23 -23
- package/dist/components/VCFAutomationVMPowerManagement.esm.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/package.json +12 -11
|
@@ -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 (
|
|
137
|
+
} catch (caughtError) {
|
|
140
138
|
setSnackbar({
|
|
141
139
|
open: true,
|
|
142
|
-
message: `Failed to execute ${confirmDialog.action} action: ${
|
|
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:
|
|
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":";;;;;;;;;;;;;;AAyBA,MAAM,SAAA,GAAY,WAAW,CAAA,KAAA,MAAU;AAAA,EACrC,YAAA,EAAc;AAAA,IACZ,OAAA,EAAS,MAAA;AAAA,IACT,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IACpB,UAAA,EAAY;AAAA,GACd;AAAA,EACA,aAAA,EAAe;AAAA,IACb,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,IACvC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,YAAA;AAAA,IAC7B,SAAA,EAAW;AAAA,MACT,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ;AAAA,KACzC;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,QAAA;AAAA,MACtC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO;AAAA;AAC9B,GACF;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,IAAA;AAAA,IACrC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,YAAA;AAAA,IAC3B,SAAA,EAAW;AAAA,MACT,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM;AAAA,KACvC;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,QAAA;AAAA,MACtC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO;AAAA;AAC9B,GACF;AAAA,EACA,UAAA,EAAY;AAAA,IACV,UAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA;AAE/B,CAAA,CAAE,CAAA;AAcK,MAAM,iCAAgF,CAAC;AAAA,EAC5F,MAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,GAAA,GAAM,OAAO,mBAAmB,CAAA;AAEtC,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,QAAA,CAIvC;AAAA,IACD,IAAA,EAAM,KAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,QAAA,CAI7B;AAAA,IACD,IAAA,EAAM,KAAA;AAAA,IACN,OAAA,EAAS,EAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACX,CAAA;AAGD,EAAA,MAAM,EAAE,OAAA,EAAS,aAAA,EAAc,GAAI,aAAA,CAAc;AAAA,IAC/C,UAAA,EAAY;AAAA,GACb,CAAA;AAGD,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,SAAS,KAAA,EAAM,GAAI,SAAS,YAAY;AAC7D,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,IAAI,CAAC,MAAA,IAAU,CAAC,aAAA,IAAiB,CAAC,cAAA,EAAgB;AAChD,QAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,MACjE;AAGA,MAAA,MAAM,WAA+B,MAAM,GAAA,CAAI,sBAAsB,cAAA,EAAgB,aAAA,EAAe,QAAQ,YAAY,CAAA;AACxH,MAAA,OAAO;AAAA,QACL,UAAA,EAAY,SAAS,IAAA,CAAK,UAAA;AAAA,QAC1B,YAAA,EAAc,IAAA;AAAA,QACd,MAAA,EAAQ;AAAA,OACV;AAAA,IACF;AAEE,IAAA,MAAM,CAAC,aAAA,EAAe,cAAc,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MACxD,GAAA,CAAI,kBAAA,CAAmB,UAAA,EAAY,SAAA,EAAW,YAAY,CAAA;AAAA,MAC1D,GAAA,CAAI,kBAAA,CAAmB,UAAA,EAAY,UAAA,EAAY,YAAY;AAAA,KAC5D,CAAA;AAGD,IAAA,MAAM,UAAA,GAAa,aAAA,CAAc,KAAA,GAAQ,YAAA,GAAe,WAAA;AAExD,IAAA,OAAO;AAAA,MACL,UAAA;AAAA,MACA,YAAA,EAAc,KAAA;AAAA,MACd,gBAAA,EAAkB;AAAA,QAChB,OAAA,EAAS,aAAA;AAAA,QACT,QAAA,EAAU;AAAA;AACZ,KACF;AAAA,EAEJ,CAAA,EAAG,CAAC,UAAA,EAAY,YAAA,EAAc,cAAc,MAAA,EAAQ,aAAA,EAAe,cAAc,CAAC,CAAA;AAGlF,EAAA,MAAM,eAAA,GAAkB,QAAQ,MAAM;AACpC,IAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,OAAO,MAAA,CAAO,UAAA,KAAe,YAAA,GAAe,SAAA,GAAY,UAAA;AAAA,IAC1D;AAEE,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,gBAAA,EAAkB,OAAA,EAAS,KAAA;AACvD,IAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,gBAAA,EAAkB,QAAA,EAAU,KAAA;AAEzD,IAAA,IAAI,cAAc,OAAO,SAAA;AACzB,IAAA,IAAI,eAAe,OAAO,UAAA;AAC1B,IAAA,OAAO,IAAA;AAAA,EAEX,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAY,CAAC,CAAA;AAEzB,EAAA,MAAM,iBAAA,GAAoB,WAAA,CAAY,CAAC,MAAA,KAA8B;AACnE,IAAA,IAAI,CAAC,aAAA,EAAe;AAEpB,IAAA,MAAM,iBAAA,GAAoB,MAAA,KAAW,SAAA,GAAY,UAAA,GAAa,WAAA;AAC9D,IAAA,gBAAA,CAAiB;AAAA,MACf,IAAA,EAAM,IAAA;AAAA,MACN,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,MAAM,mBAAA,GAAsB,YAAY,YAAY;AAClD,IAAA,IAAI,CAAC,aAAA,CAAc,MAAA,IAAU,CAAC,MAAA,EAAQ;AAEtC,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,gBAAA,CAAiB,EAAE,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,MAAM,CAAA;AAE9C,IAAA,IAAI;AACF,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,IAAI,CAAC,MAAA,IAAU,CAAC,aAAA,IAAiB,CAAC,cAAA,EAAgB;AAChD,UAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,QACjE;AAEA,QAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,MAAA,KAAW,SAAA,GAAY,WAAA,GAAc,YAAA;AACzE,QAAA,MAAM,GAAA,CAAI,+BAA+B,cAAA,EAAgB,aAAA,EAAe,QAAQ,aAAA,EAAe,MAAA,CAAO,QAAQ,YAAY,CAAA;AAAA,MAC5H,CAAA,MAAO;AACL,QAAA,MAAM,GAAA,CAAI,oBAAA,CAAqB,UAAA,EAAY,aAAA,CAAc,QAAQ,YAAY,CAAA;AAAA,MAC/E;AAEA,MAAA,WAAA,CAAY;AAAA,QACV,IAAA,EAAM,IAAA;AAAA,QACN,OAAA,EAAS,CAAA,sBAAA,EAAyB,aAAA,CAAc,MAAM,CAAA,OAAA,CAAA;AAAA,QACtD,QAAA,EAAU;AAAA,OACX,CAAA;AAGD,MAAA,UAAA,CAAW,MAAM,MAAA,CAAO,QAAA,CAAS,MAAA,IAAU,GAAI,CAAA;AAAA,IACjD,SAAS,WAAA,EAAa;AACpB,MAAA,WAAA,CAAY;AAAA,QACV,IAAA,EAAM,IAAA;AAAA,QACN,OAAA,EAAS,qBAAqB,aAAA,CAAc,MAAM,YAAY,WAAA,YAAuB,KAAA,GAAQ,WAAA,CAAY,OAAA,GAAU,eAAe,CAAA,CAAA;AAAA,QAClI,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,CAAC,aAAA,CAAc,MAAA,EAAQ,MAAA,EAAQ,YAAA,EAAc,MAAA,EAAQ,aAAA,EAAe,cAAA,EAAgB,GAAA,EAAK,YAAA,EAAc,UAAU,CAAC,CAAA;AAErH,EAAA,MAAM,kBAAA,GAAqB,YAAY,MAAM;AAC3C,IAAA,gBAAA,CAAiB,EAAE,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,MAAM,CAAA;AAAA,EAChD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,mBAAA,GAAsB,YAAY,MAAM;AAC5C,IAAA,WAAA,CAAY,WAAS,EAAE,GAAG,IAAA,EAAM,IAAA,EAAM,OAAM,CAAE,CAAA;AAAA,EAChD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBACE,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,YAAA,EACtB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,gBAAA,EAAA,EAAiB,MAAM,EAAA,EAAI,CAAA;AAAA,sBAC5B,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,QAAA,EAAA,yBAAA,EAAuB;AAAA,KAAA,EACrD,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,uBACE,GAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,YAAA,EACtB,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,KAAA,EAAM,OAAA,EAAQ,QAAA,EAAA,6BAAA,EAE1C,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,gBAAA,GAAmB,aAAA,IAAiB,eAAA,IAAmB,CAAC,SAAA;AAC9D,EAAA,MAAM,aAAa,eAAA,KAAoB,SAAA,uBAAa,aAAA,EAAA,EAAc,CAAA,uBAAM,QAAA,EAAA,EAAS,CAAA;AACjF,EAAA,MAAM,WAAA,GAAc,eAAA,KAAoB,SAAA,GAAY,OAAA,CAAQ,gBAAgB,OAAA,CAAQ,cAAA;AACpF,EAAA,MAAM,UAAA,GAAa,eAAA,KAAoB,SAAA,GAAY,UAAA,GAAa,WAAA;AAChE,EAAA,MAAM,WAAA,GAAc,CAAC,eAAA,GAAkB,2BAAA,GAA8B,GAAG,UAAU,CAAA,qBAAA,CAAA;AAClF,EAAA,MAAM,WAAA,GAAc,CAAC,aAAA,GAAgB,qDAAA,GAAwD,WAAA;AAE7F,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,YAAA,EACtB,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAK,OAAA;AAAA,UACL,SAAA,EAAW,UAAA;AAAA,UACX,SAAA,EAAW,WAAA;AAAA,UACX,UAAU,CAAC,gBAAA;AAAA,UACX,OAAA,EAAS,MAAM,eAAA,IAAmB,iBAAA,CAAkB,eAAe,CAAA;AAAA,UACnE,KAAA,EAAO,WAAA;AAAA,UAEN,sCAAY,GAAA,CAAC,gBAAA,EAAA,EAAiB,MAAM,EAAA,EAAI,KAAA,EAAM,WAAU,CAAA,GAAK;AAAA;AAAA,OAChE;AAAA,sBAEA,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,OAAO,MAAA,CAAO,UAAA;AAAA,UACd,IAAA,EAAK,OAAA;AAAA,UACL,WAAW,OAAA,CAAQ,UAAA;AAAA,UACnB,KAAA,EAAO,MAAA,CAAO,UAAA,KAAe,WAAA,GAAc,SAAA,GAAY,SAAA;AAAA,UACvD,IAAA,sBAAO,oBAAA,EAAA,EAAqB;AAAA;AAAA;AAC9B,KAAA,EACF,CAAA;AAAA,oBAGA,IAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,MAAM,aAAA,CAAc,IAAA;AAAA,QACpB,OAAA,EAAS,kBAAA;AAAA,QACT,QAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAS,IAAA;AAAA,QAET,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,WAAA,EAAA,EAAY,QAAA,EAAA;AAAA,YAAA,UAAA;AAAA,YACF,aAAA,CAAc;AAAA,WAAA,EACzB,CAAA;AAAA,+BACC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,UAAA,EAAA,EAAW,QAAA,EAAA;AAAA,cAAA,2BAAA;AAAA,cACgB,aAAA,CAAc,mBAAmB,WAAA,EAAY;AAAA,cAAE;AAAA,aAAA,EAC3E,CAAA;AAAA,4BACA,IAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,KAAA,EAAM,iBAAgB,KAAA,EAAO,EAAE,SAAA,EAAW,CAAA,EAAE,EAAG,QAAA,EAAA;AAAA,cAAA,MAAA;AAAA,cACpE,MAAA,IAAU,OAAO,QAAA,CAAS;AAAA,aAAA,EACjC,CAAA;AAAA,YACC,gCACC,IAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EAAQ,OAAM,eAAA,EAAgB,QAAA,EAAA;AAAA,cAAA,aAAA;AAAA,cACpC;AAAA,aAAA,EACd;AAAA,WAAA,EAEJ,CAAA;AAAA,+BACC,aAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAS,kBAAA,EAAoB,KAAA,EAAM,WAAU,QAAA,EAAA,QAAA,EAErD,CAAA;AAAA,4BACA,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,mBAAA;AAAA,gBACT,KAAA,EAAM,SAAA;AAAA,gBACN,OAAA,EAAQ,WAAA;AAAA,gBAER,SAAA,EAAS,IAAA;AAAA,gBAER,QAAA,EAAA,aAAA,CAAc;AAAA;AAAA;AACjB,WAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,oBAGA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,MAAM,QAAA,CAAS,IAAA;AAAA,QACf,gBAAA,EAAkB,GAAA;AAAA,QAClB,OAAA,EAAS,mBAAA;AAAA,QACT,YAAA,EAAc,EAAE,QAAA,EAAU,QAAA,EAAU,YAAY,OAAA,EAAQ;AAAA,QAExD,QAAA,kBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,mBAAA;AAAA,YACT,UAAU,QAAA,CAAS,QAAA;AAAA,YACnB,OAAA,EAAQ,QAAA;AAAA,YAEP,QAAA,EAAA,QAAA,CAAS;AAAA;AAAA;AACZ;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;;;;"}
|
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.
|
|
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/
|
|
40
|
-
"@backstage/core-
|
|
41
|
-
"@backstage/
|
|
42
|
-
"@backstage/plugin-
|
|
43
|
-
"@backstage/plugin-
|
|
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.
|
|
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.
|
|
60
|
-
"@backstage/core-app-api": "^1.20.
|
|
61
|
-
"@backstage/dev-utils": "^1.1.
|
|
62
|
-
"@backstage/test-utils": "^1.7.
|
|
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",
|