From 7bb1e940336f306f4755ec9d05dd6c1f29232b23 Mon Sep 17 00:00:00 2001
From: Rafi Zadanly <zadanlyr@gmail.com>
Date: Sun, 19 Feb 2023 22:07:29 +0700
Subject: change navbar

---
 src/core/components/elements/Navbar/Search.jsx | 89 ++++++++++++++++++++++++++
 1 file changed, 89 insertions(+)
 create mode 100644 src/core/components/elements/Navbar/Search.jsx

(limited to 'src/core/components/elements/Navbar/Search.jsx')

diff --git a/src/core/components/elements/Navbar/Search.jsx b/src/core/components/elements/Navbar/Search.jsx
new file mode 100644
index 00000000..cca1a97c
--- /dev/null
+++ b/src/core/components/elements/Navbar/Search.jsx
@@ -0,0 +1,89 @@
+import searchSuggestApi from "@/core/api/searchSuggestApi"
+import { MagnifyingGlassIcon } from "@heroicons/react/24/outline"
+import { useCallback, useEffect, useRef, useState } from "react"
+import Link from "../Link/Link"
+import { useRouter } from "next/router"
+
+const Search = () => {
+  const router = useRouter()
+  const queryRef = useRef()
+  const [ query, setQuery ] = useState('')
+  const [ suggestions, setSuggestions ] = useState([])
+
+  useEffect(() => {
+    setQuery(router.query.q)
+  }, [router.query])
+  
+  const loadSuggestion = useCallback(() => {
+    if (query && document.activeElement == queryRef.current) {
+      (async () => {
+        const dataSuggestion = await searchSuggestApi({ query })
+        setSuggestions(dataSuggestion.data.suggestions)
+      })()
+      return
+    } else {
+      setSuggestions([])
+    }
+  }, [ query ])
+
+  useEffect(() => {
+    if (query && document.activeElement == queryRef.current) {
+      loadSuggestion()
+    } else {
+      setSuggestions([])
+    }
+  }, [ loadSuggestion, query ])
+
+  const handleSubmit = (e) => {
+    e.preventDefault()
+    if (query) {
+      router.push(`/shop/search?q=${query}`)
+    } else {
+      queryRef.current.focus()
+    }
+  }
+
+  const onInputBlur = () => {
+    setTimeout(() => {
+      setSuggestions([])
+    }, 100)
+  }
+
+  return (
+    <form 
+      onSubmit={handleSubmit} 
+      className="flex relative"
+    >
+      <input 
+        type="text" 
+        ref={queryRef}
+        className="form-input p-3 rounded-r-none border-r-0 focus:border-gray_r-6"
+        placeholder="Ketik nama, part number, merk"
+        value={query}
+        onChange={(e) => setQuery(e.target.value)}
+        onBlur={onInputBlur}
+        onFocus={loadSuggestion}
+      />
+      <button 
+        type="submit" 
+        className="rounded-r border border-l-0 border-gray_r-6 px-2"
+      >
+        <MagnifyingGlassIcon className="w-6" />
+      </button>
+
+      { suggestions.length > 1 && (
+        <>
+          <div className="absolute w-full top-[50px] rounded-b bg-gray_r-1 border border-gray_r-6 divide-y divide-gray_r-6">
+            {suggestions.map((suggestion, index) => (
+              <Link href={`/shop/search?q=${suggestion.term}`} key={index} className="px-3 py-3 !text-gray_r-12 font-normal">
+                {suggestion.term}
+              </Link>
+            ))}
+          </div>
+        </>
+      ) }
+    </form>
+  )
+}
+
+export default Search
\ No newline at end of file
-- 
cgit v1.2.3


From f66b12fd1d0b83af0d7230d7b1565fbe00afbe3c Mon Sep 17 00:00:00 2001
From: Rafi Zadanly <zadanlyr@gmail.com>
Date: Wed, 22 Feb 2023 11:03:34 +0700
Subject: prettier

---
 src/core/components/elements/Navbar/Search.jsx | 56 +++++++++++++-------------
 1 file changed, 27 insertions(+), 29 deletions(-)

(limited to 'src/core/components/elements/Navbar/Search.jsx')

