11<script setup lang="ts">
2+ import { debounce } from ' perfect-debounce'
23import { isEditableElement } from ' ~/utils/input'
34
45withDefaults (
@@ -16,30 +17,31 @@ const showFullSearch = shallowRef(false)
1617const showMobileMenu = shallowRef (false )
1718
1819// On mobile, clicking logo+search button expands search
19- const route = useRoute ()
2020const isMobile = useIsMobile ()
2121const isSearchExpandedManually = shallowRef (false )
2222const searchBoxRef = useTemplateRef (' searchBoxRef' )
2323
24- const searchQuery = shallowRef (' ' )
24+ const route = useRoute ()
25+ const searchQuery = shallowRef <string >(normalizeSearchParam (route .query .q ))
26+
2527watch (
2628 () => route .query .q ,
2729 queryValue => {
28- searchQuery .value = normalizeSearchParam (queryValue )
30+ if (queryValue !== searchQuery .value ) {
31+ searchQuery .value = normalizeSearchParam (queryValue )
32+ }
2933 },
30- { immediate: true },
3134)
3235
33- async function handleSearchSubmit() {
34- if (! searchQuery .value ) {
35- return
36+ const router = useRouter ()
37+ const onSearchQueryUpdate = debounce ((newSearchQuery : string ) => {
38+ if (newSearchQuery !== searchQuery .value ) {
39+ router .replace ({
40+ name: ' search' ,
41+ query: { q: newSearchQuery === ' ' ? undefined : newSearchQuery },
42+ })
3643 }
37-
38- await navigateTo ({
39- name: ' search' ,
40- query: { q: searchQuery .value },
41- })
42- }
44+ }, 500 )
4345
4446// On search page, always show search expanded on mobile
4547const isOnHomePage = computed (() => route .name === ' index' )
@@ -147,8 +149,8 @@ onKeyStroke(
147149 ref =" searchBoxRef"
148150 class =" max-w-sm"
149151 compact
150- v- model =" searchQuery"
151- @submit = " handleSearchSubmit "
152+ : model-value =" searchQuery"
153+ @update:model-value = " onSearchQueryUpdate "
152154 @focus =" handleSearchFocus"
153155 @blur =" handleSearchBlur"
154156 />
0 commit comments