mirror of
https://github.com/lnbits/lnbits-legend.git
synced 2024-11-19 18:11:30 +01:00
228 lines
6.0 KiB
JavaScript
228 lines
6.0 KiB
JavaScript
/* globals Quasar, Vue, _, VueQrcode, windowMixin, LNbits, LOCALE */
|
|
|
|
Vue.component(VueQrcode.name, VueQrcode)
|
|
|
|
var locationPath = [
|
|
window.location.protocol,
|
|
'//',
|
|
window.location.host,
|
|
window.location.pathname
|
|
].join('')
|
|
|
|
var mapPayLink = obj => {
|
|
obj._data = _.clone(obj)
|
|
obj.date = Quasar.utils.date.formatDate(
|
|
new Date(obj.time * 1000),
|
|
'YYYY-MM-DD HH:mm'
|
|
)
|
|
obj.amount = new Intl.NumberFormat(LOCALE).format(obj.amount)
|
|
obj.print_url = [locationPath, 'print/', obj.id].join('')
|
|
obj.pay_url = [locationPath, obj.id].join('')
|
|
return obj
|
|
}
|
|
|
|
new Vue({
|
|
el: '#vue',
|
|
mixins: [windowMixin],
|
|
data() {
|
|
return {
|
|
currencies: [],
|
|
fiatRates: {},
|
|
checker: null,
|
|
payLinks: [],
|
|
payLinksTable: {
|
|
pagination: {
|
|
rowsPerPage: 10
|
|
}
|
|
},
|
|
formDialog: {
|
|
show: false,
|
|
fixedAmount: true,
|
|
data: {}
|
|
},
|
|
qrCodeDialog: {
|
|
show: false,
|
|
data: null
|
|
}
|
|
}
|
|
},
|
|
methods: {
|
|
getPayLinks() {
|
|
LNbits.api
|
|
.request(
|
|
'GET',
|
|
'/lnurlp/api/v1/links?all_wallets=true',
|
|
this.g.user.wallets[0].inkey
|
|
)
|
|
.then(response => {
|
|
this.payLinks = response.data.map(mapPayLink)
|
|
})
|
|
.catch(err => {
|
|
clearInterval(this.checker)
|
|
LNbits.utils.notifyApiError(err)
|
|
})
|
|
},
|
|
closeFormDialog() {
|
|
this.resetFormData()
|
|
},
|
|
openQrCodeDialog(linkId) {
|
|
var link = _.findWhere(this.payLinks, {id: linkId})
|
|
if (link.currency) this.updateFiatRate(link.currency)
|
|
|
|
this.qrCodeDialog.data = {
|
|
id: link.id,
|
|
amount:
|
|
(link.min === link.max ? link.min : `${link.min} - ${link.max}`) +
|
|
' ' +
|
|
(link.currency || 'sat'),
|
|
currency: link.currency,
|
|
comments: link.comment_chars
|
|
? `${link.comment_chars} characters`
|
|
: 'no',
|
|
webhook: link.webhook_url || 'nowhere',
|
|
success:
|
|
link.success_text || link.success_url
|
|
? 'Display message "' +
|
|
link.success_text +
|
|
'"' +
|
|
(link.success_url ? ' and URL "' + link.success_url + '"' : '')
|
|
: 'do nothing',
|
|
lnurl: link.lnurl,
|
|
pay_url: link.pay_url,
|
|
print_url: link.print_url
|
|
}
|
|
this.qrCodeDialog.show = true
|
|
},
|
|
openUpdateDialog(linkId) {
|
|
const link = _.findWhere(this.payLinks, {id: linkId})
|
|
if (link.currency) this.updateFiatRate(link.currency)
|
|
|
|
this.formDialog.data = _.clone(link._data)
|
|
this.formDialog.show = true
|
|
this.formDialog.fixedAmount =
|
|
this.formDialog.data.min === this.formDialog.data.max
|
|
},
|
|
sendFormData() {
|
|
const wallet = _.findWhere(this.g.user.wallets, {
|
|
id: this.formDialog.data.wallet
|
|
})
|
|
var data = _.omit(this.formDialog.data, 'wallet')
|
|
|
|
if (this.formDialog.fixedAmount) data.max = data.min
|
|
if (data.currency === 'satoshis') data.currency = null
|
|
if (isNaN(parseInt(data.comment_chars))) data.comment_chars = 0
|
|
|
|
if (data.id) {
|
|
this.updatePayLink(wallet, data)
|
|
} else {
|
|
this.createPayLink(wallet, data)
|
|
}
|
|
},
|
|
resetFormData() {
|
|
this.formDialog = {
|
|
show: false,
|
|
fixedAmount: true,
|
|
data: {}
|
|
}
|
|
},
|
|
updatePayLink(wallet, data) {
|
|
let values = _.omit(
|
|
_.pick(
|
|
data,
|
|
'description',
|
|
'min',
|
|
'max',
|
|
'webhook_url',
|
|
'success_text',
|
|
'success_url',
|
|
'comment_chars',
|
|
'currency'
|
|
),
|
|
(value, key) =>
|
|
(key === 'webhook_url' ||
|
|
key === 'success_text' ||
|
|
key === 'success_url') &&
|
|
(value === null || value === '')
|
|
)
|
|
|
|
LNbits.api
|
|
.request(
|
|
'PUT',
|
|
'/lnurlp/api/v1/links/' + data.id,
|
|
wallet.adminkey,
|
|
values
|
|
)
|
|
.then(response => {
|
|
this.payLinks = _.reject(this.payLinks, obj => obj.id === data.id)
|
|
this.payLinks.push(mapPayLink(response.data))
|
|
this.formDialog.show = false
|
|
this.resetFormData()
|
|
})
|
|
.catch(err => {
|
|
LNbits.utils.notifyApiError(err)
|
|
})
|
|
},
|
|
createPayLink(wallet, data) {
|
|
LNbits.api
|
|
.request('POST', '/lnurlp/api/v1/links', wallet.adminkey, data)
|
|
.then(response => {
|
|
this.getPayLinks()
|
|
this.formDialog.show = false
|
|
this.resetFormData()
|
|
})
|
|
.catch(err => {
|
|
LNbits.utils.notifyApiError(err)
|
|
})
|
|
},
|
|
deletePayLink(linkId) {
|
|
var link = _.findWhere(this.payLinks, {id: linkId})
|
|
|
|
LNbits.utils
|
|
.confirmDialog('Are you sure you want to delete this pay link?')
|
|
.onOk(() => {
|
|
LNbits.api
|
|
.request(
|
|
'DELETE',
|
|
'/lnurlp/api/v1/links/' + linkId,
|
|
_.findWhere(this.g.user.wallets, {id: link.wallet}).adminkey
|
|
)
|
|
.then(response => {
|
|
this.payLinks = _.reject(this.payLinks, obj => obj.id === linkId)
|
|
})
|
|
.catch(err => {
|
|
LNbits.utils.notifyApiError(err)
|
|
})
|
|
})
|
|
},
|
|
updateFiatRate(currency) {
|
|
LNbits.api
|
|
.request('GET', '/lnurlp/api/v1/rate/' + currency, null)
|
|
.then(response => {
|
|
let rates = _.clone(this.fiatRates)
|
|
rates[currency] = response.data.rate
|
|
this.fiatRates = rates
|
|
})
|
|
.catch(err => {
|
|
LNbits.utils.notifyApiError(err)
|
|
})
|
|
}
|
|
},
|
|
created() {
|
|
if (this.g.user.wallets.length) {
|
|
var getPayLinks = this.getPayLinks
|
|
getPayLinks()
|
|
this.checker = setInterval(() => {
|
|
getPayLinks()
|
|
}, 20000)
|
|
}
|
|
LNbits.api
|
|
.request('GET', '/lnurlp/api/v1/currencies')
|
|
.then(response => {
|
|
this.currencies = ['satoshis', ...response.data]
|
|
})
|
|
.catch(err => {
|
|
LNbits.utils.notifyApiError(err)
|
|
})
|
|
}
|
|
})
|