fix(filter): ensure filter query param is added to the page correctly (#1471)

This commit is contained in:
kolaente 2025-09-11 17:24:12 +02:00 committed by GitHub
parent 8ce8d445ba
commit 0dee1789a2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 23 additions and 51 deletions

View File

@ -36,6 +36,7 @@
<script lang="ts" setup>
import BasePagination from '@/components/base/BasePagination.vue'
import { useRoute } from 'vue-router'
withDefaults(defineProps<{
totalPages: number,
@ -44,15 +45,12 @@ withDefaults(defineProps<{
currentPage: 0,
})
function getRouteForPagination(page = 1, type = null) {
const route = useRoute()
function getRouteForPagination(page = 1) {
return {
name: type,
params: {
type: type,
},
query: {
page: page,
},
name: route.name,
params: route.params,
query: { ...route.query, page },
}
}
</script>

View File

@ -1,5 +1,4 @@
import {ref, shallowReactive, watch, computed, type ComputedGetter} from 'vue'
import {useRoute, useRouter} from 'vue-router'
import {useRouteQuery} from '@vueuse/router'
import TaskCollectionService, {
@ -68,10 +67,18 @@ export function useTaskList(
const projectId = computed(() => projectIdGetter())
const projectViewId = computed(() => projectViewIdGetter())
const params = ref<TaskFilterParams>({...getDefaultTaskFilterParams()})
const page = useRouteQuery('page', '1', { transform: Number })
const filter = useRouteQuery('filter')
const s = useRouteQuery('s')
watch(filter, v => { params.value.filter = v ?? '' }, { immediate: true })
watch(s, v => { params.value.s = v ?? '' }, { immediate: true })
watch(() => params.value.filter, v => { filter.value = v || undefined })
watch(() => params.value.s, v => { s.value = v || undefined })
const sortBy = ref({ ...sortByDefault })
@ -80,13 +87,15 @@ export function useTaskList(
return formatSortOrder(sortBy.value, loadParams)
})
watch(
() => allParams.value,
() => {
// When parameters change, the page should always be the first
page.value = 1
[params, sortBy, page],
([, , newPage], [, , oldPage]) => {
if (newPage === oldPage) {
page.value = 1
}
},
{deep: true},
)
const authStore = useAuthStore()
@ -123,41 +132,6 @@ export function useTaskList(
return tasks.value
}
const route = useRoute()
watch(() => route.query, (query) => {
const {
page: pageQueryValue,
s,
filter,
} = query
if (s !== undefined) {
params.value.s = s as string
}
if (pageQueryValue !== undefined) {
page.value = Number(pageQueryValue)
}
if (filter !== undefined) {
params.value.filter = filter
}
}, { immediate: true })
const router = useRouter()
watch(
() => [page.value, params.value.filter, params.value.s],
() => {
router.replace({
name: route.name,
params: route.params,
query: {
page: page.value,
filter: params.value.filter || undefined,
s: params.value.s || undefined,
},
})
},
{ deep: true },
)
// Only listen for query path changes
watch(() => JSON.stringify(getAllTasksParams.value), (newParams, oldParams) => {
if (oldParams === newParams) {