From 1bffa04a997df258bd2063b1f821e733377ce033 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 17 Sep 2021 15:38:38 -0500 Subject: [PATCH] Suggestions: consolidate actions --- app/soapbox/actions/suggestions.js | 59 +++++++++++-------- app/soapbox/actions/suggestions_v2.js | 18 ------ .../features/follow_recommendations/index.js | 2 +- app/soapbox/reducers/suggestions.js | 4 +- 4 files changed, 37 insertions(+), 46 deletions(-) delete mode 100644 app/soapbox/actions/suggestions_v2.js diff --git a/app/soapbox/actions/suggestions.js b/app/soapbox/actions/suggestions.js index be00cb610..71026bad5 100644 --- a/app/soapbox/actions/suggestions.js +++ b/app/soapbox/actions/suggestions.js @@ -1,6 +1,7 @@ import api from '../api'; import { importFetchedAccounts } from './importer'; import { isLoggedIn } from 'soapbox/utils/auth'; +import { getFeatures } from 'soapbox/utils/features'; export const SUGGESTIONS_FETCH_REQUEST = 'SUGGESTIONS_FETCH_REQUEST'; export const SUGGESTIONS_FETCH_SUCCESS = 'SUGGESTIONS_FETCH_SUCCESS'; @@ -8,38 +9,48 @@ export const SUGGESTIONS_FETCH_FAIL = 'SUGGESTIONS_FETCH_FAIL'; export const SUGGESTIONS_DISMISS = 'SUGGESTIONS_DISMISS'; -export function fetchSuggestions() { - return (dispatch, getState) => { - dispatch(fetchSuggestionsRequest()); +export const SUGGESTIONS_V2_FETCH_REQUEST = 'SUGGESTIONS_V2_FETCH_REQUEST'; +export const SUGGESTIONS_V2_FETCH_SUCCESS = 'SUGGESTIONS_V2_FETCH_SUCCESS'; +export const SUGGESTIONS_V2_FETCH_FAIL = 'SUGGESTIONS_V2_FETCH_FAIL'; - api(getState).get('/api/v1/suggestions').then(response => { - dispatch(importFetchedAccounts(response.data)); - dispatch(fetchSuggestionsSuccess(response.data)); - }).catch(error => dispatch(fetchSuggestionsFail(error))); +export function fetchSuggestionsV1() { + return (dispatch, getState) => { + dispatch({ type: SUGGESTIONS_FETCH_REQUEST, skipLoading: true }); + api(getState).get('/api/v1/suggestions').then(({ data: accounts }) => { + dispatch(importFetchedAccounts(accounts)); + dispatch({ type: SUGGESTIONS_FETCH_SUCCESS, accounts, skipLoading: true }); + }).catch(error => { + dispatch({ type: SUGGESTIONS_FETCH_FAIL, error, skipLoading: true, skipAlert: true }); + }); }; } -export function fetchSuggestionsRequest() { - return { - type: SUGGESTIONS_FETCH_REQUEST, - skipLoading: true, +export function fetchSuggestionsV2() { + return (dispatch, getState) => { + dispatch({ type: SUGGESTIONS_V2_FETCH_REQUEST, skipLoading: true }); + api(getState).get('/api/v2/suggestions').then(({ data: suggestions }) => { + const accounts = suggestions.map(({ account }) => account); + dispatch(importFetchedAccounts(accounts)); + dispatch({ type: SUGGESTIONS_V2_FETCH_SUCCESS, suggestions, skipLoading: true }); + }).catch(error => { + dispatch({ type: SUGGESTIONS_V2_FETCH_FAIL, error, skipLoading: true, skipAlert: true }); + }); }; } -export function fetchSuggestionsSuccess(accounts) { - return { - type: SUGGESTIONS_FETCH_SUCCESS, - accounts, - skipLoading: true, - }; -} +export function fetchSuggestions() { + return (dispatch, getState) => { + const state = getState(); + const instance = state.get('instance'); + const features = getFeatures(instance); -export function fetchSuggestionsFail(error) { - return { - type: SUGGESTIONS_FETCH_FAIL, - error, - skipLoading: true, - skipAlert: true, + if (features.suggestionsV2) { + dispatch(fetchSuggestionsV2()); + } else if (features.suggestions) { + dispatch(fetchSuggestionsV1()); + } else { + // Do nothing + } }; } diff --git a/app/soapbox/actions/suggestions_v2.js b/app/soapbox/actions/suggestions_v2.js deleted file mode 100644 index 0cb33fe39..000000000 --- a/app/soapbox/actions/suggestions_v2.js +++ /dev/null @@ -1,18 +0,0 @@ -import api from '../api'; -import { importFetchedAccount } from './importer'; - -export const SUGGESTIONS_V2_FETCH_REQUEST = 'SUGGESTIONS_V2_FETCH_REQUEST'; -export const SUGGESTIONS_V2_FETCH_SUCCESS = 'SUGGESTIONS_V2_FETCH_SUCCESS'; -export const SUGGESTIONS_V2_FETCH_FAIL = 'SUGGESTIONS_V2_FETCH_FAIL'; - -export function fetchSuggestions() { - return (dispatch, getState) => { - dispatch({ type: SUGGESTIONS_V2_FETCH_REQUEST, skipLoading: true }); - api(getState).get('/api/v2/suggestions').then(({ data: suggestions }) => { - suggestions.forEach(({ account }) => dispatch(importFetchedAccount(account))); - dispatch({ type: SUGGESTIONS_V2_FETCH_SUCCESS, suggestions, skipLoading: true }); - }).catch(error => { - dispatch({ type: SUGGESTIONS_V2_FETCH_FAIL, error, skipLoading: true, skipAlert: true }); - }); - }; -} diff --git a/app/soapbox/features/follow_recommendations/index.js b/app/soapbox/features/follow_recommendations/index.js index 58c6aa4d3..22e2a24f0 100644 --- a/app/soapbox/features/follow_recommendations/index.js +++ b/app/soapbox/features/follow_recommendations/index.js @@ -4,7 +4,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; import { FormattedMessage } from 'react-intl'; -import { fetchSuggestions } from 'soapbox/actions/suggestions_v2'; +import { fetchSuggestions } from 'soapbox/actions/suggestions'; import Column from 'soapbox/features/ui/components/column'; import Account from './components/account'; import Button from 'soapbox/components/button'; diff --git a/app/soapbox/reducers/suggestions.js b/app/soapbox/reducers/suggestions.js index 60f2b2ab0..6cb1b545c 100644 --- a/app/soapbox/reducers/suggestions.js +++ b/app/soapbox/reducers/suggestions.js @@ -3,12 +3,10 @@ import { SUGGESTIONS_FETCH_SUCCESS, SUGGESTIONS_FETCH_FAIL, SUGGESTIONS_DISMISS, -} from '../actions/suggestions'; -import { SUGGESTIONS_V2_FETCH_REQUEST, SUGGESTIONS_V2_FETCH_SUCCESS, SUGGESTIONS_V2_FETCH_FAIL, -} from '../actions/suggestions_v2'; +} from '../actions/suggestions'; import { ACCOUNT_BLOCK_SUCCESS, ACCOUNT_MUTE_SUCCESS } from 'soapbox/actions/accounts'; import { DOMAIN_BLOCK_SUCCESS } from 'soapbox/actions/domain_blocks'; import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable';