bridge_ui: safely set target chain in recovery

Change-Id: I7d6e03b56b61129d72ef641059871ff362a3f0f4
This commit is contained in:
Evan Gray 2021-10-28 11:54:49 -04:00
parent a956e570fb
commit 4c85daa531
4 changed files with 18 additions and 8 deletions

View File

@ -519,14 +519,6 @@ export default function Recovery() {
fullWidth fullWidth
margin="normal" margin="normal"
/> />
<TextField
variant="outlined"
label="Target Chain"
disabled
value={parsedPayload?.targetChain.toString() || ""}
fullWidth
margin="normal"
/>
<TextField <TextField
variant="outlined" variant="outlined"
label="Target Address" label="Target Address"

View File

@ -217,8 +217,14 @@ export const nftSlice = createSlice({
}; };
}> }>
) => { ) => {
const prevTargetChain = state.targetChain;
state.signedVAAHex = action.payload.vaa; state.signedVAAHex = action.payload.vaa;
state.targetChain = action.payload.parsedPayload.targetChain; state.targetChain = action.payload.parsedPayload.targetChain;
if (state.sourceChain === action.payload.parsedPayload.targetChain) {
state.sourceChain = prevTargetChain;
state.sourceParsedTokenAccount = undefined;
state.sourceParsedTokenAccounts = getEmptyDataWrapper();
}
state.targetAddressHex = action.payload.parsedPayload.targetAddress; state.targetAddressHex = action.payload.parsedPayload.targetAddress;
state.originChain = action.payload.parsedPayload.originChain; state.originChain = action.payload.parsedPayload.originChain;
state.originAsset = action.payload.parsedPayload.originAddress; state.originAsset = action.payload.parsedPayload.originAddress;

View File

@ -121,6 +121,9 @@ export const selectNFTTargetError = (state: RootState) => {
if (!state.nft.targetChain) { if (!state.nft.targetChain) {
return "Select a target chain"; return "Select a target chain";
} }
if (state.nft.sourceChain === state.nft.targetChain) {
return "Select a different target and source";
}
if (state.nft.targetChain === CHAIN_ID_SOLANA && !state.nft.targetAsset) { if (state.nft.targetChain === CHAIN_ID_SOLANA && !state.nft.targetAsset) {
// target asset is only required for solana // target asset is only required for solana
// in the cases of new transfers, target asset will not exist and be created on redeem // in the cases of new transfers, target asset will not exist and be created on redeem
@ -256,6 +259,9 @@ export const selectTransferTargetError = (state: RootState) => {
if (!state.transfer.targetChain) { if (!state.transfer.targetChain) {
return "Select a target chain"; return "Select a target chain";
} }
if (state.transfer.sourceChain === state.transfer.targetChain) {
return "Select a different target and source";
}
if (!state.transfer.targetAsset) { if (!state.transfer.targetAsset) {
return UNREGISTERED_ERROR_MESSAGE; return UNREGISTERED_ERROR_MESSAGE;
} }

View File

@ -228,8 +228,14 @@ export const transferSlice = createSlice({
}; };
}> }>
) => { ) => {
const prevTargetChain = state.targetChain;
state.signedVAAHex = action.payload.vaa; state.signedVAAHex = action.payload.vaa;
state.targetChain = action.payload.parsedPayload.targetChain; state.targetChain = action.payload.parsedPayload.targetChain;
if (state.sourceChain === action.payload.parsedPayload.targetChain) {
state.sourceChain = prevTargetChain;
state.sourceParsedTokenAccount = undefined;
state.sourceParsedTokenAccounts = getEmptyDataWrapper();
}
state.targetAddressHex = action.payload.parsedPayload.targetAddress; state.targetAddressHex = action.payload.parsedPayload.targetAddress;
state.originChain = action.payload.parsedPayload.originChain; state.originChain = action.payload.parsedPayload.originChain;
state.originAsset = action.payload.parsedPayload.originAddress; state.originAsset = action.payload.parsedPayload.originAddress;