11import React , { useEffect , useRef } from 'react'
2- import { HiSparkles } from 'react-icons/hi'
3- import { AI_PROMPT_ENGINES } from 'src/config/SearchEngines'
4- import { trackSearchEngineUse } from 'src/lib/analytics'
5- import { useUserPreferences } from 'src/stores/preferences'
6-
7- export const SearchBar = ( ) => {
8- const { promptEngine, promptEngines } = useUserPreferences ( )
9- const mergedEngines = [ ...AI_PROMPT_ENGINES , ...promptEngines ]
102
3+ type SearchBarProps = {
4+ iconStart ?: React . ReactNode
5+ placeholder : string
6+ onSubmit ?: ( keyword : string ) => void
7+ onChange ?: ( keyword : string ) => void
8+ }
9+ export const SearchBar = ( { iconStart, placeholder, onChange, onSubmit } : SearchBarProps ) => {
1110 const keywordsInputRef = useRef < HTMLInputElement | null > ( null )
12- const usedSearchEngine =
13- mergedEngines . find ( ( engine ) => engine . label . toLowerCase ( ) === promptEngine . toLowerCase ( ) ) ||
14- promptEngines [ 0 ]
1511
1612 const handleSubmit = ( e : React . FormEvent ) => {
1713 e . preventDefault ( )
1814 const target = e . target as typeof e . target & {
1915 keyword : { value : string }
2016 }
2117
22- trackSearchEngineUse ( usedSearchEngine . label )
23- window . open ( `${ usedSearchEngine . url } ${ target . keyword . value } ` , '_self' )
18+ onSubmit ?.( target . keyword . value )
2419 }
2520
2621 useEffect ( ( ) => {
@@ -29,20 +24,14 @@ export const SearchBar = () => {
2924
3025 return (
3126 < form className = "searchBar" onSubmit = { handleSubmit } >
32- { usedSearchEngine ?. default === false ? (
33- < HiSparkles className = "searchBarIcon" />
34- ) : (
35- < img
36- className = { 'searchBarIcon' }
37- src = { `/searchengine_logos/${ usedSearchEngine . label . toLowerCase ( ) } _logo.svg` }
38- />
39- ) }
27+ { iconStart }
4028 < input
4129 ref = { keywordsInputRef }
4230 type = "text"
4331 name = "keyword"
32+ onChange = { ( e ) => onChange ?.( e . target . value ) }
4433 className = "searchBarInput"
45- placeholder = { `Ask ${ usedSearchEngine . label } ` }
34+ placeholder = { placeholder }
4635 />
4736 </ form >
4837 )
0 commit comments