import { Button, Card, Dialog, DialogActions, DialogBody, DialogContent, DialogSurface, DialogTitle, DialogTrigger, Table, TableBody, TableCell, TableCellActions, TableCellLayout, TableHeader, TableHeaderCell, TableRow, Title3, Tooltip, } from "@fluentui/react-components"; import { Desktop24Regular, ScreenshotRegular } from "@fluentui/react-icons"; import { filesize } from "filesize"; import React from "react"; import { GroupApi, GroupVMState } from "../api/GroupApi"; import { Rights, VMGroup } from "../api/ServerApi"; import { VMInfo } from "../api/VMApi"; import { useToast } from "../hooks/providers/ToastProvider"; import { GroupVMAction } from "./GroupVMAction"; import { VMLiveScreenshot } from "./VMLiveScreenshot"; export function GroupsWidget(p: { rights: Rights }): React.ReactElement { return ( <> {p.rights.groups.map((g) => ( ))} ); } function GroupInfo(p: { group: VMGroup }): React.ReactElement { const toast = useToast(); const [state, setState] = React.useState(); const [screenshotVM, setScreenshotVM] = React.useState(); const load = async () => { const newState = await GroupApi.State(p.group); if (state !== newState) setState(newState); }; const screenshot = (vm: VMInfo) => { setScreenshotVM(vm); }; React.useEffect(() => { const interval = setInterval(async () => { try { if (p.group.can_get_state) await load(); } catch (e) { console.error(e); toast( "Error", `Failed to refresh group ${p.group.id} VMs status!`, "error" ); } }, 1000); return () => clearInterval(interval); }); return ( <>
{p.group.id}
VM Resources State Actions {p.group.vms.map((item) => ( } appearance="primary" description={item.description} > {item.name} {state?.[item.uuid] === "Running" && (
{ if (!screenshotVM) setScreenshotVM(undefined); }} > {screenshotVM?.name} screen ); }