1
1
<template >
2
2
<div class =" flex flex-col max-w-md gap-2 mx-auto" >
3
3
<div class =" flex flex-col gap-2" >
4
+ <div class =" pl-0.5 flex flex-wrap gap-2" >
5
+ <input
6
+ v-model =" searchQuery"
7
+ name =" search"
8
+ type =" text"
9
+ class =" h-8 border-2 input input-bordered rounded-2xl placeholder-neutral-content"
10
+ :placeholder =" `Filter by username`"
11
+ >
12
+
13
+ </div >
4
14
<UserTable :user-profiles =" userProfiles" />
5
15
<Pagination v-model:current-page =" currentPage" v-model:page-size =" pageSize" :total-results =" userProfilesTotal" />
6
16
</div >
@@ -24,15 +34,18 @@ const pageSize: Ref<number> = ref(isNaN(queryPageSize) ? defaultPageSize : query
24
34
const userProfiles: Ref <Array <UserProfile >> = ref ([]);
25
35
const userProfilesTotal = ref (0 );
26
36
const currentPage: Ref <number > = ref (Number (route .query ?.page as string ) || 1 );
37
+ const searchQuery: Ref <string > = ref (null );
27
38
28
39
watch (() => route .fullPath , () => {
40
+ searchQuery .value = route .query .search as string ?? null ;
29
41
currentPage .value = isNaN (route .query .page ) ? 1 : parseInt (route .query .page );
30
42
pageSize .value = isNaN (route .query .pageSize ) ? defaultPageSize : parseInt (route .query .pageSize );
31
43
});
32
44
33
- watch (currentPage , () => {
45
+ watch ([ searchQuery , currentPage ] , () => {
34
46
router .push ({
35
47
query: {
48
+ search: searchQuery .value ,
36
49
pageSize: pageSize .value ,
37
50
page: currentPage .value
38
51
}
@@ -45,6 +58,7 @@ watch(currentPage, () => {
45
58
watch (pageSize , () => {
46
59
router .push ({
47
60
query: {
61
+ search: searchQuery .value ,
48
62
pageSize: pageSize .value ,
49
63
page: 1
50
64
}
@@ -54,19 +68,22 @@ watch(pageSize, () => {
54
68
});
55
69
56
70
onActivated (() => {
71
+ searchQuery .value = route .query .search as string ?? null ;
57
72
pageSize .value = route .query .pageSize as number ?? defaultPageSize ;
58
73
currentPage .value = route .query .page as number ?? 1 ;
59
74
});
60
75
61
76
onMounted (() => {
77
+ searchQuery .value = route .query .search as string ?? null ;
62
78
loadUserProfiles ();
63
79
});
64
80
65
81
function loadUserProfiles () {
66
82
rest .value .user .getUserProfiles (
67
83
{
68
84
pageSize: pageSize .value ,
69
- page: currentPage .value
85
+ page: currentPage .value ,
86
+ searchQuery: searchQuery .value
70
87
}
71
88
)
72
89
.then ((v ) => {
0 commit comments