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.

LanguageSelectorDialog.tsx 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import i18next from 'i18next';
  2. import React, { useCallback } from 'react';
  3. import { makeStyles } from 'tss-react/mui';
  4. import { translate, translateToHTML } from '../../../base/i18n/functions';
  5. import Dialog from '../../../base/ui/components/web/Dialog';
  6. import { openSettingsDialog } from '../../../settings/actions.web';
  7. import { SETTINGS_TABS } from '../../../settings/constants';
  8. import { toggleLanguageSelectorDialog } from '../../actions.web';
  9. import AbstractLanguageSelectorDialog, {
  10. IAbstractLanguageSelectorDialogProps
  11. } from '../AbstractLanguageSelectorDialog';
  12. import LanguageList from './LanguageList';
  13. const useStyles = makeStyles()(theme => {
  14. return {
  15. paragraphWrapper: {
  16. fontSize: 14,
  17. margin: '10px 0px',
  18. color: theme.palette.text01
  19. },
  20. spanWrapper: {
  21. fontWeight: 700,
  22. cursor: 'pointer',
  23. color: theme.palette.link01,
  24. '&:hover': {
  25. backgroundColor: theme.palette.ui04,
  26. color: theme.palette.link01Hover
  27. }
  28. }
  29. };
  30. });
  31. const LanguageSelectorDialog = (props: IAbstractLanguageSelectorDialogProps) => {
  32. const { dispatch, language, listItems, onLanguageSelected, subtitles, t } = props;
  33. const { classes: styles } = useStyles();
  34. const onSelected = useCallback((e: string) => {
  35. onLanguageSelected(e);
  36. dispatch(toggleLanguageSelectorDialog());
  37. }, [ language ]);
  38. const onSourceLanguageClick = useCallback(() => {
  39. dispatch(openSettingsDialog(SETTINGS_TABS.MORE, false));
  40. }, []);
  41. return (
  42. <Dialog
  43. cancel = {{ hidden: true }}
  44. ok = {{ hidden: true }}
  45. titleKey = 'transcribing.subtitles'>
  46. <p className = { styles.paragraphWrapper } >
  47. {
  48. translateToHTML(t, 'transcribing.sourceLanguageDesc', {
  49. 'sourceLanguage': t(`languages:${i18next.language}`).toLowerCase()
  50. })
  51. }<span
  52. className = { styles.spanWrapper }
  53. onClick = { onSourceLanguageClick }>{t('transcribing.sourceLanguageHere')}.</span>
  54. </p>
  55. <LanguageList
  56. items = { listItems }
  57. onLanguageSelected = { onSelected }
  58. selectedLanguage = { subtitles } />
  59. </Dialog>
  60. );
  61. };
  62. /*
  63. * We apply AbstractLanguageSelector to fill in the AbstractProps common
  64. * to both the web and native implementations.
  65. */
  66. // eslint-disable-next-line new-cap
  67. export default translate(AbstractLanguageSelectorDialog(LanguageSelectorDialog));