Fixed publish contract e2e

yann300-patch-36
David Disu 3 years ago committed by yann300
parent a2ddbed742
commit 21f1e1ca1f
  1. 8
      apps/remix-ide-e2e/src/tests/publishContract.test.ts
  2. 2
      libs/remix-ui/publish-to-storage/src/lib/publish-to-storage.tsx
  3. 1
      libs/remix-ui/publish-to-storage/src/lib/types/index.ts
  4. 10
      libs/remix-ui/run-tab/src/lib/actions/index.ts
  5. 20
      libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx
  6. 3
      libs/remix-ui/run-tab/src/lib/reducers/runTab.ts
  7. 13
      libs/remix-ui/run-tab/src/lib/run-tab.tsx
  8. 4
      libs/remix-ui/run-tab/src/lib/types/index.ts

@ -60,10 +60,12 @@ module.exports = {
.click('*[data-id="contractDropdownIpfsCheckbox"]') .click('*[data-id="contractDropdownIpfsCheckbox"]')
.waitForElementVisible('*[data-id="Deploy - transact (not payable)"]') .waitForElementVisible('*[data-id="Deploy - transact (not payable)"]')
.click('*[data-id="Deploy - transact (not payable)"]') .click('*[data-id="Deploy - transact (not payable)"]')
.pause(8000) .pause(5000)
.getModalBody((value, done) => { .waitForElementVisible('[data-id="udappModalDialogModalBody-react"]')
.getText('[data-id="udappModalDialogModalBody-react"]', (result) => {
const value = typeof result.value === 'string' ? result.value : null
if (value.indexOf('Metadata of "storage" was published successfully.') === -1) browser.assert.fail('ipfs deploy failed') if (value.indexOf('Metadata of "storage" was published successfully.') === -1) browser.assert.fail('ipfs deploy failed')
done()
}) })
.modalFooterOKClick() .modalFooterOKClick()
}, },

@ -95,7 +95,7 @@ export const PublishToStorage = (props: RemixUiPublishToStorageProps) => {
return ( return (
<ModalDialog <ModalDialog
id='publishToStorage' id={props.id || 'publishToStorage'}
title={ state.modal.title } title={ state.modal.title }
message={ state.modal.message } message={ state.modal.message }
hide={ state.modal.hide } hide={ state.modal.hide }

@ -1,4 +1,5 @@
export interface RemixUiPublishToStorageProps { export interface RemixUiPublishToStorageProps {
id?: string
api: any, api: any,
storage: 'swarm' | 'ipfs', storage: 'swarm' | 'ipfs',
contract: any, contract: any,

@ -3,7 +3,7 @@ import React from 'react'
import * as ethJSUtil from 'ethereumjs-util' import * as ethJSUtil from 'ethereumjs-util'
import Web3 from 'web3' import Web3 from 'web3'
import { addressToString, createNonClashingNameAsync, shortenAddress } from '@remix-ui/helper' import { addressToString, createNonClashingNameAsync, shortenAddress } from '@remix-ui/helper'
import { addNewInstance, addProvider, clearAllInstances, clearRecorderCount, displayNotification, displayPopUp, fetchAccountsListFailed, fetchAccountsListRequest, fetchAccountsListSuccess, fetchContractListSuccess, hidePopUp, removeExistingInstance, removeProvider, setBaseFeePerGas, setConfirmSettings, setCurrentFile, setDecodedResponse, setEnvToasterContent, setExecutionEnvironment, setExternalEndpoint, setGasLimit, setGasPrice, setGasPriceStatus, setIpfsCheckedState, setLoadType, setMatchPassphrase, setMaxFee, setMaxPriorityFee, setNetworkName, setPassphrase, setPathToScenario, setRecorderCount, setSelectedAccount, setSendUnit, setSendValue, setTxFeeContent, setWeb3Dialog } from './payload' import { addNewInstance, addProvider, clearAllInstances, clearRecorderCount, displayNotification, displayPopUp, fetchAccountsListFailed, fetchAccountsListRequest, fetchAccountsListSuccess, fetchContractListSuccess, hidePopUp, removeExistingInstance, removeProvider, setBaseFeePerGas, setConfirmSettings, setCurrentFile, setDecodedResponse, setEnvToasterContent, setExecutionEnvironment, setExternalEndpoint, setGasLimit, setGasPrice, setGasPriceStatus, setLoadType, setMatchPassphrase, setMaxFee, setMaxPriorityFee, setNetworkName, setPassphrase, setPathToScenario, setRecorderCount, setSelectedAccount, setSendUnit, setSendValue, setTxFeeContent, setWeb3Dialog } from './payload'
import { RunTab } from '../types/run-tab' import { RunTab } from '../types/run-tab'
import { CompilerAbstract } from '@remix-project/remix-solidity' import { CompilerAbstract } from '@remix-project/remix-solidity'
import * as remixLib from '@remix-project/remix-lib' import * as remixLib from '@remix-project/remix-lib'
@ -75,7 +75,7 @@ const setupEvents = () => {
return return
} }
const networkProvider = plugin.networkModule.getNetworkProvider.bind(plugin.networkModule) const networkProvider = plugin.networkModule.getNetworkProvider.bind(plugin.networkModule)
const netUI = (networkProvider() !== 'vm') ? `${network.name} (${network.id || '-'}) network` : '' const netUI = (networkProvider() !== 'vm') ? `${network.name} (${network.id || '-'}) network` : 'VM'
setNetworkNameFromProvider(netUI) setNetworkNameFromProvider(netUI)
}) })
@ -231,7 +231,7 @@ const setExecEnv = (env: string) => {
dispatch(setExecutionEnvironment(env)) dispatch(setExecutionEnvironment(env))
} }
const setNetworkNameFromProvider = (networkName: string) => { export const setNetworkNameFromProvider = (networkName: string) => {
dispatch(setNetworkName(networkName)) dispatch(setNetworkName(networkName))
} }
@ -522,10 +522,6 @@ const deployContract = (selectedContract, args, contractMetadata, compilerContra
plugin.blockchain.deployContractWithLibrary(selectedContract, args, contractMetadata, compilerContracts, callbacks, confirmationCb) plugin.blockchain.deployContractWithLibrary(selectedContract, args, contractMetadata, compilerContracts, callbacks, confirmationCb)
} }
export const setCheckIpfs = (value: boolean) => {
dispatch(setIpfsCheckedState(value))
}
export const updateGasPriceStatus = (status: boolean) => { export const updateGasPriceStatus = (status: boolean) => {
dispatch(setGasPriceStatus(status)) dispatch(setGasPriceStatus(status))
} }

