lnbits-legend/lnbits/extensions/watchonly/static/components/send-to/send-to.js
2022-08-03 13:50:07 +03:00

81 lines
2 KiB
JavaScript

async function sendTo(path) {
const template = await loadTemplateAsync(path)
Vue.component('send-to', {
name: 'send-to',
template,
props: [
'data',
'tx-size',
'selected-amount',
'fee-rate',
'sats-denominated'
],
computed: {
dataLocal: {
get: function () {
return this.data
},
set: function (value) {
console.log('### computed update data', value)
this.$emit('update:data', value)
}
}
},
data: function () {
return {
DUST_LIMIT: 546,
paymentTable: {
columns: [
{
name: 'data',
align: 'left'
}
],
pagination: {
rowsPerPage: 10
},
filter: ''
}
}
},
methods: {
satBtc(val, showUnit = true) {
return satOrBtc(val, showUnit, this.satsDenominated)
},
addPaymentAddress: function () {
this.dataLocal.push({address: '', amount: undefined})
this.handleOutputsChange()
},
deletePaymentAddress: function (v) {
const index = this.dataLocal.indexOf(v)
if (index !== -1) {
this.dataLocal.splice(index, 1)
}
this.handleOutputsChange()
},
sendMaxToAddress: function (paymentAddress = {}) {
const feeValue = this.feeRate * this.txSize
const inputAmount = this.selectedAmount
const currentAmount = Math.max(0, paymentAddress.amount || 0)
const payedAmount = this.getTotalPaymentAmount() - currentAmount
paymentAddress.amount = Math.max(
0,
inputAmount - payedAmount - feeValue
)
},
handleOutputsChange: function () {
this.$emit('update:outputs')
},
getTotalPaymentAmount: function () {
return this.dataLocal.reduce((t, a) => t + (a.amount || 0), 0)
}
},
created: async function () {}
})
}