4
4
<div class =" pl-0.5 flex flex-col gap-2" >
5
5
<div class =" flex gap-2" >
6
6
<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 })) "
9
9
label =" Filter by"
10
+ :multiple =" true"
10
11
/>
11
12
<TorrustSelect
12
13
v-model:selected =" selectedSorting"
@@ -59,7 +60,9 @@ const sortingOptions: Array<TorrustSelectOption> = [
59
60
const route = useRoute ();
60
61
const router = useRouter ();
61
62
const rest = useRestApi ();
62
- // const filters = useFilters();
63
+ /* const filters =
64
+
65
+ export const useTags = () => useState<Array<TorrentTag>>("tags", () => new Array<TorrentTag>()); */
63
66
64
67
const defaultPageSize = 50 ;
65
68
const queryPageSize = isNaN (route .query ?.pageSize ) ? defaultPageSize : parseInt (route .query ?.pageSize as string , 10 );
@@ -68,8 +71,21 @@ const userProfiles: Ref<Array<UserProfile>> = ref([]);
68
71
const userProfilesTotal = ref (0 );
69
72
const currentPage: Ref <number > = ref (Number (route .query ?.page as string ) || 1 );
70
73
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 ]);
71
77
const itemsSorting: Ref <string > = ref (route .query ?.sorting as string || sortingOptions [0 ].value );
72
78
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
+
73
89
const selectedSorting = computed ({
74
90
get () {
75
91
return [itemsSorting .value ];
@@ -82,15 +98,23 @@ const selectedSorting = computed({
82
98
83
99
watch (() => route .fullPath , () => {
84
100
searchQuery .value = route .query .search as string ?? null ;
101
+ /* itemsFilters.value = route.query.filters as string ?? filteringOptions[0].value; */
85
102
itemsSorting .value = route .query .sorting as string ?? sortingOptions [0 ].value ;
86
103
currentPage .value = isNaN (route .query .page ) ? 1 : parseInt (route .query .page );
87
104
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 ] : []);
88
110
});
89
111
90
112
watch (currentPage , () => {
91
113
router .push ({
92
114
query: {
93
115
search: searchQuery .value ,
116
+ /* filters: itemsFilters.value ? itemsFilters.value : filteringOptions[0].value, */
117
+ filters: filters .value .length > 0 ? filters .value : [],
94
118
sorting: itemsSorting .value ? itemsSorting .value : sortingOptions [0 ].value ,
95
119
pageSize: pageSize .value ,
96
120
page: currentPage .value
@@ -101,10 +125,25 @@ watch(currentPage, () => {
101
125
});
102
126
103
127
// 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 ], () => {
105
143
router .push ({
106
144
query: {
107
145
search: searchQuery .value ,
146
+ filters: filters .value .length > 0 ? filters .value : [],
108
147
sorting: itemsSorting .value ? itemsSorting .value : sortingOptions [0 ].value ,
109
148
pageSize: pageSize .value ,
110
149
page: 1
@@ -116,6 +155,7 @@ watch([pageSize, searchQuery], () => {
116
155
117
156
onActivated (() => {
118
157
searchQuery .value = route .query .search as string ?? null ;
158
+ filters .value = route .query .filters as string [] ?? null ;
119
159
itemsSorting .value = route .query .sorting as string ?? sortingOptions [0 ].value ;
120
160
pageSize .value = route .query .pageSize as number ?? defaultPageSize ;
121
161
currentPage .value = route .query .page as number ?? 1 ;
@@ -129,6 +169,7 @@ onMounted(() => {
129
169
function loadUserProfiles () {
130
170
rest .value .user .getUserProfiles (
131
171
{
172
+ filters: filters .value ,
132
173
pageSize: pageSize .value ,
133
174
page: currentPage .value ,
134
175
searchQuery: searchQuery .value
0 commit comments