@@ -8,17 +8,23 @@ import '../App.css';
88import './settings.css' ;
99import PreferencesContext from '../preferences/PreferencesContext' ;
1010import ConfigurationContext from '../configuration/ConfigurationContext' ;
11- import { SUPPORTED_CARDS , APP } from '../Constants'
12- import { ToastContainer , toast } from 'react-toastify' ;
13- import 'react-toastify/dist/ReactToastify.css' ;
14- import { trackAddLanguage , trackRemoveLanguage , trackAddCard , trackRemoveCard ,
15- trackOpenLinksNewTab , trackListingModeChange } from "../utils/Analytics"
11+ import { SUPPORTED_CARDS , SUPPORTED_SEARCH_ENGINES , APP } from '../Constants'
12+ import { ToastContainer , toast } from 'react-toastify'
13+ import 'react-toastify/dist/ReactToastify.css'
14+ import {
15+ trackAddLanguage ,
16+ trackRemoveLanguage ,
17+ trackAddCard ,
18+ trackRemoveCard ,
19+ trackOpenLinksNewTab ,
20+ trackListingModeChange ,
21+ } from '../utils/Analytics'
1622
1723function SettingsModal ( { showSettings, setShowSettings } ) {
18-
1924 const { supportedTags } = useContext ( ConfigurationContext )
2025 const preferences = useContext ( PreferencesContext )
21- const { dispatcher, cards, userSelectedTags, openLinksNewTab, listingMode, theme } = preferences
26+ const { dispatcher, cards, userSelectedTags, openLinksNewTab, listingMode, theme, searchEngine } =
27+ preferences
2228 const [ selectedCards , setSelectedCards ] = useState ( cards )
2329
2430 const handleCloseModal = ( ) => {
@@ -73,6 +79,10 @@ function SettingsModal({ showSettings, setShowSettings }) {
7379 dispatcher ( { type : 'setCards' , value : newCards } )
7480 }
7581
82+ const onSearchEngineSelectChange = ( value ) => {
83+ dispatcher ( { type : 'setSearchEngine' , value } )
84+ }
85+
7686 const onOpenLinksNewTabChange = ( e ) => {
7787 const checked = e . target . checked
7888 trackOpenLinksNewTab ( checked )
@@ -171,6 +181,27 @@ function SettingsModal({ showSettings, setShowSettings }) {
171181 />
172182 </ div >
173183 </ div >
184+
185+ < div className = "settingRow" >
186+ < p className = "settingTitle" > Favorite search engine</ p >
187+ < div className = "settingContent" >
188+ < Select
189+ options = { SUPPORTED_SEARCH_ENGINES }
190+ value = { SUPPORTED_SEARCH_ENGINES . find ( ( e ) => e . label == searchEngine ) }
191+ isMulti = { false }
192+ isClearable = { false }
193+ isSearchable = { false }
194+ classNamePrefix = { 'hackertab' }
195+ onChange = { onSearchEngineSelectChange }
196+ />
197+ < p className = "settingHint" >
198+ Missing a search engine? create an issue{ ' ' }
199+ < a href = "#" onClick = { ( e ) => window . open ( APP . supportLink , '_blank' ) } >
200+ here
201+ </ a >
202+ </ p >
203+ </ div >
204+ </ div >
174205 </ div >
175206 < ToastContainer />
176207 </ ReactModal >
0 commit comments