Fix json saving and discarding.

This commit is contained in:
muzam1l
2023-03-08 17:13:36 +05:30
parent fbf4565dbc
commit 38f064c6d8
3 changed files with 23 additions and 18 deletions

View File

@@ -201,6 +201,15 @@ const Transaction: FC<TransactionProps> = ({ 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 (
<Box css={{ position: 'relative', height: 'calc(100% - 28px)' }} {...props}>
{viewType === 'json' ? (
@@ -213,6 +222,7 @@ const Transaction: FC<TransactionProps> = ({ header, state: txState, ...props })
/>
) : (
<TxUI
switchToJson={switchToJson}
state={txState}
resetState={resetState}
setState={setState}
@@ -233,8 +243,8 @@ const Transaction: FC<TransactionProps> = ({ header, state: txState, ...props })
<Button
onClick={() => {
if (viewType === 'ui') {
setState({ viewType: 'json' })
} else setState({ viewType: 'ui' })
switchToJson()
} else switchToUI()
}}
outline
>

View File

@@ -11,7 +11,7 @@ import Monaco from '../Monaco'
import type monaco from 'monaco-editor'
interface JsonProps {
getJsonString?: (state?: Partial<TransactionState>) => string
getJsonString: (state?: Partial<TransactionState>) => string
header?: string
setState: (pTx?: Partial<TransactionState> | undefined) => void
state: TransactionState
@@ -25,13 +25,6 @@ export const TxJson: FC<JsonProps> = ({ getJsonString, state: txState, header, s
txState.selectedTransaction?.value
)
useEffect(() => {
setState({
editorValue: getJsonString?.()
})
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
useEffect(() => {
const parsed = parseJSON(editorValue)
if (!parsed) return
@@ -48,9 +41,6 @@ export const TxJson: FC<JsonProps> = ({ getJsonString, state: txState, header, s
const tx = prepareState(value, transactionType)
if (tx) {
setState(tx)
setState({
editorValue: getJsonString?.(tx)
})
}
}
@@ -59,7 +49,7 @@ export const TxJson: FC<JsonProps> = ({ getJsonString, state: txState, header, s
body: 'Are you sure to discard these changes?',
confirmText: 'Yes',
onCancel: () => {},
onConfirm: () => setState({ editorValue: getJsonString?.() })
onConfirm: () => setState({ editorValue: getJsonString() })
})
}
@@ -163,7 +153,7 @@ export const TxJson: FC<JsonProps> = ({ getJsonString, state: txState, header, s
})
}, [getSchemas, monacoInst])
const hasUnsaved = useMemo(() => editorValue !== getJsonString?.(), [editorValue, getJsonString])
const hasUnsaved = useMemo(() => editorValue !== getJsonString(), [editorValue, getJsonString])
return (
<Monaco

View File

@@ -25,9 +25,16 @@ interface UIProps {
resetState: (tt?: SelectOption) => TransactionState | undefined
state: TransactionState
estimateFee?: (...arg: any) => Promise<string | undefined>
switchToJson: () => void
}
export const TxUI: FC<UIProps> = ({ state: txState, setState, resetState, estimateFee }) => {
export const TxUI: FC<UIProps> = ({
state: txState,
setState,
resetState,
estimateFee,
switchToJson
}) => {
const { accounts } = useSnapshot(state)
const {
selectedAccount,
@@ -102,8 +109,6 @@ export const TxUI: FC<UIProps> = ({ state: txState, setState, resetState, estima
[handleEstimateFee, resetState, setState]
)
const switchToJson = () => setState({ viewType: 'json' })
// default tx
useEffect(() => {
if (selectedTransaction?.value) return