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> = [
5960const route = useRoute ();
6061const router = useRouter ();
6162const rest = useRestApi ();
62- // const filters = useFilters();
63+ /* const filters =
64+
65+ export const useTags = () => useState<Array<TorrentTag>>("tags", () => new Array<TorrentTag>()); */
6366
6467const defaultPageSize = 50 ;
6568const queryPageSize = isNaN (route .query ?.pageSize ) ? defaultPageSize : parseInt (route .query ?.pageSize as string , 10 );
@@ -68,8 +71,21 @@ const userProfiles: Ref<Array<UserProfile>> = ref([]);
6871const userProfilesTotal = ref (0 );
6972const currentPage: Ref <number > = ref (Number (route .query ?.page as string ) || 1 );
7073const 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 ]);
7177const 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+
7389const selectedSorting = computed ({
7490 get () {
7591 return [itemsSorting .value ];
@@ -82,15 +98,23 @@ const selectedSorting = computed({
8298
8399watch (() => 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
90112watch (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
117156onActivated (() => {
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(() => {
129169function 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