11<script setup lang="ts">
22import { debounce } from ' perfect-debounce'
3+ import { normalizeSearchParam } from ' #shared/utils/url'
34
45const route = useRoute (' ~username' )
56const router = useRouter ()
@@ -13,7 +14,7 @@ const currentPage = shallowRef(1)
1314
1415// Get initial page from URL (for scroll restoration on reload)
1516const initialPage = computed (() => {
16- const p = Number .parseInt (route .query .page as string , 10 )
17+ const p = Number .parseInt (normalizeSearchParam ( route .query .page ) , 10 )
1718 return Number .isNaN (p ) ? 1 : Math .max (1 , p )
1819})
1920
@@ -32,18 +33,16 @@ const updateUrl = debounce((updates: { page?: number; filter?: string; sort?: st
3233type SortOption = ' downloads' | ' updated' | ' name-asc' | ' name-desc'
3334
3435// Filter and sort state (from URL)
35- const filterText = shallowRef (
36- (Array .isArray (route .query .q ) ? route .query .q [0 ] : route .query .q ) ?? ' ' ,
37- )
36+ const filterText = shallowRef (normalizeSearchParam (route .query .q ))
3837const sortOption = shallowRef <SortOption >(
39- ((Array .isArray (route .query .sort ) ? route .query .sort [0 ] : route .query .sort ) as SortOption ) ||
40- ' downloads' ,
38+ (normalizeSearchParam (route .query .sort ) as SortOption ) || ' downloads' ,
4139)
4240
4341// Track if we've loaded all results (one-way flag, doesn't reset)
4442// Initialize to true if URL already has filter/sort params
4543const hasLoadedAll = shallowRef (
46- Boolean (route .query .q ) || (route .query .sort && route .query .sort !== ' downloads' ),
44+ Boolean (route .query .q ) ||
45+ (route .query .sort && normalizeSearchParam (route .query .sort ) !== ' downloads' ),
4746)
4847
4948// Update URL when filter/sort changes (debounced)
0 commit comments