import React, { useEffect, useState } from 'react'; import { makeStyles, Theme, createStyles } from '@material-ui/core/styles'; import { Typography, Paper, Button, Step, StepLabel, StepContent, Stepper, StepButton } from '@material-ui/core/'; import { CheckCircle, Error, Sync, ExpandLessSharp, ExpandMoreSharp } from '@material-ui/icons/'; import NodeConnectionCheck from './SetupSteps/NodeConnectionCheck'; import VersionCheck from './SetupSteps/VersionCheck'; import EthereumConnectionCheck from './SetupSteps/EthereumConnectionCheck'; import ChequebookDeployFund from './SetupSteps/ChequebookDeployFund'; import PeerConnection from './SetupSteps/PeerConnection'; const useStyles = makeStyles((theme: Theme) => createStyles({ root: { width: '100%', }, button: { marginTop: theme.spacing(1), marginRight: theme.spacing(1), }, actionsContainer: { margin: theme.spacing(2), }, resetContainer: { padding: theme.spacing(5), }, }), ); function getSteps() { return [ 'Node Connection Check', 'Version Check', 'Connect to Ethereum Blockchain', 'Deploy and Fund Chequebook', 'Connect to Peers', ]; } function getStepContent(step: number, props: any) { switch (step) { case 0: return ; case 1: return ; case 2: return ; case 3: return ; default: return ; } } export default function NodeSetupWorkflow(props: any) { const classes = useStyles(); const [activeStep, setActiveStep] = useState(0); const [completed, setCompleted] = useState<{ [k: number]: boolean }>({}); const steps = getSteps(); const evaluateNodeStatus = () => { if (props.nodeHealth?.status === 'ok' && props.nodeApiHealth) { handleComplete(0) setActiveStep(1) } if (props.beeRelease && props.beeRelease.name === `v${props.nodeHealth?.version?.split('-')[0]}`) { handleComplete(1) setActiveStep(2) } if (props.nodeAddresses?.ethereum) { handleComplete(2) setActiveStep(3) } if (props.chequebookAddress?.chequebookaddress && props.chequebookBalance.totalBalance > 0) { handleComplete(3) setActiveStep(4) } if (props.nodeTopology.connected && props.nodeTopology.connected > 0) { handleComplete(4) setActiveStep(5) } } useEffect(() => { evaluateNodeStatus() }, []) useEffect(() => { evaluateNodeStatus() }, [props]) const handleNext = () => { setActiveStep((prevActiveStep) => prevActiveStep + 1); }; const handleBack = () => { setActiveStep((prevActiveStep) => prevActiveStep - 1); }; const handleSetupComplete = () => { props.setStatusChecksVisible(false) }; const handleComplete = (index: number) => { const newCompleted = completed; newCompleted[index] = true; setCompleted(newCompleted); }; return (
Node Setup {steps.map((label, index) => ( setActiveStep(index === activeStep ? 5 : index)} StepIconComponent={() => { if(completed[index]) return else { return } }} > setActiveStep(index === activeStep ? 5 : index)} style={{justifyContent:'space-between'}}>
{label}
{index === activeStep ? : }
{getStepContent(index, props)}
))}
{Object.values(completed).filter(value => value).length === 5 ? ( Bee setup complete! Welcome to the swarm and the internet of decentralized storage ) : null}
); }