jiti-meet/react/features/deep-linking/components/DeepLinkingDesktopPage.web.tsx

160 lines
5.7 KiB
TypeScript
Raw Normal View History

import { Theme } from '@mui/material';
import React, { useCallback, useEffect } from 'react';
import { WithTranslation } from 'react-i18next';
import { useDispatch, useSelector } from 'react-redux';
import { makeStyles } from 'tss-react/mui';
import { createDeepLinkingPageEvent } from '../../analytics/AnalyticsEvents';
import { sendAnalytics } from '../../analytics/functions';
import { IReduxState } from '../../app/types';
import { IDeeplinkingConfig } from '../../base/config/configType';
import { getLegalUrls } from '../../base/config/functions.any';
import { isSupportedBrowser } from '../../base/environment/environment';
import { translate, translateToHTML } from '../../base/i18n/functions';
import { withPixelLineHeight } from '../../base/styles/functions.web';
import Button from '../../base/ui/components/web/Button';
import { BUTTON_TYPES } from '../../base/ui/constants.any';
import {
openDesktopApp,
openWebApp
} from '../actions';
import { _TNS } from '../constants';
const useStyles = makeStyles()((theme: Theme) => {
return {
container: {
background: '#1E1E1E',
alignItems: 'center',
justifyContent: 'center',
width: '100%',
height: '100%',
display: 'flex'
},
contentPane: {
display: 'flex',
flexDirection: 'column',
background: theme.palette.ui01,
border: `1px solid ${theme.palette.ui03}`,
padding: 40,
borderRadius: 16,
maxWidth: 410,
color: theme.palette.text01
},
logo: {
marginBottom: 32
},
launchingMeetingLabel: {
marginBottom: 16,
...withPixelLineHeight(theme.typography.heading4)
},
roomName: {
marginBottom: 32,
...withPixelLineHeight(theme.typography.heading5)
},
descriptionLabel: {
marginBottom: 32,
...withPixelLineHeight(theme.typography.bodyLongRegular)
},
buttonsContainer: {
display: 'flex',
justifyContent: 'flex-start',
'& > *:not(:last-child)': {
marginRight: 16
}
},
separator: {
marginTop: 40,
height: 1,
maxWidth: 390,
background: theme.palette.ui03
},
label: {
marginTop: 40,
...withPixelLineHeight(theme.typography.labelRegular),
color: theme.palette.text02,
'& a': {
color: theme.palette.link01
}
}
};
});
const DeepLinkingDesktopPage: React.FC<WithTranslation> = ({ t }) => {
const dispatch = useDispatch();
const room = useSelector((state: IReduxState) => decodeURIComponent(state['features/base/conference'].room || ''));
const deeplinkingCfg = useSelector((state: IReduxState) =>
state['features/base/config']?.deeplinking || {} as IDeeplinkingConfig);
const legalUrls = useSelector(getLegalUrls);
const { hideLogo, desktop } = deeplinkingCfg;
const { classes: styles } = useStyles();
const onLaunchWeb = useCallback(() => {
sendAnalytics(
createDeepLinkingPageEvent(
'clicked', 'launchWebButton', { isMobileBrowser: false }));
dispatch(openWebApp());
}, []);
const onTryAgain = useCallback(() => {
sendAnalytics(
createDeepLinkingPageEvent(
'clicked', 'tryAgainButton', { isMobileBrowser: false }));
dispatch(openDesktopApp());
}, []);
useEffect(() => {
sendAnalytics(
createDeepLinkingPageEvent(
'displayed', 'DeepLinkingDesktop', { isMobileBrowser: false }));
}, []);
return (
<div className = { styles.container }>
<div className = { styles.contentPane }>
<div className = 'header'>
{
!hideLogo
&& <img
alt = { t('welcomepage.logo.logoDeepLinking') }
className = { styles.logo }
src = 'images/logo-deep-linking.png' />
}
</div>
<div className = { styles.launchingMeetingLabel }>
{
t(`${_TNS}.titleNew`)
}
</div>
<div className = { styles.roomName }>{ room }</div>
<div className = { styles.descriptionLabel }>
{
isSupportedBrowser()
? translateToHTML(t, `${_TNS}.descriptionNew`, { app: desktop?.appName })
: t(`${_TNS}.descriptionWithoutWeb`, { app: desktop?.appName })
}
</div>
<div className = { styles.buttonsContainer }>
<Button
label = { t(`${_TNS}.tryAgainButton`) }
onClick = { onTryAgain } />
{ isSupportedBrowser() && (
<Button
label = { t(`${_TNS}.launchWebButton`) }
onClick = { onLaunchWeb }
type = { BUTTON_TYPES.SECONDARY } />
)}
</div>
<div className = { styles.separator } />
<div className = { styles.label }> {translateToHTML(t, 'deepLinking.termsAndConditions', {
termsAndConditionsLink: legalUrls.terms
})}
</div>
</div>
</div>
);
};
export default translate(DeepLinkingDesktopPage);