diff --git a/components/Transaction/index.tsx b/components/Transaction/index.tsx index a177806..da10c1e 100644 --- a/components/Transaction/index.tsx +++ b/components/Transaction/index.tsx @@ -93,15 +93,29 @@ const Transaction: FC = ({ header, state: txState, ...props }) } }, [selectedAccount?.value, selectedTransaction?.value, setState, txIsLoading]) + const getJsonString = useCallback( + (state?: Partial) => + JSON.stringify(prepareOptions?.(state) || {}, null, editorSettings.tabSize), + [editorSettings.tabSize, prepareOptions] + ) + + const saveEditorState = useCallback( + (value: string = '', transactionType?: string) => { + const pTx = prepareState(value, transactionType) + if (pTx) { + pTx.editorValue = getJsonString(pTx) + return setState(pTx) + } + }, + [getJsonString, setState] + ) + const submitTest = useCallback(async () => { let st: TransactionState | undefined const tt = txState.selectedTransaction?.value if (viewType === 'json') { - // save the editor state first - const pst = prepareState(editorValue || '', tt) - if (!pst) return - - st = setState(pst) + st = saveEditorState(editorValue, tt) + if (!st) return } const account = accounts.find(acc => acc.address === selectedAccount?.value) @@ -132,23 +146,18 @@ const Transaction: FC = ({ header, state: txState, ...props }) } setState({ txIsLoading: false }) }, [ + txState.selectedTransaction?.value, viewType, accounts, txIsDisabled, setState, header, + saveEditorState, editorValue, - txState, selectedAccount?.value, prepareOptions ]) - const getJsonString = useCallback( - (state?: Partial) => - JSON.stringify(prepareOptions?.(state) || {}, null, editorSettings.tabSize), - [editorSettings.tabSize, prepareOptions] - ) - const resetState = useCallback( (transactionType: SelectOption | undefined = defaultTransactionType) => { const fields = getTxFields(transactionType?.value) @@ -201,11 +210,21 @@ const Transaction: FC = ({ header, state: txState, ...props }) [accounts, prepareOptions, setState, txState] ) + const switchToJson = useCallback(() => { + const editorValue = getJsonString() + setState({ viewType: 'json', editorValue }) + }, [getJsonString, setState]) + + const switchToUI = useCallback(() => { + setState({ viewType: 'ui' }) + }, [setState]) + return ( {viewType === 'json' ? ( = ({ header, state: txState, ...props }) /> ) : ( = ({ header, state: txState, ...props })