// eslint-disable-next-line no-use-before-define import React, {Fragment, useEffect, useReducer, useState} from 'react' import {FormattedMessage} from 'react-intl' import {ModalDialog} from '@remix-ui/modal-dialog' // eslint-disable-next-line no-unused-vars import {Toaster} from '@remix-ui/toaster' import {ContractDropdownUI} from './components/contractDropdownUI' import {InstanceContainerUI} from './components/instanceContainerUI' import {RecorderUI} from './components/recorderCardUI' import {SettingsUI} from './components/settingsUI' import {Modal, Network, RunTabProps, Tx} from './types' import {ContractData} from '@remix-project/core-plugin' import {runTabInitialState, runTabReducer} from './reducers/runTab' import { initRunTab, setAccountAddress, setUnitValue, setGasFeeAmount, setExecutionEnvironment, hideToaster, createNewAddress, setPassphraseModal, setMatchPassphraseModal, signMessage, fetchSelectedContract, createNewInstance, setSendValue, setBaseFeePerGas, setConfirmSettings, setGasPrice, setGasPriceStatus, setMaxFee, setMaxPriorityFee, removeInstances, removeSingleInstance, getExecutionContext, executeTransactions, loadFromAddress, storeNewScenario, runScenario, setScenarioPath, getFuncABIValues, setNetworkName, updateSelectedContract, syncContracts, isValidProxyAddress, isValidProxyUpgrade } from './actions' import './css/run-tab.css' import {PublishToStorage} from '@remix-ui/publish-to-storage' import {PassphrasePrompt} from './components/passphrase' import {MainnetPrompt} from './components/mainnet' import {ScenarioPrompt} from './components/scenario' import {setIpfsCheckedState, setRemixDActivated} from './actions/payload' export function RunTabUI(props: RunTabProps) { const {plugin} = props const [focusModal, setFocusModal] = useState({ hide: true, title: '', message: '', okLabel: '', okFn: () => {}, cancelLabel: '', cancelFn: () => {} }) const [modals, setModals] = useState([]) const [focusToaster, setFocusToaster] = useState('') const [toasters, setToasters] = useState([]) const [publishData, setPublishData] = useState<{ storage: 'ipfs' | 'swarm' contract: ContractData }>({ storage: null, contract: null }) runTabInitialState.selectExEnv = plugin.blockchain.getProvider() const [runTab, dispatch] = useReducer(runTabReducer, runTabInitialState) const REACT_API = {runTab} const currentfile = plugin.config.get('currentFile') useEffect(() => { initRunTab(plugin)(dispatch) plugin.onInitDone() }, [plugin]) useEffect(() => { plugin.onReady(runTab) }, [REACT_API]) useEffect(() => { if (modals.length > 0) { setFocusModal(() => { const focusModal = { hide: false, title: modals[0].title, message: modals[0].message, okLabel: modals[0].okLabel, okFn: modals[0].okFn, cancelLabel: modals[0].cancelLabel, cancelFn: modals[0].cancelFn, okBtnClass: modals[0].okBtnClass, cancelBtnClass: modals[0].cancelBtnClass } return focusModal }) const modalList = modals.slice() modalList.shift() setModals(modalList) } }, [modals]) useEffect(() => { if (runTab.notification.title) { modal( runTab.notification.title, runTab.notification.message, runTab.notification.labelOk, runTab.notification.actionOk, runTab.notification.labelCancel, runTab.notification.actionCancel ) } }, [runTab.notification]) useEffect(() => { if (toasters.length > 0) { setFocusToaster(() => { return toasters[0] }) const toasterList = toasters.slice() toasterList.shift() setToasters(toasterList) } }, [toasters]) useEffect(() => { if (runTab.popup) { toast(runTab.popup) } }, [runTab.popup]) const setCheckIpfs = (value: boolean) => { dispatch(setIpfsCheckedState(value)) } const modal = ( title: string, message: string | JSX.Element, okLabel: string, okFn: () => void, cancelLabel?: string, cancelFn?: () => void, okBtnClass?: string, cancelBtnClass?: string ) => { setModals((modals) => { modals.push({ message, title, okLabel, okFn, cancelLabel, cancelFn, okBtnClass, cancelBtnClass }) return [...modals] }) } const handleHideModal = () => { setFocusModal((modal) => { return {...modal, hide: true, message: null} }) } const handleToaster = () => { setFocusToaster('') hideToaster() } const toast = (toasterMsg: string) => { setToasters((messages) => { messages.push(toasterMsg) return [...messages] }) } const resetStorage = () => { setPublishData({ storage: null, contract: null }) } const publishToStorage = (storage: 'ipfs' | 'swarm', contract: ContractData) => { setPublishData({ storage, contract }) } const gasEstimationPrompt = (msg: string) => { return (

{msg}
) } const passphrasePrompt = (message: string) => { return } const scenarioPrompt = (message: string, defaultValue) => { return } const mainnetPrompt = ( tx: Tx, network: Network, amount: string, gasEstimation: string, gasFees: (maxFee: string, cb: (txFeeText: string, priceStatus: boolean) => void) => void, determineGasPrice: (cb: (txFeeText: string, gasPriceValue: string, gasPriceStatus: boolean) => void) => void ) => { return ( ) } return (
) }