import React, { FC, useState, useEffect } from "react"; import { MDBRow, MDBCol, MDBIcon } from "mdbreact"; import './styles.css' interface Props { type: number; active: boolean; done: boolean; failed: boolean; logLines: string[]; } enum STEP { Waiting, Start, Confirmed, Failed } export const OrganizationLine: FC = ({ type, active, done, failed, logLines }) => { const [step, setStep] = useState(STEP.Waiting); const [lastLog, setLastLog] = useState( type === 0 ? "Start Installation" : "Waiting" ); useEffect(() => { if (done) { if (step === STEP.Confirmed) return; setStep(STEP.Confirmed); return; } if (failed) { if (step === STEP.Failed) return; setStep(STEP.Failed); return; } if (!active) { if (step === STEP.Waiting) return; setStep(STEP.Waiting); return; } if (step === STEP.Start) return; setStep(STEP.Start); }, [active, done, step, failed]); useEffect(() => { if (done || (!active && !failed)) return; if (logLines.length > 0) setLastLog(logLines[logLines.length - 1]); }, [logLines, active, done, failed]); const StepName: FC = () => { const stepName = type === 0 ? "Create Organization" : "Configure Organization"; return step !== STEP.Waiting ? (
{stepName}
) : (
{stepName}
); }; const Output: FC = () => { let text = undefined; switch (step) { case STEP.Waiting: text = type === 0 ? "Start Installation" : "Waiting"; break; case STEP.Start: text = lastLog; break; case STEP.Confirmed: text = "Confirmed"; break; case STEP.Failed: text = lastLog; break; default: console.log("Unimplemented step"); } return
{text}
; // Should link to txHash }; return ( {/* TODO 2x is a little big and default is small */}
{step === STEP.Start && (
)} {step === STEP.Confirmed && ( )} {step === STEP.Failed && ( )}
); }; export default OrganizationLine;