import React, { Component } from 'react';
import { injectIntl, defineMessages } from 'react-intl';
import PropTypes from 'prop-types';
import Styled from './styles';
const propTypes = {
intl: PropTypes.shape({
formatMessage: PropTypes.func.isRequired,
}).isRequired,
isListenOnly: PropTypes.bool.isRequired,
isConnected: PropTypes.bool.isRequired,
audioErr: PropTypes.shape({
code: PropTypes.number,
message: PropTypes.string,
MIC_ERROR: PropTypes.shape({
NO_SSL: PropTypes.number,
MAC_OS_BLOCK: PropTypes.number,
NO_PERMISSION: PropTypes.number,
}),
}).isRequired,
handleBack: PropTypes.func.isRequired,
handleRetryMic: PropTypes.func.isRequired,
handleJoinListenOnly: PropTypes.func.isRequired,
troubleshootingLink: PropTypes.string,
};
const defaultProps = {
troubleshootingLink: '',
};
const intlMessages = defineMessages({
helpSubtitleMic: {
id: 'app.audioModal.helpSubtitleMic',
description: 'Text description for the audio help subtitle (microphones)',
},
helpSubtitlePermission: {
id: 'app.audioModal.helpSubtitlePermission',
description: 'Text description for the audio help subtitle (permission)',
},
helpSubtitleGeneric: {
id: 'app.audioModal.helpSubtitleGeneric',
description: 'Text description for the audio help subtitle (generic)',
},
helpPermissionStep1: {
id: 'app.audioModal.helpPermissionStep1',
description: 'Text description for the audio permission help step 1',
},
helpPermissionStep2: {
id: 'app.audioModal.helpPermissionStep2',
description: 'Text description for the audio permission help step 2',
},
helpPermissionStep3: {
id: 'app.audioModal.helpPermissionStep3',
description: 'Text description for the audio permission help step 3',
},
backLabel: {
id: 'app.audio.backLabel',
description: 'audio settings back button label',
},
retryMicLabel: {
id: 'app.audio.audioSettings.retryMicLabel',
description: 'audio settings retry button label',
},
listenOnlyLabel: {
id: 'app.audioModal.listenOnlyLabel',
description: 'audio settings listen only button label',
},
noSSL: {
id: 'app.audioModal.help.noSSL',
description: 'Text description for domain not using https',
},
macNotAllowed: {
id: 'app.audioModal.help.macNotAllowed',
description: 'Text description for mac needed to enable OS setting',
},
helpTroubleshoot: {
id: 'app.audioModal.help.troubleshoot',
description: 'Text description for help troubleshoot',
},
unknownError: {
id: 'app.audioModal.help.unknownError',
description: 'Text description for unknown error',
},
errorCode: {
id: 'app.audioModal.help.errorCode',
description: 'Text description for error code',
},
});
class Help extends Component {
getSubtitle() {
const { audioErr, intl, isListenOnly } = this.props;
const { MIC_ERROR } = audioErr;
if (audioErr.code === MIC_ERROR.NO_PERMISSION) {
return intl.formatMessage(intlMessages.helpSubtitlePermission);
}
return !isListenOnly
? intl.formatMessage(intlMessages.helpSubtitleMic)
: intl.formatMessage(intlMessages.helpSubtitleGeneric);
}
renderNoSSL() {
const { intl } = this.props;
return (
{intl.formatMessage(intlMessages.noSSL)}
);
}
renderMacNotAllowed() {
const { intl } = this.props;
return (
{intl.formatMessage(intlMessages.macNotAllowed)}
);
}
renderPermissionHelp() {
const { intl } = this.props;
return (
<>
{this.getSubtitle()}
{intl.formatMessage(intlMessages.helpPermissionStep1)}
{intl.formatMessage(intlMessages.helpPermissionStep2)}
{intl.formatMessage(intlMessages.helpPermissionStep3)}
>
);
}
renderGenericErrorHelp() {
const { intl, audioErr } = this.props;
const { code, message } = audioErr;
return (
<>
{this.getSubtitle()}
{intl.formatMessage(intlMessages.unknownError)}
{intl.formatMessage(intlMessages.errorCode, { 0: code, 1: message || 'UnknownError' })}
>
);
}
renderHelpMessage() {
const { audioErr } = this.props;
const { MIC_ERROR } = audioErr;
switch (audioErr.code) {
case MIC_ERROR.NO_SSL:
return this.renderNoSSL();
case MIC_ERROR.MAC_OS_BLOCK:
return this.renderMacNotAllowed();
case MIC_ERROR.NO_PERMISSION:
return this.renderPermissionHelp();
default:
return this.renderGenericErrorHelp();
}
}
render() {
const {
intl,
isConnected,
handleBack,
handleRetryMic,
handleJoinListenOnly,
troubleshootingLink,
} = this.props;
return (
{this.renderHelpMessage()}
{ troubleshootingLink && (
{intl.formatMessage(intlMessages.helpTroubleshoot)}
)}
{!isConnected ? (
) : (
)}
);
}
}
Help.propTypes = propTypes;
Help.defaultProps = defaultProps;
export default injectIntl(Help);