From 3ea1c7a32fd4c4f35bc89ee73521276e5a1d4205 Mon Sep 17 00:00:00 2001 From: Mathias Wagner Date: Sat, 3 Jun 2023 01:33:59 +0200 Subject: [PATCH] Created the ServerItem.jsx --- .../components/ServerItem/ServerItem.jsx | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 client/src/pages/tools/linux/components/ServerDialog/components/ServerItem/ServerItem.jsx diff --git a/client/src/pages/tools/linux/components/ServerDialog/components/ServerItem/ServerItem.jsx b/client/src/pages/tools/linux/components/ServerDialog/components/ServerItem/ServerItem.jsx new file mode 100644 index 0000000..e3c92a1 --- /dev/null +++ b/client/src/pages/tools/linux/components/ServerDialog/components/ServerItem/ServerItem.jsx @@ -0,0 +1,107 @@ +import "./styles.sass"; +import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; +import {faAt, faChevronDown, faChevronUp, faSave, faTrash} from "@fortawesome/free-solid-svg-icons"; +import {useContext, useState} from "react"; +import {ServerContext} from "@/common/contexts/Server/index.js"; + +export const ServerItem = (server) => { + const addServer = useContext(ServerContext)[1]; + const updateServer = useContext(ServerContext)[2]; + const removeServer = useContext(ServerContext)[3]; + + const [name, setName] = useState(server.name || "Unbenannt"); + const [hostname, setHostname] = useState(server.hostname || ""); + const [username, setUsername] = useState(server.username || "root"); + const [password, setPassword] = useState(server.password || ""); + const [privateKey, setPrivateKey] = useState(server.privateKey || undefined); + + const [unsavedChanges, setUnsavedChanges] = useState(false); + + const camelCase = (string) => string.charAt(0).toUpperCase() + string.slice(1); + + const [open, setOpen] = useState(server.new || false); + + const updateKey = (event) => { + const reader = new FileReader(); + reader.onload = (e) => { + setPrivateKey(e.target.result); + }; + reader.readAsText(event.target.files[0]); + } + + const update = (event, update) => { + setUnsavedChanges(true); + update(event.target.value); + } + + const saveChanges = async () => { + const success = await (server.new ? addServer({name, hostname, username, password, privateKey}) + : updateServer(server.id, {name, hostname, username, password, privateKey})); + + if (success) { + setUnsavedChanges(false); + if (server.new) server.remove(); + } + } + + const deleteServer = async () => { + await removeServer(server.id); + } + + const onImageError = (e) => { + e.target.onerror = null; + e.target.src = "/assets/img/os/linux.webp"; + } + + return ( +
+
+
+ {server.distro} +
+

{name} ({camelCase(server.distro || "linux")})

+

{hostname}

+
+
+ +
+ {!server.new && } + {unsavedChanges && } + setOpen(!open)}/> +
+
+ + {open && ( +
+ +
+

Name

+ update(e, setName)}/> +
+ +
+

Serveradresse

+ update(e, setHostname)}/> +
+ +
+

Benutzername

+ update(e, setUsername)}/> +
+ +
+

Passwort

+ update(e, setPassword)}/> +
+ +
+

Private Key

+ +
+ +
+ )} +
+ ); + +} \ No newline at end of file