You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LanguageListItem.tsx 1.9KB

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