udapp fixes

pull/3868/head
lianahus 1 year ago committed by Aniket
parent 60ae9751b7
commit c60d5043de
  1. 1
      libs/remix-ui/app/src/lib/remix-app/components/dragbar/dragbar.tsx
  2. 6
      libs/remix-ui/plugin-manager/src/lib/components/rootView.tsx
  3. 3
      libs/remix-ui/plugin-manager/src/lib/remix-ui-plugin-manager.css
  4. 110
      libs/remix-ui/run-tab/src/lib/components/contractDropdownUI.tsx
  5. 24
      libs/remix-ui/run-tab/src/lib/components/contractGUI.tsx
  6. 9
      libs/remix-ui/run-tab/src/lib/components/deployButton.tsx
  7. 4
      libs/remix-ui/run-tab/src/lib/components/deployInput.tsx
  8. 62
      libs/remix-ui/run-tab/src/lib/components/recorderCardUI.tsx
  9. 3
      libs/remix-ui/run-tab/src/lib/css/run-tab.css

@ -60,7 +60,6 @@ const DragBar = (props: IRemixDragBarUi) => {
function stopDrag(data: any) { function stopDrag(data: any) {
setDragState(false) setDragState(false)
console.log("drag")
if (data.x < props.minWidth + offset) { if (data.x < props.minWidth + offset) {
setDragBarPosX(offset) setDragBarPosX(offset)
props.setHideStatus(true) props.setHideStatus(true)

@ -36,18 +36,18 @@ function RootView ({ pluginComponent, children }: RootViewProps) {
return ( return (
<Fragment> <Fragment>
<div id="pluginManager" data-id="pluginManagerComponentPluginManager"> <div id="pluginManager" data-id="pluginManagerComponentPluginManager">
<header className="form-group remixui_pluginSearch plugins-header pt-3 pb-0 px-4 border-bottom" data-id="pluginManagerComponentPluginManagerHeader"> <header className="form-group mb-0 d-flex flex-column align-items-center bg-light plugins-header pt-3 pb-0 px-3" data-id="pluginManagerComponentPluginManagerHeader">
<input <input
type="text" type="text"
onChange={(event) => { onChange={(event) => {
setFilterPlugin(event.target.value.toLowerCase()) setFilterPlugin(event.target.value.toLowerCase())
}} }}
value={filterPlugins} value={filterPlugins}
className="form-control" className="mb-2 form-control"
placeholder="Search" placeholder="Search"
data-id="pluginManagerComponentSearchInput" data-id="pluginManagerComponentSearchInput"
/> />
<button onClick={openModal} className="remixui_pluginSearchButton btn bg-transparent text-dark border-0 mt-2 text-underline" data-id="pluginManagerComponentPluginSearchButton"> <button onClick={openModal} className="py-1 btn bg-transparent text-dark border-0 mt-2 text-underline" data-id="pluginManagerComponentPluginSearchButton">
<FormattedMessage id='pluginManager.connectLocal' /> <FormattedMessage id='pluginManager.connectLocal' />
</button> </button>
</header> </header>

@ -12,9 +12,6 @@
.remixui_pluginSearchInput { .remixui_pluginSearchInput {
height: 38px; height: 38px;
} }
.remixui_pluginSearchButton {
font-size: 13px;
}
.remixui_displayName { .remixui_displayName {
width: 100%; width: 100%;
display: flex; display: flex;

@ -29,6 +29,7 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
const [loadedContractData, setLoadedContractData] = useState<ContractData>(null) const [loadedContractData, setLoadedContractData] = useState<ContractData>(null)
const [constructorInterface, setConstructorInterface] = useState<FuncABI>(null) const [constructorInterface, setConstructorInterface] = useState<FuncABI>(null)
const [constructorInputs, setConstructorInputs] = useState(null) const [constructorInputs, setConstructorInputs] = useState(null)
const [addressIsValid, setaddressIsValid] = useState(true)
const [compilerName, setCompilerName] = useState<string>('') const [compilerName, setCompilerName] = useState<string>('')
const contractsRef = useRef<HTMLSelectElement>(null) const contractsRef = useRef<HTMLSelectElement>(null)
const atAddressValue = useRef<HTMLInputElement>(null) const atAddressValue = useRef<HTMLInputElement>(null)
@ -201,12 +202,19 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
const loadFromAddress = () => { const loadFromAddress = () => {
let address = loadedAddress let address = loadedAddress
if (address == '') return
if (!ethJSUtil.isValidChecksumAddress(address)) { try {
props.tooltip(checkSumWarning()) if (!ethJSUtil.isValidChecksumAddress(address)) {
address = ethJSUtil.toChecksumAddress(address) props.tooltip(checkSumWarning())
address = ethJSUtil.toChecksumAddress(address)
}
props.loadAddress(loadedContractData, address)
} catch(e) {
console.log("Invalid Address input: ", e)
setaddressIsValid(false)
return
} }
props.loadAddress(loadedContractData, address) setaddressIsValid(true)
} }
const handleCheckedIPFS = () => { const handleCheckedIPFS = () => {
@ -268,13 +276,17 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
evmVersion = JSON.parse(loadedContractData.metadata).settings.evmVersion evmVersion = JSON.parse(loadedContractData.metadata).settings.evmVersion
} catch (err) {} } catch (err) {}
return ( return (
<div className="udapp_container" data-id="contractDropdownContainer"> <div className="udapp_container mb-2" data-id="contractDropdownContainer">
<div className='d-flex justify-content-between'> <div className='d-flex justify-content-between'>
<div className="d-flex justify-content-between align-items-end"> <div className="d-flex justify-content-between align-items-end">
<label className="udapp_settingsLabel pr-1"> <label className="udapp_settingsLabel pr-1">
<FormattedMessage id='udapp.contract' /> <FormattedMessage id='udapp.contract' />
</label> </label>
{compilerName && compilerName !== '' && <label className='udapp_settingsCompiledBy badge badge-secondary' data-id="udappCompiledBy"><FormattedMessage id='udapp.compiledBy' values={{ compilerName: <span className="text-capitalize"> {compilerName}</span> }} /></label>} {compilerName && compilerName !== '' &&
<label className='udapp_settingsCompiledBy badge badge-secondary' data-id="udappCompiledBy">
<FormattedMessage id='udapp.compiledBy' values={{ compilerName: <span className="text-capitalize">{compilerName}</span> }} />
</label>
}
</div> </div>
{props.remixdActivated ? {props.remixdActivated ?
(<CustomTooltip (<CustomTooltip
@ -292,7 +304,7 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
<i style={{ cursor: 'pointer' }} className="fa fa-refresh mr-2 mt-2" aria-hidden="true"></i> <i style={{ cursor: 'pointer' }} className="fa fa-refresh mr-2 mt-2" aria-hidden="true"></i>
</button> </button>
</CustomTooltip>) </CustomTooltip>)
: null} : null}
</div> </div>
<div className="udapp_subcontainer"> <div className="udapp_subcontainer">
<CustomTooltip <CustomTooltip
@ -302,7 +314,14 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
tooltipText={contractOptions.title} tooltipText={contractOptions.title}
> >
<div id="udappcontractNamesWrapper" className="w-100"> <div id="udappcontractNamesWrapper" className="w-100">
<select ref={contractsRef} value={currentContract} onChange={handleContractChange} className="udapp_contractNames custom-select" disabled={contractOptions.disabled} style={{ display: loadType === 'abi' && !isContractFile(currentFile) ? 'none' : 'block', pointerEvents: contractOptions.disabled ? 'none' : 'auto' }}> <select ref={contractsRef}
value={currentContract}
onChange={handleContractChange}
className="udapp_contractNames custom-select"
disabled={contractOptions.disabled}
style={{ display: loadType === 'abi' && !isContractFile(currentFile) ? 'none' : 'block', pointerEvents: contractOptions.disabled ? 'none' : 'auto' }}
>
<option value='' disabled hidden>No compiled contracts</option>
{(contractList[currentFile] || []).map((contract, index) => { {(contractList[currentFile] || []).map((contract, index) => {
return <option key={index} value={contract.alias}> return <option key={index} value={contract.alias}>
{contract.alias} - {contract.file} {contract.alias} - {contract.file}
@ -314,19 +333,20 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
<span className="py-1" style={{ display: abiLabel.display }}>{abiLabel.content}</span> <span className="py-1" style={{ display: abiLabel.display }}>{abiLabel.content}</span>
</div> </div>
{ evmVersion && loadedContractData && <CustomTooltip { evmVersion && loadedContractData && <CustomTooltip
placement={'right'} placement={'right'}
tooltipClasses="text-wrap text-left" tooltipClasses="text-wrap text-left"
tooltipId="info-evm-version-warn" tooltipId="info-evm-version-warn"
tooltipText={<span className="text-left"> tooltipText={<span className="text-left">
<FormattedMessage id='udapp.warningEvmVersion' values={{ evmVersion }}/> <FormattedMessage id='udapp.warningEvmVersion' values={{ evmVersion }}/>
</span>} </span>}
> >
<span className='udapp_evmVersion badge badge-secondary'>evm version: {evmVersion}</span> <span className='udapp_evmVersion badge alert-warning'>evm version: {evmVersion}</span>
</CustomTooltip> } </CustomTooltip>
}
<div> <div>
<div className="udapp_deployDropdown"> <div className="udapp_deployDropdown">
{((contractList[currentFile] && contractList[currentFile].filter(contract => contract)) || []).length <= 0 ? intl.formatMessage({ id: 'udapp.noCompiledContracts' }) {(((contractList[currentFile] && contractList[currentFile].filter(contract => contract)) || []).length > 0 && loadedContractData) &&
: loadedContractData ? <div> <div>
<ContractGUI <ContractGUI
title={intl.formatMessage({ id: 'udapp.deploy' })} title={intl.formatMessage({ id: 'udapp.deploy' })}
isDeploy={true} isDeploy={true}
@ -368,38 +388,38 @@ export function ContractDropdownUI (props: ContractDropdownProps) {
</label> </label>
</CustomTooltip> </CustomTooltip>
</div> </div>
</div> : '' </div>
} }
</div> </div>
<div className="udapp_orLabel mt-2" style={{ display: loadType === 'abi' && !isContractFile(currentFile) ? 'none' : 'block' }}> <div className="pt-2 d-flex flex-column sudapp_button udapp_atAddressSect">
<FormattedMessage id='udapp.or' /> <div className='d-flex flex-row'>
</div> <CustomTooltip
<div className="udapp_button udapp_atAddressSect "> placement={'top-end'}
<CustomTooltip tooltipClasses="text-wrap text-left"
placement={'top-end'} tooltipId="runAndDeployAddresstooltip"
tooltipClasses="text-wrap text-left" tooltipText={atAddressOptions.title}
tooltipId="runAndDeployAddresstooltip"
tooltipText={atAddressOptions.title}
> >
<div id="runAndDeployAtAdressButtonContainer" onClick={loadFromAddress} data-title={atAddressOptions.title}> <div id="runAndDeployAtAdressButtonContainer" onClick={loadFromAddress} data-title={atAddressOptions.title}>
<button className="udapp_atAddress btn btn-sm btn-primary" id="runAndDeployAtAdressButton" disabled={atAddressOptions.disabled} style={{ pointerEvents: 'none' }} onClick={loadFromAddress} data-title={atAddressOptions.title}> <button className="udapp_atAddress btn-sm py-2 btn-primary" id="runAndDeployAtAdressButton" disabled={atAddressOptions.disabled} style={{ pointerEvents: 'none' }} onClick={loadFromAddress} data-title={atAddressOptions.title}>
<FormattedMessage id='udapp.atAddress' /> <FormattedMessage id='udapp.atAddress' />
</button> </button>
</div> </div>
</CustomTooltip> </CustomTooltip>
<CustomTooltip <CustomTooltip
placement={'top-end'} placement={'top-end'}
tooltipClasses="text-wrap text-left" tooltipClasses="text-wrap text-left"
tooltipId="runAndDeployAddressInputtooltip" tooltipId="runAndDeployAddressInputtooltip"
tooltipText={<FormattedMessage id='udapp.addressOfContract' />} tooltipText={<FormattedMessage id='udapp.addressOfContract' />}
> >
<input <input
ref={atAddressValue} ref={atAddressValue}
className="udapp_input udapp_ataddressinput ataddressinput form-control" className={(!addressIsValid ? "border border-danger" : "border-0") + " h-100 udapp_input udapp_ataddressinput ataddressinput form-control"}
placeholder={intl.formatMessage({ id: 'udapp.loadContractFromAddress' })} placeholder={intl.formatMessage({ id: 'udapp.loadContractFromAddress' })}
onChange={atAddressChanged} onChange={atAddressChanged}
/> />
</CustomTooltip> </CustomTooltip>
</div>
{ !addressIsValid && <span className='text-danger text-right'>The address is not valid</span> }
</div> </div>
</div> </div>
</div> </div>

@ -182,11 +182,9 @@ export function ContractGUI (props: ContractGUIProps) {
setProxyAddressError('proxy address cannot be empty') setProxyAddressError('proxy address cannot be empty')
} else { } else {
const isValidProxyAddress = await props.isValidProxyAddress(proxyAddress) const isValidProxyAddress = await props.isValidProxyAddress(proxyAddress)
if (isValidProxyAddress) { if (isValidProxyAddress) {
setProxyAddressError('') setProxyAddressError('')
const upgradeReport: any = await props.isValidProxyUpgrade(proxyAddress) const upgradeReport: any = await props.isValidProxyUpgrade(proxyAddress)
if (upgradeReport.ok) { if (upgradeReport.ok) {
!proxyAddressError && props.clickCallBack(props.funcABI.inputs, proxyAddress, ['Upgrade with Proxy']) !proxyAddressError && props.clickCallBack(props.funcABI.inputs, proxyAddress, ['Upgrade with Proxy'])
} else { } else {
@ -279,14 +277,14 @@ export function ContractGUI (props: ContractGUIProps) {
placement={"right"} placement={"right"}
tooltipClasses="text-wrap" tooltipClasses="text-wrap"
tooltipId="remixUdappInstanceButtonTooltip" tooltipId="remixUdappInstanceButtonTooltip"
tooltipText={toggleUpgradeImp && !proxyAddress ? 'Proxy address cannot be empty' : buttonOptions.title} tooltipText={toggleUpgradeImp && !proxyAddress ? 'Proxy address cannot be empty' : (props.inputs !=='' && basicInput === '') ? 'Input required' : buttonOptions.title}
> >
<button <button
onClick={handleActionClick} onClick={handleActionClick}
className={`udapp_instanceButton ${props.widthClass} btn btn-sm ${buttonOptions.classList}`} className={`udapp_instanceButton ${props.widthClass} btn btn-sm ${buttonOptions.classList}`}
data-id={buttonOptions.dataId} data-id={buttonOptions.dataId}
data-title={buttonOptions.title} data-title={buttonOptions.title}
disabled={(toggleUpgradeImp && !proxyAddress) || props.disabled} disabled={(toggleUpgradeImp && !proxyAddress) || props.disabled || (props.inputs !=='' && basicInput === '')}
> >
<div className='text-nowrap overflow-hidden text-truncate'>{title}</div> <div className='text-nowrap overflow-hidden text-truncate'>{title}</div>
</button> </button>
@ -309,6 +307,7 @@ export function ContractGUI (props: ContractGUIProps) {
} }
ref={basicInputRef} ref={basicInputRef}
style={{ style={{
height: '2rem',
visibility: !( visibility: !(
(props.funcABI.inputs && props.funcABI.inputs.length > 0) || (props.funcABI.inputs && props.funcABI.inputs.length > 0) ||
props.funcABI.type === "fallback" || props.funcABI.type === "fallback" ||
@ -439,12 +438,7 @@ export function ContractGUI (props: ContractGUIProps) {
{props.initializerOptions && {props.initializerOptions &&
props.initializerOptions.initializeInputs ? ( props.initializerOptions.initializeInputs ? (
<span onClick={handleToggleDeployProxy}> <span onClick={handleToggleDeployProxy}>
<i <i className={!toggleDeployProxy ? "fas fa-angle-right pt-2" : "fas fa-angle-down"}
className={
!toggleDeployProxy
? "fas fa-angle-right pt-2"
: "fas fa-angle-down"
}
aria-hidden="true" aria-hidden="true"
></i> ></i>
</span> </span>
@ -534,12 +528,14 @@ export function ContractGUI (props: ContractGUIProps) {
> >
<Dropdown.Item <Dropdown.Item
key={index} key={index}
onClick={() => { onClick={() => { switchProxyAddress(deployment.address) }}
switchProxyAddress(deployment.address)
}}
data-id={`proxyAddress${index}`} data-id={`proxyAddress${index}`}
> >
<span>{ proxyAddress === deployment.address ? <span>&#10003; { deployment.contractName + ' ' + shortenProxyAddress(deployment.address) } </span> : <span className="pl-3">{ deployment.contractName + ' ' + shortenProxyAddress(deployment.address) }</span> }</span> <span>
{ proxyAddress === deployment.address ?
<span>&#10003; { deployment.contractName + ' ' + shortenProxyAddress(deployment.address) } </span>
: <span className="pl-3">{ deployment.contractName + ' ' + shortenProxyAddress(deployment.address) }</span> }
</span>
</Dropdown.Item> </Dropdown.Item>
</CustomTooltip> </CustomTooltip>
)) ))

@ -15,7 +15,14 @@ export function DeployButton (props: DeployButtonProps) {
<> <>
{ props.deployOptions && (props.deployOptions || []).length > 0 ? { props.deployOptions && (props.deployOptions || []).length > 0 ?
<Dropdown as={ButtonGroup}> <Dropdown as={ButtonGroup}>
<button onClick={props.handleActionClick} title={props.buttonOptions.title} className={`udapp_instanceButton ${props.buttonOptions.widthClass} btn btn-sm ${props.buttonOptions.classList}`} data-id={props.buttonOptions.dataId}>{ props.deployOptions[props.selectedIndex] ? props.deployOptions[props.selectedIndex].title : 'Deploy' }</button> <button
onClick={props.handleActionClick}
title={props.buttonOptions.title}
className={`udapp_instanceButton ${props.buttonOptions.widthClass} btn btn-sm ${props.buttonOptions.classList}`}
data-id={props.buttonOptions.dataId}
>
{ props.deployOptions[props.selectedIndex] ? props.deployOptions[props.selectedIndex].title : 'Deploy' }
</button>
<Dropdown.Toggle split id="dropdown-split-basic" className={`btn btn-sm dropdown-toggle dropdown-toggle-split ${props.buttonOptions.classList}`} style={{ maxWidth: 25, minWidth: 0, height: 32 }} /> <Dropdown.Toggle split id="dropdown-split-basic" className={`btn btn-sm dropdown-toggle dropdown-toggle-split ${props.buttonOptions.classList}`} style={{ maxWidth: 25, minWidth: 0, height: 32 }} />
<Dropdown.Menu className="deploy-items border-0"> <Dropdown.Menu className="deploy-items border-0">
{ {

@ -5,7 +5,7 @@ import { DeployButton } from './deployButton'
export function DeployInput (props: DeployInputProps) { export function DeployInput (props: DeployInputProps) {
return ( return (
<div className="udapp_contractActionsContainerSingle pt-2" style={{ display: 'flex' }}> <div className="udapp_contractActionsContainerSingle" style={{ display: 'flex' }}>
<DeployButton buttonOptions={props.buttonOptions} selectedIndex={props.selectedIndex} setSelectedIndex={props.setSelectedIndex} handleActionClick={props.handleActionClick} deployOptions={props.deployOptions} /> <DeployButton buttonOptions={props.buttonOptions} selectedIndex={props.selectedIndex} setSelectedIndex={props.setSelectedIndex} handleActionClick={props.handleActionClick} deployOptions={props.deployOptions} />
<CustomTooltip <CustomTooltip
placement="right" placement="right"
@ -19,7 +19,7 @@ export function DeployInput (props: DeployInputProps) {
placeholder={props.inputs} placeholder={props.inputs}
onChange={props.handleBasicInput} onChange={props.handleBasicInput}
ref={props.basicInputRef} ref={props.basicInputRef}
style={{ visibility: !props.inputs ? 'hidden' : 'visible' }} style={{ visibility: !props.inputs ? 'hidden' : 'visible', height: props.funcABI.type === 'fallback' || props.funcABI.type === 'receive' ? '0' : '' }}
/> />
</CustomTooltip> </CustomTooltip>
</div> </div>

@ -30,7 +30,7 @@ export function RecorderUI (props: RecorderProps) {
return ( return (
<div className="udapp_cardContainer list-group-item border-top border-bottom"> <div className="udapp_cardContainer py-1 list-group-item border-top border-bottom">
<div className="udapp_recorderSection d-flex justify-content-between" onClick={toggleClass}> <div className="udapp_recorderSection d-flex justify-content-between" onClick={toggleClass}>
<div className="d-flex justify-content-center align-items-center"> <div className="d-flex justify-content-center align-items-center">
<label className="mt-1 udapp_recorderSectionLabel"> <label className="mt-1 udapp_recorderSectionLabel">
@ -59,8 +59,8 @@ export function RecorderUI (props: RecorderProps) {
</span> </span>
</div> </div>
</div> </div>
<div className={`flex-column ${toggleExpander ? "d-flex" : "d-none"}`}> <div className={`pb-2 flex-column ${toggleExpander ? "d-flex" : "d-none"}`}>
<div className="mb-1 mt-1 fmt-2 custom-control custom-checkbox mb-1"> <div className="mb-1 mt-1 custom-control custom-checkbox mb-1">
<input ref={inputLive} type="checkbox" id="livemode-recorder" className="custom-control-input custom-select" name="input-livemode"/> <input ref={inputLive} type="checkbox" id="livemode-recorder" className="custom-control-input custom-select" name="input-livemode"/>
<CustomTooltip <CustomTooltip
placement={'right'} placement={'right'}
@ -74,34 +74,34 @@ export function RecorderUI (props: RecorderProps) {
</CustomTooltip> </CustomTooltip>
</div> </div>
<div className="mb-1 mt-1 udapp_transactionActions"> <div className="mb-1 mt-1 udapp_transactionActions">
<CustomTooltip <CustomTooltip
placement={'bottom-start'} placement={'bottom-start'}
tooltipClasses="text-nowrap" tooltipClasses="text-nowrap"
tooltipId="remixUdappTransactionSavetooltip" tooltipId="remixUdappTransactionSavetooltip"
tooltipText={ tooltipText={
props.count === 0 ? intl.formatMessage({ id: 'udapp.transactionSaveTooltip1' }) props.count === 0 ? intl.formatMessage({ id: 'udapp.transactionSaveTooltip1' })
: props.count === 1 ? intl.formatMessage({ id: 'udapp.transactionSaveTooltip2' }, { count: props.count }) : props.count === 1 ? intl.formatMessage({ id: 'udapp.transactionSaveTooltip2' }, { count: props.count })
: intl.formatMessage({ id: 'udapp.transactionSaveTooltip3' }, { count: props.count }) : intl.formatMessage({ id: 'udapp.transactionSaveTooltip3' }, { count: props.count })
} }
> >
<span> <span>
<button className="btn btn-sm btn-info savetransaction udapp_recorder" disabled={props.count === 0 ? true: false} onClick={triggerRecordButton} style={{ pointerEvents: props.count === 0 ? 'none' : 'auto' }}> <button className="btn btn-sm btn-info savetransaction udapp_recorder" disabled={props.count === 0 ? true: false} onClick={triggerRecordButton} style={{ pointerEvents: props.count === 0 ? 'none' : 'auto' }}>
<FormattedMessage id='udapp.save' /> <FormattedMessage id='udapp.save' />
</button> </button>
</span> </span>
</CustomTooltip> </CustomTooltip>
<CustomTooltip <CustomTooltip
placement={'right'} placement={'right'}
tooltipClasses="text-nowrap" tooltipClasses="text-nowrap"
tooltipId="tooltip-run-recorder" tooltipId="tooltip-run-recorder"
tooltipText={<FormattedMessage id='udapp.runRecorderTooltip' />} tooltipText={<FormattedMessage id='udapp.runRecorderTooltip' />}
> >
<span> <span>
<button className="btn btn-sm btn-info runtransaction udapp_runTxs" data-id="runtransaction" disabled={enableRunButton} onClick={handleClickRunButton} style={{ pointerEvents: enableRunButton ? 'none' : 'auto' }}> <button className="btn btn-sm btn-info runtransaction udapp_runTxs" data-id="runtransaction" disabled={enableRunButton} onClick={handleClickRunButton} style={{ pointerEvents: enableRunButton ? 'none' : 'auto' }}>
<FormattedMessage id='udapp.run' /> <FormattedMessage id='udapp.run' />
</button> </button>
</span> </span>
</CustomTooltip> </CustomTooltip>
</div> </div>
</div> </div>
</div> </div>

@ -101,8 +101,6 @@
align-items: center; align-items: center;
margin-top: 13px; margin-top: 13px;
} }
.udapp_transaction {
}
.udapp_atAddress { .udapp_atAddress {
margin: 0; margin: 0;
min-width: 100px; min-width: 100px;
@ -118,7 +116,6 @@
height: 32px; height: 32px;
} }
.udapp_atAddressSect input { .udapp_atAddressSect input {
height: 32px;
border-top-left-radius: 0 !important; border-top-left-radius: 0 !important;
border-bottom-left-radius: 0 !important; border-bottom-left-radius: 0 !important;
} }

Loading…
Cancel
Save