-
-
Notifications
You must be signed in to change notification settings - Fork 135
/
Copy pathSubLanguageSelector.tsx
103 lines (94 loc) · 2.94 KB
/
SubLanguageSelector.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import { useNavigate } from "react-router-dom";
import { useAppContext } from "@contexts/AppContext";
import { LanguageType } from "@types";
import { configureUserSelection } from "@utils/configureUserSelection";
import { defaultSlugifiedSubLanguageName } from "@utils/consts";
import { slugify } from "@utils/slugify";
type SubLanguageSelectorProps = {
opened: boolean;
parentLanguage: LanguageType;
onDropdownToggle: (_: LanguageType["name"]) => void;
handleParentSelect: (_: LanguageType) => void;
afterSelect: () => void;
};
const SubLanguageSelector = ({
opened,
parentLanguage,
handleParentSelect,
afterSelect,
onDropdownToggle,
}: SubLanguageSelectorProps) => {
const navigate = useNavigate();
const { language, subLanguage, setSearchText } = useAppContext();
const handleSubLanguageSelect =
(selected: LanguageType["subLanguages"][number]) => async () => {
const {
language: newLanguage,
subLanguage: newSubLanguage,
category: newCategory,
} = await configureUserSelection({
languageName: parentLanguage.name,
subLanguageName: selected.name,
});
setSearchText("");
navigate(
`/${slugify(newLanguage.name)}/${slugify(newSubLanguage)}/${slugify(newCategory)}`
);
afterSelect();
};
return (
<>
<li
role="option"
tabIndex={0}
className={`selector__item ${
subLanguage === defaultSlugifiedSubLanguageName &&
language.name === parentLanguage.name
? "selected"
: ""
}`}
aria-selected={
subLanguage === defaultSlugifiedSubLanguageName &&
language.name === parentLanguage.name
}
onClick={() => handleParentSelect(parentLanguage)}
>
<label>
<img src={parentLanguage.icon} alt={parentLanguage.name} />
<span>{parentLanguage.name}</span>
<button
className="sublanguage__button"
tabIndex={-1}
aria-expanded={opened}
aria-haspopup="listbox"
onClick={(e) => {
e.stopPropagation();
onDropdownToggle(parentLanguage.name);
}}
>
<span className="sublanguage__arrow" />
</button>
</label>
</li>
{parentLanguage.subLanguages.map((sl) => (
<li
key={sl.name}
role="option"
tabIndex={opened ? 0 : -1}
aria-disabled={!opened}
className={`selector__item sublanguage__item ${opened ? "" : "hidden"} ${
slugify(subLanguage) === slugify(sl.name) ? "selected" : ""
}`}
aria-selected={slugify(subLanguage) === slugify(sl.name)}
onClick={handleSubLanguageSelect(sl)}
>
<label>
<img src={sl.icon} alt={sl.name} />
<span>{sl.name}</span>
</label>
</li>
))}
</>
);
};
export default SubLanguageSelector;