Skip to content

Commit d00fc24

Browse files
committed
feat: add selection when withdraw commission
1 parent 3478dea commit d00fc24

File tree

3 files changed

+195
-107
lines changed

3 files changed

+195
-107
lines changed

lib/components/TxDialog/messages/Withdraw.vue

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@ const props = defineProps({
99
});
1010
1111
const rewards = ref([] as { reward: { amount: string, denom: string }, validator_address: string }[])
12+
const selectedValidators = ref<string[]>([])
1213
1314
const msgs = computed(() => {
14-
return rewards.value.map(x => {
15+
return selectedValidators.value.map(v => {
1516
return {
1617
typeUrl: '/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward',
1718
value: {
1819
delegatorAddress: props.sender,
19-
validatorAddress: x.validator_address,
20+
validatorAddress: v,
2021
},
2122
}
2223
})
@@ -28,17 +29,20 @@ const isValid = computed(() => {
2829
if (!props.sender) {
2930
ok = false
3031
error = "Sender is empty"
31-
}
32-
if (rewards.value.length === 0) {
32+
} else if (rewards.value.length === 0) {
3333
ok = false
3434
error = "No delegation found"
35+
} else if (selectedValidators.value.length === 0) {
36+
ok = false
37+
error = "No validator selected"
3538
}
3639
return { ok, error }
3740
})
3841
3942
function initial() {
4043
getDelegateRewards(props.endpoint, props.sender).then(x => {
41-
rewards.value = x.rewards
44+
rewards.value = x.rewards || []
45+
selectedValidators.value = rewards.value.map((r: any) => r.validator_address)
4246
})
4347
}
4448
@@ -49,12 +53,23 @@ onMounted(() => {
4953
defineExpose({ msgs, isValid, initial })
5054
</script>
5155
<template>
52-
<div>
56+
<div class="flex flex-col gap-4">
5357
<div class="form-control">
5458
<label class="label">
5559
<span class="label-text">Sender</span>
5660
</label>
57-
<input :value="sender" type="text" class="text-gray-600 dark:text-white input border !border-gray-300 dark:!border-gray-600" />
61+
<input :value="sender" type="text" readonly class="text-gray-600 dark:text-white input border !border-gray-300 dark:!border-gray-600 bg-gray-100 dark:bg-gray-800" />
62+
</div>
63+
<div class="form-control" v-if="rewards.length > 0">
64+
<label class="label">
65+
<span class="label-text">Select Validators</span>
66+
</label>
67+
<div class="max-h-60 overflow-y-auto border border-gray-300 dark:border-gray-600 rounded p-2 flex flex-col gap-2">
68+
<label v-for="r in rewards" :key="r.validator_address" class="flex items-center gap-3 cursor-pointer">
69+
<input type="checkbox" :value="r.validator_address" v-model="selectedValidators" class="checkbox checkbox-sm" />
70+
<span class="text-sm text-gray-700 dark:text-gray-300 break-all">{{ r.validator_address }}</span>
71+
</label>
72+
</div>
5873
</div>
5974
</div>
6075
</template>

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
"dayjs": "^1.11.7",
5858
"fflate": "^0.8.0",
5959
"lodash": "^4.17.21",
60-
"osmojs": "^16.15.0",
60+
"osmojs": "^15.5.0",
6161
"vue": "^3.2.47",
6262
"vue3-webcomponent-wrapper": "^0.2.0"
6363
},

0 commit comments

Comments
 (0)