From 58358ddd7cd0152bf16a7326e1d595524fb51246 Mon Sep 17 00:00:00 2001
From: Christopher Speller <crspeller@gmail.com>
Date: Tue, 8 Dec 2015 13:38:43 -0500
Subject: Some refactoring

---
 web/react/components/login_email.jsx | 137 +++++++++++++++++++++++++++++++++++
 1 file changed, 137 insertions(+)
 create mode 100644 web/react/components/login_email.jsx

(limited to 'web/react/components/login_email.jsx')

diff --git a/web/react/components/login_email.jsx b/web/react/components/login_email.jsx
new file mode 100644
index 000000000..cfe34d1c7
--- /dev/null
+++ b/web/react/components/login_email.jsx
@@ -0,0 +1,137 @@
+// 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 UserStore from '../stores/user_store.jsx';
+
+export default class LoginEmail extends React.Component {
+    constructor(props) {
+        super(props);
+
+        this.handleSubmit = this.handleSubmit.bind(this);
+
+        this.state = {
+            serverError: ''
+        };
+    }
+    handleSubmit(e) {
+        e.preventDefault();
+        var state = {};
+
+        const name = this.props.teamName;
+        if (!name) {
+            state.serverError = 'Bad team name';
+            this.setState(state);
+            return;
+        }
+
+        const email = this.refs.email.value.trim();
+        if (!email) {
+            state.serverError = 'An email is required';
+            this.setState(state);
+            return;
+        }
+
+        const password = this.refs.password.value.trim();
+        if (!password) {
+            state.serverError = 'A password is required';
+            this.setState(state);
+            return;
+        }
+
+        state.serverError = '';
+        this.setState(state);
+
+        Client.loginByEmail(name, email, password,
+            () => {
+                UserStore.setLastEmail(email);
+
+                const redirect = Utils.getUrlParameter('redirect');
+                if (redirect) {
+                    window.location.href = decodeURIComponent(redirect);
+                } else {
+                    window.location.href = '/' + name + '/channels/town-square';
+                }
+            },
+            (err) => {
+                if (err.message === 'Login failed because email address has not been verified') {
+                    window.location.href = '/verify_email?teamname=' + encodeURIComponent(name) + '&email=' + encodeURIComponent(email);
+                    return;
+                }
+                state.serverError = err.message;
+                this.valid = false;
+                this.setState(state);
+            }
+        );
+    }
+    render() {
+        let serverError;
+        let errorClass = '';
+        if (this.state.serverError) {
+            serverError = <label className='control-label'>{this.state.serverError}</label>;
+            errorClass = ' has-error';
+        }
+
+        let priorEmail = UserStore.getLastEmail();
+        let focusEmail = false;
+        let focusPassword = false;
+        if (priorEmail === '') {
+            focusEmail = true;
+        } else {
+            focusPassword = true;
+        }
+
+        const emailParam = Utils.getUrlParameter('email');
+        if (emailParam) {
+            priorEmail = decodeURIComponent(emailParam);
+        }
+
+        return (
+            <form onSubmit={this.handleSubmit}>
+                <div className='signup__email-container'>
+                    <div className={'form-group' + errorClass}>
+                        {serverError}
+                    </div>
+                    <div className={'form-group' + errorClass}>
+                        <input
+                            autoFocus={focusEmail}
+                            type='email'
+                            className='form-control'
+                            name='email'
+                            defaultValue={priorEmail}
+                            ref='email'
+                            placeholder='Email'
+                            spellCheck='false'
+                        />
+                    </div>
+                    <div className={'form-group' + errorClass}>
+                        <input
+                            autoFocus={focusPassword}
+                            type='password'
+                            className='form-control'
+                            name='password'
+                            ref='password'
+                            placeholder='Password'
+                            spellCheck='false'
+                        />
+                    </div>
+                    <div className='form-group'>
+                        <button
+                            type='submit'
+                            className='btn btn-primary'
+                        >
+                            {'Sign in'}
+                        </button>
+                    </div>
+                </div>
+            </form>
+        );
+    }
+}
+LoginEmail.defaultProps = {
+};
+
+LoginEmail.propTypes = {
+    teamName: React.PropTypes.string.isRequired
+};
-- 
cgit v1.2.3-1-g7c22

