fix: change address

This commit is contained in:
Vlad Stan 2022-07-26 11:31:23 +03:00
parent c76644c561
commit dc95143998
5 changed files with 125 additions and 102 deletions

View file

@ -1,20 +1,21 @@
<div> <div>
<q-form @submit="createPsbt" class="q-gutter-md"> <q-form @submit="createPsbt" class="q-gutter-md">
<q-tabs v-model="paymentTab" no-caps class="bg-dark text-white shadow-2"> <!-- {{addresses}} -->
<q-tab name="destination" label="Send To"></q-tab> <q-tabs v-model="paymentTab" no-caps class="bg-dark text-white shadow-2">
<q-tab name="coinControl" label="Coin Control"></q-tab> <q-tab name="destination" label="Send To"></q-tab>
</q-tabs> <q-tab name="coinControl" label="Coin Control"></q-tab>
<q-tab-panels v-model="paymentTab"> </q-tabs>
<q-tab-panel name="destination"> <q-tab-panels v-model="paymentTab">
<q-card> <q-tab-panel name="destination">
<q-card-section> <q-card>
{{sendToList}} <q-card-section>
<send-to {{sendToList}}
:data.sync="sendToList" <send-to
:tx:size="txSizeNoChange" :data.sync="sendToList"
:sats-denominated="sats_denominated" :tx:size="txSizeNoChange"
></send-to> :sats-denominated="sats_denominated"
<!-- <div class="row items-center no-wrap q-mb-md"> ></send-to>
<!-- <div class="row items-center no-wrap q-mb-md">
<div class="col-12"> <div class="col-12">
<q-table <q-table
:columns="summaryTable.columns" :columns="summaryTable.columns"
@ -60,7 +61,7 @@
</div> </div>
</div> --> </div> -->
<!-- <!--
<div <div
v-if="payment.changeAmount < 0" v-if="payment.changeAmount < 0"
class="row items-center no-wrap q-mb-md" class="row items-center no-wrap q-mb-md"
@ -76,65 +77,68 @@
</div> </div>
</div> </div>
--> -->
</q-card-section> </q-card-section>
</q-card> </q-card>
<div class="row items-center no-wrap q-mb-md q-pt-lg"> <div class="row items-center no-wrap q-mb-md q-pt-lg">
<div class="col-12"> <div class="col-12">
<q-toggle <q-toggle
label="Custom Fee" label="Custom Fee"
color="secodary" color="secodary"
v-model="showCustomFee" v-model="showCustomFee"
></q-toggle> ></q-toggle>
</div>
</div> </div>
<q-card v-show="showCustomFee"> </div>
<q-card-section> <q-card v-show="showCustomFee">
<div class="row items-center no-wrap q-mb-md q-pt-md"> <q-card-section>
<div class="col-12"> <div class="row items-center no-wrap q-mb-md q-pt-md">
{{feeRate}} <div class="col-12">
<fee-rate :totalfee="feeValue" :rate.sync="feeRate"></fee-rate> {{feeRate}}
</div> <fee-rate :totalfee="feeValue" :rate.sync="feeRate"></fee-rate>
</div> </div>
</q-card-section>
</q-card>
</q-tab-panel>
<q-tab-panel name="coinControl">
<utxo-list
:utxos="utxos.data"
:selectable="true"
:payed-amount="getTotalPaymentAmount()"
:mempool_endpoint="mempool_endpoint"
:sats-denominated="sats_denominated"
></utxo-list>
<div class="row items-center no-wrap q-mb-md q-pt-lg">
<div class="col-2 q-pr-lg">Change Account:</div>
<div class="col-3 q-pr-lg">
<q-select
filled
dense
emit-value
v-model="changeWallet"
:options="accounts"
@input="selectChangeAddress"
:rules="[val => !!val || 'Field is required']"
label="Wallet Account"
></q-select>
</div> </div>
<div class="col-7"> </q-card-section>
<q-input </q-card>
filled </q-tab-panel>
dense
readonly
v-model.trim="changeAddress.address"
:rules="[val => !!val || 'Field is required']"
type="text"
label="Change Address"
></q-input>
</div>
</div>
</q-tab-panel>
</q-tab-panels>
</q-form>
</div>
<q-tab-panel name="coinControl">
<q-card class="q-mb-lg">
<q-card-section>
<div class="row items-center no-wrap">
<div class="col-2 q-pr-lg">Change Account:</div>
<div class="col-3 q-pr-lg">
<q-select
filled
dense
emit-value
v-model="changeWallet"
:options="accounts"
@input="selectChangeAddress"
:rules="[val => !!val || 'Field is required']"
label="Wallet Account"
></q-select>
</div>
<div class="col-7">
<q-input
filled
dense
readonly
v-model.trim="changeAddress.address"
:rules="[val => !!val || 'Field is required']"
type="text"
label="Change Address"
></q-input>
</div>
</div>
</q-card-section>
</q-card>
<utxo-list
:utxos="utxos.data"
:selectable="true"
:payed-amount="getTotalPaymentAmount()"
:mempool_endpoint="mempool_endpoint"
:sats-denominated="sats_denominated"
></utxo-list>
</q-tab-panel>
</q-tab-panels>
</q-form>
</div>

