1- import React , { useContext , useMemo } from 'react' ;
1+ import React , { useContext } from 'react' ;
22import { MenuListItemType } from '../ContextMenu' ;
33import DropdownWithIcon from '../Dropdown/WithIcon' ;
44import { LocaleContext } from '../../context/localeContext' ;
5+ import { LocaleType } from '../../types/general' ;
56
6- const localesMap = {
7+ const localesMap : Record < LocaleType , { name : string ; icon : string } > = {
78 en : { name : 'English' , icon : '🇬🇧' } ,
89 ja : { name : '日本' , icon : '🇯🇵' } ,
910 zhCN : { name : '简体中文' , icon : '🇨🇳' } ,
@@ -14,32 +15,14 @@ const LanguageSelector = () => {
1415
1516 return (
1617 < DropdownWithIcon
17- items = { [
18- {
19- text : localesMap . en . name ,
20- icon : < span > { localesMap . en . icon } </ span > ,
21- type : MenuListItemType . DEFAULT ,
22- onClick : ( ) => {
23- setLocale ( 'en' ) ;
24- } ,
18+ items = { Object . entries ( localesMap ) . map ( ( [ key , value ] ) => ( {
19+ text : value . name ,
20+ icon : < span > { value . icon } </ span > ,
21+ type : MenuListItemType . DEFAULT ,
22+ onClick : ( ) => {
23+ setLocale ( key as LocaleType ) ;
2524 } ,
26- {
27- text : localesMap . ja . name ,
28- icon : < span > { localesMap . ja . icon } </ span > ,
29- type : MenuListItemType . DEFAULT ,
30- onClick : ( ) => {
31- setLocale ( 'ja' ) ;
32- } ,
33- } ,
34- {
35- text : localesMap . zhCN . name ,
36- icon : < span > { localesMap . zhCN . icon } </ span > ,
37- type : MenuListItemType . DEFAULT ,
38- onClick : ( ) => {
39- setLocale ( 'zhCN' ) ;
40- } ,
41- } ,
42- ] }
25+ } ) ) }
4326 icon = {
4427 < div className = "flex items-center gap-2" >
4528 < span > { localesMap [ locale ] ?. icon } </ span >
0 commit comments