@@ -4,19 +4,28 @@ import { useAppContext } from "@contexts/AppContext";
44import { useKeyboardNavigation } from "@hooks/useKeyboardNavigation" ;
55import { useLanguages } from "@hooks/useLanguages" ;
66import { LanguageType } from "@types" ;
7+
78import SubLanguageSelector from "./SublanguageSelector" ;
89
910// Inspired by https://blog.logrocket.com/creating-custom-select-dropdown-css/
1011
1112const LanguageSelector = ( ) => {
1213 const { language, setLanguage } = useAppContext ( ) ;
1314 const { fetchedLanguages, loading, error } = useLanguages ( ) ;
14- const allLanguages = useMemo ( ( ) =>
15- fetchedLanguages . flatMap ( ( lang ) =>
16- lang . subLanguages . length > 0
17- ? [ lang , ...lang . subLanguages . map ( ( subLang ) => ( { ...subLang , mainLanguage : lang , subLanguages : [ ] } ) ) ]
18- : [ lang ]
19- ) ,
15+ const allLanguages = useMemo (
16+ ( ) =>
17+ fetchedLanguages . flatMap ( ( lang ) =>
18+ lang . subLanguages . length > 0
19+ ? [
20+ lang ,
21+ ...lang . subLanguages . map ( ( subLang ) => ( {
22+ ...subLang ,
23+ mainLanguage : lang ,
24+ subLanguages : [ ] ,
25+ } ) ) ,
26+ ]
27+ : [ lang ]
28+ ) ,
2029 [ fetchedLanguages ]
2130 ) ;
2231
@@ -32,7 +41,7 @@ const LanguageSelector = () => {
3241 const { focusedIndex, handleKeyDown, resetFocus, focusFirst } =
3342 useKeyboardNavigation ( {
3443 items : allLanguages ,
35- isOpen,
44+ isOpen,
3645 openedLanguages,
3746 onSelect : handleSelect ,
3847 onClose : ( ) => setIsOpen ( false ) ,
@@ -53,7 +62,9 @@ const LanguageSelector = () => {
5362 if ( open ) {
5463 setOpenedLanguages ( ( prev ) => [ ...prev , openedLang ] ) ;
5564 } else {
56- setOpenedLanguages ( ( prev ) => prev . filter ( ( lang ) => lang . name !== openedLang . name ) ) ;
65+ setOpenedLanguages ( ( prev ) =>
66+ prev . filter ( ( lang ) => lang . name !== openedLang . name )
67+ ) ;
5768 }
5869 } ;
5970
@@ -109,9 +120,16 @@ const LanguageSelector = () => {
109120 onKeyDown = { handleKeyDown }
110121 tabIndex = { - 1 }
111122 >
112- { fetchedLanguages . map ( ( lang , index ) => (
123+ { fetchedLanguages . map ( ( lang , index ) =>
113124 lang . subLanguages . length > 0 ? (
114- < SubLanguageSelector key = { index } mainLanguage = { lang } afterSelect = { ( ) => { setIsOpen ( false ) } } onDropdownChange = { handleOpenedSublanguage } />
125+ < SubLanguageSelector
126+ key = { index }
127+ mainLanguage = { lang }
128+ afterSelect = { ( ) => {
129+ setIsOpen ( false ) ;
130+ } }
131+ onDropdownChange = { handleOpenedSublanguage }
132+ />
115133 ) : (
116134 < li
117135 key = { lang . name }
@@ -129,7 +147,7 @@ const LanguageSelector = () => {
129147 </ label >
130148 </ li >
131149 )
132- ) ) }
150+ ) }
133151 </ ul >
134152 ) }
135153 </ div >
0 commit comments