22
33import SelectBox from '@/shared/components/select-box/SelectBox' ;
44import { Dispatch , SetStateAction , useEffect , useMemo } from 'react' ;
5- import { useRouter , useSearchParams , usePathname } from 'next/navigation' ;
5+ import { useSearchParams , usePathname , useRouter } from 'next/navigation' ;
66
77interface Props {
88 setAlcoholBaseTypes : Dispatch < SetStateAction < string [ ] > > ;
@@ -65,11 +65,22 @@ const SELECT_OPTIONS = [
6565] ;
6666
6767function Accordion ( { setAlcoholBaseTypes, setCocktailTypes, setAlcoholStrengths } : Props ) {
68- const router = useRouter ( ) ;
68+ const router = useRouter ( )
6969 const pathname = usePathname ( ) ;
7070 const searchParams = useSearchParams ( ) ;
7171
72- // 코드를 한글 라벨로 역변환하는 함수
72+ // url 파라미터에서 값을 가져와 POST를 도와줌
73+ useEffect ( ( ) => {
74+ const abv = searchParams . get ( 'abv' ) ;
75+ const base = searchParams . get ( 'base' ) ;
76+ const glass = searchParams . get ( 'glass' ) ;
77+
78+ setAlcoholStrengths ( abv ? [ abv ] : [ ] ) ;
79+ setAlcoholBaseTypes ( base ? [ base ] : [ ] ) ;
80+ setCocktailTypes ( glass ? [ glass ] : [ ] ) ;
81+ } , [ searchParams , setAlcoholStrengths , setAlcoholBaseTypes , setCocktailTypes ] ) ;
82+
83+ // 파라미터 값을 한글로 역 변환해주는 함수
7384 const getDisplayValue = ( id : string , code : string | null ) : string => {
7485 if ( ! code ) return '전체' ;
7586
@@ -81,7 +92,8 @@ function Accordion({ setAlcoholBaseTypes, setCocktailTypes, setAlcoholStrengths
8192 return entry ? entry [ 0 ] : '전체' ;
8293 } ;
8394
84- // URL 파라미터에서 현재 선택된 값 가져오기
95+
96+ // URL 파라미터에서 현재 선택된 값 가져오기 아코디언 UI에 적용
8597 const currentValues = useMemo ( ( ) => {
8698 return {
8799 abv : getDisplayValue ( 'abv' , searchParams . get ( 'abv' ) ) ,
@@ -90,21 +102,11 @@ function Accordion({ setAlcoholBaseTypes, setCocktailTypes, setAlcoholStrengths
90102 } ;
91103 } , [ searchParams ] ) ;
92104
93- // URL에서 상태 동기화
94- useEffect ( ( ) => {
95- const abv = searchParams . get ( 'abv' ) ;
96- const base = searchParams . get ( 'base' ) ;
97- const glass = searchParams . get ( 'glass' ) ;
98-
99- setAlcoholStrengths ( abv ? [ abv ] : [ ] ) ;
100- setAlcoholBaseTypes ( base ? [ base ] : [ ] ) ;
101- setCocktailTypes ( glass ? [ glass ] : [ ] ) ;
102- } , [ searchParams , setAlcoholStrengths , setAlcoholBaseTypes , setCocktailTypes ] ) ;
103-
104105 const handleSelect = ( id : string , value : string ) => {
105106 const optionGroup = SELECT_OPTIONS . find ( ( opt ) => opt . id === id ) ;
106107 if ( ! optionGroup ) return ;
107108
109+ // 선택한 옵션의 밸류를 전달
108110 const code = optionGroup . map [ value as keyof typeof optionGroup . map ] ?? null ;
109111 const arr = code ? [ code ] : [ ] ;
110112
@@ -131,7 +133,7 @@ function Accordion({ setAlcoholBaseTypes, setCocktailTypes, setAlcoholStrengths
131133 }
132134
133135 const queryString = params . toString ( ) ;
134- const newUrl = `${ pathname } ${ queryString ? `? ${ queryString } ` : '' } ` ;
136+ const newUrl = `${ pathname } ? ${ queryString } ` ;
135137
136138
137139 router . push ( newUrl )
0 commit comments