From c4fccd2f23aef1d06f0bdcb9399c5738e44a1fff Mon Sep 17 00:00:00 2001 From: Reed Garmsen Date: Wed, 19 Aug 2015 14:46:21 -0700 Subject: Reformats the user_settings_notifications.jsx file --- .../components/user_settings_notifications.jsx | 406 ++++++++++++++++----- 1 file changed, 308 insertions(+), 98 deletions(-) (limited to 'web') diff --git a/web/react/components/user_settings_notifications.jsx b/web/react/components/user_settings_notifications.jsx index 33ae01eaa..6637bbcb5 100644 --- a/web/react/components/user_settings_notifications.jsx +++ b/web/react/components/user_settings_notifications.jsx @@ -67,16 +67,28 @@ function getNotificationsStateFromStores() { return {notifyLevel: desktop, enableEmail: email, soundNeeded: soundNeeded, enableSound: sound, usernameKey: usernameKey, mentionKey: mentionKey, customKeys: customKeys, customKeysChecked: customKeys.length > 0, firstNameKey: firstNameKey, allKey: allKey, channelKey: channelKey}; } -module.exports = React.createClass({ - displayName: 'NotificationsTab', - propTypes: { - user: React.PropTypes.object, - updateSection: React.PropTypes.func, - updateTab: React.PropTypes.func, - activeSection: React.PropTypes.string, - activeTab: React.PropTypes.string - }, - handleSubmit: function() { +export default class NotificationsTab extends React.Component { + constructor(props) { + super(props); + + this.handleSubmit = this.handleSubmit.bind(this); + this.handleClose = this.handleClose.bind(this); + this.updateSection = this.updateSection.bind(this); + this.onListenerChange = this.onListenerChange.bind(this); + this.handleNotifyRadio = this.handleNotifyRadio.bind(this); + this.handleEmailRadio = this.handleEmailRadio.bind(this); + this.handleSoundRadio = this.handleSoundRadio.bind(this); + this.updateUsernameKey = this.updateUsernameKey.bind(this); + this.updateMentionKey = this.updateMentionKey.bind(this); + this.updateFirstNameKey = this.updateFirstNameKey.bind(this); + this.updateAllKey = this.updateAllKey.bind(this); + this.updateChannelKey = this.updateChannelKey.bind(this); + this.updateCustomMentionKeys = this.updateCustomMentionKeys.bind(this); + this.onCustomChange = this.onCustomChange.bind(this); + + this.state = getNotificationsStateFromStores(); + } + handleSubmit() { var data = {}; data.user_id = this.props.user.id; data.email = this.state.enableEmail; @@ -110,66 +122,63 @@ module.exports = React.createClass({ this.setState({serverError: err.message}); }.bind(this) ); - }, - handleClose: function() { - $(this.getDOMNode()).find('.form-control').each(function clearField() { + } + handleClose() { + $(React.findDOMNode(this)).find('.form-control').each(function clearField() { this.value = ''; }); this.setState(assign({}, getNotificationsStateFromStores(), {serverError: null})); this.props.updateTab('general'); - }, - updateSection: function(section) { + } + updateSection(section) { this.setState(this.getInitialState()); this.props.updateSection(section); - }, - componentDidMount: function() { + } + componentDidMount() { UserStore.addChangeListener(this.onListenerChange); $('#user_settings').on('hidden.bs.modal', this.handleClose); - }, - componentWillUnmount: function() { + } + componentWillUnmount() { UserStore.removeChangeListener(this.onListenerChange); $('#user_settings').off('hidden.bs.modal', this.handleClose); this.props.updateSection(''); - }, - onListenerChange: function() { + } + onListenerChange() { var newState = getNotificationsStateFromStores(); if (!utils.areStatesEqual(newState, this.state)) { this.setState(newState); } - }, - getInitialState: function() { - return getNotificationsStateFromStores(); - }, - handleNotifyRadio: function(notifyLevel) { + } + handleNotifyRadio(notifyLevel) { this.setState({notifyLevel: notifyLevel}); this.refs.wrapper.getDOMNode().focus(); - }, - handleEmailRadio: function(enableEmail) { + } + handleEmailRadio(enableEmail) { this.setState({enableEmail: enableEmail}); this.refs.wrapper.getDOMNode().focus(); - }, - handleSoundRadio: function(enableSound) { + } + handleSoundRadio(enableSound) { this.setState({enableSound: enableSound}); this.refs.wrapper.getDOMNode().focus(); - }, - updateUsernameKey: function(val) { + } + updateUsernameKey(val) { this.setState({usernameKey: val}); - }, - updateMentionKey: function(val) { + } + updateMentionKey(val) { this.setState({mentionKey: val}); - }, - updateFirstNameKey: function(val) { + } + updateFirstNameKey(val) { this.setState({firstNameKey: val}); - }, - updateAllKey: function(val) { + } + updateAllKey(val) { this.setState({allKey: val}); - }, - updateChannelKey: function(val) { + } + updateChannelKey(val) { this.setState({channelKey: val}); - }, - updateCustomMentionKeys: function() { + } + updateCustomMentionKeys() { var checked = this.refs.customcheck.getDOMNode().checked; if (checked) { @@ -180,12 +189,12 @@ module.exports = React.createClass({ } else { this.setState({customKeys: '', customKeysChecked: false}); } - }, - onCustomChange: function() { + } + onCustomChange() { this.refs.customcheck.getDOMNode().checked = true; this.updateCustomMentionKeys(); - }, - render: function() { + } + render() { var serverError = null; if (this.state.serverError) { serverError = this.state.serverError; @@ -196,6 +205,7 @@ module.exports = React.createClass({ var user = this.props.user; var desktopSection; + var handleUpdateDesktopSection; if (this.props.activeSection === 'desktop') { var notifyActive = [false, false, false]; if (this.state.notifyLevel === 'mention') { @@ -206,41 +216,63 @@ module.exports = React.createClass({ notifyActive[0] = true; } - var inputs = []; + let inputs = []; inputs.push(


); + handleUpdateDesktopSection = function updateDesktopSection(e) { + self.props.updateSection(''); + e.preventDefault(); + }; + desktopSection = ( ); } else { - var describe = ''; + let describe = ''; if (this.state.notifyLevel === 'mention') { describe = 'Only for mentions and private messages'; } else if (this.state.notifyLevel === 'none') { @@ -249,162 +281,278 @@ module.exports = React.createClass({ describe = 'For all activity'; } + handleUpdateDesktopSection = function updateDesktopSection() { + self.props.updateSection('desktop'); + }; + desktopSection = ( ); } var soundSection; + var handleUpdateSoundSection; if (this.props.activeSection === 'sound' && this.state.soundNeeded) { - var soundActive = ['', '']; + var soundActive = [false, false]; if (this.state.enableSound === 'false') { - soundActive[1] = 'active'; + soundActive[1] = true; } else { - soundActive[0] = 'active'; + soundActive[0] = true; } - var inputs = []; + let inputs = []; inputs.push(
-
- - +
+ +
-
+
+ +
+
+
); + handleUpdateSoundSection = function updateSoundSection(e) { + self.props.updateSection(''); + e.preventDefault(); + }; + soundSection = ( ); } else { - var describe = ''; + let describe = ''; if (!this.state.soundNeeded) { - describe = 'Please configure notification sounds in your browser settings' + describe = 'Please configure notification sounds in your browser settings'; } else if (this.state.enableSound === 'false') { describe = 'Off'; } else { describe = 'On'; } + handleUpdateSoundSection = function updateSoundSection() { + self.props.updateSection('sound'); + }; + soundSection = ( ); } var emailSection; + var handleUpdateEmailSection; if (this.props.activeSection === 'email') { - var emailActive = ['','']; + var emailActive = [false, false]; if (this.state.enableEmail === 'false') { - emailActive[1] = 'active'; + emailActive[1] = true; } else { - emailActive[0] = 'active'; + emailActive[0] = true; } - var inputs = []; + let inputs = []; inputs.push(
-
- - +
+ +
+
+
+ +

{'Email notifications are sent for mentions and private messages after you have been away from ' + config.SiteName + ' for 5 minutes.'}
); + handleUpdateEmailSection = function updateEmailSection(e) { + self.props.updateSection(''); + e.preventDefault(); + }; + emailSection = ( ); } else { - var describe = ''; + let describe = ''; if (this.state.enableEmail === 'false') { describe = 'Off'; } else { describe = 'On'; } + handleUpdateEmailSection = function updateEmailSection() { + self.props.updateSection('email'); + }; + emailSection = ( ); } var keysSection; + var handleUpdateKeysSection; if (this.props.activeSection === 'keys') { - var inputs = []; + let inputs = []; + + let handleUpdateFirstNameKey; + let handleUpdateUsernameKey; + let handleUpdateMentionKey; + let handleUpdateAllKey; + let handleUpdateChannelKey; if (user.first_name) { + handleUpdateFirstNameKey = function handleFirstNameKeyChange(e) { + self.updateFirstNameKey(e.target.checked); + }; inputs.push(
); } + handleUpdateUsernameKey = function handleUsernameKeyChange(e) { + self.updateUsernameKey(e.target.checked); + }; inputs.push(
); + handleUpdateMentionKey = function handleMentionKeyChange(e) { + self.updateMentionKey(e.target.checked); + }; inputs.push(
); + handleUpdateAllKey = function handleAllKeyChange(e) { + self.updateAllKey(e.target.checked); + }; inputs.push(
); + handleUpdateChannelKey = function handleChannelKeyChange(e) { + self.updateChannelKey(e.target.checked); + }; inputs.push(
@@ -414,32 +562,61 @@ module.exports = React.createClass({
- +
); + handleUpdateKeysSection = function updateKeysSection(e) { + self.props.updateSection(''); + e.preventDefault(); + }; keysSection = ( ); } else { - var keys = []; - if (this.state.firstNameKey) keys.push(user.first_name); - if (this.state.usernameKey) keys.push(user.username); - if (this.state.mentionKey) keys.push('@'+user.username); - if (this.state.allKey) keys.push('@all'); - if (this.state.channelKey) keys.push('@channel'); - if (this.state.customKeys.length > 0) keys = keys.concat(this.state.customKeys.split(',')); - - var describe = ''; + let keys = []; + if (this.state.firstNameKey) { + keys.push(user.first_name); + } + if (this.state.usernameKey) { + keys.push(user.username); + } + if (this.state.mentionKey) { + keys.push('@' + user.username); + } + if (this.state.allKey) { + keys.push('@all'); + } + if (this.state.channelKey) { + keys.push('@channel'); + } + if (this.state.customKeys.length > 0) { + keys = keys.concat(this.state.customKeys.split(',')); + } + + let describe = ''; for (var i = 0; i < keys.length; i++) { describe += '"' + keys[i] + '", '; } @@ -450,11 +627,15 @@ module.exports = React.createClass({ describe = 'No words configured'; } + handleUpdateKeysSection = function updateKeysSection() { + self.props.updateSection('keys'); + }; + keysSection = ( ); } @@ -462,10 +643,26 @@ module.exports = React.createClass({ return (
- -

Notifications

+ +

+ + Notifications +

-
+

Notifications

{desktopSection} @@ -481,4 +678,17 @@ module.exports = React.createClass({ ); } -}); +} + +NotificationsTab.defaultProps = { + user: null, + activeSection: '', + activeTab: '' +}; +NotificationsTab.propTypes = { + user: React.PropTypes.object, + updateSection: React.PropTypes.func, + updateTab: React.PropTypes.func, + activeSection: React.PropTypes.string, + activeTab: React.PropTypes.string +}; -- cgit v1.2.3-1-g7c22