parent
							
								
									cd9b2ab2f7
								
							
						
					
					
						commit
						3fbf1bf35a
					
				
					 2 changed files with 48 additions and 19 deletions
				
			
		|  | @ -2,11 +2,11 @@ import React from 'react'; | |||
| import { connect } from 'react-redux'; | ||||
| import PropTypes from 'prop-types'; | ||||
| import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
| import LoadingIndicator from '../../components/loading_indicator'; | ||||
| import { fetchFavouritedStatuses, expandFavouritedStatuses } from '../../actions/favourites'; | ||||
| import Column from '../ui/components/column'; | ||||
| import ColumnHeader from '../../components/column_header'; | ||||
| import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; | ||||
| import StatusList from '../../components/status_list'; | ||||
| import ColumnBackButtonSlim from '../../components/column_back_button_slim'; | ||||
| import { defineMessages, injectIntl } from 'react-intl'; | ||||
| import ImmutablePureComponent from 'react-immutable-pure-component'; | ||||
| 
 | ||||
|  | @ -16,8 +16,6 @@ const messages = defineMessages({ | |||
| 
 | ||||
| const mapStateToProps = state => ({ | ||||
|   statusIds: state.getIn(['status_lists', 'favourites', 'items']), | ||||
|   loaded: state.getIn(['status_lists', 'favourites', 'loaded']), | ||||
|   me: state.getIn(['meta', 'me']), | ||||
| }); | ||||
| 
 | ||||
| @connect(mapStateToProps) | ||||
|  | @ -27,34 +25,64 @@ export default class Favourites extends ImmutablePureComponent { | |||
|   static propTypes = { | ||||
|     dispatch: PropTypes.func.isRequired, | ||||
|     statusIds: ImmutablePropTypes.list.isRequired, | ||||
|     loaded: PropTypes.bool, | ||||
|     intl: PropTypes.object.isRequired, | ||||
|     me: PropTypes.number.isRequired, | ||||
|     columnId: PropTypes.string, | ||||
|     multiColumn: PropTypes.bool, | ||||
|   }; | ||||
| 
 | ||||
|   componentWillMount () { | ||||
|     this.props.dispatch(fetchFavouritedStatuses()); | ||||
|   } | ||||
| 
 | ||||
|   handlePin = () => { | ||||
|     const { columnId, dispatch } = this.props; | ||||
| 
 | ||||
|     if (columnId) { | ||||
|       dispatch(removeColumn(columnId)); | ||||
|     } else { | ||||
|       dispatch(addColumn('FAVOURITES', {})); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   handleMove = (dir) => { | ||||
|     const { columnId, dispatch } = this.props; | ||||
|     dispatch(moveColumn(columnId, dir)); | ||||
|   } | ||||
| 
 | ||||
|   handleHeaderClick = () => { | ||||
|     this.column.scrollTop(); | ||||
|   } | ||||
| 
 | ||||
|   setRef = c => { | ||||
|     this.column = c; | ||||
|   } | ||||
| 
 | ||||
|   handleScrollToBottom = () => { | ||||
|     this.props.dispatch(expandFavouritedStatuses()); | ||||
|   } | ||||
| 
 | ||||
|   render () { | ||||
|     const { loaded, intl } = this.props; | ||||
| 
 | ||||
|     if (!loaded) { | ||||
|       return ( | ||||
|         <Column> | ||||
|           <LoadingIndicator /> | ||||
|         </Column> | ||||
|       ); | ||||
|     } | ||||
|     const { intl, statusIds, columnId, multiColumn } = this.props; | ||||
|     const pinned = !!columnId; | ||||
| 
 | ||||
|     return ( | ||||
|       <Column icon='star' heading={intl.formatMessage(messages.heading)}> | ||||
|         <ColumnBackButtonSlim /> | ||||
|         <StatusList {...this.props} scrollKey='favourited_statuses' onScrollToBottom={this.handleScrollToBottom} /> | ||||
|       <Column ref={this.setRef}> | ||||
|         <ColumnHeader | ||||
|           icon='star' | ||||
|           title={intl.formatMessage(messages.heading)} | ||||
|           onPin={this.handlePin} | ||||
|           onMove={this.handleMove} | ||||
|           onClick={this.handleHeaderClick} | ||||
|           pinned={pinned} | ||||
|           multiColumn={multiColumn} | ||||
|         /> | ||||
| 
 | ||||
|         <StatusList | ||||
|           trackScroll={!pinned} | ||||
|           statusIds={statusIds} | ||||
|           scrollKey={`favourited_statuses-${columnId}`} | ||||
|           onScrollToBottom={this.handleScrollToBottom} | ||||
|         /> | ||||
|       </Column> | ||||
|     ); | ||||
|   } | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ import { links, getIndex, getLink } from './tabs_bar'; | |||
| import BundleContainer from '../containers/bundle_container'; | ||||
| import ColumnLoading from './column_loading'; | ||||
| import BundleColumnError from './bundle_column_error'; | ||||
| import { Compose, Notifications, HomeTimeline, CommunityTimeline, PublicTimeline, HashtagTimeline } from '../../ui/util/async-components'; | ||||
| import { Compose, Notifications, HomeTimeline, CommunityTimeline, PublicTimeline, HashtagTimeline, FavouritedStatuses } from '../../ui/util/async-components'; | ||||
| 
 | ||||
| const componentMap = { | ||||
|   'COMPOSE': Compose, | ||||
|  | @ -18,6 +18,7 @@ const componentMap = { | |||
|   'PUBLIC': PublicTimeline, | ||||
|   'COMMUNITY': CommunityTimeline, | ||||
|   'HASHTAG': HashtagTimeline, | ||||
|   'FAVOURITES': FavouritedStatuses, | ||||
| }; | ||||
| 
 | ||||
| export default class ColumnsArea extends ImmutablePureComponent { | ||||
|  |  | |||
		Reference in a new issue