SelectLang.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { Select } from "antd";
  2. import { useIntl } from "react-intl";
  3. const { Option } = Select;
  4. const onLangChange = (value: string) => {
  5. console.log(`selected ${value}`);
  6. };
  7. const onLangSearch = (value: string) => {
  8. console.log("search:", value);
  9. };
  10. interface IWidgetSelectLang {
  11. lang?: string;
  12. }
  13. const SelectLangWidget = (prop: IWidgetSelectLang) => {
  14. const intl = useIntl();
  15. const data = [
  16. { value: "en", label: intl.formatMessage({ id: "languages.en-US" }) },
  17. {
  18. value: "zh-Hans",
  19. label: intl.formatMessage({ id: "languages.zh-Hans" }),
  20. },
  21. {
  22. value: "zh-Hant",
  23. label: intl.formatMessage({ id: "languages.zh-Hant" }),
  24. },
  25. {
  26. value: "zh",
  27. label: intl.formatMessage({ id: "languages.zh" }),
  28. },
  29. ];
  30. const langOptions = data.map((d, id) => (
  31. <Option key={id} value={d.value}>
  32. {d.label}
  33. </Option>
  34. ));
  35. return (
  36. <Select
  37. showSearch
  38. placeholder="Select a language"
  39. optionFilterProp="children"
  40. onChange={onLangChange}
  41. onSearch={onLangSearch}
  42. value={prop.lang ? prop.lang : ""}
  43. filterOption={(input, option) =>
  44. (option!.children as unknown as string)
  45. .toLowerCase()
  46. .includes(input.toLowerCase())
  47. }
  48. >
  49. {langOptions}
  50. </Select>
  51. );
  52. };
  53. export default SelectLangWidget;