From 2c90e2423a196a23d35d061e082bf4c7423025d2 Mon Sep 17 00:00:00 2001 From: David Disu Date: Tue, 29 Mar 2022 12:02:44 +0100 Subject: [PATCH] Create simple deploy workflow --- .../src/lib/components/contractDropdownUI.tsx | 17 +++++--- .../src/lib/components/contractGUI.tsx | 39 ++++++++++++++----- libs/remix-ui/run-tab/src/lib/css/run-tab.css | 5 +++ libs/remix-ui/run-tab/src/lib/types/index.ts | 7 +++- 4 files changed, 50 insertions(+), 18 deletions(-) diff --git a/libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx b/libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx index 123dc9903d..94a029dab7 100644 --- a/libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx +++ b/libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx @@ -1,6 +1,6 @@ // eslint-disable-next-line no-use-before-define import React, { useEffect, useRef, useState } from 'react' -import { ContractDropdownProps } from '../types' +import { ContractDropdownProps, DeployOptions } from '../types' import { ContractData, FuncABI } from '@remix-project/core-plugin' import * as ethJSUtil from 'ethereumjs-util' import { ContractGUI } from './contractGUI' @@ -143,15 +143,20 @@ export function ContractDropdownUI (props: ContractDropdownProps) { } } - const clickCallback = (inputs, value) => { - createInstance(loadedContractData, value) + const clickCallback = (inputs, value, deployMode?: DeployOptions) => { + createInstance(loadedContractData, value, deployMode) } - const createInstance = (selectedContract, args) => { + const createInstance = (selectedContract, args, deployMode?: DeployOptions) => { if (selectedContract.bytecodeObject.length === 0) { return props.modal('Alert', 'This contract may be abstract, it may not implement an abstract parent\'s methods completely or it may not invoke an inherited contract\'s constructor correctly.', 'OK', () => {}) } - props.createInstance(loadedContractData, props.gasEstimationPrompt, props.passphrasePrompt, props.logBuilder, props.publishToStorage, props.mainnetPrompt, isOverSizePrompt, args) + if (deployMode === 'Deploy') { + props.createInstance(loadedContractData, props.gasEstimationPrompt, props.passphrasePrompt, props.logBuilder, props.publishToStorage, props.mainnetPrompt, isOverSizePrompt, args) + } else if (deployMode === 'Deploy with Proxy') { + // await deploy proxy first + props.createInstance(loadedContractData, props.gasEstimationPrompt, props.passphrasePrompt, props.logBuilder, props.publishToStorage, props.mainnetPrompt, isOverSizePrompt, args) + } } const atAddressChanged = (event) => { @@ -226,7 +231,7 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
{ ((contractList[currentFile] && contractList[currentFile].filter(contract => contract)) || []).length <= 0 ? 'No compiled contracts' : loadedContractData ?
- +
({ title: '', content: '', classList: '', dataId: '' }) + const [deployOptions] = useState<{ + title: DeployOptions, + active: boolean + }[]>([{ + title: 'Deploy', + active: true + }, { + title: 'Deploy with Proxy', + active: false + }]) + const [selectedDeployIndex, setSelectedDeployIndex] = useState(0) const multiFields = useRef>([]) const basicInputRef = useRef() @@ -143,7 +154,7 @@ export function ContractGUI (props: ContractGUIProps) { } const handleActionClick = () => { - props.clickCallBack(props.funcABI.inputs, basicInput) + props.clickCallBack(props.funcABI.inputs, basicInput, props.isDeploy ? deployOptions[selectedDeployIndex].title : null) } const handleBasicInput = (e) => { @@ -162,17 +173,25 @@ export function ContractGUI (props: ContractGUIProps) { } } + const setSelectedDeploy = (index: number) => { + setSelectedDeployIndex(index) + } + return (
0) || (props.funcABI.type === 'fallback') || (props.funcABI.type === 'receive') ? 'udapp_hasArgs' : ''}`}>
- - - - - ✓ Deploy - Deploy with Proxy - - + { + props.isDeploy ? + + + + + { + deployOptions.map(({ title, active }, index) => setSelectedDeploy(index)}> { index === selectedDeployIndex ? ✓ {title} : {title} }) + } + + : + } void } +export type DeployOptions = 'Deploy' | 'Deploy with Proxy' + export interface ContractGUIProps { title?: string, funcABI: FuncABI, inputs: any, - clickCallBack: (inputs: { name: string, type: string }[], input: string) => void, + clickCallBack: (inputs: { name: string, type: string }[], input: string, deployMode?: DeployOptions) => void, widthClass?: string, evmBC: any, lookupOnly: boolean, - disabled?: boolean + disabled?: boolean, + isDeploy?: boolean } export interface MainnetProps { network: Network,