fix: unstakePosition() has no error handling at all (#482)
Address AI reviewer warnings:
- Add separate unstakeError ref so unstake failures are not displayed
via the load-data error UI whose Retry calls loadActivePositionData
- Add exitSucceeded flag to distinguish pre-exit failures ("Failed to
unstake position.") from post-exit data-refresh failures ("Position
unstaked, but failed to refresh data."), preventing factually wrong
messages after a successful transaction
- Unstake error UI has no Retry button; the Unstake button in actions
remains available for retrying a failed transaction
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
037de2d1fd
commit
98dd839bb5
1 changed files with 11 additions and 3 deletions
|
|
@ -39,6 +39,9 @@
|
|||
<span>{{ error }}</span>
|
||||
<FButton size="tiny" outlined @click="loadActivePositionData">Retry</FButton>
|
||||
</div>
|
||||
<div v-if="unstakeError" class="collapsed-body--error">
|
||||
<span>{{ unstakeError }}</span>
|
||||
</div>
|
||||
<div v-if="!error || taxPaidGes !== undefined" class="profit-stats-wrapper">
|
||||
<div class="profit-stats-item">
|
||||
<div><b>Tax Cost</b></div>
|
||||
|
|
@ -122,6 +125,7 @@ const taxPaidGes = ref<number>();
|
|||
const profit = ref<number>();
|
||||
const loading = ref<boolean>(false);
|
||||
const error = ref<string | null>(null);
|
||||
const unstakeError = ref<string | null>(null);
|
||||
|
||||
const tag = computed(() => {
|
||||
// Compare by index instead of decimal to avoid floating-point issues
|
||||
|
|
@ -214,9 +218,11 @@ async function changeTax(id: bigint, nextTaxRateIndex: number | null) {
|
|||
}
|
||||
|
||||
async function unstakePosition() {
|
||||
error.value = null;
|
||||
unstakeError.value = null;
|
||||
let exitSucceeded = false;
|
||||
try {
|
||||
await unstake.exitPosition(props.id);
|
||||
exitSucceeded = true;
|
||||
loading.value = true;
|
||||
const POLL_INTERVAL_MS = 1000;
|
||||
const TIMEOUT_MS = 30_000;
|
||||
|
|
@ -230,8 +236,10 @@ async function unstakePosition() {
|
|||
await loadPositions(currentChainId.value);
|
||||
} catch (err) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.error('Failed to unstake position:', err);
|
||||
error.value = 'Failed to unstake position.';
|
||||
console.error(exitSucceeded ? 'Failed to refresh positions after unstake:' : 'Failed to unstake position:', err);
|
||||
unstakeError.value = exitSucceeded
|
||||
? 'Position unstaked, but failed to refresh data.'
|
||||
: 'Failed to unstake position.';
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue