From ba97205592bf2cbc4fcdcb9c806c49864a40b482 Mon Sep 17 00:00:00 2001 From: Padreug Date: Mon, 27 Apr 2026 11:34:59 +0200 Subject: [PATCH] feat: separate admin view into own events and all users' events Admin sees two tables: "Events" (own wallet events) and "All Users' Events" (events from other users' wallets, admin only). Non-admin users only see their own events table. Co-Authored-By: Claude Opus 4.6 (1M context) --- static/js/index.js | 38 +++++++++++++++++++-------------- templates/events/index.html | 42 +++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 16 deletions(-) diff --git a/static/js/index.js b/static/js/index.js index b3b6ba3..194d30d 100644 --- a/static/js/index.js +++ b/static/js/index.js @@ -11,7 +11,9 @@ window.app = Vue.createApp({ data() { return { events: [], + allUserEvents: [], pendingEvents: [], + isAdmin: false, tickets: [], currencies: [], eventsTable: { @@ -200,12 +202,12 @@ window.app = Vue.createApp({ LNbits.utils.exportCSV(this.ticketsTable.columns, this.tickets) }, getEvents() { - // Try admin endpoint first (shows all events across all wallets) - // Falls back to user's own events if not admin + // Always fetch own events LNbits.api .request( 'GET', - '/events/api/v1/events/all' + '/events/api/v1/events?all_wallets=true', + this.g.user.wallets[0].inkey ) .then(response => { this.events = response.data.map(obj => { @@ -213,20 +215,24 @@ window.app = Vue.createApp({ }) this.checkCanceledEvents() }) + + // Admin: also fetch all users' events + LNbits.api + .request( + 'GET', + '/events/api/v1/events/all' + ) + .then(response => { + this.isAdmin = true + // Exclude own events (already in this.events) + const ownWalletIds = this.g.user.wallets.map(w => w.id) + this.allUserEvents = response.data + .filter(obj => !ownWalletIds.includes(obj.wallet)) + .map(obj => mapEvents(obj)) + }) .catch(() => { - // Not admin, fall back to own events - LNbits.api - .request( - 'GET', - '/events/api/v1/events?all_wallets=true', - this.g.user.wallets[0].inkey - ) - .then(response => { - this.events = response.data.map(obj => { - return mapEvents(obj) - }) - this.checkCanceledEvents() - }) + this.isAdmin = false + this.allUserEvents = [] }) }, getPendingEvents() { diff --git a/templates/events/index.html b/templates/events/index.html index 1f3172d..daef3d1 100644 --- a/templates/events/index.html +++ b/templates/events/index.html @@ -229,6 +229,48 @@ + + + +
+
+
+ All Users' Events + +
+
+
+ + + + +
+
+