diff --git a/src/core/components/elements/Navbar/Search.jsx b/src/core/components/elements/Navbar/Search.jsx
index cca1a97c..6f0e4dd9 100644
--- a/src/core/components/elements/Navbar/Search.jsx
+++ b/src/core/components/elements/Navbar/Search.jsx
@@ -1,22 +1,22 @@
-import searchSuggestApi from "@/core/api/searchSuggestApi"
-import { MagnifyingGlassIcon } from "@heroicons/react/24/outline"
-import { useCallback, useEffect, useRef, useState } from "react"
-import Link from "../Link/Link"
-import { useRouter } from "next/router"
+import searchSuggestApi from '@/core/api/searchSuggestApi'
+import { MagnifyingGlassIcon } from '@heroicons/react/24/outline'
+import { useCallback, useEffect, useRef, useState } from 'react'
+import Link from '../Link/Link'
+import { useRouter } from 'next/router'
 
 const Search = () => {
   const router = useRouter()
   const queryRef = useRef()
-  const [ query, setQuery ] = useState('')
-  const [ suggestions, setSuggestions ] = useState([])
+  const [query, setQuery] = useState('')
+  const [suggestions, setSuggestions] = useState([])
 
   useEffect(() => {
     setQuery(router.query.q)
   }, [router.query])
-  
+
   const loadSuggestion = useCallback(() => {
     if (query && document.activeElement == queryRef.current) {
-      (async () => {
+      ;(async () => {
         const dataSuggestion = await searchSuggestApi({ query })
         setSuggestions(dataSuggestion.data.suggestions)
       })()
@@ -24,7 +24,7 @@ const Search = () => {
     } else {
       setSuggestions([])
     }
-  }, [ query ])
+  }, [query])
 
   useEffect(() => {
     if (query && document.activeElement == queryRef.current) {
@@ -32,7 +32,7 @@ const Search = () => {
     } else {
       setSuggestions([])
     }
-  }, [ loadSuggestion, query ])
+  }, [loadSuggestion, query])
 
   const handleSubmit = (e) => {
     e.preventDefault()
@@ -50,40 +50,38 @@ const Search = () => {
   }
 
   return (
-    <form 
-      onSubmit={handleSubmit} 
-      className="flex relative"
-    >
-      <input 
-        type="text" 
+    <form onSubmit={handleSubmit} className='flex relative'>
+      <input
+        type='text'
         ref={queryRef}
-        className="form-input p-3 rounded-r-none border-r-0 focus:border-gray_r-6"
-        placeholder="Ketik nama, part number, merk"
+        className='form-input p-3 rounded-r-none border-r-0 focus:border-gray_r-6'
+        placeholder='Ketik nama, part number, merk'
         value={query}
         onChange={(e) => setQuery(e.target.value)}
         onBlur={onInputBlur}
         onFocus={loadSuggestion}
       />
-      <button 
-        type="submit" 
-        className="rounded-r border border-l-0 border-gray_r-6 px-2"
-      >
-        <MagnifyingGlassIcon className="w-6" />
+      <button type='submit' className='rounded-r border border-l-0 border-gray_r-6 px-2'>
+        <MagnifyingGlassIcon className='w-6' />
       </button>
 
-      { suggestions.length > 1 && (
+      {suggestions.length > 1 && (
         <>
-          <div className="absolute w-full top-[50px] rounded-b bg-gray_r-1 border border-gray_r-6 divide-y divide-gray_r-6">
+          <div className='absolute w-full top-[50px] rounded-b bg-gray_r-1 border border-gray_r-6 divide-y divide-gray_r-6'>
             {suggestions.map((suggestion, index) => (
-              <Link href={`/shop/search?q=${suggestion.term}`} key={index} className="px-3 py-3 !text-gray_r-12 font-normal">
+              <Link
+                href={`/shop/search?q=${suggestion.term}`}
+                key={index}
+                className='px-3 py-3 !text-gray_r-12 font-normal'
+              >
                 {suggestion.term}
               </Link>
             ))}
           </div>
         </>
-      ) }
+      )}
     </form>
   )
 }
 
-export default Search
\ No newline at end of file
+export default Search
-- 
cgit v1.2.3


From ac3fdf7be9982e65d8f83a20bc487f8dd62e3bfc Mon Sep 17 00:00:00 2001
From: Rafi Zadanly <zadanlyr@gmail.com>
Date: Wed, 22 Feb 2023 23:36:47 +0700
Subject: fix

---
 src/core/components/elements/Navbar/Search.jsx | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

(limited to 'src/core/components/elements/Navbar/Search.jsx')

diff --git a/src/core/components/elements/Navbar/Search.jsx b/src/core/components/elements/Navbar/Search.jsx
index 6f0e4dd9..ff2c7adb 100644
--- a/src/core/components/elements/Navbar/Search.jsx
+++ b/src/core/components/elements/Navbar/Search.jsx
@@ -50,7 +50,10 @@ const Search = () => {
   }
 
   return (
-    <form onSubmit={handleSubmit} className='flex relative'>
+    <form
+      onSubmit={handleSubmit}
+      className='flex relative'
+    >
       <input
         type='text'
         ref={queryRef}
@@ -61,7 +64,10 @@ const Search = () => {
         onBlur={onInputBlur}
         onFocus={loadSuggestion}
       />
-      <button type='submit' className='rounded-r border border-l-0 border-gray_r-6 px-2'>
+      <button
+        type='submit'
+        className='rounded-r border border-l-0 border-gray_r-6 px-2'
+      >
         <MagnifyingGlassIcon className='w-6' />
       </button>
 
-- 
cgit v1.2.3

