@@ -17,30 +17,7 @@ const amount = ref('');
1717const recipient = ref (' ' );
1818const denom = ref (' ' );
1919const 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
4522const msgs = computed (() => {
4623 return [
@@ -61,37 +38,47 @@ const msgs = computed(() => {
6138});
6239
6340const 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
7652const 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
8362const 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
8774const 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