Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

LanguageListItem.web.tsx 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import { Theme } from '@mui/material';
  2. import React, { useCallback } from 'react';
  3. import { WithTranslation } from 'react-i18next';
  4. import { makeStyles } from 'tss-react/mui';
  5. import { translate } from '../../base/i18n/functions';
  6. import Icon from '../../base/icons/components/Icon';
  7. import { IconCheck } from '../../base/icons/svg';
  8. interface ILanguageListItemProps extends WithTranslation {
  9. /**
  10. * Whether or not the button should be full width.
  11. */
  12. lang: string;
  13. /**
  14. * Click callback.
  15. */
  16. onLanguageSelected: (lang: string) => void;
  17. /**
  18. * The id of the button.
  19. */
  20. selected?: boolean;
  21. }
  22. const useStyles = makeStyles()((theme: Theme) => {
  23. return {
  24. itemContainer: {
  25. display: 'flex',
  26. color: theme.palette.text02,
  27. alignItems: 'center',
  28. fontSize: '14px',
  29. cursor: 'pointer',
  30. padding: '5px 0',
  31. '&:hover': {
  32. backgroundColor: theme.palette.ui04
  33. }
  34. },
  35. iconWrapper: {
  36. margin: '4px 10px',
  37. width: '22px',
  38. height: '22px'
  39. },
  40. activeItemContainer: {
  41. fontWeight: 700
  42. }
  43. };
  44. });
  45. /**
  46. * Component that renders the language list item.
  47. *
  48. * @returns {React$Element<any>}
  49. */
  50. const LanguageListItem = ({
  51. t,
  52. lang,
  53. selected,
  54. onLanguageSelected
  55. }: ILanguageListItemProps) => {
  56. const { classes: styles } = useStyles();
  57. const onLanguageSelectedWrapper = useCallback(() => onLanguageSelected(lang), [ lang ]);
  58. return (
  59. <div
  60. className = { `${styles.itemContainer} ${selected ? styles.activeItemContainer : ''}` }
  61. onClick = { onLanguageSelectedWrapper }>
  62. <span className = { styles.iconWrapper }>{ selected
  63. && <Icon src = { IconCheck } /> }</span>
  64. { t(lang) }
  65. </div>
  66. );
  67. };
  68. export default translate(LanguageListItem);