Skip to content
Snippets Groups Projects
HelpButton.js 2.65 KiB
Newer Older
// @flow

import Droplist, { Item, Group } from '@atlaskit/droplist';
import HelpIcon from '@atlaskit/icon/glyph/question-circle';

import React, { Component } from 'react';

import config from '../../config';
import { openExternalLink } from '../../utils';

type State = {

    /**
     * Whether the droplist is open or not.
     */
    droplistOpen: boolean
};

/**
 * Help button for Navigation Bar.
export default class HelpButton extends Component< *, State> {
    /**
     * Initializes a new {@code HelpAction} instance.
     *
     * @inheritdoc
     */
    constructor() {
        super();

        this.state = {
            droplistOpen: false
        };

        this._onIconClick = this._onIconClick.bind(this);
        this._onPrivacyOptionClick = this._onPrivacyOptionClick.bind(this);
        this._onTermsOptionClick = this._onTermsOptionClick.bind(this);
        this._onSendFeedback = this._onSendFeedback.bind(this);
    _onIconClick: (*) => void;

    /**
     * Toggles the droplist.
     *
     * @returns {void}
    _onIconClick() {
        this.setState({
            droplistOpen: !this.state.droplistOpen
        });
    }

    _onPrivacyOptionClick: (*) => void;

    /**
     * Opens Privacy Policy Page in default browser.
     *
     * @returns {void}
    _onPrivacyOptionClick() {
        openExternalLink(config.privacyPolicyURL);
    }

    _onTermsOptionClick: (*) => void;

    /**
     * Opens Terms and Conditions Page in default browser.
     *
     * @returns {void}
    _onTermsOptionClick() {
        openExternalLink(config.termsAndConditionsURL);
    }

    _onSendFeedback: (*) => void;

    /**
     * Opens Support/Feedback Email.
     *
     * @returns {void}
    _onSendFeedback() {
        openExternalLink(config.feedbackURL);
    }

    /**
     * Render function of component.
     *
     * @returns {ReactElement}
     */
    render() {
        return (
            <Droplist
                isOpen = { this.state.droplistOpen }
                onClick = { this._onIconClick }
                onOpenChange = { this._onIconClick }
                position = 'right bottom'
                trigger = { <HelpIcon /> }>
                <Group heading = 'Help'>
                    <Item onActivate = { this._onTermsOptionClick }>
                        Terms
                    </Item>
                    <Item onActivate = { this._onPrivacyOptionClick }>
                        Privacy
                    </Item>
                    <Item onActivate = { this._onSendFeedback }>
                        Send Feedback
                    </Item>
                </Group>