View file

@ -1,11 +1,27 @@
async function payment(path) { async function payment(path) {
const t = await loadTemplateAsync(path) const t = await loadTemplateAsync(path)
console.log('### template', path, t)
Vue.component('payment', { Vue.component('payment', {
name: 'payment', name: 'payment',
template: t, template: t,
props: ['accounts', 'utxos', 'mempool_endpoint', 'sats_denominated'], props: [
'accounts',
'addresses',
'utxos',
'mempool_endpoint',
'sats_denominated'
],
watch: {
immediate: true,
accounts() {
console.log('### watch accounts', newVal)
this.updateChangeAddress()
},
addresses(newVal) {
console.log('### watch addresses', newVal)
this.updateChangeAddress()
}
},
data: function () { data: function () {
return { return {
@ -112,12 +128,29 @@ async function payment(path) {
masterpub_fingerprint: walletAcount.fingerprint masterpub_fingerprint: walletAcount.fingerprint
} }
}, },
selectChangeAddress: function (wallet = {}) { selectChangeAddress: function (account) {
console.log('### selectChangeAddress', account)
if (!account) this.changeAddress = ''
this.changeAddress = this.changeAddress =
this.addresses.find( this.addresses.find(
a => a.wallet === wallet.id && a.isChange && !a.hasActivity a => a.wallet === account.id && a.isChange && !a.hasActivity
) || {} ) || {}
}, },
updateChangeAddress: function () {
if (this.changeWallet) {
const changeAccount = (this.accounts || []).find(
w => w.id === this.changeWallet.id
)
// change account deleted
if (!changeAccount) {
this.changeWallet = this.accounts[0]
this.selectChangeAddress(this.changeWallet)
}
} else {
this.changeWallet = this.accounts[0]
this.selectChangeAddress(this.changeWallet)
}
},
getTotalPaymentAmount: function () { getTotalPaymentAmount: function () {
return this.sendToList.reduce((t, a) => t + (a.amount || 0), 0) return this.sendToList.reduce((t, a) => t + (a.amount || 0), 0)
} }

View file

@ -63,8 +63,6 @@ async function sendTo(path) {
} }
}, },
created: async function () { created: async function () {}
}
}) })
} }

View file

@ -117,6 +117,7 @@ const watchOnly = async () => {
} }
} }
// todo: account deleted
await LNbits.api.request( await LNbits.api.request(
'PUT', 'PUT',
`/watchonly/api/v1/address/${addressData.id}`, `/watchonly/api/v1/address/${addressData.id}`,
@ -194,16 +195,10 @@ const watchOnly = async () => {
initPaymentData: async function () { initPaymentData: async function () {
if (!this.payment.show) return if (!this.payment.show) return
await this.$refs.addressList.refreshAddresses() await this.$refs.addressList.refreshAddresses()
this.payment.showAdvanced = false
this.payment.changeWallet = this.walletAccounts[0]
this.selectChangeAddress(this.payment.changeWallet)
}, },
goToPaymentView: async function () { goToPaymentView: async function () {
// this.payment.show = true
this.showPayment = true this.showPayment = true
// this.tab = 'utxos'
await this.initPaymentData() await this.initPaymentData()
}, },
@ -834,17 +829,6 @@ const watchOnly = async () => {
this.walletAccounts = accounts this.walletAccounts = accounts
// await this.refreshAddressesxx() // todo: automatic now? // await this.refreshAddressesxx() // todo: automatic now?
await this.scanAddressWithAmount() await this.scanAddressWithAmount()
if (this.payment.changeWallet) {
const changeAccount = this.walletAccounts.find(
w => w.id === this.payment.changeWallet.id
)
// change account deleted
if (!changeAccount) {
this.payment.changeWallet = this.walletAccounts[0]
this.selectChangeAddress(this.payment.changeWallet)
}
}
}, },
showAddressDetails: function (addressData) { showAddressDetails: function (addressData) {
this.openQrCodeDialog(addressData) this.openQrCodeDialog(addressData)

View file

@ -493,7 +493,11 @@
</q-tab-panels> </q-tab-panels>
</q-card-section> </q-card-section>
<q-card-section v-show="showPayment"> <q-card-section v-show="showPayment">
<payment :accounts="walletAccounts" :utxos="utxos"></payment> <payment
:accounts="walletAccounts"
:addresses="addresses"
:utxos="utxos"
></payment>
</q-card-section> </q-card-section>
</q-card> </q-card>
</div> </div>