summaryrefslogtreecommitdiffstats
path: root/web/react/components/find_team.jsx
blob: 3ff9787adeb52dc63a638b06105f96552e037e02 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.

import * as utils from '../utils/utils.jsx';
import * as client from '../utils/client.jsx';

import {injectIntl, intlShape, defineMessages, FormattedMessage} from 'mm-intl';

var holders = defineMessages({
    submitError: {
        id: 'find_team.submitError',
        defaultMessage: 'Please enter a valid email address'
    },
    placeholder: {
        id: 'find_team.placeholder',
        defaultMessage: 'you@domain.com'
    }
});

class FindTeam extends React.Component {
    constructor(props) {
        super(props);
        this.state = {};

        this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleSubmit(e) {
        e.preventDefault();

        var state = { };

        var email = ReactDOM.findDOMNode(this.refs.email).value.trim().toLowerCase();
        if (!email || !utils.isEmail(email)) {
            state.email_error = this.props.intl.formatMessage(holders.submitError);
            this.setState(state);
            return;
        }

        state.email_error = '';

        client.findTeamsSendEmail(email,
            function success() {
                state.sent = true;
                this.setState(state);
            }.bind(this),
            function fail(err) {
                state.email_error = err.message;
                this.setState(state);
            }.bind(this)
        );
    }

    render() {
        var emailError = null;
        var emailErrorClass = 'form-group';

        if (this.state.email_error) {
            emailError = <label className='control-label'>{this.state.email_error}</label>;
            emailErrorClass = 'form-group has-error';
        }

        if (this.state.sent) {
            return (
                <div>
                    <h4>
                        <FormattedMessage
                            id='find_team.findTitle'
                            defaultMessage='Find Your Team'
                        />
                    </h4>
                    <p>
                        <FormattedMessage
                            id='find_team.findDescription'
                            defaultMessage='An email was sent with links to any teams to which you are a member.'
                        />
                    </p>
                </div>
            );
        }

        return (
        <div>
                <h4>
                    <FormattedMessage
                        id='find_team.findTitle'
                        defaultMessage='Find Your Team'
                    />
                </h4>
                <form onSubmit={this.handleSubmit}>
                    <p>
                        <FormattedMessage
                            id='find_team.getLinks'
                            defaultMessage='Get an email with links to any teams to which you are a member.'
                        />
                    </p>
                    <div className='form-group'>
                        <label className='control-label'>
                            <FormattedMessage
                                id='find_team.email'
                                defaultMessage='Email'
                            />
                        </label>
                        <div className={emailErrorClass}>
                            <input
                                type='text'
                                ref='email'
                                className='form-control'
                                placeholder={this.props.intl.formatMessage(holders.placeholder)}
                                maxLength='128'
                                spellCheck='false'
                            />
                            {emailError}
                        </div>
                    </div>
                    <button
                        className='btn btn-md btn-primary'
                        type='submit'
                    >
                        <FormattedMessage
                            id='find_team.send'
                            defaultMessage='Send'
                        />
                    </button>
                </form>
                </div>
        );
    }
}

FindTeam.propTypes = {
    intl: intlShape.isRequired
};

export default injectIntl(FindTeam);