diff --git a/app/screens/settings/notification_settings_email/notification_settings_email.android.js b/app/screens/settings/notification_settings_email/notification_settings_email.android.js index 3c30d77a3..3d01850bb 100644 --- a/app/screens/settings/notification_settings_email/notification_settings_email.android.js +++ b/app/screens/settings/notification_settings_email/notification_settings_email.android.js @@ -26,18 +26,25 @@ class NotificationSettingsEmailAndroid extends NotificationSettingsEmailBase { }; handleClose = () => { - this.setState({showEmailNotificationsModal: false}); + this.setState({ + newInterval: this.state.interval, + showEmailNotificationsModal: false, + }); } handleSaveEmailNotification = () => { + this.setState({showEmailNotificationsModal: false}); this.saveEmailNotifyProps(); - this.handleClose(); }; showEmailModal = () => { this.setState({showEmailNotificationsModal: true}); }; + handleChange = (value) => { + this.setState({newInterval: value}); + } + renderEmailSection() { const { sendEmailNotifications, @@ -99,7 +106,7 @@ class NotificationSettingsEmailAndroid extends NotificationSettingsEmailBase { sendEmailNotifications, siteName, } = this.props; - const {interval} = this.state; + const {newInterval} = this.state; let helpText; if (sendEmailNotifications) { @@ -119,7 +126,7 @@ class NotificationSettingsEmailAndroid extends NotificationSettingsEmailBase { defaultMessage: 'Immediately', }), value: Preferences.INTERVAL_IMMEDIATE.toString(), - checked: interval === Preferences.INTERVAL_IMMEDIATE.toString(), + checked: newInterval === Preferences.INTERVAL_IMMEDIATE.toString(), }]; if (enableEmailBatching) { @@ -129,14 +136,14 @@ class NotificationSettingsEmailAndroid extends NotificationSettingsEmailBase { defaultMessage: 'Every 15 minutes', }), value: Preferences.INTERVAL_FIFTEEN_MINUTES.toString(), - checked: interval === Preferences.INTERVAL_FIFTEEN_MINUTES.toString(), + checked: newInterval === Preferences.INTERVAL_FIFTEEN_MINUTES.toString(), }, { label: intl.formatMessage({ id: 'user.settings.notifications.email.everyHour', defaultMessage: 'Every hour', }), value: Preferences.INTERVAL_HOUR.toString(), - checked: interval === Preferences.INTERVAL_HOUR.toString(), + checked: newInterval === Preferences.INTERVAL_HOUR.toString(), }); } @@ -146,7 +153,7 @@ class NotificationSettingsEmailAndroid extends NotificationSettingsEmailBase { defaultMessage: 'Never', }), value: Preferences.INTERVAL_NEVER.toString(), - checked: interval === Preferences.INTERVAL_NEVER.toString(), + checked: newInterval === Preferences.INTERVAL_NEVER.toString(), }); return ( @@ -176,7 +183,7 @@ class NotificationSettingsEmailAndroid extends NotificationSettingsEmailBase { {sendEmailNotifications && } diff --git a/app/screens/settings/notification_settings_email/notification_settings_email.android.test.js b/app/screens/settings/notification_settings_email/notification_settings_email.android.test.js index 062f7ac24..7e9cfd293 100644 --- a/app/screens/settings/notification_settings_email/notification_settings_email.android.test.js +++ b/app/screens/settings/notification_settings_email/notification_settings_email.android.test.js @@ -71,9 +71,10 @@ describe('NotificationSettingsMobileAndroid', () => { ); - wrapper.setState({showEmailNotificationsModal: true}); + wrapper.setState({showEmailNotificationsModal: true, interval: '30', newInterval: '3600'}); wrapper.instance().handleClose(); expect(wrapper.state('showEmailNotificationsModal')).toEqual(false); + expect(wrapper.state('newInterval')).toEqual('30'); }); test('should saveEmailNotifyProps and handleClose on handleSaveEmailNotification', () => { @@ -83,11 +84,9 @@ describe('NotificationSettingsMobileAndroid', () => { const instance = wrapper.instance(); instance.saveEmailNotifyProps = jest.fn(); - instance.handleClose = jest.fn(); instance.handleSaveEmailNotification(); expect(instance.saveEmailNotifyProps).toHaveBeenCalledTimes(1); - expect(instance.handleClose).toHaveBeenCalledTimes(1); }); test('should match state on showEmailModal', () => { @@ -99,4 +98,14 @@ describe('NotificationSettingsMobileAndroid', () => { wrapper.instance().showEmailModal(); expect(wrapper.state('showEmailNotificationsModal')).toEqual(true); }); + + test('should match state on handleChange', () => { + const wrapper = shallowWithIntl( + + ); + + wrapper.setState({newInterval: '3600'}); + wrapper.instance().handleChange('30'); + expect(wrapper.state('newInterval')).toEqual('30'); + }); }); diff --git a/app/screens/settings/notification_settings_email/notification_settings_email.ios.test.js b/app/screens/settings/notification_settings_email/notification_settings_email.ios.test.js index 044bc5837..a64cdb6b0 100644 --- a/app/screens/settings/notification_settings_email/notification_settings_email.ios.test.js +++ b/app/screens/settings/notification_settings_email/notification_settings_email.ios.test.js @@ -75,7 +75,7 @@ describe('NotificationSettingsEmailIos', () => { ); - wrapper.setState({email: 'true', interval: '3600'}); + wrapper.setState({email: 'true', newInterval: '3600'}); wrapper.instance().saveEmailNotifyProps(); expect(props.actions.savePreferences).toHaveBeenCalledTimes(1); expect(props.actions.savePreferences).toBeCalledWith( diff --git a/app/screens/settings/notification_settings_email/notification_settings_email_base.js b/app/screens/settings/notification_settings_email/notification_settings_email_base.js index 7b9114080..93d3fcecd 100644 --- a/app/screens/settings/notification_settings_email/notification_settings_email_base.js +++ b/app/screens/settings/notification_settings_email/notification_settings_email_base.js @@ -33,12 +33,11 @@ export default class NotificationSettingsEmailBase extends PureComponent { sendEmailNotifications, } = props; + const interval = this.computeEmailInterval(sendEmailNotifications, enableEmailBatching, emailInterval); + this.state = { - interval: getEmailInterval( - sendEmailNotifications, - enableEmailBatching, - parseInt(emailInterval, 10), - ).toString(), + interval, + newInterval: interval, showEmailNotificationsModal: false, }; @@ -50,17 +49,21 @@ export default class NotificationSettingsEmailBase extends PureComponent { setNavigatorStyles(this.props.navigator, nextProps.theme); } + const { + sendEmailNotifications, + enableEmailBatching, + emailInterval, + } = nextProps; + if ( - this.props.sendEmailNotifications !== nextProps.sendEmailNotifications || - this.props.enableEmailBatching !== nextProps.enableEmailBatching || - this.props.emailInterval !== nextProps.emailInterval + this.props.sendEmailNotifications !== sendEmailNotifications || + this.props.enableEmailBatching !== enableEmailBatching || + this.props.emailInterval !== emailInterval ) { + const interval = this.computeEmailInterval(sendEmailNotifications, enableEmailBatching, emailInterval); this.setState({ - interval: getEmailInterval( - nextProps.sendEmailNotifications, - nextProps.enableEmailBatching, - parseInt(nextProps.emailInterval, 10), - ).toString(), + interval, + newInterval: interval, }); } } @@ -75,25 +78,34 @@ export default class NotificationSettingsEmailBase extends PureComponent { } }; - setEmailNotifications = (interval) => { + setEmailNotifications = (value) => { const {sendEmailNotifications} = this.props; let email = 'false'; - if (sendEmailNotifications && interval !== Preferences.INTERVAL_NEVER.toString()) { + if (sendEmailNotifications && value !== Preferences.INTERVAL_NEVER.toString()) { email = 'true'; } this.setState({ email, - interval, + interval: value, + newInterval: value, }); }; saveEmailNotifyProps = () => { const {currentUserId} = this.props; - const {email, interval} = this.state; + const {email, newInterval} = this.state; const emailNotify = {category: Preferences.CATEGORY_NOTIFICATIONS, user_id: currentUserId, name: 'email', value: email}; - const emailInterval = {category: Preferences.CATEGORY_NOTIFICATIONS, user_id: currentUserId, name: Preferences.EMAIL_INTERVAL, value: interval}; + const emailInterval = {category: Preferences.CATEGORY_NOTIFICATIONS, user_id: currentUserId, name: Preferences.EMAIL_INTERVAL, value: newInterval}; this.props.actions.savePreferences(currentUserId, [emailNotify, emailInterval]); }; + + computeEmailInterval = (sendEmailNotifications, enableEmailBatching, emailInterval) => { + return getEmailInterval( + sendEmailNotifications, + enableEmailBatching, + parseInt(emailInterval, 10), + ).toString(); + } }