import React, { FC, useState } from 'react'; import { Text } from 'ink'; import flatten from 'lodash.flatten'; import { ArgPrompt, ChainOption, ChevronText, Select } from '../helpers'; import { TruffleArtifact } from '../../services'; import { XOR } from 'ts-xor'; import { StringElt } from '.'; import { Chain } from '@eximchain/dappbot-types/spec/dapp'; export interface StageSelectNetworkProps { artifact: TruffleArtifact setWeb3URL: (url: string) => void; setContractAddr: (addr: string) => void; progressMsgs: StringElt[] addProgressMsg: (msg:StringElt)=>void } export const StageSelectNetwork: FC = (props) => { const { artifact, setWeb3URL, setContractAddr, progressMsgs, addProgressMsg } = props; // Compile chainIds present in artifact const [needCustomWeb3, setNeedCustomWeb3] = useState(null as XOR); const networkIds = Object.keys(artifact.networks); const networkOptions = networkIds .map(netId => parseInt(netId)) .filter(netId => netId !== NaN) .map(networkId => { let matchingChains = Chain.detailsById()[networkId]; if (matchingChains === undefined) { // Custom network option return ChainOption(networkId); } else if (matchingChains.length === 1) { // Perfect match, simply list option return ChainOption(networkId, matchingChains[0]); } else { // Multi-match, must be network 1, return an array of options return matchingChains.map((eachChain) => ChainOption(networkId, eachChain)) } }) // TODO: If there's only one network option, have an effect // automatically select it if (needCustomWeb3 === null) return (