From f8e3b3f258f489df91237ac45ae15039090f656c Mon Sep 17 00:00:00 2001 From: Christoph Date: Sun, 5 Apr 2026 19:03:32 +0200 Subject: [PATCH] feat: improve pagination (#662) --- frontend/src/components/Pagination.vue | 121 +++++++++++++++++++++++++ frontend/src/stores/audit.js | 24 ++--- frontend/src/stores/peers.js | 24 ++--- frontend/src/stores/profile.js | 23 ++--- frontend/src/stores/users.js | 24 ++--- frontend/src/views/AuditView.vue | 34 +++---- frontend/src/views/InterfaceView.vue | 42 ++++----- frontend/src/views/ProfileView.vue | 41 ++++----- frontend/src/views/UserView.vue | 38 ++++---- 9 files changed, 216 insertions(+), 155 deletions(-) create mode 100644 frontend/src/components/Pagination.vue diff --git a/frontend/src/components/Pagination.vue b/frontend/src/components/Pagination.vue new file mode 100644 index 0000000..46d9213 --- /dev/null +++ b/frontend/src/components/Pagination.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/frontend/src/stores/audit.js b/frontend/src/stores/audit.js index 771df90..7f80762 100644 --- a/frontend/src/stores/audit.js +++ b/frontend/src/stores/audit.js @@ -11,7 +11,6 @@ export const auditStore = defineStore('audit', { filter: "", pageSize: 10, pageOffset: 0, - pages: [], fetching: false, }), getters: { @@ -41,33 +40,22 @@ export const auditStore = defineStore('audit', { afterPageSizeChange() { // reset pageOffset to avoid problems with new page sizes this.pageOffset = 0 - this.calculatePages() - }, - calculatePages() { - let pageCounter = 1; - this.pages = [] - for (let i = 0; i < this.FilteredCount; i+=this.pageSize) { - this.pages.push(pageCounter++) - } }, gotoPage(page) { this.pageOffset = (page-1) * this.pageSize - - this.calculatePages() }, nextPage() { - this.pageOffset += this.pageSize - - this.calculatePages() + if (this.hasNextPage) { + this.pageOffset += this.pageSize + } }, previousPage() { - this.pageOffset -= this.pageSize - - this.calculatePages() + if (this.hasPrevPage) { + this.pageOffset -= this.pageSize + } }, setEntries(entries) { this.entries = entries - this.calculatePages() this.fetching = false }, async LoadEntries() { diff --git a/frontend/src/stores/peers.js b/frontend/src/stores/peers.js index 8e80b2c..f464cdd 100644 --- a/frontend/src/stores/peers.js +++ b/frontend/src/stores/peers.js @@ -19,7 +19,6 @@ export const peerStore = defineStore('peers', { filter: "", pageSize: 10, pageOffset: 0, - pages: [], fetching: false, sortKey: 'IsConnected', // Default sort key sortOrder: -1, // 1 for ascending, -1 for descending @@ -87,33 +86,22 @@ export const peerStore = defineStore('peers', { afterPageSizeChange() { // reset pageOffset to avoid problems with new page sizes this.pageOffset = 0 - this.calculatePages() - }, - calculatePages() { - let pageCounter = 1; - this.pages = [] - for (let i = 0; i < this.FilteredCount; i+=this.pageSize) { - this.pages.push(pageCounter++) - } }, gotoPage(page) { this.pageOffset = (page-1) * this.pageSize - - this.calculatePages() }, nextPage() { - this.pageOffset += this.pageSize - - this.calculatePages() + if (this.hasNextPage) { + this.pageOffset += this.pageSize + } }, previousPage() { - this.pageOffset -= this.pageSize - - this.calculatePages() + if (this.hasPrevPage) { + this.pageOffset -= this.pageSize + } }, setPeers(peers) { this.peers = peers - this.calculatePages() this.fetching = false this.trafficStats = {} }, diff --git a/frontend/src/stores/profile.js b/frontend/src/stores/profile.js index 632e931..268e4db 100644 --- a/frontend/src/stores/profile.js +++ b/frontend/src/stores/profile.js @@ -20,7 +20,6 @@ export const profileStore = defineStore('profile', { filter: "", pageSize: 10, pageOffset: 0, - pages: [], fetching: false, sortKey: 'IsConnected', // Default sort key sortOrder: -1, // 1 for ascending, -1 for descending @@ -80,29 +79,19 @@ export const profileStore = defineStore('profile', { afterPageSizeChange() { // reset pageOffset to avoid problems with new page sizes this.pageOffset = 0 - this.calculatePages() - }, - calculatePages() { - let pageCounter = 1; - this.pages = [] - for (let i = 0; i < this.FilteredPeerCount; i+=this.pageSize) { - this.pages.push(pageCounter++) - } }, gotoPage(page) { this.pageOffset = (page-1) * this.pageSize - - this.calculatePages() }, nextPage() { - this.pageOffset += this.pageSize - - this.calculatePages() + if (this.hasNextPage) { + this.pageOffset += this.pageSize + } }, previousPage() { - this.pageOffset -= this.pageSize - - this.calculatePages() + if (this.hasPrevPage) { + this.pageOffset -= this.pageSize + } }, setPeers(peers) { this.peers = peers diff --git a/frontend/src/stores/users.js b/frontend/src/stores/users.js index 8eb194a..19816ca 100644 --- a/frontend/src/stores/users.js +++ b/frontend/src/stores/users.js @@ -12,7 +12,6 @@ export const userStore = defineStore('users', { filter: "", pageSize: 10, pageOffset: 0, - pages: [], fetching: false, }), getters: { @@ -43,33 +42,22 @@ export const userStore = defineStore('users', { afterPageSizeChange() { // reset pageOffset to avoid problems with new page sizes this.pageOffset = 0 - this.calculatePages() - }, - calculatePages() { - let pageCounter = 1; - this.pages = [] - for (let i = 0; i < this.FilteredCount; i+=this.pageSize) { - this.pages.push(pageCounter++) - } }, gotoPage(page) { this.pageOffset = (page-1) * this.pageSize - - this.calculatePages() }, nextPage() { - this.pageOffset += this.pageSize - - this.calculatePages() + if (this.hasNextPage) { + this.pageOffset += this.pageSize + } }, previousPage() { - this.pageOffset -= this.pageSize - - this.calculatePages() + if (this.hasPrevPage) { + this.pageOffset -= this.pageSize + } }, setUsers(users) { this.users = users - this.calculatePages() this.fetching = false }, setUserPeers(peers) { diff --git a/frontend/src/views/AuditView.vue b/frontend/src/views/AuditView.vue index ccd78f7..7a47d26 100644 --- a/frontend/src/views/AuditView.vue +++ b/frontend/src/views/AuditView.vue @@ -1,6 +1,7 @@ @@ -185,36 +185,33 @@ onMounted(async () => {
-
- +
+
-
+
-
-
diff --git a/frontend/src/views/UserView.vue b/frontend/src/views/UserView.vue index 42e452b..777a999 100644 --- a/frontend/src/views/UserView.vue +++ b/frontend/src/views/UserView.vue @@ -1,8 +1,9 @@