From c92de334e8c8cdfcf1a730321b53e7e44f990859 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 17 Sep 2021 15:21:27 -0500 Subject: [PATCH 1/5] Suggestions: consolidate reducers --- .../features/follow_recommendations/index.js | 4 +- .../ui/components/who_to_follow_panel.js | 6 +-- app/soapbox/reducers/index.js | 2 - app/soapbox/reducers/suggestions.js | 53 +++++++++++++++++-- app/soapbox/reducers/suggestions_v2.js | 37 ------------- 5 files changed, 53 insertions(+), 49 deletions(-) delete mode 100644 app/soapbox/reducers/suggestions_v2.js diff --git a/app/soapbox/features/follow_recommendations/index.js b/app/soapbox/features/follow_recommendations/index.js index 129076666..58c6aa4d3 100644 --- a/app/soapbox/features/follow_recommendations/index.js +++ b/app/soapbox/features/follow_recommendations/index.js @@ -10,8 +10,8 @@ import Account from './components/account'; import Button from 'soapbox/components/button'; const mapStateToProps = state => ({ - suggestions: state.getIn(['suggestions_v2', 'items']), - isLoading: state.getIn(['suggestions_v2', 'isLoading']), + suggestions: state.getIn(['suggestions', 'items']), + isLoading: state.getIn(['suggestions', 'isLoading']), }); export default @connect(mapStateToProps) diff --git a/app/soapbox/features/ui/components/who_to_follow_panel.js b/app/soapbox/features/ui/components/who_to_follow_panel.js index 3013d3f80..31e87991d 100644 --- a/app/soapbox/features/ui/components/who_to_follow_panel.js +++ b/app/soapbox/features/ui/components/who_to_follow_panel.js @@ -43,10 +43,10 @@ class WhoToFollowPanel extends ImmutablePureComponent {
- {suggestions && suggestions.map(accountId => ( + {suggestions && suggestions.map(suggestion => ( { + return { + source: 'past_interactions', + account: account.id, + }; +}; + +const importAccounts = (state, accounts) => { + return state.withMutations(state => { + state.set('items', fromJS(accounts.map(accountToSuggestion))); + state.set('isLoading', false); + }); +}; + +const importSuggestions = (state, suggestions) => { + return state.withMutations(state => { + state.set('items', fromJS(suggestions.map(x => ({ ...x, account: x.account.id })))); + state.set('isLoading', false); + }); +}; + +const dismissAccount = (state, accountId) => { + return state.update('items', list => list.filterNot(x => x.account === accountId)); +}; + +const dismissAccounts = (state, accountIds) => { + return state.update('items', list => list.filterNot(x => accountIds.includes(x.account))); +}; + export default function suggestionsReducer(state = initialState, action) { switch(action.type) { case SUGGESTIONS_FETCH_REQUEST: + case SUGGESTIONS_V2_FETCH_REQUEST: 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('isLoading', false); - }); + return importAccounts(state, action.accounts); + case SUGGESTIONS_V2_FETCH_SUCCESS: + return importSuggestions(state, action.suggestions); case SUGGESTIONS_FETCH_FAIL: + case SUGGESTIONS_V2_FETCH_FAIL: return state.set('isLoading', false); case SUGGESTIONS_DISMISS: - return state.update('items', list => list.filterNot(id => id === action.id)); + return dismissAccount(state, action.id); + case ACCOUNT_BLOCK_SUCCESS: + case ACCOUNT_MUTE_SUCCESS: + return dismissAccount(state, action.relationship.id); + case DOMAIN_BLOCK_SUCCESS: + return dismissAccounts(state, action.accounts); default: return state; } diff --git a/app/soapbox/reducers/suggestions_v2.js b/app/soapbox/reducers/suggestions_v2.js deleted file mode 100644 index da06d4e1b..000000000 --- a/app/soapbox/reducers/suggestions_v2.js +++ /dev/null @@ -1,37 +0,0 @@ -import { - SUGGESTIONS_V2_FETCH_REQUEST, - SUGGESTIONS_V2_FETCH_SUCCESS, - SUGGESTIONS_V2_FETCH_FAIL, -} from '../actions/suggestions_v2'; -import { SUGGESTIONS_DISMISS } 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'; - -const initialState = ImmutableMap({ - items: ImmutableList(), - isLoading: false, -}); - -export default function suggestionsReducer(state = initialState, action) { - switch(action.type) { - case SUGGESTIONS_V2_FETCH_REQUEST: - return state.set('isLoading', true); - case SUGGESTIONS_V2_FETCH_SUCCESS: - return state.withMutations(map => { - map.set('items', fromJS(action.suggestions.map(x => ({ ...x, account: x.account.id })))); - map.set('isLoading', false); - }); - case SUGGESTIONS_V2_FETCH_FAIL: - return state.set('isLoading', false); - case SUGGESTIONS_DISMISS: - 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(x => x.account === action.relationship.id)); - case DOMAIN_BLOCK_SUCCESS: - return state.update('items', list => list.filterNot(x => action.accounts.includes(x.account))); - default: - return state; - } -} From 1bffa04a997df258bd2063b1f821e733377ce033 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 17 Sep 2021 15:38:38 -0500 Subject: [PATCH 2/5] Suggestions: consolidate actions --- app/soapbox/actions/suggestions.js | 69 +++++++++++-------- app/soapbox/actions/suggestions_v2.js | 18 ----- .../features/follow_recommendations/index.js | 2 +- app/soapbox/reducers/suggestions.js | 4 +- 4 files changed, 42 insertions(+), 51 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 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 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 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 fetchSuggestions() { return (dispatch, getState) => { - dispatch(fetchSuggestionsRequest()); + const state = getState(); + const instance = state.get('instance'); + const features = getFeatures(instance); - api(getState).get('/api/v1/suggestions').then(response => { - dispatch(importFetchedAccounts(response.data)); - dispatch(fetchSuggestionsSuccess(response.data)); - }).catch(error => dispatch(fetchSuggestionsFail(error))); - }; -} - -export function fetchSuggestionsRequest() { - return { - type: SUGGESTIONS_FETCH_REQUEST, - skipLoading: true, - }; -} - -export function fetchSuggestionsSuccess(accounts) { - return { - type: SUGGESTIONS_FETCH_SUCCESS, - accounts, - skipLoading: true, - }; -} - -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'; From eb01996c123e776d5cfd955819e98606d87afd47 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 17 Sep 2021 16:03:17 -0500 Subject: [PATCH 3/5] Suggestions: break out FollowRecommendationsList component --- .../components/account.js | 2 +- .../components/follow_recommendations_list.js | 60 +++++++++++++++++++ .../features/follow_recommendations/index.js | 54 +++-------------- app/styles/components/columns.scss | 4 ++ 4 files changed, 73 insertions(+), 47 deletions(-) create mode 100644 app/soapbox/features/follow_recommendations/components/follow_recommendations_list.js diff --git a/app/soapbox/features/follow_recommendations/components/account.js b/app/soapbox/features/follow_recommendations/components/account.js index 97b143cc0..e2fbce0bf 100644 --- a/app/soapbox/features/follow_recommendations/components/account.js +++ b/app/soapbox/features/follow_recommendations/components/account.js @@ -66,7 +66,7 @@ class Account extends ImmutablePureComponent { return (
- +
diff --git a/app/soapbox/features/follow_recommendations/components/follow_recommendations_list.js b/app/soapbox/features/follow_recommendations/components/follow_recommendations_list.js new file mode 100644 index 000000000..7eab96bc7 --- /dev/null +++ b/app/soapbox/features/follow_recommendations/components/follow_recommendations_list.js @@ -0,0 +1,60 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import PropTypes from 'prop-types'; +import ImmutablePureComponent from 'react-immutable-pure-component'; +import ImmutablePropTypes from 'react-immutable-proptypes'; +import { FormattedMessage } from 'react-intl'; +import { fetchSuggestions } from 'soapbox/actions/suggestions'; +import Account from './account'; +import LoadingIndicator from 'soapbox/components/loading_indicator'; + +const mapStateToProps = state => ({ + suggestions: state.getIn(['suggestions', 'items']), + isLoading: state.getIn(['suggestions', 'isLoading']), +}); + +export default @connect(mapStateToProps) +class FollowRecommendationsList extends ImmutablePureComponent { + + static propTypes = { + dispatch: PropTypes.func.isRequired, + suggestions: ImmutablePropTypes.list, + isLoading: PropTypes.bool, + }; + + componentDidMount() { + const { dispatch, suggestions } = this.props; + + // Don't re-fetch if we're e.g. navigating backwards to this page, + // since we don't want followed accounts to disappear from the list + if (suggestions.size === 0) { + dispatch(fetchSuggestions(true)); + } + } + + render() { + const { suggestions, isLoading } = this.props; + + if (isLoading) { + return ( +
+ +
+ ); + } + + return ( +
+ {suggestions.size > 0 ? suggestions.map(suggestion => ( + + )) : ( +
+ +
+ )} +
+ ); + + } + +} diff --git a/app/soapbox/features/follow_recommendations/index.js b/app/soapbox/features/follow_recommendations/index.js index 22e2a24f0..6e043c9f2 100644 --- a/app/soapbox/features/follow_recommendations/index.js +++ b/app/soapbox/features/follow_recommendations/index.js @@ -1,42 +1,16 @@ import React from 'react'; import PropTypes from 'prop-types'; -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'; import Column from 'soapbox/features/ui/components/column'; -import Account from './components/account'; import Button from 'soapbox/components/button'; +import FollowRecommendationsList from './components/follow_recommendations_list'; -const mapStateToProps = state => ({ - suggestions: state.getIn(['suggestions', 'items']), - isLoading: state.getIn(['suggestions', 'isLoading']), -}); - -export default @connect(mapStateToProps) -class FollowRecommendations extends ImmutablePureComponent { +export default class FollowRecommendations extends React.Component { static contextTypes = { router: PropTypes.object.isRequired, }; - static propTypes = { - dispatch: PropTypes.func.isRequired, - suggestions: ImmutablePropTypes.list, - isLoading: PropTypes.bool, - }; - - componentDidMount() { - const { dispatch, suggestions } = this.props; - - // Don't re-fetch if we're e.g. navigating backwards to this page, - // since we don't want followed accounts to disappear from the list - if (suggestions.size === 0) { - dispatch(fetchSuggestions(true)); - } - } - handleDone = () => { const { router } = this.context; @@ -44,8 +18,6 @@ class FollowRecommendations extends ImmutablePureComponent { } render() { - const { suggestions, isLoading } = this.props; - return (
@@ -54,23 +26,13 @@ class FollowRecommendations extends ImmutablePureComponent {

- {!isLoading && ( - <> -
- {suggestions.size > 0 ? suggestions.map(suggestion => ( - - )) : ( -
- -
- )} -
+ -
- -
- - )} +
+ +
); diff --git a/app/styles/components/columns.scss b/app/styles/components/columns.scss index ee909d686..2890c8283 100644 --- a/app/styles/components/columns.scss +++ b/app/styles/components/columns.scss @@ -810,3 +810,7 @@ width: auto; } } + +.column-list { + position: relative; +} From 9b822a6c12224b23f97517693ff2041da9b6fce4 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 17 Sep 2021 17:09:37 -0500 Subject: [PATCH 4/5] Suggestions: display suggestions on Home timeline when there are no posts --- app/soapbox/features/home_timeline/index.js | 76 +++++++++++++++++---- 1 file changed, 64 insertions(+), 12 deletions(-) diff --git a/app/soapbox/features/home_timeline/index.js b/app/soapbox/features/home_timeline/index.js index e48067ed6..71a146549 100644 --- a/app/soapbox/features/home_timeline/index.js +++ b/app/soapbox/features/home_timeline/index.js @@ -4,20 +4,35 @@ import { expandHomeTimeline } from '../../actions/timelines'; import PropTypes from 'prop-types'; import StatusListContainer from '../ui/containers/status_list_container'; import Column from '../../components/column'; +import BundleContainer from 'soapbox/features/ui/containers/bundle_container'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import ColumnSettingsContainer from './containers/column_settings_container'; import HomeColumnHeader from '../../components/home_column_header'; import { Link } from 'react-router-dom'; +import Button from 'soapbox/components/button'; +import { OrderedSet as ImmutableOrderedSet } from 'immutable'; +import { getFeatures } from 'soapbox/utils/features'; + +function FollowRecommendationsList() { + return import(/* webpackChunkName: "features/follow_recommendations" */'soapbox/features/follow_recommendations/components/follow_recommendations_list'); +} const messages = defineMessages({ title: { id: 'column.home', defaultMessage: 'Home' }, }); -const mapStateToProps = state => ({ - hasUnread: state.getIn(['timelines', 'home', 'unread']) > 0, - isPartial: state.getIn(['timelines', 'home', 'isPartial']), - siteTitle: state.getIn(['instance', 'title']), -}); +const mapStateToProps = state => { + const instance = state.get('instance'); + const features = getFeatures(instance); + + return { + hasUnread: state.getIn(['timelines', 'home', 'unread']) > 0, + isPartial: state.getIn(['timelines', 'home', 'isPartial']), + siteTitle: state.getIn(['instance', 'title']), + isEmpty: state.getIn(['timelines', 'home', 'items'], ImmutableOrderedSet()).isEmpty(), + features, + }; +}; export default @connect(mapStateToProps) @injectIntl @@ -29,8 +44,14 @@ class HomeTimeline extends React.PureComponent { hasUnread: PropTypes.bool, isPartial: PropTypes.bool, siteTitle: PropTypes.string, + isEmpty: PropTypes.bool, + features: PropTypes.object.isRequired, }; + state = { + done: false, + } + handleLoadMore = maxId => { this.props.dispatch(expandHomeTimeline({ maxId })); } @@ -68,20 +89,51 @@ class HomeTimeline extends React.PureComponent { } } + handleDone = e => { + this.props.dispatch(expandHomeTimeline()); + this.setState({ done: true }); + } + + renderFollowRecommendations = () => { + return ( +
+
+

+

+
+ + + {Component => } + + +
+ +
+
+ ); + } + render() { - const { intl, hasUnread, siteTitle } = this.props; + const { intl, hasUnread, siteTitle, isEmpty, features } = this.props; + const { done } = this.state; return ( - }} />} - /> + {(features.suggestions && isEmpty && !done) ? ( + this.renderFollowRecommendations() + ) : ( + }} />} + /> + )} ); } From 5e30423b5cf9db4a580e4e5ca101de228c44dbce Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 17 Sep 2021 17:12:53 -0500 Subject: [PATCH 5/5] Always display FeaturesPanel at the top of the column --- app/soapbox/pages/default_page.js | 2 +- app/soapbox/pages/home_page.js | 2 +- app/soapbox/pages/remote_instance_page.js | 10 +--------- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/app/soapbox/pages/default_page.js b/app/soapbox/pages/default_page.js index b483d117a..71bfa96a2 100644 --- a/app/soapbox/pages/default_page.js +++ b/app/soapbox/pages/default_page.js @@ -43,9 +43,9 @@ class DefaultPage extends ImmutablePureComponent {
+ {me ? : } {showTrendsPanel && } {showWhoToFollowPanel && } - {me ? : }
diff --git a/app/soapbox/pages/home_page.js b/app/soapbox/pages/home_page.js index b39403c2f..5ed036719 100644 --- a/app/soapbox/pages/home_page.js +++ b/app/soapbox/pages/home_page.js @@ -86,9 +86,9 @@ class HomePage extends ImmutablePureComponent {
+ {me ? : } {showTrendsPanel && } {showWhoToFollowPanel && } - {me ? : }
diff --git a/app/soapbox/pages/remote_instance_page.js b/app/soapbox/pages/remote_instance_page.js index bf2b9f04c..b1a86ba9a 100644 --- a/app/soapbox/pages/remote_instance_page.js +++ b/app/soapbox/pages/remote_instance_page.js @@ -1,12 +1,9 @@ import React from 'react'; import { connect } from 'react-redux'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import WhoToFollowPanel from 'soapbox/features/ui/components/who_to_follow_panel'; -import TrendsPanel from 'soapbox/features/ui/components/trends_panel'; import PromoPanel from 'soapbox/features/ui/components/promo_panel'; import FeaturesPanel from 'soapbox/features/ui/components/features_panel'; import LinkFooter from 'soapbox/features/ui/components/link_footer'; -import { getFeatures } from 'soapbox/utils/features'; import InstanceInfoPanel from 'soapbox/features/ui/components/instance_info_panel'; import InstanceModerationPanel from 'soapbox/features/ui/components/instance_moderation_panel'; import { federationRestrictionsDisclosed } from 'soapbox/utils/state'; @@ -15,12 +12,9 @@ import { isAdmin } from 'soapbox/utils/accounts'; const mapStateToProps = state => { const me = state.get('me'); const account = state.getIn(['accounts', me]); - const features = getFeatures(state.get('instance')); return { me, - showTrendsPanel: features.trends, - showWhoToFollowPanel: features.suggestions, disclosed: federationRestrictionsDisclosed(state), isAdmin: isAdmin(account), }; @@ -30,7 +24,7 @@ export default @connect(mapStateToProps) class RemoteInstancePage extends ImmutablePureComponent { render() { - const { me, children, showTrendsPanel, showWhoToFollowPanel, params: { instance: host }, disclosed, isAdmin } = this.props; + const { me, children, params: { instance: host }, disclosed, isAdmin } = this.props; return (
@@ -52,8 +46,6 @@ class RemoteInstancePage extends ImmutablePureComponent {
- {showTrendsPanel && } - {showWhoToFollowPanel && } {me && }