Skip to content

Commit d1226e5

Browse files
committed
fix: enable send for ibc token
1 parent 8caea19 commit d1226e5

File tree

1 file changed

+35
-49
lines changed
  • lib/components/TxDialog/messages

1 file changed

+35
-49
lines changed

lib/components/TxDialog/messages/Send.vue

Lines changed: 35 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,7 @@ const amount = ref('');
1717
const recipient = ref('');
1818
const denom = ref('');
1919
const amountDenom = ref('hp')
20-
const convert = new TokenUnitConverter(
21-
// below can be simplied to props.metadata if metadata api works.
22-
{
23-
ahp: {
24-
name: 'hp',
25-
description: 'The native staking token of the Hippo Protocol.',
26-
denom_units: [
27-
{
28-
denom: 'ahp',
29-
exponent: 0,
30-
aliases: [],
31-
},
32-
{
33-
denom: 'hp',
34-
exponent: 18,
35-
aliases: [],
36-
},
37-
],
38-
base: 'ahp',
39-
display: 'hp',
40-
symbol: 'hp',
41-
},
42-
}
43-
);
20+
const convert = new TokenUnitConverter(props.metadata);
4421
4522
const msgs = computed(() => {
4623
return [
@@ -61,37 +38,47 @@ const msgs = computed(() => {
6138
});
6239
6340
const available = computed(() => {
64-
const base = (
65-
props.balances?.find((x) => x.denom === denom.value) || {
66-
amount: '0',
67-
denom: '-',
68-
}
69-
)
41+
const base = props.balances?.find((x) => x.denom === denom.value) || {
42+
amount: '0',
43+
denom: '-',
44+
};
45+
const convert = new TokenUnitConverter(props.metadata);
7046
return {
7147
base,
72-
display: convert.baseToUnit(base, amountDenom.value)
48+
display: convert.baseToUnit(base, amountDenom.value),
7349
};
7450
});
7551
7652
const showBalances = computed(() => {
77-
return props.balances?.map(b => ({
78-
base: b,
79-
display: convert.baseToDisplay(b)
80-
})) || []
81-
})
53+
const convert = new TokenUnitConverter(props.metadata);
54+
return (
55+
props.balances?.map((b) => ({
56+
base: b,
57+
display: convert.baseToDisplay(b),
58+
})) || []
59+
);
60+
});
8261
8362
const units = computed(() => {
84-
return [{ denom: 'hp', exponent: 18, aliases: [] }];
85-
})
63+
if (!props.metadata || !props.metadata[denom.value]) {
64+
amountDenom.value = denom.value;
65+
return [{ denom: denom.value, exponent: 0, aliases: [] }];
66+
}
67+
const list = props.metadata[denom.value].denom_units.sort(
68+
(a, b) => b.exponent - a.exponent
69+
);
70+
if (list.length > 0) amountDenom.value = list[0].denom;
71+
return list;
72+
});
8673
8774
const isValid = computed(() => {
8875
let ok = true
8976
let error = ""
90-
if(!recipient.value) {
77+
if (!recipient.value) {
9178
ok = false
9279
error = "Recipient is empty"
9380
}
94-
if(!(Number(amount.value) > 0)) {
81+
if (!(Number(amount.value) > 0)) {
9582
ok = false
9683
error = "Amount should be great than 0"
9784
}
@@ -107,23 +94,24 @@ function formatDenom(v: any) {
10794
return String(v).substring(0, 10)
10895
}
10996
110-
defineExpose({msgs, isValid, initial})
97+
defineExpose({ msgs, isValid, initial })
11198
</script>
11299
<template>
113100
<div class="dark:text-gray-400">
114101
<div class="form-control">
115102
<label class="label">
116103
<span class="label-text">Sender</span>
117104
</label>
118-
<input :value="sender" type="text" class="text-gray-600 dark:text-white input border !border-gray-300 dark:!border-gray-600" />
105+
<input :value="sender" type="text"
106+
class="text-gray-600 dark:text-white input border !border-gray-300 dark:!border-gray-600" />
119107
</div>
120108
<div class="form-control">
121109
<label class="label">
122110
<span class="label-text">Balances</span>
123111
</label>
124112
<select v-model="denom" class="select select-bordered dark:text-white">
125113
<option value="">Select a token</option>
126-
<option v-for="{base, display} in showBalances" :value="base.denom">
114+
<option v-for="{ base, display } in showBalances" :value="base.denom">
127115
{{ display.amount }} {{ display.denom }}
128116
</option>
129117
</select>
@@ -132,19 +120,17 @@ defineExpose({msgs, isValid, initial})
132120
<label class="label">
133121
<span class="label-text">Recipient</span>
134122
</label>
135-
<input
136-
v-model="recipient"
137-
type="text"
138-
class="input border border-gray-300 dark:border-gray-600 dark:text-white"
139-
/>
123+
<input v-model="recipient" type="text"
124+
class="input border border-gray-300 dark:border-gray-600 dark:text-white" />
140125
</div>
141126
<div class="form-control">
142127
<label class="label">
143128
<span class="label-text">Amount</span>
144129
<span>{{ available.display.amount }} {{ formatDenom(available.display.denom) }}</span>
145130
</label>
146131
<label class="input-group">
147-
<input v-model="amount" type="number" :placeholder="`Available: ${available?.display.amount}`" class="input border border-gray-300 dark:border-gray-600 w-full dark:text-white" />
132+
<input v-model="amount" type="number" :placeholder="`Available: ${available?.display.amount}`"
133+
class="input border border-gray-300 dark:border-gray-600 w-full dark:text-white" />
148134
<select v-model="amountDenom" class="select select-bordered dark:text-white">
149135
<option v-for="u in units" :value="u.denom">{{ formatDenom(u.denom) }}</option>
150136
</select>

0 commit comments

Comments
 (0)