@@ -4,19 +4,28 @@ import { useAppContext } from "@contexts/AppContext";
4
4
import { useKeyboardNavigation } from "@hooks/useKeyboardNavigation" ;
5
5
import { useLanguages } from "@hooks/useLanguages" ;
6
6
import { LanguageType } from "@types" ;
7
+
7
8
import SubLanguageSelector from "./SublanguageSelector" ;
8
9
9
10
// Inspired by https://blog.logrocket.com/creating-custom-select-dropdown-css/
10
11
11
12
const LanguageSelector = ( ) => {
12
13
const { language, setLanguage } = useAppContext ( ) ;
13
14
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
+ ) ,
20
29
[ fetchedLanguages ]
21
30
) ;
22
31
@@ -32,7 +41,7 @@ const LanguageSelector = () => {
32
41
const { focusedIndex, handleKeyDown, resetFocus, focusFirst } =
33
42
useKeyboardNavigation ( {
34
43
items : allLanguages ,
35
- isOpen,
44
+ isOpen,
36
45
openedLanguages,
37
46
onSelect : handleSelect ,
38
47
onClose : ( ) => setIsOpen ( false ) ,
@@ -53,7 +62,9 @@ const LanguageSelector = () => {
53
62
if ( open ) {
54
63
setOpenedLanguages ( ( prev ) => [ ...prev , openedLang ] ) ;
55
64
} else {
56
- setOpenedLanguages ( ( prev ) => prev . filter ( ( lang ) => lang . name !== openedLang . name ) ) ;
65
+ setOpenedLanguages ( ( prev ) =>
66
+ prev . filter ( ( lang ) => lang . name !== openedLang . name )
67
+ ) ;
57
68
}
58
69
} ;
59
70
@@ -109,9 +120,16 @@ const LanguageSelector = () => {
109
120
onKeyDown = { handleKeyDown }
110
121
tabIndex = { - 1 }
111
122
>
112
- { fetchedLanguages . map ( ( lang , index ) => (
123
+ { fetchedLanguages . map ( ( lang , index ) =>
113
124
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
+ />
115
133
) : (
116
134
< li
117
135
key = { lang . name }
@@ -129,7 +147,7 @@ const LanguageSelector = () => {
129
147
</ label >
130
148
</ li >
131
149
)
132
- ) ) }
150
+ ) }
133
151
</ ul >
134
152
) }
135
153
</ div >
0 commit comments