From 7c5e50eeb69aa21c7dd49915795c7c678a530d58 Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 14 Mar 2025 14:37:42 +0100 Subject: [PATCH 01/10] feat: [#698] placeholder sort options button --- pages/admin/settings/users.vue | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/pages/admin/settings/users.vue b/pages/admin/settings/users.vue index 80ab0be..81ed4c9 100644 --- a/pages/admin/settings/users.vue +++ b/pages/admin/settings/users.vue @@ -9,7 +9,7 @@ class="h-8 border-2 input input-bordered rounded-2xl placeholder-neutral-content" :placeholder="`Filter by username`" > - + @@ -23,6 +23,14 @@ import { notify } from "notiwind-ts"; import type { UserProfile } from "torrust-index-types-lib"; import { onMounted, ref, watch } from "#imports"; import { useRestApi } from "~/composables/states"; +import type { TorrustSelectOption } from "components/TorrustSelect.vue"; + +const sortingOptions: Array = [ + { name: "Registration date (Newest first)", value: "DateRegisteredNewest" }, + { name: "Registration date (Oldest first)", value: "DateRegisteredOldest" }, + { name: "Username (A to Z)", value: "UsernameAZ" }, + { name: "Username (Z to A)", value: "UsernameZA" } +]; const route = useRoute(); const router = useRouter(); @@ -35,9 +43,21 @@ const userProfiles: Ref> = ref([]); const userProfilesTotal = ref(0); const currentPage: Ref = ref(Number(route.query?.page as string) || 1); const searchQuery: Ref = ref(null); +const itemsSorting: Ref = ref(route.query?.sorting as string || sortingOptions[0].value); + +const selectedSorting = computed({ + get () { + return [itemsSorting.value]; + }, + set (value) { + itemsSorting.value = value[0]; + currentPage.value = 1; + } +}); watch(() => route.fullPath, () => { searchQuery.value = route.query.search as string ?? null; + itemsSorting.value = route.query.sorting as string ?? sortingOptions[0].value; currentPage.value = isNaN(route.query.page) ? 1 : parseInt(route.query.page); pageSize.value = isNaN(route.query.pageSize) ? defaultPageSize : parseInt(route.query.pageSize); }); @@ -46,6 +66,7 @@ watch(currentPage, () => { router.push({ query: { search: searchQuery.value, + sorting: itemsSorting.value ? itemsSorting.value : sortingOptions[0].value, pageSize: pageSize.value, page: currentPage.value } @@ -59,6 +80,7 @@ watch([pageSize, searchQuery], () => { router.push({ query: { search: searchQuery.value, + sorting: itemsSorting.value ? itemsSorting.value : sortingOptions[0].value, pageSize: pageSize.value, page: 1 } @@ -69,6 +91,7 @@ watch([pageSize, searchQuery], () => { onActivated(() => { searchQuery.value = route.query.search as string ?? null; + itemsSorting.value = route.query.sorting as string ?? sortingOptions[0].value; pageSize.value = route.query.pageSize as number ?? defaultPageSize; currentPage.value = route.query.page as number ?? 1; }); From f489d69f92e5bf09b2cb02d70405934aeaae0d0b Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 16 Mar 2025 12:22:20 +0100 Subject: [PATCH 02/10] feat: [#698] placeholder filters box --- pages/admin/settings/users.vue | 52 +++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/pages/admin/settings/users.vue b/pages/admin/settings/users.vue index 81ed4c9..0561012 100644 --- a/pages/admin/settings/users.vue +++ b/pages/admin/settings/users.vue @@ -1,18 +1,37 @@ @@ -25,6 +44,12 @@ import { onMounted, ref, watch } from "#imports"; import { useRestApi } from "~/composables/states"; import type { TorrustSelectOption } from "components/TorrustSelect.vue"; +const filteringOptions: Array = [ + { name: "Email verified", value: "EmailVerified" }, + { name: "Email not verified", value: "EmailNotVerified" }, + { name: "Torrent uploader", value: "TorrentUploader" } +]; + const sortingOptions: Array = [ { name: "Registration date (Newest first)", value: "DateRegisteredNewest" }, { name: "Registration date (Oldest first)", value: "DateRegisteredOldest" }, @@ -35,6 +60,7 @@ const sortingOptions: Array = [ const route = useRoute(); const router = useRouter(); const rest = useRestApi(); +// const filters = useFilters(); const defaultPageSize = 50; const queryPageSize = isNaN(route.query?.pageSize) ? defaultPageSize : parseInt(route.query?.pageSize as string, 10); From bae822fb067afcb40aea2315afd53fe251746a67 Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 16 Mar 2025 14:43:37 +0100 Subject: [PATCH 03/10] refactor: [#698] adjusted CSS styles --- pages/admin/settings/users.vue | 58 ++++++++++++++++------------------ 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/pages/admin/settings/users.vue b/pages/admin/settings/users.vue index 0561012..0969bc8 100644 --- a/pages/admin/settings/users.vue +++ b/pages/admin/settings/users.vue @@ -1,36 +1,34 @@