diff --git a/app/screens/settings/notification_settings_mentions/notification_settings_mention_base.js b/app/screens/settings/notification_settings_mentions/notification_settings_mention_base.js index ebe5b9e66..49acbb757 100644 --- a/app/screens/settings/notification_settings_mentions/notification_settings_mention_base.js +++ b/app/screens/settings/notification_settings_mentions/notification_settings_mention_base.js @@ -57,6 +57,7 @@ export default class NotificationSettingsMentionsBase extends PureComponent { const newState = { ...notifyProps, comments, + newReplyValue: comments, usernameMention: usernameMentionIndex > -1, mention_keys: mentionKeys.join(','), showKeywordsModal: false, @@ -64,7 +65,6 @@ export default class NotificationSettingsMentionsBase extends PureComponent { }; this.keywords = newState.mention_keys; - this.replyValue = comments; return newState; }; diff --git a/app/screens/settings/notification_settings_mentions/notification_settings_mentions.android.js b/app/screens/settings/notification_settings_mentions/notification_settings_mentions.android.js index d49ab0d09..df21f4192 100644 --- a/app/screens/settings/notification_settings_mentions/notification_settings_mentions.android.js +++ b/app/screens/settings/notification_settings_mentions/notification_settings_mentions.android.js @@ -27,8 +27,10 @@ class NotificationSettingsMentionsAndroid extends NotificationSettingsMentionsBa }; cancelReplyNotification = () => { - this.setState({showReplyModal: false}); - this.replyValue = this.state.comments; + this.setState({ + newReplyValue: this.state.comments, + showReplyModal: false, + }); }; onKeywordsChangeText = (value) => { @@ -36,7 +38,7 @@ class NotificationSettingsMentionsAndroid extends NotificationSettingsMentionsBa }; onReplyChanged = (value) => { - this.replyValue = value; + this.setState({newReplyValue: value}); }; renderKeywordsModal(style) { @@ -113,6 +115,7 @@ class NotificationSettingsMentionsAndroid extends NotificationSettingsMentionsBa renderReplyModal(style) { const {intl} = this.props; + const {newReplyValue} = this.state; const options = [{ label: intl.formatMessage({ @@ -120,21 +123,21 @@ class NotificationSettingsMentionsAndroid extends NotificationSettingsMentionsBa defaultMessage: 'Threads that I start or participate in', }), value: 'any', - checked: this.state.comments === 'any', + checked: newReplyValue === 'any', }, { label: intl.formatMessage({ id: 'mobile.account_notifications.threads_start', defaultMessage: 'Threads that I start', }), value: 'root', - checked: this.state.comments === 'root', + checked: newReplyValue === 'root', }, { label: intl.formatMessage({ id: 'mobile.account_notifications.threads_mentions', defaultMessage: 'Mentions in threads', }), value: 'never', - checked: this.state.comments === 'never', + checked: newReplyValue === 'never', }]; return ( @@ -243,7 +246,7 @@ class NotificationSettingsMentionsAndroid extends NotificationSettingsMentionsBa saveReplyNotification = () => { this.setState({showReplyModal: false}); - this.setReplyNotifications(this.replyValue); + this.setReplyNotifications(this.state.newReplyValue); }; showKeywordsModal = () => { diff --git a/app/screens/settings/notification_settings_mobile/notification_settings_mobile.android.js b/app/screens/settings/notification_settings_mobile/notification_settings_mobile.android.js index a4044cbe4..6071ee93d 100644 --- a/app/screens/settings/notification_settings_mobile/notification_settings_mobile.android.js +++ b/app/screens/settings/notification_settings_mobile/notification_settings_mobile.android.js @@ -23,30 +23,37 @@ import NotificationSettingsMobileBase from './notification_settings_mobile_base' class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase { cancelMobilePushModal = () => { - this.setState({showMobilePushModal: false}); - this.push = this.state.push; + this.setState({ + newPush: this.state.push, + showMobilePushModal: false, + }); }; cancelMobilePushStatusModal = () => { - this.setState({showMobilePushStatusModal: false}); - this.pushStatus = this.state.push_status; + this.setState({ + newPushStatus: this.state.push_status, + showMobilePushStatusModal: false, + }); }; cancelMobileSoundsModal = () => { - this.setState({showMobileSoundsModal: false}); - this.sound = this.state.selectedUri; + this.setState({ + newSound: this.state.selectedUri, + showMobileSoundsModal: false, + }); }; onMobilePushChanged = (value) => { - this.push = value; + this.setState({newPush: value}); }; onMobilePushStatusChanged = (value) => { - this.pushStatus = value; + this.setState({newPushStatus: value}); }; onMobileSoundChanged = (value) => { - this.sound = value; + this.setState({newSound: value}); + if (value && value !== 'none') { NotificationPreferences.play(value); } @@ -83,6 +90,7 @@ class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase { renderMobilePushModal(style) { const {config, intl} = this.props; const pushNotificationsEnabled = config.SendPushNotifications === 'true'; + const {newPush} = this.state; const options = [{ label: intl.formatMessage({ @@ -90,21 +98,21 @@ class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase { defaultMessage: 'For all activity', }), value: 'all', - checked: this.state.push === 'all', + checked: newPush === 'all', }, { label: intl.formatMessage({ id: 'user.settings.notifications.onlyMentions', defaultMessage: 'Only for mentions and direct messages', }), value: 'mention', - checked: this.state.push === 'mention', + checked: newPush === 'mention', }, { label: intl.formatMessage({ id: 'user.settings.notifications.never', defaultMessage: 'Never', }), value: 'none', - checked: this.state.push === 'none', + checked: newPush === 'none', }]; return ( @@ -177,6 +185,7 @@ class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase { renderMobilePushStatusModal(style) { const {intl} = this.props; + const {newPushStatus} = this.state; const options = [{ label: intl.formatMessage({ @@ -184,21 +193,21 @@ class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase { defaultMessage: 'Online, away or offline', }), value: 'online', - checked: this.state.push_status === 'online', + checked: newPushStatus === 'online', }, { label: intl.formatMessage({ id: 'user.settings.push_notification.away', defaultMessage: 'Away or offline', }), value: 'away', - checked: this.state.push_status === 'away', + checked: newPushStatus === 'away', }, { label: intl.formatMessage({ id: 'user.settings.push_notification.offline', defaultMessage: 'Offline', }), value: 'offline', - checked: this.state.push_status === 'offline', + checked: newPushStatus === 'offline', }]; return ( @@ -257,7 +266,7 @@ class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase { } renderMobileSoundsModal(style) { - const {defaultSound, selectedUri} = this.state; + const {defaultSound, newSound} = this.state; const {intl, notificationPreferences} = this.props; const {defaultUri, sounds} = notificationPreferences; const soundsArray = [{ @@ -266,14 +275,14 @@ class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase { defaultMessage: 'Default ({sound})', }, {sound: defaultSound}), value: defaultUri, - checked: selectedUri === null, + checked: newSound === null, }, { label: intl.formatMessage({ id: 'mobile.notification_settings_mobile.no_sound', defaultMessage: 'None', }), value: 'none', - checked: selectedUri === 'none', + checked: newSound === 'none', }]; if (sounds && sounds.length) { @@ -281,7 +290,7 @@ class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase { return { label: s.name, value: s.uri, - checked: s.uri === selectedUri, + checked: s.uri === newSound, }; }); soundsArray.push(...filteredSounds); @@ -559,31 +568,31 @@ class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase { saveMobilePushModal = () => { this.setState({showMobilePushModal: false}); - this.setMobilePush(this.push); + this.setMobilePush(this.state.newPush); }; saveMobilePushStatusModal = () => { this.setState({showMobilePushStatusModal: false}); - this.setMobilePushStatus(this.pushStatus); + this.setMobilePushStatus(this.state.newPushStatus); }; saveMobileSoundsModal = () => { - const {defaultSound} = this.state; + const {defaultSound, newSound} = this.state; const {intl, notificationPreferences} = this.props; const {defaultUri, sounds} = notificationPreferences; let sound; let selectedUri = null; - if (this.sound === defaultUri) { + if (newSound === defaultUri) { sound = defaultSound; - } else if (this.sound === 'none') { - selectedUri = this.sound; + } else if (newSound === 'none') { + selectedUri = 'none'; sound = intl.formatMessage({ id: 'mobile.notification_settings_mobile.no_sound', defaultMessage: 'None', }); } else { - selectedUri = this.sound; + selectedUri = newSound; const selected = sounds.find((s) => s.uri === selectedUri); sound = selected ? selected.name : 'none'; } diff --git a/app/screens/settings/notification_settings_mobile/notification_settings_mobile_base.js b/app/screens/settings/notification_settings_mobile/notification_settings_mobile_base.js index 92bed2504..ad38701ee 100644 --- a/app/screens/settings/notification_settings_mobile/notification_settings_mobile_base.js +++ b/app/screens/settings/notification_settings_mobile/notification_settings_mobile_base.js @@ -25,16 +25,18 @@ export default class NotificationSettingsMobileBase extends PureComponent { const {currentUser} = props; const notifyProps = getNotificationProps(currentUser); + const notifyPreferences = this.getNotificationPreferences(props); this.state = { ...notifyProps, - ...this.getNotificationPreferences(props), + ...notifyPreferences, + newPush: notifyProps.push, + newPushStatus: notifyProps.push_status, + newSound: notifyPreferences.sound, showMobilePushModal: false, showMobilePushStatusModal: false, showMobileSoundsModal: false, }; - this.push = this.state.push; - this.pushStatus = this.state.push_status; props.navigator.setOnNavigatorEvent(this.onNavigatorEvent); }