encode data on click

pull/1901/head^2
aniket-engg 3 years ago committed by Aniket
parent b0864ac82c
commit 7363034d7f
  1. 7
      libs/remix-ui/clipboard/src/lib/copy-to-clipboard/copy-to-clipboard.tsx
  2. 39
      libs/remix-ui/run-tab/src/lib/components/contractGUI.tsx

@ -12,10 +12,11 @@ interface ICopyToClipboard {
direction?: Placement, direction?: Placement,
className?: string, className?: string,
title?: string, title?: string,
children?: JSX.Element children?: JSX.Element,
onmousedown?: any
} }
export const CopyToClipboard = (props: ICopyToClipboard) => { export const CopyToClipboard = (props: ICopyToClipboard) => {
let { content, tip = 'Copy', icon = 'fa-copy', direction = 'right', children, ...otherProps } = props let { content, tip = 'Copy', icon = 'fa-copy', direction = 'right', children, onmousedown, ...otherProps } = props
const [message, setMessage] = useState(tip) const [message, setMessage] = useState(tip)
const handleClick = (e) => { const handleClick = (e) => {
if (content && content !== '') { // module `copy` keeps last copied thing in the memory, so don't show tooltip if nothing is copied, because nothing was added to memory if (content && content !== '') { // module `copy` keeps last copied thing in the memory, so don't show tooltip if nothing is copied, because nothing was added to memory
@ -41,7 +42,7 @@ export const CopyToClipboard = (props: ICopyToClipboard) => {
return ( return (
// eslint-disable-next-line jsx-a11y/anchor-is-valid // eslint-disable-next-line jsx-a11y/anchor-is-valid
<a href='#' onClick={handleClick} onMouseLeave={reset}> <a href='#' onClick={handleClick} onMouseLeave={reset} onMouseDown={onmousedown}>
<OverlayTrigger placement={direction} overlay={ <OverlayTrigger placement={direction} overlay={
<Tooltip id="overlay-tooltip"> <Tooltip id="overlay-tooltip">
{ message } { message }

@ -18,25 +18,6 @@ export function ContractGUI (props: ContractGUIProps) {
const [clipboardContent, setClipboardContent] = useState<string>('') const [clipboardContent, setClipboardContent] = useState<string>('')
const multiFields = useRef<Array<HTMLInputElement | null>>([]) const multiFields = useRef<Array<HTMLInputElement | null>>([])
useEffect(() => {
const multiString = getMultiValsString()
const multiJSON = JSON.parse('[' + multiString + ']')
let encodeObj
if (props.evmBC) {
encodeObj = txFormat.encodeData(props.funcABI, multiJSON, props.evmBC)
} else {
encodeObj = txFormat.encodeData(props.funcABI, multiJSON, null)
}
if (encodeObj.error) {
console.error(encodeObj.error)
// throw new Error(encodeObj.error)
setClipboardContent(encodeObj.error)
} else {
setClipboardContent(encodeObj.data)
}
}, [])
useEffect(() => { useEffect(() => {
if (props.title) { if (props.title) {
setTitle(props.title) setTitle(props.title)
@ -75,6 +56,24 @@ export function ContractGUI (props: ContractGUIProps) {
} }
}, [props.lookupOnly, props.funcABI, title]) }, [props.lookupOnly, props.funcABI, title])
const onCTCMouseDown = () => {
const multiString = getMultiValsString()
const multiJSON = JSON.parse('[' + multiString + ']')
let encodeObj
if (props.evmBC) {
encodeObj = txFormat.encodeData(props.funcABI, multiJSON, props.evmBC)
} else {
encodeObj = txFormat.encodeData(props.funcABI, multiJSON, null)
}
if (encodeObj.error) {
console.error(encodeObj.error)
setClipboardContent(encodeObj.error)
} else {
setClipboardContent(encodeObj.data)
}
}
const switchMethodViewOn = () => { const switchMethodViewOn = () => {
setToggleContainer(true) setToggleContainer(true)
makeMultiVal() makeMultiVal()
@ -187,7 +186,7 @@ export function ContractGUI (props: ContractGUIProps) {
})} })}
</div> </div>
<div className="udapp_group udapp_multiArg"> <div className="udapp_group udapp_multiArg">
<CopyToClipboard content={clipboardContent} tip='Encode values of input fields & copy to clipboard' icon='fa-clipboard' direction={'left'} /> <CopyToClipboard content={clipboardContent} tip='Encode values of input fields & copy to clipboard' icon='fa-clipboard' direction={'left'} onmousedown= {onCTCMouseDown} />
<button onClick={handleExpandMultiClick} title={buttonOptions.title} data-id={buttonOptions.dataId} className={`udapp_instanceButton ${buttonOptions.classList}`}>{ buttonOptions.content }</button> <button onClick={handleExpandMultiClick} title={buttonOptions.title} data-id={buttonOptions.dataId} className={`udapp_instanceButton ${buttonOptions.classList}`}>{ buttonOptions.content }</button>
</div> </div>
</div> </div>

Loading…
Cancel
Save