diff --git a/src/components/views/settings/Notifications.js b/src/components/views/settings/Notifications.js index 39774778e1..ea727a03b5 100644 --- a/src/components/views/settings/Notifications.js +++ b/src/components/views/settings/Notifications.js @@ -26,7 +26,7 @@ import { NotificationUtils, VectorPushRulesDefinitions, PushRuleVectorState, - ContentRules + ContentRules, } from '../../../notifications'; // TODO: this "view" component still has far too much application logic in it, @@ -47,7 +47,7 @@ const LEGACY_RULES = { "im.vector.rule.room_message": ".m.rule.message", "im.vector.rule.invite_for_me": ".m.rule.invite_for_me", "im.vector.rule.call": ".m.rule.call", - "im.vector.rule.notices": ".m.rule.suppress_notices" + "im.vector.rule.notices": ".m.rule.suppress_notices", }; function portLegacyActions(actions) { @@ -67,7 +67,7 @@ module.exports = React.createClass({ phases: { LOADING: "LOADING", // The component is loading or sending data to the hs DISPLAY: "DISPLAY", // The component is ready and display data - ERROR: "ERROR" // There was an error + ERROR: "ERROR", // There was an error }, propTypes: { @@ -79,7 +79,7 @@ module.exports = React.createClass({ getDefaultProps: function() { return { - threepids: [] + threepids: [], }; }, @@ -90,10 +90,10 @@ module.exports = React.createClass({ vectorPushRules: [], // HS default push rules displayed in Vector UI vectorContentRules: { // Keyword push rules displayed in Vector UI vectorState: PushRuleVectorState.ON, - rules: [] + rules: [], }, externalPushRules: [], // Push rules (except content rule) that have been defined outside Vector UI - externalContentRules: [] // Keyword push rules that have been defined outside Vector UI + externalContentRules: [], // Keyword push rules that have been defined outside Vector UI }; }, @@ -104,7 +104,7 @@ module.exports = React.createClass({ onEnableNotificationsChange: function(event) { const self = this; this.setState({ - phase: this.phases.LOADING + phase: this.phases.LOADING, }); MatrixClientPeg.get().setPushRuleEnabled('global', self.state.masterPushRule.kind, self.state.masterPushRule.rule_id, !event.target.checked).done(function() { @@ -145,7 +145,7 @@ module.exports = React.createClass({ onEnableEmailNotificationsChange: function(address, event) { let emailPusherPromise; if (event.target.checked) { - const data = {} + const data = {}; data['brand'] = this.props.brand || 'Riot'; emailPusherPromise = UserSettingsStore.addEmailPusher(address, data); } else { @@ -170,9 +170,8 @@ module.exports = React.createClass({ const newPushRuleVectorState = event.target.className.split("-")[1]; if ("_keywords" === vectorRuleId) { - this._setKeywordsPushRuleVectorState(newPushRuleVectorState) - } - else { + this._setKeywordsPushRuleVectorState(newPushRuleVectorState); + } else { const rule = this.getRule(vectorRuleId); if (rule) { this._setPushRuleVectorState(rule, newPushRuleVectorState); @@ -185,7 +184,7 @@ module.exports = React.createClass({ // Compute the keywords list to display let keywords = []; - for (let i in this.state.vectorContentRules.rules) { + for (const i in this.state.vectorContentRules.rules) { const rule = this.state.vectorContentRules.rules[i]; keywords.push(rule.pattern); } @@ -195,8 +194,7 @@ module.exports = React.createClass({ keywords.sort(); keywords = keywords.join(", "); - } - else { + } else { keywords = ""; } @@ -207,29 +205,28 @@ module.exports = React.createClass({ button: _t('OK'), value: keywords, onFinished: function onFinished(should_leave, newValue) { - if (should_leave && newValue !== keywords) { let newKeywords = newValue.split(','); - for (let i in newKeywords) { + for (const i in newKeywords) { newKeywords[i] = newKeywords[i].trim(); } // Remove duplicates and empty - newKeywords = newKeywords.reduce(function(array, keyword){ + newKeywords = newKeywords.reduce(function(array, keyword) { if (keyword !== "" && array.indexOf(keyword) < 0) { array.push(keyword); } return array; - },[]); + }, []); self._setKeywords(newKeywords); } - } + }, }); }, getRule: function(vectorRuleId) { - for (let i in this.state.vectorPushRules) { + for (const i in this.state.vectorPushRules) { const rule = this.state.vectorPushRules[i]; if (rule.vectorRuleId === vectorRuleId) { return rule; @@ -239,9 +236,8 @@ module.exports = React.createClass({ _setPushRuleVectorState: function(rule, newPushRuleVectorState) { if (rule && rule.vectorState !== newPushRuleVectorState) { - this.setState({ - phase: this.phases.LOADING + phase: this.phases.LOADING, }); const self = this; @@ -255,8 +251,7 @@ module.exports = React.createClass({ if (!actions) { // The new state corresponds to disabling the rule. deferreds.push(cli.setPushRuleEnabled('global', rule.rule.kind, rule.rule.rule_id, false)); - } - else { + } else { // The new state corresponds to enabling the rule and setting specific actions deferreds.push(this._updatePushRuleActions(rule.rule, actions, true)); } @@ -270,7 +265,7 @@ module.exports = React.createClass({ Modal.createTrackedDialog('Failed to change settings', '', ErrorDialog, { title: _t('Failed to change settings'), description: ((error && error.message) ? error.message : _t('Operation failed')), - onFinished: self._refreshFromServer + onFinished: self._refreshFromServer, }); }); } @@ -287,12 +282,12 @@ module.exports = React.createClass({ const cli = MatrixClientPeg.get(); this.setState({ - phase: this.phases.LOADING + phase: this.phases.LOADING, }); // Update all rules in self.state.vectorContentRules const deferreds = []; - for (let i in this.state.vectorContentRules.rules) { + for (const i in this.state.vectorContentRules.rules) { const rule = this.state.vectorContentRules.rules[i]; let enabled, actions; @@ -326,8 +321,7 @@ module.exports = React.createClass({ // Note that the workaround in _updatePushRuleActions will automatically // enable the rule deferreds.push(this._updatePushRuleActions(rule, actions, enabled)); - } - else if (enabled != undefined) { + } else if (enabled != undefined) { deferreds.push(cli.setPushRuleEnabled('global', rule.kind, rule.rule_id, enabled)); } } @@ -340,14 +334,14 @@ module.exports = React.createClass({ Modal.createTrackedDialog('Can\'t update user notifcation settings', '', ErrorDialog, { title: _t('Can\'t update user notification settings'), description: ((error && error.message) ? error.message : _t('Operation failed')), - onFinished: self._refreshFromServer + onFinished: self._refreshFromServer, }); }); }, _setKeywords: function(newKeywords) { this.setState({ - phase: this.phases.LOADING + phase: this.phases.LOADING, }); const self = this; @@ -356,7 +350,7 @@ module.exports = React.createClass({ // Remove per-word push rules of keywords that are no more in the list const vectorContentRulesPatterns = []; - for (let i in self.state.vectorContentRules.rules) { + for (const i in self.state.vectorContentRules.rules) { const rule = self.state.vectorContentRules.rules[i]; vectorContentRulesPatterns.push(rule.pattern); @@ -368,7 +362,7 @@ module.exports = React.createClass({ // If the keyword is part of `externalContentRules`, remove the rule // before recreating it in the right Vector path - for (let i in self.state.externalContentRules) { + for (const i in self.state.externalContentRules) { const rule = self.state.externalContentRules[i]; if (newKeywords.indexOf(rule.pattern) >= 0) { @@ -382,9 +376,9 @@ module.exports = React.createClass({ Modal.createTrackedDialog('Failed to update keywords', '', ErrorDialog, { title: _t('Failed to update keywords'), description: ((error && error.message) ? error.message : _t('Operation failed')), - onFinished: self._refreshFromServer + onFinished: self._refreshFromServer, }); - } + }; // Then, add the new ones Promise.all(removeDeferreds).done(function(resps) { @@ -398,14 +392,13 @@ module.exports = React.createClass({ // Thus, this new rule will join the 'vectorContentRules' set. if (self.state.vectorContentRules.rules.length) { pushRuleVectorStateKind = PushRuleVectorState.contentRuleVectorStateKind(self.state.vectorContentRules.rules[0]); - } - else { + } else { // ON is default - pushRuleVectorStateKind = PushRuleVectorState.ON; + pushRuleVectorStateKind = PushRuleVectorState.ON; } } - for (let i in newKeywords) { + for (const i in newKeywords) { const keyword = newKeywords[i]; if (vectorContentRulesPatterns.indexOf(keyword) < 0) { @@ -413,13 +406,12 @@ module.exports = React.createClass({ deferreds.push(cli.addPushRule ('global', 'content', keyword, { actions: PushRuleVectorState.actionsFor(pushRuleVectorStateKind), - pattern: keyword + pattern: keyword, })); - } - else { + } else { deferreds.push(self._addDisabledPushRule('global', 'content', keyword, { actions: PushRuleVectorState.actionsFor(pushRuleVectorStateKind), - pattern: keyword + pattern: keyword, })); } } @@ -435,7 +427,7 @@ module.exports = React.createClass({ _addDisabledPushRule: function(scope, kind, ruleId, body) { const cli = MatrixClientPeg.get(); return cli.addPushRule(scope, kind, ruleId, body).then(() => - cli.setPushRuleEnabled(scope, kind, ruleId, false) + cli.setPushRuleEnabled(scope, kind, ruleId, false), ); }, @@ -446,7 +438,7 @@ module.exports = React.createClass({ const needsUpdate = []; const cli = MatrixClientPeg.get(); - for (let kind in rulesets.global) { + for (const kind in rulesets.global) { const ruleset = rulesets.global[kind]; for (let i = 0; i < ruleset.length; ++i) { const rule = ruleset[i]; @@ -454,9 +446,9 @@ module.exports = React.createClass({ console.log("Porting legacy rule", rule); needsUpdate.push( function(kind, rule) { return cli.setPushRuleActions( - 'global', kind, LEGACY_RULES[rule.rule_id], portLegacyActions(rule.actions) + 'global', kind, LEGACY_RULES[rule.rule_id], portLegacyActions(rule.actions), ).then(() => - cli.deletePushRule('global', kind, rule.rule_id) + cli.deletePushRule('global', kind, rule.rule_id), ).catch( (e) => { console.warn(`Error when porting legacy rule: ${e}`); }); @@ -469,7 +461,7 @@ module.exports = React.createClass({ // If some of the rules need to be ported then wait for the porting // to happen and then fetch the rules again. return Promise.all(needsUpdate).then(() => - cli.getPushRules() + cli.getPushRules(), ); } else { // Otherwise return the rules that we already have. @@ -480,7 +472,6 @@ module.exports = React.createClass({ _refreshFromServer: function() { const self = this; const pushRulesPromise = MatrixClientPeg.get().getPushRules().then(self._portRulesToNewAPI).then(function(rulesets) { - /// XXX seriously? wtf is this? MatrixClientPeg.get().pushRules = rulesets; @@ -497,7 +488,7 @@ module.exports = React.createClass({ '.m.rule.invite_for_me': 'vector', //'.m.rule.member_event': 'vector', '.m.rule.call': 'vector', - '.m.rule.suppress_notices': 'vector' + '.m.rule.suppress_notices': 'vector', // Others go to others }; @@ -505,7 +496,7 @@ module.exports = React.createClass({ // HS default rules const defaultRules = {master: [], vector: {}, others: []}; - for (let kind in rulesets.global) { + for (const kind in rulesets.global) { for (let i = 0; i < Object.keys(rulesets.global[kind]).length; ++i) { const r = rulesets.global[kind][i]; const cat = rule_categories[r.rule_id]; @@ -514,11 +505,9 @@ module.exports = React.createClass({ if (r.rule_id[0] === '.') { if (cat === 'vector') { defaultRules.vector[r.rule_id] = r; - } - else if (cat === 'master') { + } else if (cat === 'master') { defaultRules.master.push(r); - } - else { + } else { defaultRules['others'].push(r); } } @@ -551,9 +540,9 @@ module.exports = React.createClass({ '.m.rule.invite_for_me', //'im.vector.rule.member_event', '.m.rule.call', - '.m.rule.suppress_notices' + '.m.rule.suppress_notices', ]; - for (let i in vectorRuleIds) { + for (const i in vectorRuleIds) { const vectorRuleId = vectorRuleIds[i]; if (vectorRuleId === '_keywords') { @@ -562,20 +551,19 @@ module.exports = React.createClass({ // it corresponds to all content push rules (stored in self.state.vectorContentRule) self.state.vectorPushRules.push({ "vectorRuleId": "_keywords", - "description" : ( + "description": ( { _t('Messages containing keywords', {}, { 'span': (sub) => - {sub} + {sub}, }, )} ), - "vectorState": self.state.vectorContentRules.vectorState + "vectorState": self.state.vectorContentRules.vectorState, }); - } - else { + } else { const ruleDefinition = VectorPushRulesDefinitions[vectorRuleId]; const rule = defaultRules.vector[vectorRuleId]; @@ -585,7 +573,7 @@ module.exports = React.createClass({ self.state.vectorPushRules.push({ "vectorRuleId": vectorRuleId, - "description" : _t(ruleDefinition.description), // Text from VectorPushRulesDefinitions.js + "description": _t(ruleDefinition.description), // Text from VectorPushRulesDefinitions.js "rule": rule, "vectorState": vectorState, }); @@ -604,7 +592,7 @@ module.exports = React.createClass({ '.m.rule.fallback': _t('Notify me for anything else'), }; - for (let i in defaultRules.others) { + for (const i in defaultRules.others) { const rule = defaultRules.others[i]; const ruleDescription = otherRulesDescriptions[rule.rule_id]; @@ -622,12 +610,12 @@ module.exports = React.createClass({ Promise.all([pushRulesPromise, pushersPromise]).then(function() { self.setState({ - phase: self.phases.DISPLAY + phase: self.phases.DISPLAY, }); }, function(error) { console.error(error); self.setState({ - phase: self.phases.ERROR + phase: self.phases.ERROR, }); }).finally(() => { // actually explicitly update our state having been deep-manipulating it @@ -645,12 +633,12 @@ module.exports = React.createClass({ const cli = MatrixClientPeg.get(); return cli.setPushRuleActions( - 'global', rule.kind, rule.rule_id, actions + 'global', rule.kind, rule.rule_id, actions, ).then( function() { // Then, if requested, enabled or disabled the rule if (undefined != enabled) { return cli.setPushRuleEnabled( - 'global', rule.kind, rule.rule_id, enabled + 'global', rule.kind, rule.rule_id, enabled, ); } }); @@ -689,7 +677,7 @@ module.exports = React.createClass({ renderNotifRulesTableRows: function() { const rows = []; - for (let i in this.state.vectorPushRules) { + for (const i in this.state.vectorPushRules) { const rule = this.state.vectorPushRules[i]; //console.log("rendering: " + rule.description + ", " + rule.vectorRuleId + ", " + rule.vectorState); rows.push(this.renderNotifRulesTableRow(rule.description, rule.vectorRuleId, rule.vectorState)); @@ -769,20 +757,20 @@ module.exports = React.createClass({ // This only supports the first email address in your profile for now emailNotificationsRow = this.emailNotificationsRow( emailThreepids[0].address, - `${_t('Enable email notifications')} (${emailThreepids[0].address})` + `${_t('Enable email notifications')} (${emailThreepids[0].address})`, ); } // Build external push rules const externalRules = []; - for (let i in this.state.externalPushRules) { + for (const i in this.state.externalPushRules) { const rule = this.state.externalPushRules[i]; externalRules.push(
  • { _t(rule.description) }
  • ); } // Show keywords not displayed by the vector UI as a single external push rule let externalKeywords = []; - for (let i in this.state.externalContentRules) { + for (const i in this.state.externalContentRules) { const rule = this.state.externalContentRules[i]; externalKeywords.push(rule.pattern); } @@ -793,7 +781,7 @@ module.exports = React.createClass({ let devicesSection; if (this.state.pushers === undefined) { - devicesSection =
    { _t('Unable to fetch notification target list') }
    + devicesSection =
    { _t('Unable to fetch notification target list') }
    ; } else if (this.state.pushers.length == 0) { devicesSection = null; } else { @@ -824,7 +812,7 @@ module.exports = React.createClass({ advancedSettings = (

    { _t('Advanced notification settings') }

    - { _t('There are advanced notifications which are not shown here') }.
    + { _t('There are advanced notifications which are not shown here') }.
    { _t('You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply') }.
    ); - } + }, });