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();
+ }
}