|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
import {
|
|
|
|
|
NOTIFICATIONS_MOUNT,
|
|
|
|
|
NOTIFICATIONS_UNMOUNT,
|
|
|
|
|
NOTIFICATIONS_SET_VISIBILITY,
|
|
|
|
|
NOTIFICATIONS_UPDATE,
|
|
|
|
|
NOTIFICATIONS_EXPAND_SUCCESS,
|
|
|
|
|
NOTIFICATIONS_EXPAND_REQUEST,
|
|
|
|
@ -31,6 +32,7 @@ const initialState = ImmutableMap({
|
|
|
|
|
lastReadId: '0',
|
|
|
|
|
isLoading: false,
|
|
|
|
|
cleaningMode: false,
|
|
|
|
|
isTabVisible: true,
|
|
|
|
|
// notification removal mark of new notifs loaded whilst cleaningMode is true.
|
|
|
|
|
markNewForDelete: false,
|
|
|
|
|
});
|
|
|
|
@ -44,7 +46,7 @@ const notificationToMap = (state, notification) => ImmutableMap({
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const normalizeNotification = (state, notification) => {
|
|
|
|
|
const top = state.get('top') && state.get('mounted') > 0;
|
|
|
|
|
const top = !shouldCountUnreadNotifications(state);
|
|
|
|
|
|
|
|
|
|
if (top) {
|
|
|
|
|
state = state.set('lastReadId', notification.id);
|
|
|
|
@ -62,7 +64,7 @@ const normalizeNotification = (state, notification) => {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const expandNormalizedNotifications = (state, notifications, next) => {
|
|
|
|
|
const top = state.get('top') && state.get('mounted') > 0;
|
|
|
|
|
const top = !(shouldCountUnreadNotifications(state));
|
|
|
|
|
const lastReadId = state.get('lastReadId');
|
|
|
|
|
let items = ImmutableList();
|
|
|
|
|
|
|
|
|
@ -112,7 +114,9 @@ const clearUnread = (state) => {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const updateTop = (state, top) => {
|
|
|
|
|
if (top && state.get('mounted') > 0) {
|
|
|
|
|
state = state.set('top', top);
|
|
|
|
|
|
|
|
|
|
if (!shouldCountUnreadNotifications(state)) {
|
|
|
|
|
state = clearUnread(state);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -120,7 +124,7 @@ const updateTop = (state, top) => {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const deleteByStatus = (state, statusId) => {
|
|
|
|
|
const top = state.get('top') && state.get('mounted') > 0;
|
|
|
|
|
const top = !(shouldCountUnreadNotifications(state));
|
|
|
|
|
if (!top) {
|
|
|
|
|
const lastReadId = state.get('lastReadId');
|
|
|
|
|
const deletedUnread = state.get('items').filter(item => item !== null && item.get('status') === statusId && compareId(item.get('id'), lastReadId) > 0);
|
|
|
|
@ -157,14 +161,36 @@ const deleteMarkedNotifs = (state) => {
|
|
|
|
|
return state.update('items', list => list.filterNot(item => item.get('markedForDelete')));
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const updateMounted = (state) => {
|
|
|
|
|
state = state.update('mounted', count => count + 1);
|
|
|
|
|
if (!shouldCountUnreadNotifications(state)) {
|
|
|
|
|
state = clearUnread(state);
|
|
|
|
|
}
|
|
|
|
|
return state;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const updateVisibility = (state, visibility) => {
|
|
|
|
|
state = state.set('isTabVisible', visibility);
|
|
|
|
|
if (!shouldCountUnreadNotifications(state)) {
|
|
|
|
|
state = clearUnread(state);
|
|
|
|
|
}
|
|
|
|
|
return state;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const shouldCountUnreadNotifications = (state) => {
|
|
|
|
|
return !(state.get('isTabVisible') && state.get('top') && state.get('mounted') > 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default function notifications(state = initialState, action) {
|
|
|
|
|
let st;
|
|
|
|
|
|
|
|
|
|
switch(action.type) {
|
|
|
|
|
case NOTIFICATIONS_MOUNT:
|
|
|
|
|
return (state.get('top') ? clearUnread(state) : state).update('mounted', count => count + 1);
|
|
|
|
|
return updateMounted(state);
|
|
|
|
|
case NOTIFICATIONS_UNMOUNT:
|
|
|
|
|
return state.update('mounted', count => count - 1);
|
|
|
|
|
case NOTIFICATIONS_SET_VISIBILITY:
|
|
|
|
|
return updateVisibility(state, action.visibility);
|
|
|
|
|
case NOTIFICATIONS_EXPAND_REQUEST:
|
|
|
|
|
case NOTIFICATIONS_DELETE_MARKED_REQUEST:
|
|
|
|
|
return state.set('isLoading', true);
|
|
|
|
|