VirtWeb/virtweb_frontend/src/widgets/forms/VMSelectIsoInput.tsx
Pierre HUBERT 3bf8859ff9
All checks were successful
continuous-integration/drone/push Build is passing
WIP ESLint
2025-03-28 12:12:11 +01:00

81 lines
2.0 KiB
TypeScript

import { filesize } from "filesize";
import { IsoFile } from "../../api/IsoFilesApi";
import { SelectInput } from "./SelectInput";
import {
Avatar,
IconButton,
ListItem,
ListItemAvatar,
ListItemText,
Tooltip,
} from "@mui/material";
import DeleteIcon from "@mui/icons-material/Delete";
import { mdiDisc } from "@mdi/js";
import Icon from "@mdi/react";
export function VMSelectIsoInput(p: {
editable: boolean;
isoList: IsoFile[];
attachedISOs: string[];
onChange: (newVal: string[]) => void;
}): React.ReactElement {
if (p.attachedISOs.length === 0 && !p.editable) return <></>;
return (
<>
{p.attachedISOs.map((isoName, num) => {
const iso = p.isoList.find((d) => d.filename === isoName);
return (
<ListItem
key={isoName}
secondaryAction={
p.editable && (
<IconButton
edge="end"
aria-label="Detach iso file"
onClick={() => {
p.attachedISOs.splice(num, 1);
p.onChange(p.attachedISOs);
}}
>
<Tooltip title="Detach ISO file">
<DeleteIcon />
</Tooltip>
</IconButton>
)
}
>
<ListItemAvatar>
<Avatar>
<Icon path={mdiDisc} />
</Avatar>
</ListItemAvatar>
<ListItemText
primary={iso?.filename}
secondary={filesize(iso?.size ?? 0)}
/>
</ListItem>
);
})}
<SelectInput
label="Attach an ISO file"
editable={p.editable}
value={undefined}
onValueChange={(v) => {
if (v) {
p.attachedISOs.push(v);
p.onChange(p.attachedISOs);
}
}}
options={p.isoList.map((i) => {
return {
label: `${i.filename} ${filesize(i.size)}`,
value: i.filename,
};
})}
/>
</>
);
}