diff --git a/src/components/views/settings/Notifications.js b/src/components/views/settings/Notifications.js index 72dc4e949c..4364da8b0d 100644 --- a/src/components/views/settings/Notifications.js +++ b/src/components/views/settings/Notifications.js @@ -69,6 +69,11 @@ module.exports = React.createClass({ ERROR: "ERROR" // There was an error }, + propTypes: { + // The array of threepids from the JS SDK (required for email notifications) + threepids: React.PropTypes.array.isRequired, + }, + getInitialState: function() { return { phase: this.phases.LOADING, @@ -102,6 +107,26 @@ module.exports = React.createClass({ UserSettingsStore.setEnableNotifications(event.target.checked); }, + onEnableEmailNotificationsChange: function(address, event) { + var emailPusherPromise; + if (event.target.checked) { + emailPusherPromise = UserSettingsStore.addEmailPusher(address); + } else { + var emailPusher = UserSettingsStore.getEmailPusher(this.state.pushers, address); + emailPusher.kind = null; + emailPusherPromise = MatrixClientPeg.get().setPusher(emailPusher); + } + emailPusherPromise.done(() => { + this._refreshFromServer(); + }, (error) => { + var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog"); + Modal.createDialog(ErrorDialog, { + title: "Error saving email notification preferences", + description: "Vector was unable to save your email notification preferences.", + }); + }); + }, + onNotifStateButtonClicked: function(event) { // FIXME: use .bind() rather than className metadata here surely var vectorRuleId = event.target.className.split("-")[0]; @@ -620,6 +645,24 @@ module.exports = React.createClass({ return rows; }, + emailNotificationsRow: function(address, label) { + return (
+
+ +
+
+ +
+
); + }, + render: function() { var self = this; @@ -656,12 +699,29 @@ module.exports = React.createClass({ {masterPushRuleDiv}
- All notifications are currently disabled for all devices. + All notifications are currently disabled for all targets.
); } + var emailNotificationsRow; + if (this.props.threepids.filter(function(tp) { + if (tp.medium == "email") { + return true; + } + }).length == 0) { + emailNotificationsRow =
+ Add an email address above to configure email notifications +
; + } else { + // This only supports the first email address in your profile for now + emailNotificationsRow = this.emailNotificationsRow( + this.props.threepids[0].address, + "Enable email notifications ("+this.props.threepids[0].address+")" + ); + } + // Build external push rules var externalRules = []; for (var i in this.state.externalPushRules) { @@ -682,13 +742,11 @@ module.exports = React.createClass({ var devicesSection; if (this.state.pushers === undefined) { - devicesSection =
Unable to fetch device list
+ devicesSection =
Unable to fetch notification target list
} else if (this.state.pushers.length == 0) { - devicesSection =
- No devices are receiving push notifications -
+ devicesSection = null; } else { - // It would be great to be able to delete pushers from here too, + // TODO: It would be great to be able to delete pushers from here too, // and this wouldn't be hard to add. var rows = []; for (var i = 0; i < this.state.pushers.length; ++i) { @@ -698,17 +756,17 @@ module.exports = React.createClass({ ); } devicesSection = ( - - - - - - {rows}
ApplicationDevice
); } + if (devicesSection) { + devicesSection = (
+

Notification targets

+ { devicesSection } +
); + } var advancedSettings; if (externalRules.length) { @@ -766,7 +824,7 @@ module.exports = React.createClass({ -

General use

+ { emailNotificationsRow }
@@ -788,7 +846,6 @@ module.exports = React.createClass({ { advancedSettings } -

Devices

{ devicesSection }