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 @@