@@ -37,12 +37,10 @@ const SearchIcon = ({ color = '#2BA89C', onClick }) => (
3737 </ button >
3838) ;
3939
40- const SearchBar = ( { initialQuery = '' , showTabs = true , initialMode = 'keyword' , initialSearchType = 'symptom' } ) => {
40+ const SearchBar = ( { initialQuery = '' , showTabs = true , initialMode = 'keyword' , initialType = 'symptom' } ) => {
4141 const router = useRouter ( ) ;
42- const searchParams = useSearchParams ( ) ;
4342 const [ searchMode , setSearchMode ] = useState ( initialMode ) ;
44- const urlType = searchParams . get ( 'type' ) ;
45- const [ searchType , setSearchType ] = useState ( urlType || initialSearchType ) ;
43+ const [ searchType , setSearchType ] = useState ( initialType ) ;
4644 const [ searchQuery , setSearchQuery ] = useState ( initialQuery ) ;
4745 const [ isDropdownOpen , setIsDropdownOpen ] = useState ( false ) ;
4846 const [ suggestions , setSuggestions ] = useState ( [ ] ) ;
@@ -96,7 +94,7 @@ const updateCache = (prevCache, key, value) => {
9694 try {
9795 setIsLoading ( true ) ;
9896
99- const url = `/api/api/ drugs/autocomplete/${ type } ?q=${ encodeURIComponent ( query ) } ` ;
97+ const url = `/api/drugs/autocomplete/${ type } ?q=${ encodeURIComponent ( query ) } ` ;
10098
10199 console . log ( '자동완성 요청 URL:' , url ) ;
102100
@@ -110,7 +108,7 @@ const updateCache = (prevCache, key, value) => {
110108 console . log ( '자동완성 응답:' , response ) ;
111109
112110 if ( ! response . ok ) {
113- throw new Error ( '자동완성 데이터를 가져오는데 실패했습니다.' ) ;
111+ throw new Error ( response . message ) ;
114112 }
115113
116114 const data = await response . json ( ) ;
@@ -132,6 +130,7 @@ const updateCache = (prevCache, key, value) => {
132130 }
133131 } ;
134132
133+ // 자동완성 결과 업데이트
135134 useEffect ( ( ) => {
136135 if ( ! isFocused ) {
137136 setSuggestions ( [ ] ) ;
@@ -176,17 +175,17 @@ const updateCache = (prevCache, key, value) => {
176175 } ;
177176
178177 // 최근 검색어 저장 함수
179- const saveRecentSearch = ( query , type , mode ) => {
178+ const saveRecentSearch = ( query , mode , type ) => {
180179 try {
181180 const savedSearches = sessionStorage . getItem ( 'recentSearches' ) ;
182181 const searches = savedSearches ? JSON . parse ( savedSearches ) : [ ] ;
183182
184183 const newSearch = {
185184 query : query . trim ( ) ,
186- type : type ,
187- mode : mode
185+ mode : mode ,
186+ type : type
188187 } ;
189-
188+
190189 const filteredSearches = searches . filter ( item => item . query !== newSearch . query ) ;
191190 const updatedSearches = [ newSearch , ...filteredSearches ] . slice ( 0 , 5 ) ;
192191
@@ -196,31 +195,33 @@ const updateCache = (prevCache, key, value) => {
196195 }
197196 } ;
198197
198+ // 검색 모드(키워드,자연어) 감지하여 모드별 검색 결과창 라우팅
199199 const handleSearch = ( e ) => {
200200 e . preventDefault ( ) ;
201201 if ( ! searchQuery . trim ( ) ) return ;
202202
203203 if ( searchMode === 'keyword' ) {
204204 switch ( searchType ) {
205205 case 'symptom' :
206- saveRecentSearch ( searchQuery , searchType , searchMode ) ;
207- router . push ( `/search/symptom?q=${ encodeURIComponent ( searchQuery ) } &mode=${ searchMode } ` ) ;
206+ saveRecentSearch ( searchQuery , searchMode , searchType ) ;
207+ router . push ( `/search/symptom?q=${ encodeURIComponent ( searchQuery ) } &mode=${ searchMode } &type= ${ searchType } ` ) ;
208208 break ;
209209 case 'company' :
210210 // 추후 구현
211211 break ;
212212 case 'name' :
213- saveRecentSearch ( searchQuery , searchType , searchMode ) ;
214- router . push ( `/search/name?q=${ encodeURIComponent ( searchQuery ) } &mode=${ searchMode } ` ) ;
213+ saveRecentSearch ( searchQuery , searchMode , searchType ) ;
214+ router . push ( `/search/name?q=${ encodeURIComponent ( searchQuery ) } &mode=${ searchMode } &type= ${ searchType } ` ) ;
215215 break ;
216216 }
217217 } else {
218218 // 자연어 검색 처리
219- saveRecentSearch ( searchQuery , 'natural' , searchMode ) ;
220- router . push ( `/search?q=${ encodeURIComponent ( searchQuery ) } &mode=${ searchMode } ` ) ;
219+ saveRecentSearch ( searchQuery , searchMode , 'natural' ) ;
220+ router . push ( `/search?q=${ encodeURIComponent ( searchQuery ) } &mode=${ searchMode } &type=natural ` ) ;
221221 }
222222 } ;
223223
224+
224225 const handleInputChange = ( e ) => {
225226 const value = e . target . value ;
226227 if ( searchMode === 'natural' && value . length > 20 ) {
@@ -230,6 +231,7 @@ const updateCache = (prevCache, key, value) => {
230231 setSelectedSuggestion ( - 1 ) ;
231232 } ;
232233
234+
233235 const handleKeyDown = ( e ) => {
234236 if ( searchMode === 'natural' && e . key === 'Enter' ) {
235237 e . preventDefault ( ) ;
@@ -253,8 +255,8 @@ const updateCache = (prevCache, key, value) => {
253255 case 'Enter' :
254256 e . preventDefault ( ) ;
255257 if ( selectedSuggestion >= 0 ) {
256- setSearchQuery ( suggestions [ selectedSuggestion ] . text ) ;
257- setSuggestions ( [ ] ) ;
258+ const selectedItem = suggestions [ selectedSuggestion ] ;
259+ handleSuggestionClick ( selectedItem ) ;
258260 } else {
259261 handleSearch ( e ) ;
260262 }
@@ -284,7 +286,7 @@ const updateCache = (prevCache, key, value) => {
284286 const handleSuggestionClick = ( suggestion ) => {
285287 setSearchQuery ( suggestion . text ) ;
286288 setSuggestions ( [ ] ) ;
287- saveRecentSearch ( suggestion . text , searchType , 'keyword' ) ;
289+ saveRecentSearch ( suggestion . text , 'keyword' , searchType ) ;
288290 switch ( searchType ) {
289291 case 'symptom' :
290292 router . push ( `/search/symptom?q=${ encodeURIComponent ( suggestion . text ) } &mode=keyword&type=${ searchType } ` ) ;
@@ -423,7 +425,7 @@ const updateCache = (prevCache, key, value) => {
423425 } ${ type === 'name' ? 'rounded-b-lg' : '' } ${
424426 type === 'symptom' ? 'rounded-t-lg' : ''
425427 } `}
426- >
428+ >
427429 { label }
428430 </ button >
429431 ) ) }
0 commit comments