From e87b98b73bedd58018434e9cde071f0cec957d7c Mon Sep 17 00:00:00 2001
From: Yuuki Takahashi <20282867+yktakaha4@users.noreply.github.com>
Date: Sat, 1 Jun 2024 20:32:11 +0900
Subject: [PATCH] Feature: Add pagination & limits to URL parameters (#303)
* Set search conditions to query parameters
* Fixed by review
* Update query parameters when new message notified
---
server/ui-src/components/ListMessages.vue | 11 ++++++++++-
server/ui-src/components/NavMailbox.vue | 1 +
server/ui-src/components/NavTags.vue | 19 ++++++++++++++++---
server/ui-src/components/Notifications.vue | 7 +++++++
server/ui-src/components/Pagination.vue | 21 ++++++++++++++++-----
server/ui-src/components/SearchForm.vue | 7 ++++++-
server/ui-src/mixins/CommonMixins.js | 19 +++++++++++++++++--
server/ui-src/stores/pagination.js | 2 ++
server/ui-src/views/MailboxView.vue | 9 +++++++++
server/ui-src/views/MessageView.vue | 13 +++++++++++--
server/ui-src/views/SearchView.vue | 18 +++++++++++-------
11 files changed, 106 insertions(+), 21 deletions(-)
diff --git a/server/ui-src/components/ListMessages.vue b/server/ui-src/components/ListMessages.vue
index 63075d6..6da9525 100644
--- a/server/ui-src/components/ListMessages.vue
+++ b/server/ui-src/components/ListMessages.vue
@@ -2,6 +2,7 @@
import { mailbox } from '../stores/mailbox'
import CommonMixins from '../mixins/CommonMixins'
import dayjs from 'dayjs'
+import {pagination} from "../stores/pagination";
export default {
mixins: [
@@ -99,6 +100,14 @@ export default {
}
}
},
+
+ toTagUrl: function (t) {
+ const params = new URLSearchParams({
+ start: String(0),
+ limit: pagination.limit.toString(),
+ })
+ return '/search?q=' + this.tagEncodeURI(t) + '&' + params.toString()
+ },
}
}
@@ -143,7 +152,7 @@ export default {
{{ message.Snippet }}
-
{{ t }}
diff --git a/server/ui-src/components/NavMailbox.vue b/server/ui-src/components/NavMailbox.vue
index 50a41ec..6dc9fff 100644
--- a/server/ui-src/components/NavMailbox.vue
+++ b/server/ui-src/components/NavMailbox.vue
@@ -32,6 +32,7 @@ export default {
methods: {
reloadInbox: function () {
pagination.start = 0
+ this.$router.push('/')
this.loadMessages()
},
diff --git a/server/ui-src/components/NavTags.vue b/server/ui-src/components/NavTags.vue
index 5b77f86..b023343 100644
--- a/server/ui-src/components/NavTags.vue
+++ b/server/ui-src/components/NavTags.vue
@@ -67,9 +67,22 @@ export default {
if (query == '') {
this.$router.push('/')
} else {
- this.$router.push('/search?q=' + encodeURIComponent(query))
+ const params = new URLSearchParams({
+ q: query,
+ start: pagination.start.toString(),
+ limit: pagination.limit.toString(),
+ })
+ this.$router.push('/search?' + params.toString())
}
- }
+ },
+
+ toTagUrl(tag) {
+ const params = new URLSearchParams({
+ start: String(0),
+ limit: pagination.limit.toString(),
+ })
+ return '/search?q=' + this.tagEncodeURI(tag) + '&' + params.toString()
+ },
}
}
@@ -91,7 +104,7 @@ export default {
-
diff --git a/server/ui-src/components/Notifications.vue b/server/ui-src/components/Notifications.vue
index fa89c3d..945e5a1 100644
--- a/server/ui-src/components/Notifications.vue
+++ b/server/ui-src/components/Notifications.vue
@@ -60,6 +60,13 @@ export default {
} else {
// update pagination offset
pagination.start++
+ const path = self.$route.path
+ const params = new URLSearchParams({
+ ...self.$route.query,
+ start: pagination.start.toString(),
+ limit: pagination.limit.toString(),
+ })
+ self.$router.push(path + '?' + params.toString())
}
}
diff --git a/server/ui-src/components/Pagination.vue b/server/ui-src/components/Pagination.vue
index a106ae9..9998061 100644
--- a/server/ui-src/components/Pagination.vue
+++ b/server/ui-src/components/Pagination.vue
@@ -1,7 +1,7 @@