@terasky/backstage-plugin-vcf-automation 1.6.0 → 1.8.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.
@@ -1 +1 @@
1
- {"version":3,"file":"VCFAutomationProjectOverview.esm.js","sources":["../../src/components/VCFAutomationProjectOverview.tsx"],"sourcesContent":["import { Key, JSXElementConstructor, ReactElement, ReactNode, ReactPortal } from 'react';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { vcfAutomationApiRef } from '../api/VcfAutomationClient';\nimport {\n InfoCard,\n Progress,\n ResponseErrorPanel,\n} from '@backstage/core-components';\nimport { Grid, Typography, Chip } from '@material-ui/core';\nimport useAsync from 'react-use/lib/useAsync';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { viewProjectDetailsPermission } from '@terasky/backstage-plugin-vcf-automation-common';\n\nexport const VCFAutomationProjectOverview = () => {\n const { entity } = useEntity();\n const api = useApi(vcfAutomationApiRef);\n const projectId = entity.metadata.name;\n const instanceName = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-instance'];\n\n const { allowed: hasViewPermission, loading: permissionLoading } = usePermission({\n permission: viewProjectDetailsPermission,\n });\n\n const { value: project, loading, error } = useAsync(async () => {\n if (!projectId || !hasViewPermission) return undefined;\n return await api.getProjectDetails(projectId, instanceName);\n }, [projectId, hasViewPermission, instanceName]);\n\n if (!projectId) {\n return (\n <InfoCard title=\"VCF Automation Project\">\n <Typography>No project ID found for this entity.</Typography>\n </InfoCard>\n );\n }\n\n if (loading || permissionLoading) {\n return (\n <InfoCard title=\"VCF Automation Project\">\n <Progress />\n </InfoCard>\n );\n }\n\n if (!hasViewPermission) {\n return (\n <InfoCard title=\"VCF Automation Project\">\n <Typography>You don't have permission to view project details.</Typography>\n </InfoCard>\n );\n }\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n if (!project) {\n return (\n <InfoCard title=\"VCF Automation Project\">\n <Typography>No project details available.</Typography>\n </InfoCard>\n );\n }\n\n return (\n <InfoCard title=\"VCF Automation Project\">\n <Grid container spacing={2}>\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Name</Typography>\n <Typography>{project.name}</Typography>\n </Grid>\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Description</Typography>\n <Typography>{project.description || 'No description'}</Typography>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">Administrators</Typography>\n <Grid container spacing={1}>\n {project.administrators && project.administrators.length > 0 ? (\n project.administrators.map((admin: any, index: number) => (\n <Grid item key={admin.email ? `${admin.email}-${admin.type}` : `admin-${index}`}>\n <Chip\n label={admin.email ? `${admin.email} (${admin.type || 'User'})` : admin.toString()}\n size=\"small\"\n />\n </Grid>\n ))\n ) : (\n <Grid item>\n <Typography variant=\"body2\" color=\"textSecondary\">\n No administrators configured\n </Typography>\n </Grid>\n )}\n </Grid>\n </Grid>\n {project.zones && project.zones.length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">Resource Allocation</Typography>\n {project.zones.map((zone: { id: Key | null | undefined; zoneId: string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined; allocatedInstancesCount: string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined; maxNumberInstances: any; allocatedMemoryMB: string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined; memoryLimitMB: any; allocatedCpu: string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined; cpuLimit: any; allocatedStorageGB: string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined; storageLimitGB: any; }) => (\n <Grid container spacing={2} key={zone.id}>\n <Grid item xs={12}>\n <Typography variant=\"body2\">Zone: {zone.zoneId}</Typography>\n </Grid>\n <Grid item xs={4}>\n <Typography variant=\"caption\">Instances</Typography>\n <Typography>\n {zone.allocatedInstancesCount} / {zone.maxNumberInstances || 'Unlimited'}\n </Typography>\n </Grid>\n <Grid item xs={4}>\n <Typography variant=\"caption\">Memory (MB)</Typography>\n <Typography>\n {zone.allocatedMemoryMB} / {zone.memoryLimitMB || 'Unlimited'}\n </Typography>\n </Grid>\n <Grid item xs={4}>\n <Typography variant=\"caption\">CPU</Typography>\n <Typography>\n {zone.allocatedCpu} / {zone.cpuLimit || 'Unlimited'}\n </Typography>\n </Grid>\n <Grid item xs={4}>\n <Typography variant=\"caption\">Storage (GB)</Typography>\n <Typography>\n {zone.allocatedStorageGB} / {zone.storageLimitGB || 'Unlimited'}\n </Typography>\n </Grid>\n </Grid>\n ))}\n </Grid>\n )}\n {project.sharedResources !== undefined && (\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Shared Resources</Typography>\n <Typography>{project.sharedResources ? 'Yes' : 'No'}</Typography>\n </Grid>\n )}\n {project.placementPolicy && (\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Placement Policy</Typography>\n <Typography>{project.placementPolicy}</Typography>\n </Grid>\n )}\n {project.orgId && (\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Organization ID</Typography>\n <Typography>{project.orgId}</Typography>\n </Grid>\n )}\n {project.operationTimeout !== undefined && (\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Operation Timeout</Typography>\n <Typography>{project.operationTimeout} minutes</Typography>\n </Grid>\n )}\n </Grid>\n </InfoCard>\n );\n}; "],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VCFAutomationProjectOverview.esm.js","sources":["../../src/components/VCFAutomationProjectOverview.tsx"],"sourcesContent":["import { Key, JSXElementConstructor, ReactElement, ReactNode, ReactPortal } from 'react';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { vcfAutomationApiRef } from '../api/VcfAutomationClient';\nimport {\n InfoCard,\n Progress,\n ResponseErrorPanel,\n} from '@backstage/core-components';\nimport { Grid, Typography, Chip } from '@material-ui/core';\nimport useAsync from 'react-use/lib/useAsync';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { viewProjectDetailsPermission } from '@terasky/backstage-plugin-vcf-automation-common';\n\nexport const VCFAutomationProjectOverview = () => {\n const { entity } = useEntity();\n const api = useApi(vcfAutomationApiRef);\n const projectId = entity.metadata.name;\n const instanceName = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-instance'];\n\n const { allowed: hasViewPermission, loading: permissionLoading } = usePermission({\n permission: viewProjectDetailsPermission,\n });\n\n const { value: project, loading, error } = useAsync(async () => {\n if (!projectId || !hasViewPermission) return undefined;\n return await api.getProjectDetails(projectId, instanceName);\n }, [projectId, hasViewPermission, instanceName]);\n\n if (!projectId) {\n return (\n <InfoCard title=\"VCF Automation Project\">\n <Typography>No project ID found for this entity.</Typography>\n </InfoCard>\n );\n }\n\n if (loading || permissionLoading) {\n return (\n <InfoCard title=\"VCF Automation Project\">\n <Progress />\n </InfoCard>\n );\n }\n\n if (!hasViewPermission) {\n return (\n <InfoCard title=\"VCF Automation Project\">\n <Typography>You don't have permission to view project details.</Typography>\n </InfoCard>\n );\n }\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n if (!project) {\n return (\n <InfoCard title=\"VCF Automation Project\">\n <Typography>No project details available.</Typography>\n </InfoCard>\n );\n }\n\n return (\n <InfoCard title=\"VCF Automation Project\">\n <Grid container spacing={2}>\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Name</Typography>\n <Typography>{project.name}</Typography>\n </Grid>\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Description</Typography>\n <Typography>{project.description || 'No description'}</Typography>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">Administrators</Typography>\n <Grid container spacing={1}>\n {project.administrators && project.administrators.length > 0 ? (\n project.administrators.map((admin: any, index: number) => (\n <Grid item key={admin.email ? `${admin.email}-${admin.type}` : `admin-${index}`}>\n <Chip\n label={admin.email ? `${admin.email} (${admin.type || 'User'})` : admin.toString()}\n size=\"small\"\n />\n </Grid>\n ))\n ) : (\n <Grid item>\n <Typography variant=\"body2\" color=\"textSecondary\">\n No administrators configured\n </Typography>\n </Grid>\n )}\n </Grid>\n </Grid>\n {project.zones && project.zones.length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">Resource Allocation</Typography>\n {project.zones.map((zone: { id: Key | null | undefined; zoneId: string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined; allocatedInstancesCount: string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined; maxNumberInstances: any; allocatedMemoryMB: string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined; memoryLimitMB: any; allocatedCpu: string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined; cpuLimit: any; allocatedStorageGB: string | number | boolean | ReactElement<any, string | JSXElementConstructor<any>> | Iterable<ReactNode> | ReactPortal | null | undefined; storageLimitGB: any; }) => (\n <Grid container spacing={2} key={zone.id}>\n <Grid item xs={12}>\n <Typography variant=\"body2\">Zone: {zone.zoneId}</Typography>\n </Grid>\n <Grid item xs={4}>\n <Typography variant=\"caption\">Instances</Typography>\n <Typography>\n {zone.allocatedInstancesCount} / {zone.maxNumberInstances || 'Unlimited'}\n </Typography>\n </Grid>\n <Grid item xs={4}>\n <Typography variant=\"caption\">Memory (MB)</Typography>\n <Typography>\n {zone.allocatedMemoryMB} / {zone.memoryLimitMB || 'Unlimited'}\n </Typography>\n </Grid>\n <Grid item xs={4}>\n <Typography variant=\"caption\">CPU</Typography>\n <Typography>\n {zone.allocatedCpu} / {zone.cpuLimit || 'Unlimited'}\n </Typography>\n </Grid>\n <Grid item xs={4}>\n <Typography variant=\"caption\">Storage (GB)</Typography>\n <Typography>\n {zone.allocatedStorageGB} / {zone.storageLimitGB || 'Unlimited'}\n </Typography>\n </Grid>\n </Grid>\n ))}\n </Grid>\n )}\n {project.sharedResources !== undefined && (\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Shared Resources</Typography>\n <Typography>{project.sharedResources ? 'Yes' : 'No'}</Typography>\n </Grid>\n )}\n {project.placementPolicy && (\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Placement Policy</Typography>\n <Typography>{project.placementPolicy}</Typography>\n </Grid>\n )}\n {project.orgId && (\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Organization ID</Typography>\n <Typography>{project.orgId}</Typography>\n </Grid>\n )}\n {project.operationTimeout !== undefined && (\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Operation Timeout</Typography>\n <Typography>{project.operationTimeout} minutes</Typography>\n </Grid>\n )}\n </Grid>\n </InfoCard>\n );\n}; "],"names":[],"mappings":"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"}
@@ -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 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 +1 @@
1
- {"version":3,"file":"VCFAutomationVSphereVMDetails.esm.js","sources":["../../src/components/VCFAutomationVSphereVMDetails.tsx"],"sourcesContent":["import { useEntity } from '@backstage/plugin-catalog-react';\nimport {\n InfoCard,\n Progress,\n ResponseErrorPanel,\n StructuredMetadataTable,\n} from '@backstage/core-components';\nimport { Grid } from '@material-ui/core';\nimport useAsync from 'react-use/lib/useAsync';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { vcfAutomationApiRef } from '../api/VcfAutomationClient';\nimport { showDeploymentResourcesDataPermission } from '@terasky/backstage-plugin-vcf-automation-common';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\nexport const VCFAutomationVSphereVMDetails = () => {\n const { entity } = useEntity();\n const vcfAutomationApi = useApi(vcfAutomationApiRef);\n const deploymentId = entity.spec?.system || '';\n const resourceId = entity.metadata.name;\n const instanceName = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-instance'];\n\n const { allowed } = usePermission({\n permission: showDeploymentResourcesDataPermission,\n });\n\n const { value, loading, error } = useAsync(async () => {\n if (!resourceId || !deploymentId || !allowed) return undefined;\n return await vcfAutomationApi.getVSphereVMDetails(deploymentId as string, resourceId, instanceName);\n }, [resourceId, deploymentId, allowed, instanceName]);\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (!resourceId || !deploymentId) {\n return <InfoCard title=\"No resource ID found\">This entity is not associated with a VCF resource or deployment.</InfoCard>;\n }\n\n if (!allowed) {\n return <InfoCard title=\"Permission Denied\">You don't have permission to view resource details.</InfoCard>;\n }\n\n if (!value) {\n return <InfoCard title=\"No Data\">No resource details available.</InfoCard>;\n }\n\n return (\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <InfoCard title=\"Resource Status\">\n <StructuredMetadataTable\n metadata={{\n Name: value.name,\n Type: value.type,\n State: value.state,\n 'Sync Status': value.syncStatus,\n 'Created At': new Date(value.createdAt).toLocaleString(),\n Origin: value.origin,\n 'Depends On': value.dependsOn,\n }}\n />\n </InfoCard>\n </Grid>\n\n <Grid item xs={12} md={6}>\n <InfoCard title=\"VM Properties\">\n <StructuredMetadataTable\n metadata={{\n 'Power State': value.properties.powerState,\n Zone: value.properties.zone,\n Environment: value.properties.environmentName,\n 'Host Type': value.properties.computeHostType,\n 'Memory (GB)': value.properties.memoryGB,\n 'CPU Count': value.properties.cpuCount,\n 'Total Memory (MB)': value.properties.totalMemoryMB,\n 'OS Type': value.properties.osType,\n Region: value.properties.region,\n 'Host Name': value.properties.hostName,\n 'Data Center': value.properties.datacenter,\n 'Datastore': value.properties.datastoreName,\n }}\n />\n </InfoCard>\n </Grid>\n\n <Grid item xs={12} md={6}>\n <InfoCard title=\"Storage Configuration\">\n <StructuredMetadataTable\n metadata={{\n 'Primary Disk': {\n Name: value.properties.storage?.disks[0]?.name || 'N/A',\n 'Capacity (GB)': value.properties.storage?.disks[0]?.capacityGb || 'N/A',\n Type: value.properties.storage?.disks[0]?.type || 'N/A',\n 'Provisioning': value.properties.storage?.disks[0]?.provisioningType || 'N/A',\n },\n }}\n />\n </InfoCard>\n </Grid>\n\n <Grid item xs={12} md={6}>\n <InfoCard title=\"Network Configuration\">\n <StructuredMetadataTable\n metadata={{\n 'Primary Network': value.properties.networks?.[0] ? {\n Name: value.properties.networks[0].name,\n Address: value.properties.networks[0].address,\n 'MAC Address': value.properties.networks[0].mac_address,\n Assignment: value.properties.networks[0].assignment,\n 'IPv6 Addresses': value.properties.networks[0].ipv6Addresses || [],\n } : 'No network configuration available',\n }}\n />\n </InfoCard>\n </Grid>\n\n <Grid item xs={12} md={6}>\n <InfoCard title=\"Expense Information\">\n <StructuredMetadataTable\n metadata={{\n 'Total Expense': value.expense?.totalExpense !== undefined ? `$${value.expense.totalExpense.toFixed(2)}` : 'N/A',\n 'Compute Expense': value.expense?.computeExpense !== undefined ? `$${value.expense.computeExpense.toFixed(2)}` : 'N/A',\n 'Storage Expense': value.expense?.storageExpense !== undefined ? `$${value.expense.storageExpense.toFixed(2)}` : 'N/A',\n 'Additional Expense': value.expense?.additionalExpense !== undefined ? `$${value.expense.additionalExpense.toFixed(2)}` : 'N/A',\n 'Currency': value.expense?.unit || 'N/A',\n 'Last Updated': value.expense?.lastUpdatedTime ? new Date(value.expense.lastUpdatedTime).toLocaleString() : 'N/A',\n }}\n />\n </InfoCard>\n </Grid>\n </Grid>\n );\n}; "],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VCFAutomationVSphereVMDetails.esm.js","sources":["../../src/components/VCFAutomationVSphereVMDetails.tsx"],"sourcesContent":["import { useEntity } from '@backstage/plugin-catalog-react';\nimport {\n InfoCard,\n Progress,\n ResponseErrorPanel,\n StructuredMetadataTable,\n} from '@backstage/core-components';\nimport { Grid } from '@material-ui/core';\nimport useAsync from 'react-use/lib/useAsync';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { vcfAutomationApiRef } from '../api/VcfAutomationClient';\nimport { showDeploymentResourcesDataPermission } from '@terasky/backstage-plugin-vcf-automation-common';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\nexport const VCFAutomationVSphereVMDetails = () => {\n const { entity } = useEntity();\n const vcfAutomationApi = useApi(vcfAutomationApiRef);\n const deploymentId = entity.spec?.system || '';\n const resourceId = entity.metadata.name;\n const instanceName = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-instance'];\n\n const { allowed } = usePermission({\n permission: showDeploymentResourcesDataPermission,\n });\n\n const { value, loading, error } = useAsync(async () => {\n if (!resourceId || !deploymentId || !allowed) return undefined;\n return await vcfAutomationApi.getVSphereVMDetails(deploymentId as string, resourceId, instanceName);\n }, [resourceId, deploymentId, allowed, instanceName]);\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (!resourceId || !deploymentId) {\n return <InfoCard title=\"No resource ID found\">This entity is not associated with a VCF resource or deployment.</InfoCard>;\n }\n\n if (!allowed) {\n return <InfoCard title=\"Permission Denied\">You don't have permission to view resource details.</InfoCard>;\n }\n\n if (!value) {\n return <InfoCard title=\"No Data\">No resource details available.</InfoCard>;\n }\n\n return (\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <InfoCard title=\"Resource Status\">\n <StructuredMetadataTable\n metadata={{\n Name: value.name,\n Type: value.type,\n State: value.state,\n 'Sync Status': value.syncStatus,\n 'Created At': new Date(value.createdAt).toLocaleString(),\n Origin: value.origin,\n 'Depends On': value.dependsOn,\n }}\n />\n </InfoCard>\n </Grid>\n\n <Grid item xs={12} md={6}>\n <InfoCard title=\"VM Properties\">\n <StructuredMetadataTable\n metadata={{\n 'Power State': value.properties.powerState,\n Zone: value.properties.zone,\n Environment: value.properties.environmentName,\n 'Host Type': value.properties.computeHostType,\n 'Memory (GB)': value.properties.memoryGB,\n 'CPU Count': value.properties.cpuCount,\n 'Total Memory (MB)': value.properties.totalMemoryMB,\n 'OS Type': value.properties.osType,\n Region: value.properties.region,\n 'Host Name': value.properties.hostName,\n 'Data Center': value.properties.datacenter,\n 'Datastore': value.properties.datastoreName,\n }}\n />\n </InfoCard>\n </Grid>\n\n <Grid item xs={12} md={6}>\n <InfoCard title=\"Storage Configuration\">\n <StructuredMetadataTable\n metadata={{\n 'Primary Disk': {\n Name: value.properties.storage?.disks[0]?.name || 'N/A',\n 'Capacity (GB)': value.properties.storage?.disks[0]?.capacityGb || 'N/A',\n Type: value.properties.storage?.disks[0]?.type || 'N/A',\n 'Provisioning': value.properties.storage?.disks[0]?.provisioningType || 'N/A',\n },\n }}\n />\n </InfoCard>\n </Grid>\n\n <Grid item xs={12} md={6}>\n <InfoCard title=\"Network Configuration\">\n <StructuredMetadataTable\n metadata={{\n 'Primary Network': value.properties.networks?.[0] ? {\n Name: value.properties.networks[0].name,\n Address: value.properties.networks[0].address,\n 'MAC Address': value.properties.networks[0].mac_address,\n Assignment: value.properties.networks[0].assignment,\n 'IPv6 Addresses': value.properties.networks[0].ipv6Addresses || [],\n } : 'No network configuration available',\n }}\n />\n </InfoCard>\n </Grid>\n\n <Grid item xs={12} md={6}>\n <InfoCard title=\"Expense Information\">\n <StructuredMetadataTable\n metadata={{\n 'Total Expense': value.expense?.totalExpense !== undefined ? `$${value.expense.totalExpense.toFixed(2)}` : 'N/A',\n 'Compute Expense': value.expense?.computeExpense !== undefined ? `$${value.expense.computeExpense.toFixed(2)}` : 'N/A',\n 'Storage Expense': value.expense?.storageExpense !== undefined ? `$${value.expense.storageExpense.toFixed(2)}` : 'N/A',\n 'Additional Expense': value.expense?.additionalExpense !== undefined ? `$${value.expense.additionalExpense.toFixed(2)}` : 'N/A',\n 'Currency': value.expense?.unit || 'N/A',\n 'Last Updated': value.expense?.lastUpdatedTime ? new Date(value.expense.lastUpdatedTime).toLocaleString() : 'N/A',\n }}\n />\n </InfoCard>\n </Grid>\n </Grid>\n );\n}; "],"names":[],"mappings":"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"}
@@ -52,7 +52,7 @@ const VCFAutomationVSphereVMOverview = () => {
52
52
  return /* @__PURE__ */ jsx(InfoCard, { title: "VCF Automation Resource", children: /* @__PURE__ */ jsx(Typography, { children: "No resource details available." }) });
53
53
  }
54
54
  const getStatusComponent = (state) => {
55
- switch (state.toUpperCase()) {
55
+ switch (state?.toUpperCase() || "UNKNOWN") {
56
56
  case "SUCCESS":
57
57
  case "OK":
58
58
  return /* @__PURE__ */ jsx(StatusOK, {});
@@ -76,14 +76,14 @@ const VCFAutomationVSphereVMOverview = () => {
76
76
  /* @__PURE__ */ jsx(Typography, { variant: "subtitle2", children: "State" }),
77
77
  /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 1, alignItems: "center", children: [
78
78
  getStatusComponent(resource.state),
79
- /* @__PURE__ */ jsx(Typography, { className: `${classes.statusText} ${resource.state.toLowerCase()}`, children: resource.state })
79
+ /* @__PURE__ */ jsx(Typography, { className: `${classes.statusText} ${resource.state?.toLowerCase() || "unknown"}`, children: resource.state })
80
80
  ] })
81
81
  ] }),
82
82
  /* @__PURE__ */ jsxs(Grid, { item: true, xs: 6, children: [
83
83
  /* @__PURE__ */ jsx(Typography, { variant: "subtitle2", children: "Sync Status" }),
84
84
  /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 1, alignItems: "center", children: [
85
85
  getStatusComponent(resource.syncStatus),
86
- /* @__PURE__ */ jsx(Typography, { className: `${classes.statusText} ${resource.syncStatus.toLowerCase()}`, children: resource.syncStatus })
86
+ /* @__PURE__ */ jsx(Typography, { className: `${classes.statusText} ${resource.syncStatus?.toLowerCase() || "unknown"}`, children: resource.syncStatus })
87
87
  ] })
88
88
  ] }),
89
89
  /* @__PURE__ */ jsxs(Grid, { item: true, xs: 6, children: [
@@ -1 +1 @@
1
- {"version":3,"file":"VCFAutomationVSphereVMOverview.esm.js","sources":["../../src/components/VCFAutomationVSphereVMOverview.tsx"],"sourcesContent":["import { useEntity } from '@backstage/plugin-catalog-react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { vcfAutomationApiRef } from '../api/VcfAutomationClient';\nimport {\n InfoCard,\n Progress,\n ResponseErrorPanel,\n StatusOK,\n StatusError,\n StatusPending,\n} from '@backstage/core-components';\nimport { Grid, Typography, makeStyles } from '@material-ui/core';\nimport useAsync from 'react-use/lib/useAsync';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { showDeploymentResourcesDataPermission } from '@terasky/backstage-plugin-vcf-automation-common';\n\nconst useStyles = makeStyles(theme => ({\n statusText: {\n fontWeight: 'bold',\n '&.success': {\n color: theme.palette.success.main,\n },\n '&.error': {\n color: theme.palette.error.main,\n },\n '&.pending': {\n color: theme.palette.warning.main,\n },\n },\n}));\n\nexport const VCFAutomationVSphereVMOverview = () => {\n const { entity } = useEntity();\n const api = useApi(vcfAutomationApiRef);\n const classes = useStyles();\n const deploymentId = entity.spec?.system || '';\n const resourceId = entity.metadata.name;\n const instanceName = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-instance'];\n\n const { allowed: hasViewPermission, loading: permissionLoading } = usePermission({\n permission: showDeploymentResourcesDataPermission,\n });\n\n const { value: resource, loading, error } = useAsync(async () => {\n if (!resourceId || !deploymentId || !hasViewPermission) return undefined;\n return await api.getVSphereVMDetails(deploymentId as string, resourceId, instanceName);\n }, [resourceId, deploymentId, hasViewPermission, instanceName]);\n\n if (!resourceId || !deploymentId) {\n return (\n <InfoCard title=\"VCF Automation Resource\">\n <Typography>No resource ID or deployment ID found for this entity.</Typography>\n </InfoCard>\n );\n }\n\n if (loading || permissionLoading) {\n return (\n <InfoCard title=\"VCF Automation Resource\">\n <Progress />\n </InfoCard>\n );\n }\n\n if (!hasViewPermission) {\n return (\n <InfoCard title=\"VCF Automation Resource\">\n <Typography>You don't have permission to view resource details.</Typography>\n </InfoCard>\n );\n }\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n if (!resource) {\n return (\n <InfoCard title=\"VCF Automation Resource\">\n <Typography>No resource details available.</Typography>\n </InfoCard>\n );\n }\n\n const getStatusComponent = (state: string) => {\n switch (state.toUpperCase()) {\n case 'SUCCESS':\n case 'OK':\n return <StatusOK />;\n case 'ERROR':\n case 'FAILED':\n return <StatusError />;\n default:\n return <StatusPending />;\n }\n };\n\n return (\n <InfoCard title=\"VCF Automation Resource\">\n <Grid container spacing={2}>\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Name</Typography>\n <Typography>{resource.name}</Typography>\n </Grid>\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Type</Typography>\n <Typography>{resource.type}</Typography>\n </Grid>\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">State</Typography>\n <Grid container spacing={1} alignItems=\"center\">\n {getStatusComponent(resource.state)}\n <Typography className={`${classes.statusText} ${resource.state.toLowerCase()}`}>\n {resource.state}\n </Typography>\n </Grid>\n </Grid>\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Sync Status</Typography>\n <Grid container spacing={1} alignItems=\"center\">\n {getStatusComponent(resource.syncStatus)}\n <Typography className={`${classes.statusText} ${resource.syncStatus.toLowerCase()}`}>\n {resource.syncStatus}\n </Typography>\n </Grid>\n </Grid>\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Created At</Typography>\n <Typography>{new Date(resource.createdAt).toLocaleString()}</Typography>\n </Grid>\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Region</Typography>\n <Typography>{resource.properties?.region || 'N/A'}</Typography>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">Resource Metrics</Typography>\n <Typography>\n {`CPU: ${resource.properties?.cpuCount || 'N/A'} cores, `}\n {`Memory: ${resource.properties?.memoryGB || 'N/A'} GB, `}\n {`Storage: ${resource.properties?.storage?.disks?.[0]?.capacityGb || 'N/A'} GB`}\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">Expense Information</Typography>\n <Typography>\n {`Total: $${resource.expense?.totalExpense?.toFixed(2) || 'N/A'}, `}\n {`Compute: $${resource.expense?.computeExpense?.toFixed(2) || 'N/A'}, `}\n {`Storage: $${resource.expense?.storageExpense?.toFixed(2) || 'N/A'}`}\n </Typography>\n </Grid>\n </Grid>\n </InfoCard>\n );\n}; "],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VCFAutomationVSphereVMOverview.esm.js","sources":["../../src/components/VCFAutomationVSphereVMOverview.tsx"],"sourcesContent":["import { useEntity } from '@backstage/plugin-catalog-react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { vcfAutomationApiRef } from '../api/VcfAutomationClient';\nimport {\n InfoCard,\n Progress,\n ResponseErrorPanel,\n StatusOK,\n StatusError,\n StatusPending,\n} from '@backstage/core-components';\nimport { Grid, Typography, makeStyles } from '@material-ui/core';\nimport useAsync from 'react-use/lib/useAsync';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { showDeploymentResourcesDataPermission } from '@terasky/backstage-plugin-vcf-automation-common';\n\nconst useStyles = makeStyles(theme => ({\n statusText: {\n fontWeight: 'bold',\n '&.success': {\n color: theme.palette.success.main,\n },\n '&.error': {\n color: theme.palette.error.main,\n },\n '&.pending': {\n color: theme.palette.warning.main,\n },\n },\n}));\n\nexport const VCFAutomationVSphereVMOverview = () => {\n const { entity } = useEntity();\n const api = useApi(vcfAutomationApiRef);\n const classes = useStyles();\n const deploymentId = entity.spec?.system || '';\n const resourceId = entity.metadata.name;\n const instanceName = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-instance'];\n\n const { allowed: hasViewPermission, loading: permissionLoading } = usePermission({\n permission: showDeploymentResourcesDataPermission,\n });\n\n const { value: resource, loading, error } = useAsync(async () => {\n if (!resourceId || !deploymentId || !hasViewPermission) return undefined;\n return await api.getVSphereVMDetails(deploymentId as string, resourceId, instanceName);\n }, [resourceId, deploymentId, hasViewPermission, instanceName]);\n\n if (!resourceId || !deploymentId) {\n return (\n <InfoCard title=\"VCF Automation Resource\">\n <Typography>No resource ID or deployment ID found for this entity.</Typography>\n </InfoCard>\n );\n }\n\n if (loading || permissionLoading) {\n return (\n <InfoCard title=\"VCF Automation Resource\">\n <Progress />\n </InfoCard>\n );\n }\n\n if (!hasViewPermission) {\n return (\n <InfoCard title=\"VCF Automation Resource\">\n <Typography>You don't have permission to view resource details.</Typography>\n </InfoCard>\n );\n }\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n if (!resource) {\n return (\n <InfoCard title=\"VCF Automation Resource\">\n <Typography>No resource details available.</Typography>\n </InfoCard>\n );\n }\n\n const getStatusComponent = (state: string) => {\n switch (state?.toUpperCase() || 'UNKNOWN') {\n case 'SUCCESS':\n case 'OK':\n return <StatusOK />;\n case 'ERROR':\n case 'FAILED':\n return <StatusError />;\n default:\n return <StatusPending />;\n }\n };\n\n return (\n <InfoCard title=\"VCF Automation Resource\">\n <Grid container spacing={2}>\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Name</Typography>\n <Typography>{resource.name}</Typography>\n </Grid>\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Type</Typography>\n <Typography>{resource.type}</Typography>\n </Grid>\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">State</Typography>\n <Grid container spacing={1} alignItems=\"center\">\n {getStatusComponent(resource.state)}\n <Typography className={`${classes.statusText} ${resource.state?.toLowerCase() || 'unknown'}`}>\n {resource.state}\n </Typography>\n </Grid>\n </Grid>\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Sync Status</Typography>\n <Grid container spacing={1} alignItems=\"center\">\n {getStatusComponent(resource.syncStatus)}\n <Typography className={`${classes.statusText} ${resource.syncStatus?.toLowerCase() || 'unknown'}`}>\n {resource.syncStatus}\n </Typography>\n </Grid>\n </Grid>\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Created At</Typography>\n <Typography>{new Date(resource.createdAt).toLocaleString()}</Typography>\n </Grid>\n <Grid item xs={6}>\n <Typography variant=\"subtitle2\">Region</Typography>\n <Typography>{resource.properties?.region || 'N/A'}</Typography>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">Resource Metrics</Typography>\n <Typography>\n {`CPU: ${resource.properties?.cpuCount || 'N/A'} cores, `}\n {`Memory: ${resource.properties?.memoryGB || 'N/A'} GB, `}\n {`Storage: ${resource.properties?.storage?.disks?.[0]?.capacityGb || 'N/A'} GB`}\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"subtitle2\">Expense Information</Typography>\n <Typography>\n {`Total: $${resource.expense?.totalExpense?.toFixed(2) || 'N/A'}, `}\n {`Compute: $${resource.expense?.computeExpense?.toFixed(2) || 'N/A'}, `}\n {`Storage: $${resource.expense?.storageExpense?.toFixed(2) || 'N/A'}`}\n </Typography>\n </Grid>\n </Grid>\n </InfoCard>\n );\n}; "],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ 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
4
  import react__default from 'react';
5
+ import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
5
6
 
6
7
  declare const vcfAutomationPlugin: _backstage_core_plugin_api.BackstagePlugin<{
7
8
  root: _backstage_core_plugin_api.RouteRef<undefined>;
@@ -464,7 +465,7 @@ interface VcfAutomationApi {
464
465
  getSupervisorResourceManifest(namespaceUrnId: string, namespaceName: string, resourceName: string, apiVersion: string, kind: string, instanceName?: string): Promise<any>;
465
466
  updateSupervisorResourceManifest(namespaceUrnId: string, namespaceName: string, resourceName: string, apiVersion: string, kind: string, manifest: any, instanceName?: string): Promise<any>;
466
467
  }
467
- declare const vcfAutomationApiRef: _backstage_core_plugin_api.ApiRef<VcfAutomationApi>;
468
+ declare const vcfAutomationApiRef: _backstage_frontend_plugin_api.ApiRef<VcfAutomationApi>;
468
469
  declare class VcfAutomationClient implements VcfAutomationApi {
469
470
  private readonly discoveryApi;
470
471
  private readonly identityApi;
@@ -495,4 +496,5 @@ declare class VcfAutomationClient implements VcfAutomationApi {
495
496
 
496
497
  declare const rootRouteRef: _backstage_core_plugin_api.RouteRef<undefined>;
497
498
 
498
- export { type CciSupervisorNamespace, type CciSupervisorResource, type StandaloneVmStatus, VCFAutomationCCINamespaceDetails, VCFAutomationCCINamespaceOverview, VCFAutomationCCIResourceDetails, VCFAutomationCCIResourceOverview, VCFAutomationDeploymentDetails, VCFAutomationDeploymentOverview, VCFAutomationGenericResourceDetails, VCFAutomationGenericResourceOverview, VCFAutomationProjectDetails, VCFAutomationProjectOverview, VCFAutomationVMPowerManagement, VCFAutomationVSphereVMDetails, VCFAutomationVSphereVMOverview, type VcfAutomationApi, VcfAutomationClient, type VcfDeploymentEvent$1 as VcfDeploymentEvent, type VcfDeploymentHistory, type VcfPageResponse, type VcfPageable, type VcfProject$1 as VcfProject, type VcfProjectZone, type VcfResource, type VcfResourceDisk, type VcfResourceExpense, type VcfResourceNetwork, type VmPowerAction, type VmPowerActionRequest, type VmPowerActionType, type VmPowerState, rootRouteRef, vcfAutomationApiRef, vcfAutomationPlugin };
499
+ export { VCFAutomationCCINamespaceDetails, VCFAutomationCCINamespaceOverview, VCFAutomationCCIResourceDetails, VCFAutomationCCIResourceOverview, VCFAutomationDeploymentDetails, VCFAutomationDeploymentOverview, VCFAutomationGenericResourceDetails, VCFAutomationGenericResourceOverview, VCFAutomationProjectDetails, VCFAutomationProjectOverview, VCFAutomationVMPowerManagement, VCFAutomationVSphereVMDetails, VCFAutomationVSphereVMOverview, VcfAutomationClient, rootRouteRef, vcfAutomationApiRef, vcfAutomationPlugin };
500
+ export type { CciSupervisorNamespace, CciSupervisorResource, StandaloneVmStatus, VcfAutomationApi, VcfDeploymentEvent$1 as VcfDeploymentEvent, VcfDeploymentHistory, VcfPageResponse, VcfPageable, VcfProject$1 as VcfProject, VcfProjectZone, VcfResource, VcfResourceDisk, VcfResourceExpense, VcfResourceNetwork, VmPowerAction, VmPowerActionRequest, VmPowerActionType, VmPowerState };
@@ -1,6 +1,6 @@
1
- import { createExternalRouteRef, createPlugin, createApiFactory, discoveryApiRef, identityApiRef, createRoutableExtension } from '@backstage/core-plugin-api';
1
+ import { createExternalRouteRef, createPlugin, createApiFactory, identityApiRef, discoveryApiRef, createRoutableExtension } from '@backstage/core-plugin-api';
2
2
  import { rootRouteRef } from './routes.esm.js';
3
- import { vcfAutomationApiRef, VcfAutomationClient } from './api/VcfAutomationClient.esm.js';
3
+ import { VcfAutomationClient, vcfAutomationApiRef } from './api/VcfAutomationClient.esm.js';
4
4
 
5
5
  const catalogIndexRouteRef = createExternalRouteRef({
6
6
  id: "catalog-index"
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["import {\n createPlugin,\n createApiFactory,\n discoveryApiRef,\n identityApiRef,\n createRoutableExtension,\n createExternalRouteRef,\n} from '@backstage/core-plugin-api';\nimport { rootRouteRef } from './routes';\nimport { vcfAutomationApiRef, VcfAutomationClient } from './api';\n\nexport const catalogIndexRouteRef = createExternalRouteRef({\n id: 'catalog-index',\n});\n\nexport const vcfAutomationPlugin = createPlugin({\n id: 'vcf-automation',\n apis: [\n createApiFactory({\n api: vcfAutomationApiRef,\n deps: { discoveryApi: discoveryApiRef, identityApi: identityApiRef },\n factory: ({ discoveryApi, identityApi }) =>\n new VcfAutomationClient({ discoveryApi, identityApi }),\n }),\n ],\n routes: {\n root: rootRouteRef,\n },\n externalRoutes: {\n catalogIndex: catalogIndexRouteRef,\n },\n});\n\nexport const VcfAutomationDeploymentDetails = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationDeploymentDetails',\n component: () =>\n import('./components/VCFAutomationDeploymentDetails').then(m => m.VCFAutomationDeploymentDetails),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationVSphereVMDetails = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationVSphereVMDetails',\n component: () =>\n import('./components/VCFAutomationVSphereVMDetails').then(m => m.VCFAutomationVSphereVMDetails),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationProjectDetails = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationProjectDetails',\n component: () =>\n import('./components/VCFAutomationProjectDetails').then(m => m.VCFAutomationProjectDetails),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationDeploymentOverview = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationDeploymentOverview',\n component: () =>\n import('./components/VCFAutomationDeploymentOverview').then(m => m.VCFAutomationDeploymentOverview),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationVSphereVMOverview = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationVSphereVMOverview',\n component: () =>\n import('./components/VCFAutomationVSphereVMOverview').then(m => m.VCFAutomationVSphereVMOverview),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationProjectOverview = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationProjectOverview',\n component: () =>\n import('./components/VCFAutomationProjectOverview').then(m => m.VCFAutomationProjectOverview),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationGenericResourceDetails = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationGenericResourceDetails',\n component: () =>\n import('./components/VCFAutomationGenericResourceDetails').then(m => m.VCFAutomationGenericResourceDetails),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationGenericResourceOverview = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationGenericResourceOverview',\n component: () =>\n import('./components/VCFAutomationGenericResourceOverview').then(m => m.VCFAutomationGenericResourceOverview),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationCCINamespaceOverview = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationCCINamespaceOverview',\n component: () =>\n import('./components/VCFAutomationCCINamespaceOverview').then(m => m.VCFAutomationCCINamespaceOverview),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationCCINamespaceDetails = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationCCINamespaceDetails',\n component: () =>\n import('./components/VCFAutomationCCINamespaceDetails').then(m => m.VCFAutomationCCINamespaceDetails),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationCCIResourceOverview = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationCCIResourceOverview',\n component: () =>\n import('./components/VCFAutomationCCIResourceOverview').then(m => m.VCFAutomationCCIResourceOverview),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationCCIResourceDetails = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationCCIResourceDetails',\n component: () =>\n import('./components/VCFAutomationCCIResourceDetails').then(m => m.VCFAutomationCCIResourceDetails),\n mountPoint: rootRouteRef,\n }),\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["import {\n createPlugin,\n createApiFactory,\n discoveryApiRef,\n identityApiRef,\n createRoutableExtension,\n createExternalRouteRef,\n} from '@backstage/core-plugin-api';\nimport { rootRouteRef } from './routes';\nimport { vcfAutomationApiRef, VcfAutomationClient } from './api';\n\nexport const catalogIndexRouteRef = createExternalRouteRef({\n id: 'catalog-index',\n});\n\nexport const vcfAutomationPlugin = createPlugin({\n id: 'vcf-automation',\n apis: [\n createApiFactory({\n api: vcfAutomationApiRef,\n deps: { discoveryApi: discoveryApiRef, identityApi: identityApiRef },\n factory: ({ discoveryApi, identityApi }) =>\n new VcfAutomationClient({ discoveryApi, identityApi }),\n }),\n ],\n routes: {\n root: rootRouteRef,\n },\n externalRoutes: {\n catalogIndex: catalogIndexRouteRef,\n },\n});\n\nexport const VcfAutomationDeploymentDetails = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationDeploymentDetails',\n component: () =>\n import('./components/VCFAutomationDeploymentDetails').then(m => m.VCFAutomationDeploymentDetails),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationVSphereVMDetails = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationVSphereVMDetails',\n component: () =>\n import('./components/VCFAutomationVSphereVMDetails').then(m => m.VCFAutomationVSphereVMDetails),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationProjectDetails = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationProjectDetails',\n component: () =>\n import('./components/VCFAutomationProjectDetails').then(m => m.VCFAutomationProjectDetails),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationDeploymentOverview = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationDeploymentOverview',\n component: () =>\n import('./components/VCFAutomationDeploymentOverview').then(m => m.VCFAutomationDeploymentOverview),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationVSphereVMOverview = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationVSphereVMOverview',\n component: () =>\n import('./components/VCFAutomationVSphereVMOverview').then(m => m.VCFAutomationVSphereVMOverview),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationProjectOverview = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationProjectOverview',\n component: () =>\n import('./components/VCFAutomationProjectOverview').then(m => m.VCFAutomationProjectOverview),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationGenericResourceDetails = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationGenericResourceDetails',\n component: () =>\n import('./components/VCFAutomationGenericResourceDetails').then(m => m.VCFAutomationGenericResourceDetails),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationGenericResourceOverview = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationGenericResourceOverview',\n component: () =>\n import('./components/VCFAutomationGenericResourceOverview').then(m => m.VCFAutomationGenericResourceOverview),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationCCINamespaceOverview = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationCCINamespaceOverview',\n component: () =>\n import('./components/VCFAutomationCCINamespaceOverview').then(m => m.VCFAutomationCCINamespaceOverview),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationCCINamespaceDetails = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationCCINamespaceDetails',\n component: () =>\n import('./components/VCFAutomationCCINamespaceDetails').then(m => m.VCFAutomationCCINamespaceDetails),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationCCIResourceOverview = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationCCIResourceOverview',\n component: () =>\n import('./components/VCFAutomationCCIResourceOverview').then(m => m.VCFAutomationCCIResourceOverview),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const VcfAutomationCCIResourceDetails = vcfAutomationPlugin.provide(\n createRoutableExtension({\n name: 'VcfAutomationCCIResourceDetails',\n component: () =>\n import('./components/VCFAutomationCCIResourceDetails').then(m => m.VCFAutomationCCIResourceDetails),\n mountPoint: rootRouteRef,\n }),\n);\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"routes.esm.js","sources":["../src/routes.ts"],"sourcesContent":["import { createRouteRef } from '@backstage/core-plugin-api';\n\nexport const rootRouteRef = createRouteRef({\n id: 'vcf-automation',\n});\n\nexport const deploymentRouteRef = createRouteRef({\n id: 'vcf-automation:deployment',\n params: ['deploymentId'],\n});\n\nexport const resourceRouteRef = createRouteRef({\n id: 'vcf-automation:resource',\n params: ['deploymentId', 'resourceId'],\n});\n\nexport const projectRouteRef = createRouteRef({\n id: 'vcf-automation:project',\n params: ['projectId'],\n});\n"],"names":[],"mappings":";;AAEO,MAAM,eAAe,cAAe,CAAA;AAAA,EACzC,EAAI,EAAA;AACN,CAAC;AAEiC,cAAe,CAAA;AAAA,EAC/C,EAAI,EAAA,2BAAA;AAAA,EACJ,MAAA,EAAQ,CAAC,cAAc;AACzB,CAAC;AAE+B,cAAe,CAAA;AAAA,EAC7C,EAAI,EAAA,yBAAA;AAAA,EACJ,MAAA,EAAQ,CAAC,cAAA,EAAgB,YAAY;AACvC,CAAC;AAE8B,cAAe,CAAA;AAAA,EAC5C,EAAI,EAAA,wBAAA;AAAA,EACJ,MAAA,EAAQ,CAAC,WAAW;AACtB,CAAC;;;;"}
1
+ {"version":3,"file":"routes.esm.js","sources":["../src/routes.ts"],"sourcesContent":["import { createRouteRef } from '@backstage/core-plugin-api';\n\nexport const rootRouteRef = createRouteRef({\n id: 'vcf-automation',\n});\n\nexport const deploymentRouteRef = createRouteRef({\n id: 'vcf-automation:deployment',\n params: ['deploymentId'],\n});\n\nexport const resourceRouteRef = createRouteRef({\n id: 'vcf-automation:resource',\n params: ['deploymentId', 'resourceId'],\n});\n\nexport const projectRouteRef = createRouteRef({\n id: 'vcf-automation:project',\n params: ['projectId'],\n});\n"],"names":[],"mappings":";;AAEO,MAAM,eAAe,cAAA,CAAe;AAAA,EACzC,EAAA,EAAI;AACN,CAAC;AAEiC,cAAA,CAAe;AAAA,EAC/C,EAAA,EAAI,2BAAA;AAAA,EACJ,MAAA,EAAQ,CAAC,cAAc;AACzB,CAAC;AAE+B,cAAA,CAAe;AAAA,EAC7C,EAAA,EAAI,yBAAA;AAAA,EACJ,MAAA,EAAQ,CAAC,cAAA,EAAgB,YAAY;AACvC,CAAC;AAE8B,cAAA,CAAe;AAAA,EAC5C,EAAA,EAAI,wBAAA;AAAA,EACJ,MAAA,EAAQ,CAAC,WAAW;AACtB,CAAC;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@terasky/backstage-plugin-vcf-automation",
3
- "version": "1.6.0",
3
+ "version": "1.8.1",
4
4
  "license": "Apache-2.0",
5
5
  "main": "./dist/index.esm.js",
6
6
  "types": "./dist/index.d.ts",
@@ -36,17 +36,17 @@
36
36
  "postpack": "backstage-cli package postpack"
37
37
  },
38
38
  "dependencies": {
39
- "@backstage/core-components": "^0.18.3",
40
- "@backstage/core-plugin-api": "^1.12.0",
41
- "@backstage/frontend-plugin-api": "^0.13.1",
42
- "@backstage/plugin-catalog-react": "^1.21.3",
43
- "@backstage/plugin-permission-react": "^0.4.38",
44
- "@backstage/theme": "^0.7.0",
39
+ "@backstage/core-components": "^0.18.4",
40
+ "@backstage/core-plugin-api": "^1.12.1",
41
+ "@backstage/frontend-plugin-api": "^0.13.2",
42
+ "@backstage/plugin-catalog-react": "^1.21.4",
43
+ "@backstage/plugin-permission-react": "^0.4.39",
44
+ "@backstage/theme": "^0.7.1",
45
45
  "@material-ui/core": "^4.12.4",
46
46
  "@material-ui/icons": "^4.11.3",
47
47
  "@material-ui/lab": "4.0.0-alpha.61",
48
48
  "@monaco-editor/react": "^4.7.0",
49
- "@terasky/backstage-plugin-vcf-automation-common": "^1.2.6",
49
+ "@terasky/backstage-plugin-vcf-automation-common": "^1.2.7",
50
50
  "js-yaml": "^4.1.0",
51
51
  "react-use": "^17.6.0"
52
52
  },
@@ -56,10 +56,10 @@
56
56
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
57
57
  },
58
58
  "devDependencies": {
59
- "@backstage/cli": "^0.34.5",
60
- "@backstage/core-app-api": "^1.19.2",
61
- "@backstage/dev-utils": "^1.1.17",
62
- "@backstage/test-utils": "^1.7.13",
59
+ "@backstage/cli": "^0.35.1",
60
+ "@backstage/core-app-api": "^1.19.3",
61
+ "@backstage/dev-utils": "^1.1.18",
62
+ "@backstage/test-utils": "^1.7.14",
63
63
  "@testing-library/jest-dom": "^5.10.1",
64
64
  "@testing-library/react": "^12.1.3",
65
65
  "@testing-library/user-event": "^14.0.0",