forked from crowetic/commerce
assets
components
auth
cart
core
Avatar
EnhancedImage
Featurebar
Footer
HTMLContent
Head
HomeAllProductsGrid
I18nWidget
Layout
Navbar
Searchbar
Searchbar.module.css
Searchbar.tsx
index.ts
Toggle
UserNav
index.ts
icons
product
ui
wishlist
config
lib
pages
public
utils
.gitignore
.prettierignore
README.md
codegen.json
global.d.ts
next-env.d.ts
next.config.js
package.json
postcss.config.js
tailwind.config.js
tsconfig.json
yarn.lock
63 lines
1.5 KiB
TypeScript
63 lines
1.5 KiB
TypeScript
import { FC, useEffect } from 'react'
|
|
import cn from 'classnames'
|
|
import s from './Searchbar.module.css'
|
|
import { useRouter } from 'next/router'
|
|
|
|
interface Props {
|
|
className?: string
|
|
id?: string
|
|
}
|
|
|
|
const Searchbar: FC<Props> = ({ className, id = 'search' }) => {
|
|
const router = useRouter()
|
|
|
|
useEffect(() => {
|
|
router.prefetch('/search')
|
|
}, [])
|
|
|
|
return (
|
|
<div
|
|
className={cn(
|
|
'relative text-sm bg-accents-1 text-base w-full transition-colors duration-150',
|
|
className
|
|
)}
|
|
>
|
|
<label htmlFor={id}>
|
|
<input
|
|
id={id}
|
|
className={s.input}
|
|
placeholder="Search for products..."
|
|
defaultValue={router.query.q}
|
|
onKeyUp={(e) => {
|
|
e.preventDefault()
|
|
|
|
if (e.key === 'Enter') {
|
|
const q = e.currentTarget.value
|
|
|
|
router.push(
|
|
{
|
|
pathname: `/search`,
|
|
query: q ? { q } : {},
|
|
},
|
|
undefined,
|
|
{ shallow: true }
|
|
)
|
|
}
|
|
}}
|
|
/>
|
|
</label>
|
|
<div className={s.iconContainer}>
|
|
<svg className={s.icon} fill="currentColor" viewBox="0 0 20 20">
|
|
<path
|
|
fillRule="evenodd"
|
|
clipRule="evenodd"
|
|
d="M8 4a4 4 0 100 8 4 4 0 000-8zM2 8a6 6 0 1110.89 3.476l4.817 4.817a1 1 0 01-1.414 1.414l-4.816-4.816A6 6 0 012 8z"
|
|
/>
|
|
</svg>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default Searchbar
|