File tree Expand file tree Collapse file tree 4 files changed +40
-16
lines changed
Expand file tree Collapse file tree 4 files changed +40
-16
lines changed Original file line number Diff line number Diff line change @@ -22,23 +22,17 @@ const isMobile = useIsMobile()
2222const isSearchExpandedManually = shallowRef (false )
2323const searchBoxRef = useTemplateRef (' searchBoxRef' )
2424
25- const searchQuery = shallowRef (' ' )
26- watch (
27- () => route .query .q ,
28- queryValue => {
29- searchQuery .value = normalizeSearchParam (queryValue )
30- },
31- { immediate: true },
32- )
25+ const { searchQuery, updateSearchQuery } = usePackageSearchQuery ()
3326
34- async function handleSearchSubmit() {
35- if (! searchQuery .value ) {
27+ const router = useRouter ()
28+ function handleSubmitSearch() {
29+ if (searchQuery .value === ' ' ) {
3630 return
3731 }
3832
39- await navigateTo ({
33+ router . replace ({
4034 name: ' search' ,
41- query: { q: searchQuery .value },
35+ query: { ... route . query , q: searchQuery .value },
4236 })
4337}
4438
@@ -148,8 +142,9 @@ onKeyStroke(
148142 ref =" searchBoxRef"
149143 class =" max-w-sm"
150144 compact
151- v-model =" searchQuery"
152- @submit =" handleSearchSubmit"
145+ :model-value =" searchQuery"
146+ @update:model-value =" updateSearchQuery"
147+ @submit =" handleSubmitSearch"
153148 @focus =" handleSearchFocus"
154149 @blur =" handleSearchBlur"
155150 />
Original file line number Diff line number Diff line change @@ -41,6 +41,7 @@ export function packumentToSearchResult(
4141export interface NpmSearchOptions {
4242 /** Number of results to fetch */
4343 size ?: number
44+ onSuccess ?: ( result : { query : string } ) => void
4445}
4546
4647export const emptySearchResponse = {
@@ -151,6 +152,8 @@ export function useNpmSearch(
151152 // Success - clear rate limit flag
152153 isRateLimited . value = false
153154
155+ opts . onSuccess ?.( { query : q } )
156+
154157 return { ...response , isStale }
155158 } catch ( error : unknown ) {
156159 // Detect rate limit errors. npm's 429 response doesn't include CORS headers,
Original file line number Diff line number Diff line change 1+ import { debounce } from 'perfect-debounce'
2+
3+ export function usePackageSearchQuery ( ) {
4+ const searchQuery = useState < string > ( 'package_search_query' , ( ) => '' )
5+
6+ const route = useRoute ( )
7+ onMounted ( ( ) => {
8+ if ( route . query . q ) {
9+ searchQuery . value = normalizeSearchParam ( route . query . q )
10+ }
11+ } )
12+
13+ const updateSearchQuery = debounce ( ( newSearchQuery : string ) => {
14+ searchQuery . value = newSearchQuery
15+ } , 400 )
16+
17+ return {
18+ searchQuery,
19+ updateSearchQuery,
20+ }
21+ }
Original file line number Diff line number Diff line change @@ -29,8 +29,7 @@ const updateUrlPage = debounce((page: number) => {
2929 })
3030}, 500 )
3131
32- // The actual search query (from URL, used for API calls)
33- const query = computed (() => normalizeSearchParam (route .query .q ))
32+ const { searchQuery : query } = usePackageSearchQuery ()
3433
3534// Track if page just loaded (for hiding "Searching..." during view transition)
3635const hasInteracted = shallowRef (false )
@@ -76,6 +75,12 @@ const {
7675} = useNpmSearch (query , () => ({
7776 size: requestedSize .value ,
7877 incremental: true ,
78+ onSuccess : data => {
79+ router .replace ({
80+ name: ' search' ,
81+ query: { ... route .query , q: data .query },
82+ })
83+ },
7984}))
8085
8186// Results to display (directly from incremental search)
You can’t perform that action at this time.
0 commit comments