@ -5,7 +5,6 @@ import * as ethJSUtil from 'ethereumjs-util'
import { ContractGUI } from './contractGUI' import { ContractGUI } from './contractGUI'
export function ContractDropdownUI (props: ContractDropdownProps) { export function ContractDropdownUI (props: ContractDropdownProps) {
const [networkName, setNetworkName] = useState<string>('')
const [abiLabel, setAbiLabel] = useState<{ const [abiLabel, setAbiLabel] = useState<{
display: string, display: string,
content: string content: string
@ -31,10 +30,6 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
useEffect(() => { useEffect(() => {
enableAtAddress(false) enableAtAddress(false)
const savedConfig = window.localStorage.getItem(`ipfs/${props.exEnvironment}/${networkName}`)
const isCheckedIPFS = savedConfig === 'true' ? true : false // eslint-disable-line
if (isCheckedIPFS) props.setIpfsCheckedState(true)
setAbiLabel({ setAbiLabel({
display: 'none', display: 'none',
content: 'ABI file selected' content: 'ABI file selected'
@ -42,8 +37,13 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
}, []) }, [])
useEffect(() => { useEffect(() => {
if (props.exEnvironment === 'vm-london' || props.exEnvironment === 'vm-berlin') setNetworkName('VM') if (props.exEnvironment && props.networkName) {
}, [props.exEnvironment]) const savedConfig = window.localStorage.getItem(`ipfs/${props.exEnvironment}/${props.networkName}`)
const isCheckedIPFS = savedConfig === 'true' ? true : false // eslint-disable-line
props.setIpfsCheckedState(isCheckedIPFS)
}
}, [props.exEnvironment, props.networkName])
useEffect(() => { useEffect(() => {
if (!loadFromAddress || !ethJSUtil.isValidAddress(loadedAddress)) enableAtAddress(false) if (!loadFromAddress || !ethJSUtil.isValidAddress(loadedAddress)) enableAtAddress(false)
@ -164,8 +164,10 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
} }
const handleCheckedIPFS = () => { const handleCheckedIPFS = () => {
props.setIpfsCheckedState(!props.ipfsCheckedState) const checkedState = !props.ipfsCheckedState
window.localStorage.setItem(`ipfs/${props.exEnvironment}/${networkName}`, props.ipfsCheckedState.toString())
props.setIpfsCheckedState(checkedState)
window.localStorage.setItem(`ipfs/${props.exEnvironment}/${props.networkName}`, checkedState.toString())
} }
const handleContractChange = (e) => { const handleContractChange = (e) => {

@ -95,7 +95,7 @@ export const runTabInitialState: RunTabState = {
gasLimit: 3000000, gasLimit: 3000000,
selectExEnv: 'vm-london', selectExEnv: 'vm-london',
personalMode: false, personalMode: false,
networkName: '', networkName: 'VM',
providers: { providers: {
providerList: [{ providerList: [{
id: 'vm-mode-london', id: 'vm-mode-london',
@ -257,6 +257,7 @@ export const runTabReducer = (state: RunTabState = runTabInitialState, action: A
return { return {
...state, ...state,
selectExEnv: payload, selectExEnv: payload,
networkName: state.selectExEnv === 'vm-london' || state.selectExEnv === 'vm-berlin' ? 'VM' : state.networkName,
accounts: { accounts: {
...state.accounts, ...state.accounts,
selectedAccount: '', selectedAccount: '',

@ -16,7 +16,7 @@ import {
clearPopUp, createNewBlockchainAccount, clearPopUp, createNewBlockchainAccount,
setPassphrasePrompt, setMatchPassphrasePrompt, setPassphrasePrompt, setMatchPassphrasePrompt,
signMessageWithAddress, getSelectedContract, signMessageWithAddress, getSelectedContract,
createInstance, setCheckIpfs, createInstance,
updateBaseFeePerGas, updateConfirmSettings, updateBaseFeePerGas, updateConfirmSettings,
updateGasPrice, updateGasPriceStatus, updateGasPrice, updateGasPriceStatus,
updateMaxFee, updateMaxPriorityFee, updateMaxFee, updateMaxPriorityFee,
@ -25,7 +25,7 @@ import {
runTransactions, loadAddress, runTransactions, loadAddress,
storeScenario, runCurrentScenario, storeScenario, runCurrentScenario,
updateScenarioPath, initWebDialogs, updateScenarioPath, initWebDialogs,
getFuncABIInputs getFuncABIInputs, setNetworkNameFromProvider
} from './actions' } from './actions'
import './css/run-tab.css' import './css/run-tab.css'
import { PublishToStorage } from '@remix-ui/publish-to-storage' import { PublishToStorage } from '@remix-ui/publish-to-storage'
@ -33,6 +33,7 @@ import { PassphrasePrompt } from './components/passphrase'
import { MainnetPrompt } from './components/mainnet' import { MainnetPrompt } from './components/mainnet'
import { ScenarioPrompt } from './components/scenario' import { ScenarioPrompt } from './components/scenario'
import { Web3ProviderDialog } from './components/web3Dialog' import { Web3ProviderDialog } from './components/web3Dialog'
import { setIpfsCheckedState } from './actions/payload'
export function RunTabUI (props: RunTabProps) { export function RunTabUI (props: RunTabProps) {
const { plugin } = props const { plugin } = props
@ -112,6 +113,10 @@ export function RunTabUI (props: RunTabProps) {
} }
}, [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) => { const modal = (title: string, message: string | JSX.Element, okLabel: string, okFn: () => void, cancelLabel?: string, cancelFn?: () => void) => {
setModals(modals => { setModals(modals => {
modals.push({ message, title, okLabel, okFn, cancelLabel, cancelFn }) modals.push({ message, title, okLabel, okFn, cancelLabel, cancelFn })
@ -254,6 +259,8 @@ export function RunTabUI (props: RunTabProps) {
mainnetPrompt={mainnetPrompt} mainnetPrompt={mainnetPrompt}
tooltip={toast} tooltip={toast}
loadAddress={loadAddress} loadAddress={loadAddress}
networkName={runTab.networkName}
setNetworkName={setNetworkNameFromProvider}
/> />
<RecorderUI <RecorderUI
gasEstimationPrompt={gasEstimationPrompt} gasEstimationPrompt={gasEstimationPrompt}
@ -282,7 +289,7 @@ export function RunTabUI (props: RunTabProps) {
</div> </div>
<ModalDialog id='fileSystem' { ...focusModal } handleHide={ handleHideModal } /> <ModalDialog id='fileSystem' { ...focusModal } handleHide={ handleHideModal } />
<Toaster message={focusToaster} handleHide={handleToaster} /> <Toaster message={focusToaster} handleHide={handleToaster} />
<PublishToStorage api={props.plugin} resetStorage={resetStorage} storage={publishData.storage} contract={publishData.contract} /> <PublishToStorage id='udapp' api={props.plugin} resetStorage={resetStorage} storage={publishData.storage} contract={publishData.contract} />
</Fragment> </Fragment>
) )
} }

@ -180,7 +180,9 @@ export interface ContractDropdownProps {
passphrasePrompt: (message: string) => JSX.Element, passphrasePrompt: (message: string) => JSX.Element,
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) => JSX.Element, 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) => JSX.Element,
tooltip: (toasterMsg: string | JSX.Element) => void, tooltip: (toasterMsg: string | JSX.Element) => void,
loadAddress: (contract: ContractData, address: string) => void loadAddress: (contract: ContractData, address: string) => void,
networkName: string,
setNetworkName: (name: string) => void
} }
export interface RecorderProps { export interface RecorderProps {

Loading…
Cancel
Save