2323 <input
2424 class =" w-full bg-transparent py-2 outline-none placeholder:text-[#757575] placeholder:dark:text-neutral-500"
2525 v-model =" searchQuery"
26- @click.stop =" suggestionMenu = true "
26+ @click =" suggestionMenu = !suggestionMenu "
2727 :placeholder =" route.query.category ? `Search in ${route.query.category}` : 'Search'" />
2828 </div >
2929 <div v-if =" searchQuery || suggestionMenu" class =" flex cursor-pointer text-black dark:text-neutral-500 transition-all" @click =" clearSearch" >
3232 </div >
3333 </div >
3434 </form >
35- <div v-if =" suggestionMenu" id = " suggestionMenu " class =" absolute top-full left-0 right-0 z-50 bg-white rounded-b-2xl w-full" >
35+ <div v-if =" suggestionMenu" ref = " suggestionMenuRef " class =" absolute top-full left-0 right-0 z-50 bg-white rounded-b-2xl w-full" >
3636 <div class =" m-8" >
3737 <!-- Loading State -->
3838 <div v-if =" loading" >Loading...</div >
8181import getSearchProducts from ' ~/gql/queries/getSearchProducts.gql' ;
8282
8383const suggestionMenu = ref (false );
84+ const suggestionMenuRef = ref (null );
8485const router = useRouter ();
8586const route = useRoute ();
8687const searchQuery = ref (route .query .q );
@@ -98,22 +99,10 @@ const clearSearch = () => {
9899 setSearch ();
99100};
100101
101- const hidesuggestionMenu = () => {
102- suggestionMenu .value = false ;
103- searchQuery .value = route .query .q ;
104- };
105-
106- const outsideClickHandler = (event ) => {
107- if (! event .target .closest (' #suggestionMenu' )) {
108- hidesuggestionMenu ();
102+ useOnClickOutside (suggestionMenuRef, () => {
103+ if (suggestionMenu .value ) {
104+ suggestionMenu .value = false ;
105+ searchQuery .value = route .query .q ;
109106 }
110- };
111-
112- onMounted (() => {
113- window .addEventListener (' click' , outsideClickHandler);
114- });
115-
116- onUnmounted (() => {
117- window .removeEventListener (' click' , outsideClickHandler);
118107});
119108< / script>
0 commit comments