Skip to content

Commit 4462a2e

Browse files
committed
feat:[#698] added logic to filters button
1 parent 3320ebd commit 4462a2e

File tree

1 file changed

+45
-4
lines changed

1 file changed

+45
-4
lines changed

pages/admin/settings/users.vue

+45-4
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
<div class="pl-0.5 flex flex-col gap-2">
55
<div class="flex gap-2">
66
<TorrustSelect
7-
v-model:selected="selectedFilters"
8-
:options="filteringOptions"
7+
v-model:selected="filters"
8+
:options="filteringOptions.map(entry => ({ name: entry.name, value: entry.value }))"
99
label="Filter by"
10+
:multiple="true"
1011
/>
1112
<TorrustSelect
1213
v-model:selected="selectedSorting"
@@ -59,7 +60,9 @@ const sortingOptions: Array<TorrustSelectOption> = [
5960
const route = useRoute();
6061
const router = useRouter();
6162
const rest = useRestApi();
62-
// const filters = useFilters();
63+
/* const filters =
64+
65+
export const useTags = () => useState<Array<TorrentTag>>("tags", () => new Array<TorrentTag>()); */
6366
6467
const defaultPageSize = 50;
6568
const queryPageSize = isNaN(route.query?.pageSize) ? defaultPageSize : parseInt(route.query?.pageSize as string, 10);
@@ -68,8 +71,21 @@ const userProfiles: Ref<Array<UserProfile>> = ref([]);
6871
const userProfilesTotal = ref(0);
6972
const currentPage: Ref<number> = ref(Number(route.query?.page as string) || 1);
7073
const searchQuery: Ref<string> = ref(null);
74+
const itemsFilters: Ref<string> = ref(route.query?.filters as string || filteringOptions[0].value);
75+
const queryFilters = route.query?.filters as string[] || [];
76+
const filters: Ref<string[]> = ref(Array.isArray(queryFilters) ? queryFilters : [queryFilters]);
7177
const itemsSorting: Ref<string> = ref(route.query?.sorting as string || sortingOptions[0].value);
7278
79+
/* const selectedFilters = computed({
80+
get () {
81+
return itemsFilters.value;
82+
},
83+
set (value) {
84+
itemsFilters.value = value;
85+
currentPage.value = 1;
86+
}
87+
}); */
88+
7389
const selectedSorting = computed({
7490
get () {
7591
return [itemsSorting.value];
@@ -82,15 +98,23 @@ const selectedSorting = computed({
8298
8399
watch(() => route.fullPath, () => {
84100
searchQuery.value = route.query.search as string ?? null;
101+
/* itemsFilters.value = route.query.filters as string ?? filteringOptions[0].value; */
85102
itemsSorting.value = route.query.sorting as string ?? sortingOptions[0].value;
86103
currentPage.value = isNaN(route.query.page) ? 1 : parseInt(route.query.page);
87104
pageSize.value = isNaN(route.query.pageSize) ? defaultPageSize : parseInt(route.query.pageSize);
105+
106+
// Ensure tagFilters is always an array of strings
107+
filters.value = Array.isArray(route.query.filters)
108+
? route.query.filters as string[]
109+
: (route.query.filters ? [route.query.filters as string] : []);
88110
});
89111
90112
watch(currentPage, () => {
91113
router.push({
92114
query: {
93115
search: searchQuery.value,
116+
/* filters: itemsFilters.value ? itemsFilters.value : filteringOptions[0].value, */
117+
filters: filters.value.length > 0 ? filters.value : [],
94118
sorting: itemsSorting.value ? itemsSorting.value : sortingOptions[0].value,
95119
pageSize: pageSize.value,
96120
page: currentPage.value
@@ -101,10 +125,25 @@ watch(currentPage, () => {
101125
});
102126
103127
// Resets the current page value to 1 when the page size is changed to display results correctly
104-
watch([pageSize, searchQuery], () => {
128+
/* watch([pageSize, searchQuery, selectedFilters], () => {
129+
router.push({
130+
query: {
131+
search: searchQuery.value,
132+
filters: selectedFilters.value.length > 0 ? selectedFilters.value : [],
133+
sorting: itemsSorting.value ? itemsSorting.value : sortingOptions[0].value,
134+
pageSize: pageSize.value,
135+
page: 1
136+
}
137+
});
138+
139+
loadUserProfiles();
140+
}); */
141+
142+
watch([pageSize, searchQuery, filters], () => {
105143
router.push({
106144
query: {
107145
search: searchQuery.value,
146+
filters: filters.value.length > 0 ? filters.value : [],
108147
sorting: itemsSorting.value ? itemsSorting.value : sortingOptions[0].value,
109148
pageSize: pageSize.value,
110149
page: 1
@@ -116,6 +155,7 @@ watch([pageSize, searchQuery], () => {
116155
117156
onActivated(() => {
118157
searchQuery.value = route.query.search as string ?? null;
158+
filters.value = route.query.filters as string[] ?? null;
119159
itemsSorting.value = route.query.sorting as string ?? sortingOptions[0].value;
120160
pageSize.value = route.query.pageSize as number ?? defaultPageSize;
121161
currentPage.value = route.query.page as number ?? 1;
@@ -129,6 +169,7 @@ onMounted(() => {
129169
function loadUserProfiles () {
130170
rest.value.user.getUserProfiles(
131171
{
172+
filters: filters.value,
132173
pageSize: pageSize.value,
133174
page: currentPage.value,
134175
searchQuery: searchQuery.value

0 commit comments

Comments
 (0)