diff --git a/client/src/pages/tools/linux/InstallSoftware/components/ConfigurationArea/ConfigurationArea.jsx b/client/src/pages/tools/linux/InstallSoftware/components/ConfigurationArea/ConfigurationArea.jsx index f2fb898..58cabc5 100644 --- a/client/src/pages/tools/linux/InstallSoftware/components/ConfigurationArea/ConfigurationArea.jsx +++ b/client/src/pages/tools/linux/InstallSoftware/components/ConfigurationArea/ConfigurationArea.jsx @@ -9,6 +9,8 @@ import LogArea from "@/pages/tools/linux/InstallSoftware/components/Configuratio export const ConfigurationArea = ({current}) => { const [connection, setConnection] = useState(createConnection("app")); + const [connectionFailed, setConnectionFailed] = useState(false); + const states = current?.configuration?.map((configuration) => { return {name: configuration.id, value: useState(configuration.value)} }); @@ -17,12 +19,22 @@ export const ConfigurationArea = ({current}) => { const [completedSteps, setCompletedSteps] = useState([]); const [failedStep, setFailedStep] = useState(null); + const disconnect = () => { + connection.disconnect(); + setConnection(createConnection("app")); + } + useEffect(() => { return () => { connection.disconnect(); } }, []); + useEffect(() => { + if (connectionFailed) + setTimeout(() => setConnectionFailed(false), 2500); + }, [connectionFailed]); + const update = () => { let data = {}; states.forEach((state) => { @@ -34,35 +46,41 @@ export const ConfigurationArea = ({current}) => { setFailedStep(null); connection.connect(); + connection.on("connect", async () => { connection.emit("login", { host: prompt("Host", "localhost"), password: prompt("Password", "password") }); + connection.on("login", (data) => { + if (data.status === "failed") { + setConnectionFailed(true); + disconnect(); + } else if (data.status === "success") { + connection.emit("install", {name: current.name, data}) + } + }); + 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")); + disconnect(); } else if (data.status === "failed") { setFailedStep(data.step); - connection.disconnect(); - setConnection(createConnection("app")); + disconnect(); } }); - - connection.on("login", () => connection.emit("install", {name: current.name, data})); }); } return (