From 9ede694e3607b25fb1f0763214236e8337666c75 Mon Sep 17 00:00:00 2001 From: Mathias Wagner Date: Thu, 1 Jun 2023 19:50:57 +0200 Subject: [PATCH] Created the ConfigurationArea.jsx --- .../ConfigurationArea/ConfigurationArea.jsx | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 client/src/pages/tools/linux/InstallSoftware/components/ConfigurationArea/ConfigurationArea.jsx diff --git a/client/src/pages/tools/linux/InstallSoftware/components/ConfigurationArea/ConfigurationArea.jsx b/client/src/pages/tools/linux/InstallSoftware/components/ConfigurationArea/ConfigurationArea.jsx new file mode 100644 index 0000000..f2fb898 --- /dev/null +++ b/client/src/pages/tools/linux/InstallSoftware/components/ConfigurationArea/ConfigurationArea.jsx @@ -0,0 +1,87 @@ +import "./styles.sass"; +import ConfigurationRow from "@/pages/tools/linux/InstallSoftware/components/ConfigurationRow"; +import Button from "@/common/components/Button"; +import {faDownload} from "@fortawesome/free-solid-svg-icons"; +import {useEffect, useState} from "react"; +import {createConnection} from "@/common/utils/SocketUtil.js"; +import LogArea from "@/pages/tools/linux/InstallSoftware/components/ConfigurationArea/components/LogArea"; + +export const ConfigurationArea = ({current}) => { + const [connection, setConnection] = useState(createConnection("app")); + + const states = current?.configuration?.map((configuration) => { + return {name: configuration.id, value: useState(configuration.value)} + }); + + const [steps, setSteps] = useState([]); + const [completedSteps, setCompletedSteps] = useState([]); + const [failedStep, setFailedStep] = useState(null); + + useEffect(() => { + return () => { + connection.disconnect(); + } + }, []); + + const update = () => { + let data = {}; + states.forEach((state) => { + data[state.name] = state.value[0]; + }); + + setSteps([]); + setCompletedSteps([]); + setFailedStep(null); + + connection.connect(); + connection.on("connect", async () => { + connection.emit("login", { + host: prompt("Host", "localhost"), + password: prompt("Password", "password") + }); + + connection.on("install", (data) => { + if (data.status === "info") { + setSteps(data.data); + } else if (data.status === "success") { + setCompletedSteps(steps => [...steps, data.step]); + } else if (data.status === "finished") { + connection.disconnect(); + setConnection(createConnection("app")); + } else if (data.status === "failed") { + setFailedStep(data.step); + connection.disconnect(); + setConnection(createConnection("app")); + } + }); + + connection.on("login", () => connection.emit("install", {name: current.name, data})); + }); + + } + + return ( +
+
+
+ {current.name}/ +

Paket: {current.name}

+
+ + {current.configuration.map((configuration) => { + return s.name === configuration.id)?.value[0]} + setValue={states.find((s) => s.name === configuration.id)?.value[1]}/> + })} + +
+
+
+ + {steps.length !== 0 && } +
+ ); + +} \ No newline at end of file