|
|
@ -7,6 +7,8 @@ import { |
|
|
|
NOTIFICATIONS_CLEAR, |
|
|
|
NOTIFICATIONS_CLEAR, |
|
|
|
NOTIFICATIONS_SCROLL_TOP, |
|
|
|
NOTIFICATIONS_SCROLL_TOP, |
|
|
|
NOTIFICATIONS_LOAD_PENDING, |
|
|
|
NOTIFICATIONS_LOAD_PENDING, |
|
|
|
|
|
|
|
NOTIFICATIONS_MOUNT, |
|
|
|
|
|
|
|
NOTIFICATIONS_UNMOUNT, |
|
|
|
} from '../actions/notifications'; |
|
|
|
} from '../actions/notifications'; |
|
|
|
import { |
|
|
|
import { |
|
|
|
ACCOUNT_BLOCK_SUCCESS, |
|
|
|
ACCOUNT_BLOCK_SUCCESS, |
|
|
@ -22,6 +24,7 @@ const initialState = ImmutableMap({ |
|
|
|
items: ImmutableList(), |
|
|
|
items: ImmutableList(), |
|
|
|
hasMore: true, |
|
|
|
hasMore: true, |
|
|
|
top: false, |
|
|
|
top: false, |
|
|
|
|
|
|
|
mounted: false, |
|
|
|
unread: 0, |
|
|
|
unread: 0, |
|
|
|
isLoading: false, |
|
|
|
isLoading: false, |
|
|
|
}); |
|
|
|
}); |
|
|
@ -35,9 +38,10 @@ const notificationToMap = notification => ImmutableMap({ |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
const normalizeNotification = (state, notification, usePendingItems) => { |
|
|
|
const normalizeNotification = (state, notification, usePendingItems) => { |
|
|
|
const top = state.get('top'); |
|
|
|
const top = state.get('top'); |
|
|
|
|
|
|
|
const mounted = state.get('mounted'); |
|
|
|
|
|
|
|
|
|
|
|
if (usePendingItems || !top || !state.get('pendingItems').isEmpty()) { |
|
|
|
if (usePendingItems || (!top && mounted) || !state.get('pendingItems').isEmpty()) { |
|
|
|
return state.update('pendingItems', list => list.unshift(notificationToMap(notification))).update('unread', unread => unread + 1); |
|
|
|
return state.update('pendingItems', list => list.unshift(notificationToMap(notification))).update('unread', unread => unread + 1); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -63,7 +67,7 @@ const expandNormalizedNotifications = (state, notifications, next, isLoadingRece |
|
|
|
|
|
|
|
|
|
|
|
return state.withMutations(mutable => { |
|
|
|
return state.withMutations(mutable => { |
|
|
|
if (!items.isEmpty()) { |
|
|
|
if (!items.isEmpty()) { |
|
|
|
usePendingItems = isLoadingRecent && (usePendingItems || !mutable.get('top') || !mutable.get('pendingItems').isEmpty()); |
|
|
|
usePendingItems = isLoadingRecent && (usePendingItems || (!mutable.get('top') && mutable.get('mounted')) || !mutable.get('pendingItems').isEmpty()); |
|
|
|
|
|
|
|
|
|
|
|
mutable.update(usePendingItems ? 'pendingItems' : 'items', list => { |
|
|
|
mutable.update(usePendingItems ? 'pendingItems' : 'items', list => { |
|
|
|
const lastIndex = 1 + list.findLastIndex( |
|
|
|
const lastIndex = 1 + list.findLastIndex( |
|
|
@ -134,6 +138,10 @@ export default function notifications(state = initialState, action) { |
|
|
|
return action.timeline === 'home' ? |
|
|
|
return action.timeline === 'home' ? |
|
|
|
state.update(action.usePendingItems ? 'pendingItems' : 'items', items => items.first() ? items.unshift(null) : items) : |
|
|
|
state.update(action.usePendingItems ? 'pendingItems' : 'items', items => items.first() ? items.unshift(null) : items) : |
|
|
|
state; |
|
|
|
state; |
|
|
|
|
|
|
|
case NOTIFICATIONS_MOUNT: |
|
|
|
|
|
|
|
return state.set('mounted', true); |
|
|
|
|
|
|
|
case NOTIFICATIONS_UNMOUNT: |
|
|
|
|
|
|
|
return state.set('mounted', false); |
|
|
|
default: |
|
|
|
default: |
|
|
|
return state; |
|
|
|
return state; |
|
|
|
} |
|
|
|
} |
|
|
|