From e0b8470d404e1328e490bc5c827d7b5c6185b324 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Tue, 29 Sep 2020 15:43:11 -0300 Subject: [PATCH] show unpaid invoices, balance calculated on server-side so isn't affected. --- lnbits/core/static/js/wallet.js | 27 +++++++++++++---------- lnbits/core/templates/core/_api_docs.html | 26 ++++++++++++++++++++++ lnbits/core/templates/core/wallet.html | 8 +++---- lnbits/core/views/api.py | 17 +++++++++++++- lnbits/static/js/base.js | 3 +++ lnbits/static/scss/base.scss | 5 +++++ 6 files changed, 69 insertions(+), 17 deletions(-) diff --git a/lnbits/core/static/js/wallet.js b/lnbits/core/static/js/wallet.js index 140ca47..fac6362 100644 --- a/lnbits/core/static/js/wallet.js +++ b/lnbits/core/static/js/wallet.js @@ -14,9 +14,11 @@ function generateChart(canvas, payments) { } _.each( - payments.slice(0).sort(function (a, b) { - return a.time - b.time - }), + payments + .filter(p => !p.pending) + .sort(function (a, b) { + return a.time - b.time + }), function (tx) { txs.push({ hour: Quasar.utils.date.formatDate(tx.date, 'YYYY-MM-DDTHH:00'), @@ -184,14 +186,7 @@ new Vue({ return LNbits.utils.search(this.payments, q) }, balance: function () { - if (this.payments.length) { - return ( - _.pluck(this.payments, 'amount').reduce(function (a, b) { - return a + b - }, 0) / 1000 - ) - } - return this.g.wallet.sat + return this.apiBalance || this.g.wallet.sat }, fbalance: function () { return LNbits.utils.formatSat(this.balance) @@ -404,7 +399,15 @@ new Vue({ }, watch: { payments: function () { - EventHub.$emit('update-wallet-balance', [this.g.wallet.id, this.balance]) + var self = this + + LNbits.api.getWallet(self.g.wallet).then(function (response) { + self.apiBalance = Math.round(response.data.balance / 1000) + EventHub.$emit('update-wallet-balance', [ + self.g.wallet.id, + self.balance + ]) + }) } }, created: function () { diff --git a/lnbits/core/templates/core/_api_docs.html b/lnbits/core/templates/core/_api_docs.html index f1fddd5..05bc125 100644 --- a/lnbits/core/templates/core/_api_docs.html +++ b/lnbits/core/templates/core/_api_docs.html @@ -4,6 +4,32 @@ label="API info" :content-inset-level="0.5" > + + + + GET /api/v1/wallet +
Headers
+ {"X-Api-Key": "{{ wallet.adminkey }}"}
+
+ Returns 200 OK (application/json) +
+ {"id": <string>, "name": <string>, "balance": + <int>} +
Curl example
+ curl {{ request.url_root }}api/v1/wallet -H "X-Api-Key: + {{ wallet.inkey }}" +
+
+
- + @@ -141,7 +141,7 @@ Copy invoice Payment Hash -
+
{{ props.row.payment_hash }}
diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 3ca6eff..a4fefc4 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -10,6 +10,21 @@ from lnbits.decorators import api_check_wallet_key, api_validate_post_request from lnbits.settings import WALLET +@core_app.route("/api/v1/wallet", methods=["GET"]) +@api_check_wallet_key("invoice") +async def api_wallet(): + return ( + jsonify( + { + "id": g.wallet.id, + "name": g.wallet.name, + "balance": g.wallet.balance_msat, + } + ), + HTTPStatus.OK, + ) + + @core_app.route("/api/v1/payments", methods=["GET"]) @api_check_wallet_key("invoice") async def api_payments(): @@ -22,7 +37,7 @@ async def api_payments(): else: payment.set_pending(WALLET.get_invoice_status(payment.checking_id).pending) - return jsonify(g.wallet.get_payments()), HTTPStatus.OK + return jsonify(g.wallet.get_payments(pending=True)), HTTPStatus.OK @api_check_wallet_key("invoice") diff --git a/lnbits/static/js/base.js b/lnbits/static/js/base.js index c32141b..e6c5615 100644 --- a/lnbits/static/js/base.js +++ b/lnbits/static/js/base.js @@ -29,6 +29,9 @@ var LNbits = { bolt11: bolt11 }) }, + getWallet: function (wallet) { + return this.request('get', '/api/v1/wallet', wallet.inkey) + }, getPayments: function (wallet, checkPending) { var query_param = checkPending ? '?check_pending' : '' return this.request( diff --git a/lnbits/static/scss/base.scss b/lnbits/static/scss/base.scss index 9d1546f..2af63ba 100644 --- a/lnbits/static/scss/base.scss +++ b/lnbits/static/scss/base.scss @@ -101,3 +101,8 @@ video { -moz-font-feature-settings: 'liga'; -moz-osx-font-smoothing: grayscale; } + +// text-wrap +.text-wrap { + word-break: break-word; +}