'Idempotency-Key': getState().getIn(['compose', 'idempotencyKey']),
},
}).then(function (response) {
- if (routerHistory && routerHistory.location.pathname === '/publish' && window.history.state) {
+ if (routerHistory && (routerHistory.location.pathname === '/publish' || routerHistory.location.pathname === '/statuses/new') && window.history.state) {
routerHistory.goBack();
}
import { connect } from 'react-redux';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
-import { lookupAccount } from 'mastodon/actions/accounts';
+import { lookupAccount, fetchAccount } from 'mastodon/actions/accounts';
import { expandAccountMediaTimeline } from '../../actions/timelines';
import LoadingIndicator from 'mastodon/components/loading_indicator';
import Column from '../ui/components/column';
import { openModal } from 'mastodon/actions/modal';
import { FormattedMessage } from 'react-intl';
-const mapStateToProps = (state, { params: { acct } }) => {
- const accountId = state.getIn(['accounts_map', acct]);
+const mapStateToProps = (state, { params: { acct, id } }) => {
+ const accountId = id || state.getIn(['accounts_map', acct]);
if (!accountId) {
return {
static propTypes = {
params: PropTypes.shape({
- acct: PropTypes.string.isRequired,
+ acct: PropTypes.string,
+ id: PropTypes.string,
}).isRequired,
accountId: PropTypes.string,
dispatch: PropTypes.func.isRequired,
};
_load () {
- const { accountId, dispatch } = this.props;
+ const { accountId, isAccount, dispatch } = this.props;
+ if (!isAccount) dispatch(fetchAccount(accountId));
dispatch(expandAccountMediaTimeline(accountId));
}
const emptyList = ImmutableList();
-const mapStateToProps = (state, { params: { acct }, withReplies = false }) => {
- const accountId = state.getIn(['accounts_map', acct]);
+const mapStateToProps = (state, { params: { acct, id }, withReplies = false }) => {
+ const accountId = id || state.getIn(['accounts_map', acct]);
if (!accountId) {
return {
static propTypes = {
params: PropTypes.shape({
- acct: PropTypes.string.isRequired,
+ acct: PropTypes.string,
+ id: PropTypes.string,
}).isRequired,
accountId: PropTypes.string,
dispatch: PropTypes.func.isRequired,
import LoadingIndicator from '../../components/loading_indicator';
import {
lookupAccount,
+ fetchAccount,
fetchFollowers,
expandFollowers,
} from '../../actions/accounts';
import MissingIndicator from 'mastodon/components/missing_indicator';
import TimelineHint from 'mastodon/components/timeline_hint';
-const mapStateToProps = (state, { params: { acct } }) => {
- const accountId = state.getIn(['accounts_map', acct]);
+const mapStateToProps = (state, { params: { acct, id } }) => {
+ const accountId = id || state.getIn(['accounts_map', acct]);
if (!accountId) {
return {
static propTypes = {
params: PropTypes.shape({
- acct: PropTypes.string.isRequired,
+ acct: PropTypes.string,
+ id: PropTypes.string,
}).isRequired,
accountId: PropTypes.string,
dispatch: PropTypes.func.isRequired,
};
_load () {
- const { accountId, dispatch } = this.props;
+ const { accountId, isAccount, dispatch } = this.props;
+ if (!isAccount) dispatch(fetchAccount(accountId));
dispatch(fetchFollowers(accountId));
}
import LoadingIndicator from '../../components/loading_indicator';
import {
lookupAccount,
+ fetchAccount,
fetchFollowing,
expandFollowing,
} from '../../actions/accounts';
import MissingIndicator from 'mastodon/components/missing_indicator';
import TimelineHint from 'mastodon/components/timeline_hint';
-const mapStateToProps = (state, { params: { acct } }) => {
- const accountId = state.getIn(['accounts_map', acct]);
+const mapStateToProps = (state, { params: { acct, id } }) => {
+ const accountId = id || state.getIn(['accounts_map', acct]);
if (!accountId) {
return {
static propTypes = {
params: PropTypes.shape({
- acct: PropTypes.string.isRequired,
+ acct: PropTypes.string,
+ id: PropTypes.string,
}).isRequired,
accountId: PropTypes.string,
dispatch: PropTypes.func.isRequired,
};
_load () {
- const { accountId, dispatch } = this.props;
+ const { accountId, isAccount, dispatch } = this.props;
+ if (!isAccount) dispatch(fetchAccount(accountId));
dispatch(fetchFollowing(accountId));
}
<WrappedRoute path='/getting-started' component={GettingStarted} content={children} />
<WrappedRoute path='/keyboard-shortcuts' component={KeyboardShortcuts} content={children} />
- <WrappedRoute path='/home' component={HomeTimeline} content={children} />
- <WrappedRoute path='/public' exact component={PublicTimeline} content={children} />
- <WrappedRoute path='/public/local' exact component={CommunityTimeline} content={children} />
- <WrappedRoute path='/conversations' component={DirectTimeline} content={children} />
+ <WrappedRoute path={['/home', '/timelines/home']} component={HomeTimeline} content={children} />
+ <WrappedRoute path={['/public', '/timelines/public']} exact component={PublicTimeline} content={children} />
+ <WrappedRoute path={['/public/local', '/timelines/public/local']} exact component={CommunityTimeline} content={children} />
+ <WrappedRoute path={['/conversations', '/timelines/direct']} component={DirectTimeline} content={children} />
<WrappedRoute path='/tags/:id' component={HashtagTimeline} content={children} />
<WrappedRoute path='/lists/:id' component={ListTimeline} content={children} />
<WrappedRoute path='/notifications' component={Notifications} content={children} />
<WrappedRoute path='/start' component={FollowRecommendations} content={children} />
<WrappedRoute path='/search' component={Search} content={children} />
<WrappedRoute path='/directory' component={Directory} content={children} />
- <WrappedRoute path='/publish' component={Compose} content={children} />
+ <WrappedRoute path={['/publish', '/statuses/new']} component={Compose} content={children} />
- <WrappedRoute path='/@:acct' exact component={AccountTimeline} content={children} />
- <WrappedRoute path='/@:acct/with_replies' component={AccountTimeline} content={children} componentParams={{ withReplies: true }} />
- <WrappedRoute path='/@:acct/followers' component={Followers} content={children} />
- <WrappedRoute path='/@:acct/following' component={Following} content={children} />
- <WrappedRoute path='/@:acct/media' component={AccountGallery} content={children} />
+ <WrappedRoute path={['/@:acct', '/accounts/:id']} exact component={AccountTimeline} content={children} />
+ <WrappedRoute path={['/@:acct/with_replies', '/accounts/:id/with_replies']} component={AccountTimeline} content={children} componentParams={{ withReplies: true }} />
+ <WrappedRoute path={['/@:acct/followers', '/accounts/:id/followers']} component={Followers} content={children} />
+ <WrappedRoute path={['/@:acct/following', '/accounts/:id/following']} component={Following} content={children} />
+ <WrappedRoute path={['/@:acct/media', '/accounts/:id/media']} component={AccountGallery} content={children} />
<WrappedRoute path='/@:acct/:statusId' exact component={Status} content={children} />
<WrappedRoute path='/@:acct/:statusId/reblogs' component={Reblogs} content={children} />
<WrappedRoute path='/@:acct/:statusId/favourites' component={Favourites} content={children} />
+ {/* Legacy routes, cannot be easily factored with other routes because they share a param name */}
+ <WrappedRoute path='/timelines/tag/:id' component={HashtagTimeline} content={children} />
+ <WrappedRoute path='/timelines/list/:id' component={ListTimeline} content={children} />
+ <WrappedRoute path='/statuses/:statusId' exact component={Status} content={children} />
+ <WrappedRoute path='/statuses/:statusId/reblogs' component={Reblogs} content={children} />
+ <WrappedRoute path='/statuses/:statusId/favourites' component={Favourites} content={children} />
+
<WrappedRoute path='/follow_requests' component={FollowRequests} content={children} />
<WrappedRoute path='/blocks' component={Blocks} content={children} />
<WrappedRoute path='/domain_blocks' component={DomainBlocks} content={children} />