From 94049d1dd88150cd1714628464d3a8766f49e691 Mon Sep 17 00:00:00 2001
From: JoramWilander <jwawilander@gmail.com>
Date: Wed, 2 Sep 2015 08:32:09 -0400
Subject: Reformatted user_settings_appearance.jsx to meet style guide
 requirements.

---
 web/react/components/user_settings_appearance.jsx | 164 ++++++++++++++--------
 1 file changed, 109 insertions(+), 55 deletions(-)

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

diff --git a/web/react/components/user_settings_appearance.jsx b/web/react/components/user_settings_appearance.jsx
index ba2d97ea8..f9eed3b3e 100644
--- a/web/react/components/user_settings_appearance.jsx
+++ b/web/react/components/user_settings_appearance.jsx
@@ -4,100 +4,133 @@
 var UserStore = require('../stores/user_store.jsx');
 var SettingItemMin = require('./setting_item_min.jsx');
 var SettingItemMax = require('./setting_item_max.jsx');
-var client = require('../utils/client.jsx');
-var utils = require('../utils/utils.jsx');
+var Client = require('../utils/client.jsx');
+var Utils = require('../utils/utils.jsx');
 
-module.exports = React.createClass({
-    submitTheme: function(e) {
+export default class UserSettingsAppearance extends React.Component {
+    constructor(props) {
+        super(props);
+
+        this.submitTheme = this.submitTheme.bind(this);
+        this.updateTheme = this.updateTheme.bind(this);
+        this.handleClose = this.handleClose.bind(this);
+
+        this.state = this.getStateFromStores();
+    }
+    getStateFromStores() {
+        var user = UserStore.getCurrentUser();
+        var theme = '#2389d7';
+        if (config.ThemeColors != null) {
+            theme = config.ThemeColors[0];
+        }
+        if (user.props && user.props.theme) {
+            theme = user.props.theme;
+        }
+
+        return {theme: theme.toLowerCase()};
+    }
+    submitTheme(e) {
         e.preventDefault();
         var user = UserStore.getCurrentUser();
-        if (!user.props) user.props = {};
+        if (!user.props) {
+            user.props = {};
+        }
         user.props.theme = this.state.theme;
 
-        client.updateUser(user,
-            function(data) {
-                this.props.updateSection("");
+        Client.updateUser(user,
+            function success() {
+                this.props.updateSection('');
                 window.location.reload();
             }.bind(this),
-            function(err) {
-                state = this.getInitialState();
-                state.server_error = err;
+            function fail(err) {
+                var state = this.getStateFromStores();
+                state.serverError = err;
                 this.setState(state);
             }.bind(this)
         );
-    },
-    updateTheme: function(e) {
-        var hex = utils.rgb2hex(e.target.style.backgroundColor);
-        this.setState({ theme: hex.toLowerCase() });
-    },
-    handleClose: function() {
-        this.setState({server_error: null});
+    }
+    updateTheme(e) {
+        var hex = Utils.rgb2hex(e.target.style.backgroundColor);
+        this.setState({theme: hex.toLowerCase()});
+    }
+    handleClose() {
+        this.setState({serverError: null});
         this.props.updateTab('general');
-    },
-    componentDidMount: function() {
-        if (this.props.activeSection === "theme") {
+    }
+    componentDidMount() {
+        if (this.props.activeSection === 'theme') {
             $(this.refs[this.state.theme].getDOMNode()).addClass('active-border');
         }
         $('#user_settings').on('hidden.bs.modal', this.handleClose);
-    },
-    componentDidUpdate: function() {
-        if (this.props.activeSection === "theme") {
+    }
+    componentDidUpdate() {
+        if (this.props.activeSection === 'theme') {
             $('.color-btn').removeClass('active-border');
             $(this.refs[this.state.theme].getDOMNode()).addClass('active-border');
         }
-    },
-    componentWillUnmount: function() {
+    }
+    componentWillUnmount() {
         $('#user_settings').off('hidden.bs.modal', this.handleClose);
         this.props.updateSection('');
-    },
-    getInitialState: function() {
-        var user = UserStore.getCurrentUser();
-        var theme = config.ThemeColors != null ? config.ThemeColors[0] : "#2389d7";
-        if (user.props && user.props.theme) {
-            theme = user.props.theme;
+    }
+    render() {
+        var serverError;
+        if (this.state.serverError) {
+            serverError = this.state.serverError;
         }
-        return { theme: theme.toLowerCase() };
-    },
-    render: function() {
-        var server_error = this.state.server_error ? this.state.server_error : null;
-
 
         var themeSection;
         var self = this;
 
         if (config.ThemeColors != null) {
             if (this.props.activeSection === 'theme') {
-                var theme_buttons = [];
+                var themeButtons = [];
 
                 for (var i = 0; i < config.ThemeColors.length; i++) {
-                    theme_buttons.push(<button ref={config.ThemeColors[i]} type="button" className="btn btn-lg color-btn" style={{backgroundColor: config.ThemeColors[i]}} onClick={this.updateTheme} />);
+                    themeButtons.push(
+                        <button
+                            ref={config.ThemeColors[i]}
+                            type='button'
+                            className='btn btn-lg color-btn'
+                            style={{backgroundColor: config.ThemeColors[i]}}
+                            onClick={this.updateTheme}
+                        />
+                    );
                 }
 
                 var inputs = [];
 
                 inputs.push(
-                    <li className="setting-list-item">
-                        <div className="btn-group" data-toggle="buttons-radio">
-                            { theme_buttons }
+                    <li className='setting-list-item'>
+                        <div
+                            className='btn-group'
+                            data-toggle='buttons-radio'
+                        >
+                            {themeButtons}
                         </div>
                     </li>
                 );
 
                 themeSection = (
                     <SettingItemMax
-                        title="Theme Color"
+                        title='Theme Color'
                         inputs={inputs}
                         submit={this.submitTheme}
-                        server_error={server_error}
-                        updateSection={function(e){self.props.updateSection("");e.preventDefault;}}
+                        serverError={serverError}
+                        updateSection={function updateSection(e) {
+                            self.props.updateSection('');
+                            e.preventDefault();
+                        }}
                     />
                 );
             } else {
                 themeSection = (
                     <SettingItemMin
-                        title="Theme Color"
+                        title='Theme Color'
                         describe={this.state.theme}
-                        updateSection={function(){self.props.updateSection("theme");}}
+                        updateSection={function updateSection() {
+                            self.props.updateSection('theme');
+                        }}
                     />
                 );
             }
@@ -105,17 +138,38 @@ module.exports = React.createClass({
 
         return (
             <div>
-                <div className="modal-header">
-                    <button type="button" className="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
-                    <h4 className="modal-title" ref="title"><i className="modal-back"></i>Appearance Settings</h4>
+                <div className='modal-header'>
+                    <button
+                        type='button'
+                        className='close'
+                        data-dismiss='modal'
+                        aria-label='Close'
+                    >
+                        <span aria-hidden='true'>&times;</span>
+                    </button>
+                    <h4
+                        className='modal-title'
+                        ref='title'
+                    >
+                        <i className='modal-back'></i>Appearance Settings
+                    </h4>
                 </div>
-                <div className="user-settings">
-                    <h3 className="tab-header">Appearance Settings</h3>
-                    <div className="divider-dark first"/>
+                <div className='user-settings'>
+                    <h3 className='tab-header'>Appearance Settings</h3>
+                    <div className='divider-dark first'/>
                     {themeSection}
-                    <div className="divider-dark"/>
+                    <div className='divider-dark'/>
                 </div>
             </div>
         );
     }
-});
+}
+
+UserSettingsAppearance.defaultProps = {
+    activeSection: ''
+};
+UserSettingsAppearance.propTypes = {
+    activeSection: React.PropTypes.string,
+    updateSection: React.PropTypes.func,
+    updateTab: React.PropTypes.func
+};
-- 
cgit v1.2.3-1-g7c22

