forked from cybrespace/mastodon
		
	Fix quickly switching notification filters resulting in empty or incorrect list (#18960)
This commit is contained in:
		
							parent
							
								
									50487db122
								
							
						
					
					
						commit
						afb8bc97d0
					
				
					 2 changed files with 7 additions and 7 deletions
				
			
		| 
						 | 
					@ -141,13 +141,13 @@ const excludeTypesFromFilter = filter => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const noOp = () => {};
 | 
					const noOp = () => {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function expandNotifications({ maxId } = {}, done = noOp) {
 | 
					export function expandNotifications({ maxId, forceLoad } = {}, done = noOp) {
 | 
				
			||||||
  return (dispatch, getState) => {
 | 
					  return (dispatch, getState) => {
 | 
				
			||||||
    const activeFilter = getState().getIn(['settings', 'notifications', 'quickFilter', 'active']);
 | 
					    const activeFilter = getState().getIn(['settings', 'notifications', 'quickFilter', 'active']);
 | 
				
			||||||
    const notifications = getState().get('notifications');
 | 
					    const notifications = getState().get('notifications');
 | 
				
			||||||
    const isLoadingMore = !!maxId;
 | 
					    const isLoadingMore = !!maxId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (notifications.get('isLoading')) {
 | 
					    if (notifications.get('isLoading') && !forceLoad) {
 | 
				
			||||||
      done();
 | 
					      done();
 | 
				
			||||||
      return;
 | 
					      return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -243,7 +243,7 @@ export function setFilter (filterType) {
 | 
				
			||||||
      path: ['notifications', 'quickFilter', 'active'],
 | 
					      path: ['notifications', 'quickFilter', 'active'],
 | 
				
			||||||
      value: filterType,
 | 
					      value: filterType,
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    dispatch(expandNotifications());
 | 
					    dispatch(expandNotifications({ forceLoad: true }));
 | 
				
			||||||
    dispatch(saveSettings());
 | 
					    dispatch(saveSettings());
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,7 +41,7 @@ const initialState = ImmutableMap({
 | 
				
			||||||
  lastReadId: '0',
 | 
					  lastReadId: '0',
 | 
				
			||||||
  readMarkerId: '0',
 | 
					  readMarkerId: '0',
 | 
				
			||||||
  isTabVisible: true,
 | 
					  isTabVisible: true,
 | 
				
			||||||
  isLoading: false,
 | 
					  isLoading: 0,
 | 
				
			||||||
  browserSupport: false,
 | 
					  browserSupport: false,
 | 
				
			||||||
  browserPermission: 'default',
 | 
					  browserPermission: 'default',
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
| 
						 | 
					@ -115,7 +115,7 @@ const expandNormalizedNotifications = (state, notifications, next, isLoadingRece
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mutable.set('isLoading', false);
 | 
					    mutable.update('isLoading', (nbLoading) => nbLoading - 1);
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -214,9 +214,9 @@ export default function notifications(state = initialState, action) {
 | 
				
			||||||
  case NOTIFICATIONS_LOAD_PENDING:
 | 
					  case NOTIFICATIONS_LOAD_PENDING:
 | 
				
			||||||
    return state.update('items', list => state.get('pendingItems').concat(list.take(40))).set('pendingItems', ImmutableList()).set('unread', 0);
 | 
					    return state.update('items', list => state.get('pendingItems').concat(list.take(40))).set('pendingItems', ImmutableList()).set('unread', 0);
 | 
				
			||||||
  case NOTIFICATIONS_EXPAND_REQUEST:
 | 
					  case NOTIFICATIONS_EXPAND_REQUEST:
 | 
				
			||||||
    return state.set('isLoading', true);
 | 
					    return state.update('isLoading', (nbLoading) => nbLoading + 1);
 | 
				
			||||||
  case NOTIFICATIONS_EXPAND_FAIL:
 | 
					  case NOTIFICATIONS_EXPAND_FAIL:
 | 
				
			||||||
    return state.set('isLoading', false);
 | 
					    return state.update('isLoading', (nbLoading) => nbLoading - 1);
 | 
				
			||||||
  case NOTIFICATIONS_FILTER_SET:
 | 
					  case NOTIFICATIONS_FILTER_SET:
 | 
				
			||||||
    return state.set('items', ImmutableList()).set('pendingItems', ImmutableList()).set('hasMore', true);
 | 
					    return state.set('items', ImmutableList()).set('pendingItems', ImmutableList()).set('hasMore', true);
 | 
				
			||||||
  case NOTIFICATIONS_SCROLL_TOP:
 | 
					  case NOTIFICATIONS_SCROLL_TOP:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue