Add cold-start follow recommendations (#15945)
This commit is contained in:
		
							parent
							
								
									ad61265268
								
							
						
					
					
						commit
						f7117646af
					
				
					 32 changed files with 560 additions and 26 deletions
				
			
		| 
						 | 
				
			
			@ -11,8 +11,8 @@ export function fetchSuggestions() {
 | 
			
		|||
  return (dispatch, getState) => {
 | 
			
		||||
    dispatch(fetchSuggestionsRequest());
 | 
			
		||||
 | 
			
		||||
    api(getState).get('/api/v1/suggestions').then(response => {
 | 
			
		||||
      dispatch(importFetchedAccounts(response.data));
 | 
			
		||||
    api(getState).get('/api/v2/suggestions').then(response => {
 | 
			
		||||
      dispatch(importFetchedAccounts(response.data.map(x => x.account)));
 | 
			
		||||
      dispatch(fetchSuggestionsSuccess(response.data));
 | 
			
		||||
    }).catch(error => dispatch(fetchSuggestionsFail(error)));
 | 
			
		||||
  };
 | 
			
		||||
| 
						 | 
				
			
			@ -25,10 +25,10 @@ export function fetchSuggestionsRequest() {
 | 
			
		|||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export function fetchSuggestionsSuccess(accounts) {
 | 
			
		||||
export function fetchSuggestionsSuccess(suggestions) {
 | 
			
		||||
  return {
 | 
			
		||||
    type: SUGGESTIONS_FETCH_SUCCESS,
 | 
			
		||||
    accounts,
 | 
			
		||||
    suggestions,
 | 
			
		||||
    skipLoading: true,
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,13 +51,13 @@ class SearchResults extends ImmutablePureComponent {
 | 
			
		|||
              <FormattedMessage id='suggestions.header' defaultMessage='You might be interested in…' />
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            {suggestions && suggestions.map(accountId => (
 | 
			
		||||
            {suggestions && suggestions.map(suggestion => (
 | 
			
		||||
              <AccountContainer
 | 
			
		||||
                key={accountId}
 | 
			
		||||
                id={accountId}
 | 
			
		||||
                actionIcon='times'
 | 
			
		||||
                actionTitle={intl.formatMessage(messages.dismissSuggestion)}
 | 
			
		||||
                onActionClick={dismissSuggestion}
 | 
			
		||||
                key={suggestion.get('account')}
 | 
			
		||||
                id={suggestion.get('account')}
 | 
			
		||||
                actionIcon={suggestion.get('source') === 'past_interaction' && 'times'}
 | 
			
		||||
                actionTitle={suggestion.get('source') === 'past_interaction' && intl.formatMessage(messages.dismissSuggestion)}
 | 
			
		||||
                onActionClick={suggestion.get('source') === 'past_interaction' && dismissSuggestion}
 | 
			
		||||
              />
 | 
			
		||||
            ))}
 | 
			
		||||
          </div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,18 +19,18 @@ export default function suggestionsReducer(state = initialState, action) {
 | 
			
		|||
    return state.set('isLoading', true);
 | 
			
		||||
  case SUGGESTIONS_FETCH_SUCCESS:
 | 
			
		||||
    return state.withMutations(map => {
 | 
			
		||||
      map.set('items', fromJS(action.accounts.map(x => x.id)));
 | 
			
		||||
      map.set('items', fromJS(action.suggestions.map(x => ({ ...x, account: x.account.id }))));
 | 
			
		||||
      map.set('isLoading', false);
 | 
			
		||||
    });
 | 
			
		||||
  case SUGGESTIONS_FETCH_FAIL:
 | 
			
		||||
    return state.set('isLoading', false);
 | 
			
		||||
  case SUGGESTIONS_DISMISS:
 | 
			
		||||
    return state.update('items', list => list.filterNot(id => id === action.id));
 | 
			
		||||
    return state.update('items', list => list.filterNot(x => x.account === action.id));
 | 
			
		||||
  case ACCOUNT_BLOCK_SUCCESS:
 | 
			
		||||
  case ACCOUNT_MUTE_SUCCESS:
 | 
			
		||||
    return state.update('items', list => list.filterNot(id => id === action.relationship.id));
 | 
			
		||||
    return state.update('items', list => list.filterNot(x => x.account === action.relationship.id));
 | 
			
		||||
  case DOMAIN_BLOCK_SUCCESS:
 | 
			
		||||
    return state.update('items', list => list.filterNot(id => action.accounts.includes(id)));
 | 
			
		||||
    return state.update('items', list => list.filterNot(x => action.accounts.includes(x.account)));
 | 
			
		||||
  default:
 | 
			
		||||
    return state;
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue