diff --git a/webui/src/states/Root/pages/Overview/components/Server/components/ServerMenu/ServerMenu.jsx b/webui/src/states/Root/pages/Overview/components/Server/components/ServerMenu/ServerMenu.jsx new file mode 100644 index 0000000..43e3f0b --- /dev/null +++ b/webui/src/states/Root/pages/Overview/components/Server/components/ServerMenu/ServerMenu.jsx @@ -0,0 +1,133 @@ +import {Divider, ListItemIcon, ListItemText, Menu, MenuItem} from "@mui/material"; +import { + Delete, + DriveFileRenameOutline, + EditNote, + ManageHistory, Memory, + PowerSettingsNew, + RestartAlt +} from "@mui/icons-material"; +import {t} from "i18next"; +import {patchRequest, postRequest} from "@/common/utils/RequestUtil.js"; +import {useContext, useState} from "react"; +import {ServerContext} from "@/common/contexts/Server"; +import RenameDialog from "./dialogs/RenameDialog.jsx"; +import UpdateDescriptionDialog from "./dialogs/UpdateDescriptionDialog.jsx"; +import MigrateVersionDialog from "./dialogs/MigrateVersionDialog.jsx"; +import ChangeRAMDialog from "./dialogs/ChangeRAMDialog.jsx"; +import ConfirmDeleteDialog from "./dialogs/ConfirmDeleteDialog.jsx"; + +export const ServerMenu = ({menuOpen, menuRef, setMenuOpen, uuid, setAlert, status, config}) => { + + const [renameDialogOpen, setRenameDialogOpen] = useState(false); + const [updateDescriptionDialogOpen, setUpdateDescriptionDialogOpen] = useState(false); + const [migrateDialogOpen, setMigrateDialogOpen] = useState(false); + const [changeRAMDialogOpen, setChangeRAMDialogOpen] = useState(false); + const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); + + const {updateServer} = useContext(ServerContext); + + const startServer = async () => { + setMenuOpen(false); + setAlert({severity: "success", message: t("server.starting")}); + await postRequest("server/start", {uuid}); + + updateServer(); + } + + const stopServer = async () => { + setMenuOpen(false); + setAlert({severity: "success", message: t("server.stopping")}); + await postRequest("server/stop", {uuid}); + + updateServer(); + } + + const renameServer = async () => { + setMenuOpen(false); + setRenameDialogOpen(true); + } + + const updateDescription = async () => { + setMenuOpen(false); + setUpdateDescriptionDialogOpen(true); + } + + const migrateVersion = async () => { + setMenuOpen(false); + setMigrateDialogOpen(true); + } + + const changeRAM = async () => { + setMenuOpen(false); + setChangeRAMDialogOpen(true); + } + + const toggleStartOnBoot = async () => { + setMenuOpen(false); + setAlert({severity: "success", message: t("server.dialog.toggle_start_on_boot.success")}); + await patchRequest("server/", {uuid, autoStart: !config.autoStart}); + updateServer(); + } + + const deleteServer = async () => { + setMenuOpen(false); + setDeleteDialogOpen(true); + } + + return ( + <> + + + + + + + setMenuOpen(false)} + anchorOrigin={{vertical: "bottom", horizontal: "right"}} transformOrigin={{vertical: "top", horizontal: "right"}}> + renameServer()}> + + {t("server.rename")} + + + updateDescription()}> + + {t("server.update_description")} + + + migrateVersion()}> + + {t("server.migrate")} + + + changeRAM()}> + + {t("server.update_ram")} + + + toggleStartOnBoot()}> + + {t("server." + (config.autoStart ? "disable" : "enable") + "_start_on_boot")} + + + + + {status === "OFFLINE" && ( + {t("server.start")} + )} + {status === "ONLINE" && ( + {t("server.stop")} + )} + + deleteServer()}> + + {t("server.delete")} + + + + ) +} \ No newline at end of file