packages/react/src/vm-extension/vm-extension-details.tsx (136 lines of code) (raw):

import React from "react"; import { TextField } from "@fluentui/react/lib/TextField"; import { PropertyList, PropertyGroup, TextProperty, DateProperty, } from "@azure/bonito-ui/lib/components"; import { VmExtItem } from "./vm-extension-list"; import { translate } from "@azure/bonito-core"; import { useAppTheme } from "@azure/bonito-ui/lib/theme"; export interface VmExtensionDetailsProps { vme?: VmExtItem; } export const VmExtensionDetails = (props: VmExtensionDetailsProps) => { const theme = useAppTheme(); const { vme } = props; const firstStatus = React.useMemo(() => getfirstStatus(vme), [vme]); const subStatues = vme?.instanceView?.subStatuses; const titleStyle = React.useMemo(() => { return { color: theme.palette.black, fontSize: "14px", fontWeight: "600", marginTop: "0px", }; }, [theme.palette.black]); const groupStyle = React.useMemo(() => { return { paddingBottom: "20px", }; }, []); if (!vme) { return null; } // TODO: remove hideCopyButton when this is fixed: // https://msazure.visualstudio.com/One/_workitems/edit/25071199 return ( <PropertyList> <PropertyGroup title={translate("lib.react.common.general")} disableCollapse={true} titleStyle={titleStyle} containerStyle={groupStyle} > <TextProperty label={translate("lib.react.vmExtension.name")} value={vme.name} hideCopyButton={true} /> <TextProperty label={translate("lib.react.vmExtension.type")} value={vme.type} hideCopyButton={true} /> <TextProperty label={translate("lib.react.vmExtension.version")} value={vme.typeHandlerVersion} hideCopyButton={true} /> <TextProperty label={translate("lib.react.vmExtension.publisher")} value={vme.publisher} hideCopyButton={true} /> <TextProperty label={translate("lib.react.vmExtension.autoUpdate")} value={getEnableAutomaticUpgradeValue(vme)} hideCopyButton={true} /> </PropertyGroup> {firstStatus && ( <PropertyGroup title={translate("lib.react.vmExtension.status")} disableCollapse={true} titleStyle={titleStyle} containerStyle={groupStyle} > <TextProperty label={translate("lib.react.vmExtension.status")} value={firstStatus.displayStatus} hideCopyButton={true} /> <TextProperty label={translate("lib.react.vmExtension.level")} value={firstStatus.level} hideCopyButton={true} /> <TextProperty label={translate("lib.react.common.message")} value={firstStatus.message} hideCopyButton={true} /> <DateProperty label={translate("lib.react.common.time")} value={firstStatus.time} hideCopyButton={true} /> {subStatues && subStatues.length > 0 && ( <TextProperty label={translate( "lib.react.vmExtension.detailedStatus" )} value={JSON.stringify(subStatues, null, 4)} hideCopyButton={true} multiline /> )} </PropertyGroup> )} {vme.settings && ( <PropertyGroup title={translate("lib.react.vmExtension.settings")} disableCollapse={true} titleStyle={titleStyle} containerStyle={groupStyle} > <TextField ariaLabel={translate("lib.react.vmExtension.settings")} readOnly autoAdjustHeight multiline contentEditable={false} value={JSON.stringify(vme.settings, null, 4)} resizable={false} ></TextField> </PropertyGroup> )} </PropertyList> ); }; export function getEnableAutomaticUpgradeValue(item: VmExtItem) { if (item.enableAutomaticUpgrade === undefined) { return "N/A"; } return item.enableAutomaticUpgrade ? translate("lib.react.common.enabled") : translate("lib.react.common.disabled"); } export function getfirstStatus(vme?: VmExtItem) { if (!vme?.instanceView) { return null; } const firstStatus = vme.instanceView.statuses?.[0]; if (!firstStatus) { return null; } return { ...firstStatus, time: firstStatus.time ? new Date(firstStatus.time) : undefined, }; }