Skip to content

Commit 368f3ac

Browse files
committed
feat: implement SearchEngineBar component and update SearchBarWithLogo to use it
1 parent 461f2c0 commit 368f3ac

3 files changed

Lines changed: 47 additions & 24 deletions

File tree

src/components/Elements/SearchBar/SearchBar.tsx

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,21 @@
11
import 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
)
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { HiSparkles } from 'react-icons/hi'
2+
import { AI_PROMPT_ENGINES } from 'src/config/SearchEngines'
3+
import { trackSearchEngineUse } from 'src/lib/analytics'
4+
import { useUserPreferences } from 'src/stores/preferences'
5+
import { SearchBar } from './SearchBar'
6+
7+
export const SearchEngineBar = () => {
8+
const { promptEngine, promptEngines } = useUserPreferences()
9+
const mergedEngines = [...AI_PROMPT_ENGINES, ...promptEngines]
10+
11+
const usedSearchEngine =
12+
mergedEngines.find((engine) => engine.label.toLowerCase() === promptEngine.toLowerCase()) ||
13+
promptEngines[0]
14+
15+
return (
16+
<SearchBar
17+
iconStart={
18+
usedSearchEngine.default === false ? (
19+
<HiSparkles className="searchBarIcon" />
20+
) : (
21+
<img
22+
className={'searchBarIcon'}
23+
src={`/searchengine_logos/${usedSearchEngine.label.toLowerCase()}_logo.svg`}
24+
/>
25+
)
26+
}
27+
onSubmit={(keyword) => {
28+
trackSearchEngineUse(usedSearchEngine.label)
29+
window.open(`${usedSearchEngine.url}${keyword}`, '_self')
30+
}}
31+
placeholder={`Ask ${usedSearchEngine.label}`}
32+
/>
33+
)
34+
}

src/components/Elements/SearchBarWithLogo/SearchBarWithLogo.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { HiSparkles } from 'react-icons/hi'
22
import { AI_PROMPT_ENGINES } from 'src/config/SearchEngines'
33
import { useUserPreferences } from 'src/stores/preferences'
4-
import { SearchBar } from '../SearchBar/SearchBar'
4+
import { SearchEngineBar } from '../SearchBar/SearchEngineBar'
55
import './SearchBarWithLogo.css'
66

77
export const SearchBarWithLogo = () => {
@@ -25,7 +25,7 @@ export const SearchBarWithLogo = () => {
2525
/>
2626
)}
2727

28-
<SearchBar />
28+
<SearchEngineBar />
2929
</div>
3030
)
3131
}

0 commit comments

Comments
 (0)