aboutsummaryrefslogtreecommitdiff
path: root/app/javascript/mastodon/features/account_timeline/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/javascript/mastodon/features/account_timeline/index.js')
-rw-r--r--app/javascript/mastodon/features/account_timeline/index.js55
1 files changed, 35 insertions, 20 deletions
diff --git a/app/javascript/mastodon/features/account_timeline/index.js b/app/javascript/mastodon/features/account_timeline/index.js
index fa4239d6f..c5eeec083 100644
--- a/app/javascript/mastodon/features/account_timeline/index.js
+++ b/app/javascript/mastodon/features/account_timeline/index.js
@@ -2,7 +2,7 @@ import React from 'react';
import { connect } from 'react-redux';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
-import { fetchAccount } from '../../actions/accounts';
+import { lookupAccount, fetchAccount } from '../../actions/accounts';
import { expandAccountFeaturedTimeline, expandAccountTimeline } from '../../actions/timelines';
import StatusList from '../../components/status_list';
import LoadingIndicator from '../../components/loading_indicator';
@@ -20,10 +20,19 @@ import { connectTimeline, disconnectTimeline } from 'mastodon/actions/timelines'
const emptyList = ImmutableList();
-const mapStateToProps = (state, { params: { accountId }, withReplies = false }) => {
+const mapStateToProps = (state, { params: { acct }, withReplies = false }) => {
+ const accountId = state.getIn(['accounts_map', acct]);
+
+ if (!accountId) {
+ return {
+ isLoading: true,
+ };
+ }
+
const path = withReplies ? `${accountId}:with_replies` : accountId;
return {
+ accountId,
remote: !!(state.getIn(['accounts', accountId, 'acct']) !== state.getIn(['accounts', accountId, 'username'])),
remoteUrl: state.getIn(['accounts', accountId, 'url']),
isAccount: !!state.getIn(['accounts', accountId]),
@@ -48,7 +57,10 @@ export default @connect(mapStateToProps)
class AccountTimeline extends ImmutablePureComponent {
static propTypes = {
- params: PropTypes.object.isRequired,
+ params: PropTypes.shape({
+ acct: PropTypes.string.isRequired,
+ }).isRequired,
+ accountId: PropTypes.string,
dispatch: PropTypes.func.isRequired,
shouldUpdateScroll: PropTypes.func,
statusIds: ImmutablePropTypes.list,
@@ -64,8 +76,8 @@ class AccountTimeline extends ImmutablePureComponent {
multiColumn: PropTypes.bool,
};
- componentWillMount () {
- const { params: { accountId }, withReplies, dispatch } = this.props;
+ _load () {
+ const { accountId, withReplies, dispatch } = this.props;
dispatch(fetchAccount(accountId));
dispatch(fetchAccountIdentityProofs(accountId));
@@ -81,29 +93,32 @@ class AccountTimeline extends ImmutablePureComponent {
}
}
- componentWillReceiveProps (nextProps) {
- const { dispatch } = this.props;
+ componentDidMount () {
+ const { params: { acct }, accountId, dispatch } = this.props;
- if ((nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) || nextProps.withReplies !== this.props.withReplies) {
- dispatch(fetchAccount(nextProps.params.accountId));
- dispatch(fetchAccountIdentityProofs(nextProps.params.accountId));
+ if (accountId) {
+ this._load();
+ } else {
+ dispatch(lookupAccount(acct));
+ }
+ }
- if (!nextProps.withReplies) {
- dispatch(expandAccountFeaturedTimeline(nextProps.params.accountId));
- }
+ componentDidUpdate (prevProps) {
+ const { params: { acct }, accountId, dispatch } = this.props;
- dispatch(expandAccountTimeline(nextProps.params.accountId, { withReplies: nextProps.params.withReplies }));
+ if (prevProps.accountId !== accountId && accountId) {
+ this._load();
+ } else if (prevProps.params.acct !== acct) {
+ dispatch(lookupAccount(acct));
}
- if (nextProps.params.accountId === me && this.props.params.accountId !== me) {
- dispatch(connectTimeline(`account:${me}`));
- } else if (this.props.params.accountId === me && nextProps.params.accountId !== me) {
+ if (prevProps.accountId === me && accountId !== me) {
dispatch(disconnectTimeline(`account:${me}`));
}
}
componentWillUnmount () {
- const { dispatch, params: { accountId } } = this.props;
+ const { dispatch, accountId } = this.props;
if (accountId === me) {
dispatch(disconnectTimeline(`account:${me}`));
@@ -111,7 +126,7 @@ class AccountTimeline extends ImmutablePureComponent {
}
handleLoadMore = maxId => {
- this.props.dispatch(expandAccountTimeline(this.props.params.accountId, { maxId, withReplies: this.props.withReplies }));
+ this.props.dispatch(expandAccountTimeline(this.props.accountId, { maxId, withReplies: this.props.withReplies }));
}
render () {
@@ -153,7 +168,7 @@ class AccountTimeline extends ImmutablePureComponent {
<ColumnBackButton multiColumn={multiColumn} />
<StatusList
- prepend={<HeaderContainer accountId={this.props.params.accountId} />}
+ prepend={<HeaderContainer accountId={this.props.accountId} />}
alwaysPrepend
append={remoteMessage}
scrollKey='account_timeline'