Skip to content

Commit 1ce0407

Browse files
committed
Merge #697: Admins should be able to search users
6697a99 deps: [#659] updated dependencies (Mario) b1859fa refactor: [#659] moved search box slightly to the left (Mario) d426d93 refactor: [#659] adjusted styling for the search box (Mario) 74cbcd5 feat: [#659] added search box for filtering users by username (Mario) Pull request description: Resolves #659 ACKs for top commit: josecelano: ACK 6697a99 Tree-SHA512: ce016171e9f5269b1e8457f813bb95e58150f4c6f70674b608a9a704c2b6634b51037dc55462d8c5e9872e7714959c0a4d96426a28d3e7e10e70df4eaedcb600
2 parents b206ae1 + 6697a99 commit 1ce0407

File tree

3 files changed

+24
-7
lines changed

3 files changed

+24
-7
lines changed

package-lock.json

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
"dompurify": "^3.1.6",
4949
"marked": "^12.0.2",
5050
"notiwind-ts": "^2.0.2",
51-
"torrust-index-api-lib": "^3.1.0",
51+
"torrust-index-api-lib": "^3.2.0",
5252
"torrust-index-types-lib": "^3.1.0",
5353
"uuid": "^9.0.1"
5454
}

pages/admin/settings/users.vue

+19-2
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="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>
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)