From e35859922c0ec65b1f5e4b5f70f3ae8718c110ae Mon Sep 17 00:00:00 2001 From: Mathias Wagner Date: Sat, 5 Aug 2023 22:15:19 +0200 Subject: [PATCH] Created the ServerDialog.jsx --- .../components/ServerDialog/ServerDialog.jsx | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 client/src/common/components/Header/components/ServerDialog/ServerDialog.jsx diff --git a/client/src/common/components/Header/components/ServerDialog/ServerDialog.jsx b/client/src/common/components/Header/components/ServerDialog/ServerDialog.jsx new file mode 100644 index 0000000..2c25414 --- /dev/null +++ b/client/src/common/components/Header/components/ServerDialog/ServerDialog.jsx @@ -0,0 +1,91 @@ +import {DialogContext, DialogProvider} from "@/common/contexts/Dialog"; +import { + faChevronDown, + faClose, + faLocationDot, faPencil, faServer +} from "@fortawesome/free-solid-svg-icons"; +import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; +import {useContext, useState} from "react"; +import "./styles.sass"; +import serversRaw from "./servers.js"; +import {StatusContext} from "@/common/contexts/Status"; +import AddServer from "@/common/components/Header/components/ServerDialog/components/AddServer"; +import ServerInfo from "@/common/components/Header/components/ServerDialog/components/ServerInfo"; +import ServerChooser from "@/common/components/Header/components/ServerDialog/components/ServerChooser"; + +const Dialog = () => { + const close = useContext(DialogContext); + const [menuOpen, setMenuOpen] = useState(false); + const {updateStatus} = useContext(StatusContext); + const [customEdit, setCustomEdit] = useState(false); + + const getCustomServers = () => { + const customServers = JSON.parse(localStorage.getItem("custom_server")); + return customServers ? customServers : []; + } + + const findCurrentServer = () => { + const server = servers.find((server) => server.url === localStorage.getItem("url")); + return server ? server : servers[0]; + } + + const [servers, setServers] = useState([...serversRaw, ...getCustomServers()]); + const [currentServer, setCurrentServer] = useState(findCurrentServer()); + + const updateCurrentServer = (server) => { + setCustomEdit(false); + localStorage.setItem("url", server.url); + setCurrentServer(server); + updateStatus(); + } + + const deleteServer = () => { + const newServers = getCustomServers().filter((s) => s.url !== currentServer.url); + localStorage.setItem("custom_server", JSON.stringify(newServers)); + setServers([...serversRaw, ...newServers]); + updateCurrentServer(serversRaw[0]); + } + + const addServer = (url, name) => { + const newServer = {name, url, provider: "Eigener Server", location: `Managed Backend\n${url}`, isCustom: true}; + localStorage.setItem("custom_server", JSON.stringify([...getCustomServers(), newServer])); + setServers([...servers, newServer]); + updateCurrentServer(newServer); + } + + return ( + <> +
+
+ +

Server wechseln

+
+ close()}/> +
+ +
+
+
setMenuOpen(!menuOpen)}> + {menuOpen && } +
+ {!customEdit && currentServer.img && server-icon} + {(!currentServer.img || customEdit) && } +

{customEdit ? "Eigener Server" : currentServer.name}

+
+ +
+ + {!customEdit && } + {customEdit && } +
+
+ + ); +} + +export const ServerDialog = ({onClose}) => ( + + + +) \ No newline at end of file