Skip to content

Commit 74cbcd5

Browse files
committed
feat: [#659] added search box for filtering users by username
1 parent b206ae1 commit 74cbcd5

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

pages/admin/settings/users.vue

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
<template>
22
<div class="flex flex-col max-w-md gap-2 mx-auto">
33
<div class="flex flex-col gap-2">
4+
<div class="flex flex-wrap gap-2">
5+
<input
6+
v-model="searchQuery"
7+
name="search"
8+
type="text"
9+
class="py-2 border-2 input input-bordered rounded-2xl placeholder-neutral-content"
10+
:placeholder="`Filter by username`"
11+
>
12+
13+
</div>
414
<UserTable :user-profiles="userProfiles" />
515
<Pagination v-model:current-page="currentPage" v-model:page-size="pageSize" :total-results="userProfilesTotal" />
616
</div>
@@ -24,15 +34,18 @@ const pageSize: Ref<number> = ref(isNaN(queryPageSize) ? defaultPageSize : query
2434
const userProfiles: Ref<Array<UserProfile>> = ref([]);
2535
const userProfilesTotal = ref(0);
2636
const currentPage: Ref<number> = ref(Number(route.query?.page as string) || 1);
37+
const searchQuery: Ref<string> = ref(null);
2738
2839
watch(() => route.fullPath, () => {
40+
searchQuery.value = route.query.search as string ?? null;
2941
currentPage.value = isNaN(route.query.page) ? 1 : parseInt(route.query.page);
3042
pageSize.value = isNaN(route.query.pageSize) ? defaultPageSize : parseInt(route.query.pageSize);
3143
});
3244
33-
watch(currentPage, () => {
45+
watch([searchQuery, currentPage], () => {
3446
router.push({
3547
query: {
48+
search: searchQuery.value,
3649
pageSize: pageSize.value,
3750
page: currentPage.value
3851
}
@@ -45,6 +58,7 @@ watch(currentPage, () => {
4558
watch(pageSize, () => {
4659
router.push({
4760
query: {
61+
search: searchQuery.value,
4862
pageSize: pageSize.value,
4963
page: 1
5064
}
@@ -54,19 +68,22 @@ watch(pageSize, () => {
5468
});
5569
5670
onActivated(() => {
71+
searchQuery.value = route.query.search as string ?? null;
5772
pageSize.value = route.query.pageSize as number ?? defaultPageSize;
5873
currentPage.value = route.query.page as number ?? 1;
5974
});
6075
6176
onMounted(() => {
77+
searchQuery.value = route.query.search as string ?? null;
6278
loadUserProfiles();
6379
});
6480
6581
function loadUserProfiles () {
6682
rest.value.user.getUserProfiles(
6783
{
6884
pageSize: pageSize.value,
69-
page: currentPage.value
85+
page: currentPage.value,
86+
searchQuery: searchQuery.value
7087
}
7188
)
7289
.then((v) => {

0 commit comments

Comments
 (0)