Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GH-1071 - Remove cap on showing of banners #74

Merged
merged 5 commits into from May 23, 2018
Merged
Changes from 1 commit
Commits
File filter
Filter file types
Jump to
Jump to file
Failed to load files.

Always

Just for now

Next
Fixing GH-1071
  • Loading branch information
zarembsky committed May 22, 2018
commit 0e9a704b29c513cf66ed0efd25cc830ee3445080
@@ -49,13 +49,13 @@ const Notifications = (props) => {
</div>
<div className="s-option-group">
<div className="s-square-checkbox">
<input type="checkbox" id="settings-show-reload-banner" name="reload_banner_status" defaultChecked={settingsData.reload_banner_status.show} onClick={props.toggleCheckbox} />
<input type="checkbox" id="settings-show-reload-banner" name="reload_banner_status" defaultChecked={settingsData.reload_banner_status} onClick={props.toggleCheckbox} />
<label id="settings-show-reload-banner-label" htmlFor="settings-show-reload-banner">{ t('settings_show_reload_banner') }</label>
</div>
</div>
<div className="s-option-group">
<div className="s-square-checkbox">
<input type="checkbox" id="settings-show-trackers-banner" name="trackers_banner_status" defaultChecked={settingsData.trackers_banner_status.show} onClick={props.toggleCheckbox} />
<input type="checkbox" id="settings-show-trackers-banner" name="trackers_banner_status" defaultChecked={settingsData.trackers_banner_status} onClick={props.toggleCheckbox} />
<label id="settings-show-trackers-banner-label" htmlFor="settings-show-trackers-banner">{ t('settings_show_trackers_banner') }</label>
</div>
</div>
@@ -45,14 +45,8 @@ const initialState = {
notificationFilter: '', // compatibility/slow tracker/success message
notificationText: '',
notificationShown: false,
reload_banner_status: {
dismissals: [],
show: true,
},
trackers_banner_status: {
dismissals: [],
show: true,
},
reload_banner_status: true,
trackers_banner_status: true,
};
/**
* Default export for panel view reducer. Handles actions
@@ -181,9 +175,6 @@ export default (state = initialState, action) => {
const _showNotification = (state, action) => {
const msg = action.data;
const { reload } = msg;
const trackersBannerStatus = Object.assign({ ...state.trackers_banner_status, dismissals: [...state.trackers_banner_status.dismissals] });
const reloadBannerStatus = Object.assign({ ...state.reload_banner_status, dismissals: [...state.reload_banner_status.dismissals] });
const nowTime = Number(new Date().getTime());

let updated_notificationClasses = state.notificationClasses;
let updated_notificationShown = state.notificationShown;
@@ -212,7 +203,7 @@ const _showNotification = (state, action) => {
sendMessage('setPanelData', { needsReload: updated_needsReload });

// if we have changes and the user wants to see banners, then show
if ((msg.text || Object.keys(updated_needsReload.changes).length > 0) && reloadBannerStatus.show && nowTime > reloadBannerStatus.show_time) {
if ((msg.text || Object.keys(updated_needsReload.changes).length > 0) && state.reload_banner_status) {
updated_notificationShown = true;
} else {
updated_notificationShown = false;
@@ -221,7 +212,7 @@ const _showNotification = (state, action) => {
updated_notificationClasses = msg.classes || 'warning';
} else {
// Notification banners (success/warnings)
if (trackersBannerStatus.show && nowTime > trackersBannerStatus.show_time) {
if (state.trackers_banner_status) {
updated_notificationShown = true;
} else {
updated_notificationShown = false;
@@ -242,73 +233,21 @@ const _showNotification = (state, action) => {
};

/**
* Dismiss notification banners. Update the 'reload_banner_status' and
* 'trackers_banner_status' properties. If banners are dismissed BANNERS_ALLOWED times,
* within BANNER_INTERVAL, they will not be shown again for BANNERS_BANNED_TIME. Persist the change.
* Dismiss notification banners. Update notificationShown
* @memberOf PanelReactReducers
* @private
* @param {Object} state current state
* @param {Object} action action which contains data
* @return {Object} notification parameters
*/
const _closeNotification = (state, action) => {
const { banner_status_name } = action.data;
const BANNER_INTERVAL = 3600000; // one hour
const BANNERS_ALLOWED = 3;
const BANNERS_BANNED_TIME = 604800000; // one week

if (banner_status_name === 'temp_banner_status') {
return {
notificationShown: false,
};
}

// deep clone nested dismissals[]
let banner_status = { ...state[banner_status_name], dismissals: [...state[banner_status_name].dismissals] };

// show_time becomes 0 if it was set explicitly through Settinns or Setting page,
// or came through Sync which delivered choice different from default value
if (!banner_status.show_time) {
return false;
}

const { dismissals } = banner_status;
const lastDismissal = Number(new Date().getTime());

dismissals.push(lastDismissal);
let firstDismissal = dismissals[0];

while (lastDismissal > firstDismissal + BANNER_INTERVAL) {
dismissals.shift();
// eslint-disable-next-line prefer-destructuring
firstDismissal = dismissals[0];
}

if (dismissals.length >= BANNERS_ALLOWED) {
banner_status = {
show_time: lastDismissal + BANNERS_BANNED_TIME,
dismissals: [],
show: false,
};
} else {
banner_status = {
show_time: lastDismissal,
dismissals,
show: true,
};
}

// persist to background
sendMessage('setPanelData', { [banner_status_name]: banner_status });

return {
[banner_status_name]: banner_status,
notificationShown: false,
notificationShown: (action.data.banner_status_name === 'temp_banner_status') ? false : true
};
};

/**
* Set the 'show' property on reload_banner_status and trackers_banner_status. Update from
* Update reload_banner_status and trackers_banner_status from
* Settings > Notifications. Persist the change.
* @memberOf PanelReactReducers
* @private
@@ -318,11 +257,8 @@ const _closeNotification = (state, action) => {
* @return {Object} notification parameter
*/
const _updateNotificationStatus = (state, action) => {
const msg = action.data;
const banner_status_name = msg.event;
// deep clone nested dismissals[] and update 'show'
const banner_status = { ...state[banner_status_name], dismissals: [...state[banner_status_name].dismissals], show: msg.checked };

const banner_status = action.data.checked;
const banner_status_name = action.data.event;
// persist to background
sendMessage('setPanelData', { [banner_status_name]: banner_status });

@@ -116,6 +116,8 @@ class ConfData {
_initProperty('setup_step', 0);
_initProperty('setup_path', 0);
_initProperty('setup_block', 1);
_initProperty('reload_banner_status', true);
_initProperty('trackers_banner_status', true);

// Complex props
_initProperty('bugs', {});
@@ -138,16 +140,6 @@ class ConfData {
decoded_user_token: {},
is_validated: false
});
_initProperty('reload_banner_status', {
dismissals: [],
show_time: nowTime,
show: true
});
_initProperty('trackers_banner_status', {
dismissals: [],
show_time: nowTime,
show: true
});
});
}

ProTip! Use n and p to navigate between commits in a pull request.