From a9468ceaeb74424b053f4a8743b821caa83d6136 Mon Sep 17 00:00:00 2001 From: ioedeveloper Date: Mon, 21 Sep 2020 11:19:46 +0100 Subject: [PATCH] Display assembly items --- .../debugger-ui/src/hooks/extract-data.tsx | 2 +- .../src/lib/vm-debugger/assembly-items.tsx | 65 +++++++++------ .../src/lib/vm-debugger/code-list-view.tsx | 9 +-- .../src/lib/vm-debugger/dropdown-panel.tsx | 80 ++++++------------- .../src/lib/vm-debugger/function-panel.tsx | 2 +- .../src/lib/vm-debugger/stack-panel.tsx | 2 +- .../src/lib/vm-debugger/step-detail.tsx | 2 +- .../src/lib/vm-debugger/vm-debugger-head.tsx | 14 ++-- libs/remix-ui/debugger-ui/src/types/index.ts | 4 +- .../tree-view/src/lib/remix-ui-tree-view.tsx | 4 +- .../src/lib/tree-view-item/tree-view-item.tsx | 6 +- libs/remix-ui/tree-view/src/types/index.ts | 4 +- 12 files changed, 88 insertions(+), 106 deletions(-) diff --git a/libs/remix-ui/debugger-ui/src/hooks/extract-data.tsx b/libs/remix-ui/debugger-ui/src/hooks/extract-data.tsx index 116e4ba626..da28dfb4bb 100644 --- a/libs/remix-ui/debugger-ui/src/hooks/extract-data.tsx +++ b/libs/remix-ui/debugger-ui/src/hooks/extract-data.tsx @@ -38,7 +38,7 @@ export const useExtractData = (json, extractFunc?: ExtractFunc): Array<{ key: st ret.isLeaf = false } else if (item instanceof Object) { ret.children = Object.keys(item).map((key) => { - return {key: key, value: item[key]} + return {key: key, value: item[key]} }) ret.self = 'Object' ret.isNode = true diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/assembly-items.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/assembly-items.tsx index c8d770e423..c63e7dd114 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/assembly-items.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/assembly-items.tsx @@ -2,6 +2,7 @@ import React, { useState, useRef, useEffect } from 'react' import './styles/assembly-items.css' export const AssemblyItems = ({ codeView, index }) => { + console.log('codeView: ', codeView) const [state, setState] = useState({ selectedItem: null }) @@ -15,38 +16,50 @@ export const AssemblyItems = ({ codeView, index }) => { const indexChanged = (index) => { if (index < 0) return const { selectedItem } = state - let currentItem = refs.current[selectedItem].current + console.log('selectedItem: ', selectedItem) + console.log('refs: ', refs) + console.log('refs.current: ', refs.current) + let currentItem = refs.current[selectedItem] ? refs.current[selectedItem].current : null - if (selectedItem) { - currentItem.removeAttribute('selected') - currentItem.removeAttribute('style') - if (currentItem.firstChild) { - currentItem.firstChild.removeAttribute('style') + if (currentItem) { + if (selectedItem) { + currentItem.removeAttribute('selected') + currentItem.removeAttribute('style') + if (currentItem.firstChild) { + currentItem.firstChild.removeAttribute('style') + } } - } - - const codeView = asmItemsRef.current + const codeView = asmItemsRef.current + console.log('asmItemsRef: ', asmItemsRef) + console.log('asmItemsRef.current: ', asmItemsRef.current) - currentItem = codeView.children[index] - currentItem.style.setProperty('border-color', 'var(--primary)') - currentItem.style.setProperty('border-style', 'solid') - currentItem.setAttribute('selected', 'selected') - codeView.scrollTop = currentItem.offsetTop - parseInt(codeView.offsetTop) - setState(prevState => { - return { - ...prevState, - selectedItem: index - } - }) + currentItem = codeView.children[index] + currentItem.style.setProperty('border-color', 'var(--primary)') + currentItem.style.setProperty('border-style', 'solid') + currentItem.setAttribute('selected', 'selected') + codeView.scrollTop = currentItem.offsetTop - parseInt(codeView.offsetTop) + setState(prevState => { + return { + ...prevState, + selectedItem: index + } + }) + } } return ( -
- { - codeView.map((item, i) => { - return
{item}
- }) - } +
+
+
+
+ { + codeView.map((item, i) => { + return
{item}
+ }) + } +
+
+
) } diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/code-list-view.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/code-list-view.tsx index 99855a5b52..63ef70fbdb 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/code-list-view.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/code-list-view.tsx @@ -1,10 +1,7 @@ import React, { useState, useEffect } from 'react' -import DropdownPanel from './dropdown-panel' -/* eslint-disable-next-line */ -import EventManager from '../../../../../../apps/remix-ide/src/lib/events' +import AssemblyItems from './assembly-items' export const CodeListView = ({ asm }) => { - const event = new EventManager() const [state, setState] = useState({ code: [], address: '', @@ -40,11 +37,11 @@ export const CodeListView = ({ asm }) => { } }) indexChanged(index) - } + } return (
- +
) } diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/dropdown-panel.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/dropdown-panel.tsx index b5db6414d5..4c553acc5c 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/dropdown-panel.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/dropdown-panel.tsx @@ -1,5 +1,4 @@ import React, { useState, useRef, useEffect } from 'react' -import AssemblyItems from './assembly-items' import { TreeView, TreeViewItem } from '@remix-ui/tree-view' import useExtractData from '../../hooks/extract-data' import { DropdownPanelProps, ExtractData } from '../../types' @@ -11,15 +10,14 @@ import './styles/dropdown-panel.css' import EventManager from '../../../../../../apps/remix-ide/src/lib/events' export const DropdownPanel = (props: DropdownPanelProps) => { - const { dropdownName, dropdownMessage, opts, codeView, index, calldata, header, extractFunc, formatSelfFunc } = props + const { dropdownName, dropdownMessage, opts, calldata, header, loading, extractFunc, formatSelfFunc } = props const data = useExtractData(calldata, extractFunc) const event = new EventManager() const dropdownRawEl = useRef(null) const [state, setState] = useState({ header: '', json: opts.json, - displayContentOnly: opts.displayContentOnly, - toggleDropdown: false, + toggleDropdown: true, message: { innerText: '', display: 'none' @@ -36,7 +34,7 @@ export const DropdownPanel = (props: DropdownPanelProps) => { innerText: '', display: 'none' }, - showRefreshIcon: false + updating: false }) useEffect(() => { @@ -47,6 +45,10 @@ export const DropdownPanel = (props: DropdownPanelProps) => { message(dropdownMessage) }, [dropdownMessage]) + useEffect(() => { + if (loading && !state.updating) setLoading() + }, [loading]) + const handleToggle = () => { setState(prevState => { if (prevState.toggleDropdown) event.trigger('hide', []) @@ -63,22 +65,15 @@ export const DropdownPanel = (props: DropdownPanelProps) => { } const message = (message) => { - setState(state => { + if (message === state.message.innerText) return + setState(prevState => { return { - ...state, + ...prevState, message: { innerText: message, display: message ? 'block' : '' }, - dropdownRawContent: { - ...state.dropdownRawContent, - display: 'none' - }, - dropdownContent: { - ...state.dropdownContent, - display: 'none' - }, - showRefreshIcon: false + updating: false } }) } @@ -99,7 +94,7 @@ export const DropdownPanel = (props: DropdownPanelProps) => { ...prevState.dropdownContent, display: 'none' }, - showRefreshIcon: true + updating: true } }) } @@ -108,30 +103,17 @@ export const DropdownPanel = (props: DropdownPanelProps) => { setState(prevState => { return { ...prevState, - showRefreshIcon: false, dropdownContent: { ...prevState.dropdownContent, - display: 'none' + display: 'block' }, dropdownRawContent: { innerText: JSON.stringify(calldata, null, '\t'), display: 'block' - } + }, + updating: false } }) - if (!state.displayContentOnly) { - // this.view.querySelector('.title i.fa-copy').style.display = 'block' - setState(prevState => { - return { - ...prevState, - title: { - innerText: header || '', - display: 'block' - } - } - }) - } - message('') } const hide = () => { @@ -164,11 +146,11 @@ export const DropdownPanel = (props: DropdownPanelProps) => { } const renderData = (item: ExtractData, key: string) => { - const children = (item.children || []).map((child) => { + const children = (item.children || []).map((child, index) => { const childKey = key + '/' + child.key return ( - + { renderData(child.value, childKey) } ) @@ -176,51 +158,41 @@ export const DropdownPanel = (props: DropdownPanelProps) => { if (children && children.length > 0 ) { return ( - + { children } ) } else { - return + return } } let content: JSX.Element | JSX.Element[] =
Empty
if (state.json) { - content = (data).map(item => { + content = (data).map((item, index) => { return ( - + { renderData(item.data, item.key) } ) }) } - const title = !state.displayContentOnly ? -
+ const title =
{dropdownName}
-
:
- - if (state.displayContentOnly) { - setState(prevState => { - return { - ...prevState, - toggleDropdown: true - } - }) - } +
return (
{ title }
- +
- { codeView ? : content } + { content }
-
+
{ state.message.innerText }
) diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/function-panel.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/function-panel.tsx index 0441c54d27..dc46e101bc 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/function-panel.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/function-panel.tsx @@ -4,7 +4,7 @@ import DropdownPanel from './dropdown-panel' export const FunctionPanel = ({ calldata }) => { return (
- +
) } diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/stack-panel.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/stack-panel.tsx index f3fdf8479f..c554e747c7 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/stack-panel.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/stack-panel.tsx @@ -4,7 +4,7 @@ import DropdownPanel from './dropdown-panel' export const StackPanel = ({ calldata }) => { return (
- +
) } diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/step-detail.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/step-detail.tsx index be1758c8f7..5732fab4fa 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/step-detail.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/step-detail.tsx @@ -54,7 +54,7 @@ export const StepDetail = (props: StepDetailProps) => { return (
- +
) } diff --git a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/vm-debugger-head.tsx b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/vm-debugger-head.tsx index 354811dd8f..7fbf6f60c7 100644 --- a/libs/remix-ui/debugger-ui/src/lib/vm-debugger/vm-debugger-head.tsx +++ b/libs/remix-ui/debugger-ui/src/lib/vm-debugger/vm-debugger-head.tsx @@ -47,7 +47,9 @@ export const VmDebuggerHead = ({ vmDebuggerLogic }) => { const functions = [] for (const func of stack) { - functions.push(func.functionDefinition.attributes.name + '(' + func.inputs.join(', ') + ')') + const functionDefinitionName = func.functionDefinition.name || func.functionDefinition.attributes.name + + functions.push(functionDefinitionName + '(' + func.inputs.join(', ') + ')') } setFunctionPanel(functions) }) @@ -82,10 +84,10 @@ export const VmDebuggerHead = ({ vmDebuggerLogic }) => { setSolidityState({ ...solidityState, message }) }) vmDebuggerLogic.event.register('solidityLocals', (calldata) => { - setSolidityLocals({ ...solidityState, calldata }) + setSolidityLocals({ ...solidityLocals, calldata }) }) vmDebuggerLogic.event.register('solidityLocalsMessage', (message) => { - setSolidityLocals({ ...solidityState, message }) + setSolidityLocals({ ...solidityLocals, message }) }) vmDebuggerLogic.event.register('newTrace', () => { setPanelVisibility({ @@ -106,10 +108,10 @@ export const VmDebuggerHead = ({ vmDebuggerLogic }) => {
- {/* */} - {/* */} + +
- {/*
*/} +
{/*
*/}
diff --git a/libs/remix-ui/debugger-ui/src/types/index.ts b/libs/remix-ui/debugger-ui/src/types/index.ts index 5f8a8240d4..1f76ab8ff6 100644 --- a/libs/remix-ui/debugger-ui/src/types/index.ts +++ b/libs/remix-ui/debugger-ui/src/types/index.ts @@ -17,17 +17,15 @@ export interface DropdownPanelProps { dropdownMessage?: string, opts: { json: boolean, - displayContentOnly?: boolean, css?: { [key: string]: string } }, - codeView?: string[], - index?: number, calldata?: { [key: string]: string }, header?: string, + loading?: boolean extractFunc?: ExtractFunc, formatSelfFunc?: FormatSelfFunc } diff --git a/libs/remix-ui/tree-view/src/lib/remix-ui-tree-view.tsx b/libs/remix-ui/tree-view/src/lib/remix-ui-tree-view.tsx index 2396e692ba..70842535d3 100644 --- a/libs/remix-ui/tree-view/src/lib/remix-ui-tree-view.tsx +++ b/libs/remix-ui/tree-view/src/lib/remix-ui-tree-view.tsx @@ -4,10 +4,10 @@ import { TreeViewProps } from '../types' import './remix-ui-tree-view.css' export const TreeView = (props: TreeViewProps) => { - const { children, key, ...otherProps } = props + const { children, id, ...otherProps } = props return ( -