Skip to content

Commit 549ad56

Browse files
committed
fix: [#601] bug in tags and categories filters
Going back with the browser button in the torrent list page produces an URL with a param like this "tagFilters=os" when the previous filters only contain sone item. That can be interpreted as a flat option or an array with one element. The application was applying the first option and the index-api-lib package expects the tagFilters to be always an array of strings. Same for categoryFilters. This only happended using the "back" buttom.
1 parent ceb64f2 commit 549ad56

File tree

1 file changed

+26
-9
lines changed

1 file changed

+26
-9
lines changed

pages/torrents.vue

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ const tags = useTags();
8787
const rest = useRestApi();
8888
8989
const defaultPageSize = 50;
90-
const queryPageSize = parseInt(route.query?.pageSize as string, 10);
90+
const queryPageSize = isNaN(route.query?.pageSize) ? defaultPageSize : parseInt(route.query?.pageSize as string, 10);
9191
const pageSize: Ref<number> = ref(isNaN(queryPageSize) ? defaultPageSize : queryPageSize);
9292
const queryCategoryFilters = route.query?.categoryFilters as string[] || [];
9393
const categoryFilters: Ref<string[]> = ref(Array.isArray(queryCategoryFilters) ? queryCategoryFilters : [queryCategoryFilters]);
@@ -113,11 +113,19 @@ const selectedSorting = computed({
113113
watch(() => route.fullPath, () => {
114114
searchQuery.value = route.query.search as string ?? null;
115115
itemsSorting.value = route.query.sorting as string ?? null;
116-
pageSize.value = route.query.pageSize as number ?? null;
117-
currentPage.value = route.query.page as number ?? null;
116+
pageSize.value = isNaN(route.query.pageSize) ? parseInt(route.query.pageSize) : defaultPageSize;
117+
currentPage.value = isNaN(route.query.page) ? parseInt(route.query.page) : 1;
118118
layout.value = route.query.layout as string ?? null;
119-
categoryFilters.value = route.query.categoryFilters as string[] ?? null;
120-
tagFilters.value = route.query.tagFilters as string[] ?? null;
119+
120+
// Ensure categoryFilters is always an array of strings
121+
categoryFilters.value = Array.isArray(route.query.categoryFilters)
122+
? route.query.categoryFilters as string[]
123+
: (route.query.categoryFilters ? [route.query.categoryFilters as string] : []);
124+
125+
// Ensure tagFilters is always an array of strings
126+
tagFilters.value = Array.isArray(route.query.tagFilters)
127+
? route.query.tagFilters as string[]
128+
: (route.query.tagFilters ? [route.query.tagFilters as string] : []);
121129
});
122130
123131
watch([searchQuery, itemsSorting, pageSize, currentPage, layout, categoryFilters, tagFilters], () => {
@@ -128,8 +136,8 @@ watch([searchQuery, itemsSorting, pageSize, currentPage, layout, categoryFilters
128136
pageSize: pageSize.value,
129137
page: currentPage.value,
130138
layout: layout.value,
131-
categoryFilters: categoryFilters.value,
132-
tagFilters: tagFilters.value
139+
categoryFilters: categoryFilters.value.length > 0 ? categoryFilters.value : [],
140+
tagFilters: tagFilters.value.length > 0 ? tagFilters.value : []
133141
}
134142
});
135143
@@ -139,8 +147,8 @@ watch([searchQuery, itemsSorting, pageSize, currentPage, layout, categoryFilters
139147
onActivated(() => {
140148
searchQuery.value = route.query.search as string ?? null;
141149
itemsSorting.value = route.query.sorting as string ?? null;
142-
pageSize.value = route.query.pageSize as number ?? null;
143-
currentPage.value = route.query.page as number ?? null;
150+
pageSize.value = route.query.pageSize as number ?? defaultPageSize;
151+
currentPage.value = route.query.page as number ?? 1;
144152
layout.value = route.query.layout as string ?? null;
145153
categoryFilters.value = route.query.categoryFilters as string[] ?? null;
146154
tagFilters.value = route.query.tagFilters as string[] ?? null;
@@ -167,6 +175,15 @@ function submitSearch () {
167175
}
168176
169177
function loadTorrents () {
178+
const query = {
179+
pageSize: pageSize.value,
180+
page: currentPage.value,
181+
sorting: itemsSorting.value,
182+
categories: categoryFilters.value,
183+
tags: tagFilters.value,
184+
searchQuery: searchQuery.value
185+
};
186+
170187
rest.value.torrent.getTorrents(
171188
{
172189
pageSize: pageSize.value,

0 commit comments

Comments
 (0)