jitsi-meet-electron/app/features/navbar/components/HelpButton.js

126 lines
3.3 KiB
JavaScript
Raw Normal View History

2018-06-08 10:51:58 +02:00
// @flow
2018-06-24 08:31:44 +02:00
import Droplist, { Item, Group } from '@atlaskit/droplist';
2018-06-08 10:51:58 +02:00
import HelpIcon from '@atlaskit/icon/glyph/question-circle';
import React, { Component } from 'react';
2020-06-26 13:05:42 +02:00
import { withTranslation } from 'react-i18next';
2018-06-08 10:51:58 +02:00
import config from '../../config';
import { openExternalLink } from '../../utils';
import { version } from '../../../../package.json';
2018-06-08 10:51:58 +02:00
type State = {
/**
* Whether the droplist is open or not.
*/
droplistOpen: boolean
};
/**
* Help button for Navigation Bar.
2018-06-08 10:51:58 +02:00
*/
2020-06-26 13:05:42 +02:00
class HelpButton extends Component<*, State> {
2018-06-08 10:51:58 +02:00
/**
2018-06-29 07:49:59 +02:00
* Initializes a new {@code HelpButton} instance.
2018-06-08 10:51:58 +02:00
*
* @inheritdoc
*/
constructor() {
super();
this.state = {
droplistOpen: false
};
2018-06-24 08:37:12 +02:00
this._onAboutClick = openExternalLink.bind(undefined, config.aboutURL);
2020-04-10 15:35:02 +02:00
this._onSourceClick = openExternalLink.bind(undefined, config.sourceURL);
2018-06-07 09:47:42 +02:00
this._onIconClick = this._onIconClick.bind(this);
2018-07-04 21:13:29 +02:00
this._onOpenChange = this._onOpenChange.bind(this);
2018-06-24 08:37:12 +02:00
this._onPrivacyClick
= openExternalLink.bind(undefined, config.privacyPolicyURL);
this._onTermsClick
= openExternalLink.bind(undefined, config.termsAndConditionsURL);
this._onSendFeedbackClick
= openExternalLink.bind(undefined, config.feedbackURL);
2018-06-08 10:51:58 +02:00
}
2018-06-24 08:37:12 +02:00
_onAboutClick: (*) => void;
2018-06-24 08:32:47 +02:00
2020-04-10 15:35:02 +02:00
_onSourceClick: (*) => void;
2018-06-07 09:47:42 +02:00
_onIconClick: (*) => void;
2018-06-08 10:51:58 +02:00
/**
* Toggles the droplist.
2018-06-07 09:47:42 +02:00
*
* @returns {void}
2018-06-08 10:51:58 +02:00
*/
2018-06-07 09:47:42 +02:00
_onIconClick() {
2018-06-08 10:51:58 +02:00
this.setState({
droplistOpen: !this.state.droplistOpen
});
}
2018-07-04 21:13:29 +02:00
_onOpenChange: (*) => void;
/**
* Closes droplist when clicked outside.
*
* @returns {void}
*/
_onOpenChange() {
this.setState({
droplistOpen: false
});
}
2018-06-24 08:37:12 +02:00
_onPrivacyClick: (*) => void;
2018-06-08 10:51:58 +02:00
2018-06-24 08:37:12 +02:00
_onTermsClick: (*) => void;
2018-06-08 10:51:58 +02:00
2018-06-24 08:37:12 +02:00
_onSendFeedbackClick: (*) => void;
2018-06-08 10:51:58 +02:00
/**
* Render function of component.
*
2018-06-07 09:47:42 +02:00
* @returns {ReactElement}
2018-06-08 10:51:58 +02:00
*/
render() {
2020-06-26 13:05:42 +02:00
const { t } = this.props;
2018-06-08 10:51:58 +02:00
return (
<Droplist
isOpen = { this.state.droplistOpen }
2018-06-07 09:47:42 +02:00
onClick = { this._onIconClick }
2018-07-04 21:13:29 +02:00
onOpenChange = { this._onOpenChange }
2018-06-08 10:51:58 +02:00
position = 'right bottom'
trigger = { <HelpIcon /> }>
2020-06-26 13:05:42 +02:00
<Group heading = { t('help') } >
2018-06-24 08:37:12 +02:00
<Item onActivate = { this._onTermsClick }>
2020-06-26 13:05:42 +02:00
{ t('termsLink') }
2018-06-24 08:31:44 +02:00
</Item>
2018-06-24 08:37:12 +02:00
<Item onActivate = { this._onPrivacyClick }>
2020-06-26 13:05:42 +02:00
{ t('privacyLink') }
2018-06-24 08:31:44 +02:00
</Item>
2018-06-24 08:37:12 +02:00
<Item onActivate = { this._onSendFeedbackClick }>
2020-06-26 13:05:42 +02:00
{ t('sendFeedbackLink') }
2018-06-24 08:31:44 +02:00
</Item>
2018-06-24 08:37:12 +02:00
<Item onActivate = { this._onAboutClick }>
2020-06-26 13:05:42 +02:00
{ t('aboutLink') }
2018-06-24 08:32:47 +02:00
</Item>
2020-04-10 15:35:02 +02:00
<Item onActivate = { this._onSourceClick }>
2020-06-26 13:05:42 +02:00
{ t('sourceLink') }
2020-04-10 15:35:02 +02:00
</Item>
<Item>
2020-06-26 13:05:42 +02:00
{ t('versionLabel', { version }) }
</Item>
2018-06-24 08:31:44 +02:00
</Group>
2018-06-08 10:51:58 +02:00
</Droplist>
);
}
}
2020-06-26 13:05:42 +02:00
export default withTranslation()(HelpButton);