Adding list of who favourited status
This commit is contained in:
		
							parent
							
								
									6d5ef89356
								
							
						
					
					
						commit
						087b993892
					
				@ -199,3 +199,37 @@ export function fetchReblogsFail(id, error) {
 | 
				
			|||||||
    error
 | 
					    error
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function fetchFavourites(id) {
 | 
				
			||||||
 | 
					  return (dispatch, getState) => {
 | 
				
			||||||
 | 
					    dispatch(fetchFavouritesRequest(id));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    api(getState).get(`/api/v1/statuses/${id}/favourited_by`).then(response => {
 | 
				
			||||||
 | 
					      dispatch(fetchFavouritesSuccess(id, response.data));
 | 
				
			||||||
 | 
					    }).catch(error => {
 | 
				
			||||||
 | 
					      dispatch(fetchFavouritesFail(id, error));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function fetchFavouritesRequest(id) {
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    type: FAVOURITES_FETCH_REQUEST,
 | 
				
			||||||
 | 
					    id
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function fetchFavouritesSuccess(id, accounts) {
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    type: FAVOURITES_FETCH_SUCCESS,
 | 
				
			||||||
 | 
					    id,
 | 
				
			||||||
 | 
					    accounts
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function fetchFavouritesFail(id, error) {
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    type: FAVOURITES_FETCH_FAIL,
 | 
				
			||||||
 | 
					    error
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -29,6 +29,7 @@ import Compose            from '../features/compose';
 | 
				
			|||||||
import Followers          from '../features/followers';
 | 
					import Followers          from '../features/followers';
 | 
				
			||||||
import Following          from '../features/following';
 | 
					import Following          from '../features/following';
 | 
				
			||||||
import Reblogs            from '../features/reblogs';
 | 
					import Reblogs            from '../features/reblogs';
 | 
				
			||||||
 | 
					import Favourites         from '../features/favourites';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const store = configureStore();
 | 
					const store = configureStore();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -80,11 +81,15 @@ const Mastodon = React.createClass({
 | 
				
			|||||||
          <Route path='/' component={UI}>
 | 
					          <Route path='/' component={UI}>
 | 
				
			||||||
            <IndexRoute component={GettingStarted} />
 | 
					            <IndexRoute component={GettingStarted} />
 | 
				
			||||||
            <Route path='/statuses/new' component={Compose} />
 | 
					            <Route path='/statuses/new' component={Compose} />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <Route path='/statuses/home' component={HomeTimeline} />
 | 
					            <Route path='/statuses/home' component={HomeTimeline} />
 | 
				
			||||||
            <Route path='/statuses/mentions' component={MentionsTimeline} />
 | 
					            <Route path='/statuses/mentions' component={MentionsTimeline} />
 | 
				
			||||||
            <Route path='/statuses/all' component={PublicTimeline} />
 | 
					            <Route path='/statuses/all' component={PublicTimeline} />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <Route path='/statuses/:statusId' component={Status} />
 | 
					            <Route path='/statuses/:statusId' component={Status} />
 | 
				
			||||||
            <Route path='/statuses/:statusId/reblogs' component={Reblogs} />
 | 
					            <Route path='/statuses/:statusId/reblogs' component={Reblogs} />
 | 
				
			||||||
 | 
					            <Route path='/statuses/:statusId/favourites' component={Favourites} />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <Route path='/accounts/:accountId' component={Account}>
 | 
					            <Route path='/accounts/:accountId' component={Account}>
 | 
				
			||||||
              <IndexRoute component={AccountTimeline} />
 | 
					              <IndexRoute component={AccountTimeline} />
 | 
				
			||||||
              <Route path='/accounts/:accountId/followers' component={Followers} />
 | 
					              <Route path='/accounts/:accountId/followers' component={Followers} />
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,61 @@
 | 
				
			|||||||
 | 
					import { connect }            from 'react-redux';
 | 
				
			||||||
 | 
					import PureRenderMixin        from 'react-addons-pure-render-mixin';
 | 
				
			||||||
 | 
					import ImmutablePropTypes     from 'react-immutable-proptypes';
 | 
				
			||||||
 | 
					import LoadingIndicator       from '../../components/loading_indicator';
 | 
				
			||||||
 | 
					import { fetchFavourites }    from '../../actions/interactions';
 | 
				
			||||||
 | 
					import { ScrollContainer }    from 'react-router-scroll';
 | 
				
			||||||
 | 
					import AccountContainer       from '../followers/containers/account_container';
 | 
				
			||||||
 | 
					import Column                 from '../ui/components/column';
 | 
				
			||||||
 | 
					import ColumnBackButton       from '../../components/column_back_button';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const mapStateToProps = (state, props) => ({
 | 
				
			||||||
 | 
					  accountIds: state.getIn(['user_lists', 'favourited_by', Number(props.params.statusId)])
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const Favourites = React.createClass({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  propTypes: {
 | 
				
			||||||
 | 
					    params: React.PropTypes.object.isRequired,
 | 
				
			||||||
 | 
					    dispatch: React.PropTypes.func.isRequired,
 | 
				
			||||||
 | 
					    accountIds: ImmutablePropTypes.list
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  mixins: [PureRenderMixin],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  componentWillMount () {
 | 
				
			||||||
 | 
					    this.props.dispatch(fetchFavourites(Number(this.props.params.statusId)));
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  componentWillReceiveProps(nextProps) {
 | 
				
			||||||
 | 
					    if (nextProps.params.statusId !== this.props.params.statusId && nextProps.params.statusId) {
 | 
				
			||||||
 | 
					      this.props.dispatch(fetchFavourites(Number(nextProps.params.statusId)));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  render () {
 | 
				
			||||||
 | 
					    const { accountIds } = this.props;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!accountIds) {
 | 
				
			||||||
 | 
					      return (
 | 
				
			||||||
 | 
					        <Column>
 | 
				
			||||||
 | 
					          <LoadingIndicator />
 | 
				
			||||||
 | 
					        </Column>
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return (
 | 
				
			||||||
 | 
					      <Column>
 | 
				
			||||||
 | 
					        <ColumnBackButton />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <ScrollContainer scrollKey='favourites'>
 | 
				
			||||||
 | 
					          <div className='scrollable'>
 | 
				
			||||||
 | 
					            {accountIds.map(id => <AccountContainer key={id} id={id} withNote={false} />)}
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </ScrollContainer>
 | 
				
			||||||
 | 
					      </Column>
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default connect(mapStateToProps)(Favourites);
 | 
				
			||||||
@ -54,7 +54,7 @@ const DetailedStatus = React.createClass({
 | 
				
			|||||||
        {media}
 | 
					        {media}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <div style={{ marginTop: '15px', color: '#616b86', fontSize: '14px', lineHeight: '18px' }}>
 | 
					        <div style={{ marginTop: '15px', color: '#616b86', fontSize: '14px', lineHeight: '18px' }}>
 | 
				
			||||||
          <a className='detailed-status__datetime' style={{ color: 'inherit' }} href={status.get('url')} target='_blank' rel='noopener'>{moment(status.get('created_at')).format('HH:mm, DD MMM Y')}</a> · <Link to={`/statuses/${status.get('id')}/reblogs`} style={{ color: 'inherit', textDecoration: 'none' }}><i className='fa fa-retweet' /><span style={{ fontWeight: '500', fontSize: '12px', marginLeft: '6px', display: 'inline-block' }}>{status.get('reblogs_count')}</span></Link> · <i className='fa fa-star' /><span style={{ fontWeight: '500', fontSize: '12px', marginLeft: '6px', display: 'inline-block' }}>{status.get('favourites_count')}</span>
 | 
					          <a className='detailed-status__datetime' style={{ color: 'inherit' }} href={status.get('url')} target='_blank' rel='noopener'>{moment(status.get('created_at')).format('HH:mm, DD MMM Y')}</a> · <Link to={`/statuses/${status.get('id')}/reblogs`} style={{ color: 'inherit', textDecoration: 'none' }}><i className='fa fa-retweet' /><span style={{ fontWeight: '500', fontSize: '12px', marginLeft: '6px', display: 'inline-block' }}>{status.get('reblogs_count')}</span></Link> · <Link to={`/statuses/${status.get('id')}/favourites`} style={{ color: 'inherit', textDecoration: 'none' }}><i className='fa fa-star' /><span style={{ fontWeight: '500', fontSize: '12px', marginLeft: '6px', display: 'inline-block' }}>{status.get('favourites_count')}</span></Link>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user