import { useState, useEffect } from "react"; import { useNavigate } from "react-router-dom"; import Box from "@mui/material/Box"; import Button from "@mui/material/Button"; import FormControl from "@mui/material/FormControl"; import FormControlLabel from "@mui/material/FormControlLabel"; import Switch from "@mui/material/Switch"; import Typography from "@mui/material/Typography"; import { useGetServer, useModifyServer } from "@mcl/queries"; // Core Options import NameOption from "@mcl/components/server-options/NameOption.jsx"; import HostOption from "@mcl/components/server-options/HostOption.jsx"; import VersionOption from "@mcl/components/server-options/VersionOption.jsx"; import ServerTypeOption, { serverTypeOptions, } from "@mcl/components/server-options/ServerTypeOption.jsx"; import CpuOption, { cpuOptions, } from "@mcl/components/server-options/CpuOption.jsx"; import MemoryOption, { memoryOptions, } from "@mcl/components/server-options/MemoryOption.jsx"; import ExtraPortsOption from "@mcl/components/server-options/ExtraPortsOption.jsx"; import BackupHostOption from "@mcl/components/server-options/BackupHostOption.jsx"; import BackupBucketOption from "@mcl/components/server-options/BackupBucketOption.jsx"; import BackupIdOption from "@mcl/components/server-options/BackupIdOption.jsx"; import BackupKeyOption from "@mcl/components/server-options/BackupKeyOption.jsx"; import BackupIntervalOption, { backupIntervalDefault, } from "@mcl/components/server-options/BackupIntervalOption.jsx"; export default function EditCoreOptions(props) { const { serverId } = props; const [spec, setSpec] = useState(); const modifyServer = useModifyServer(spec); const nav = useNavigate(); const { isLoading, data: serverBlueprint } = useGetServer(serverId); useEffect(() => setSpec(serverBlueprint), [serverBlueprint]); const updateSpec = (attr, val) => { const s = { ...spec }; s[attr] = val; setSpec(s); }; const coreUpdate = (attr) => (e) => updateSpec(attr, e.target.value); const upsertSpec = () => modifyServer().then(() => nav("/")); const toggleBackupEnabled = () => updateSpec("backupEnabled", !spec.backupEnabled); function validateSpec() { console.log("TODO CREATE VALIDATION"); if (!spec.host) return alertValidationError("Host cannot be blank"); if (!spec.name) return alertValidationError("Name not included"); if (!spec.version) return alertValidationError("Version cannot be blank"); return "validated"; } function alertValidationError(reason) { alert(`Could not validate spec because: ${reason}`); } if (!spec) return; // TODO: Add loading for spec return ( {spec.backupEnabled !== null && ( } label="Enable Backups?" labelPlacement="start" sx={{ mr: "auto" }} /> )} {/*spec.backupEnabled && ( // TODO: Disabled while secrets are insecure Backups )*/} ); }