work flawlessly was a nightmare). WARNING: This commit makes the web UI connect to the streaming API instead of ActionCable like before. This means that if you are upgrading, you should set that up beforehand.
		
			
				
	
	
		
			73 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { connect } from 'react-redux';
 | |
| import PureRenderMixin from 'react-addons-pure-render-mixin';
 | |
| import StatusListContainer from '../ui/containers/status_list_container';
 | |
| import Column from '../ui/components/column';
 | |
| import {
 | |
|   refreshTimeline,
 | |
|   updateTimeline,
 | |
|   deleteFromTimelines
 | |
| } from '../../actions/timelines';
 | |
| import { defineMessages, injectIntl } from 'react-intl';
 | |
| import ColumnBackButtonSlim from '../../components/column_back_button_slim';
 | |
| import createStream from '../../stream';
 | |
| 
 | |
| const messages = defineMessages({
 | |
|   title: { id: 'column.public', defaultMessage: 'Public' }
 | |
| });
 | |
| 
 | |
| const mapStateToProps = state => ({
 | |
|   accessToken: state.getIn(['meta', 'access_token'])
 | |
| });
 | |
| 
 | |
| const PublicTimeline = React.createClass({
 | |
| 
 | |
|   propTypes: {
 | |
|     dispatch: React.PropTypes.func.isRequired,
 | |
|     intl: React.PropTypes.object.isRequired,
 | |
|     accessToken: React.PropTypes.string.isRequired
 | |
|   },
 | |
| 
 | |
|   mixins: [PureRenderMixin],
 | |
| 
 | |
|   componentDidMount () {
 | |
|     const { dispatch, accessToken } = this.props;
 | |
| 
 | |
|     dispatch(refreshTimeline('public'));
 | |
| 
 | |
|     this.subscription = createStream(accessToken, 'public', {
 | |
| 
 | |
|       received (data) {
 | |
|         switch(data.event) {
 | |
|         case 'update':
 | |
|           dispatch(updateTimeline('public', JSON.parse(data.payload)));
 | |
|           break;
 | |
|         case 'delete':
 | |
|           dispatch(deleteFromTimelines(data.payload));
 | |
|           break;
 | |
|         }
 | |
|       }
 | |
| 
 | |
|     });
 | |
|   },
 | |
| 
 | |
|   componentWillUnmount () {
 | |
|     if (typeof this.subscription !== 'undefined') {
 | |
|       this.subscription.close();
 | |
|       this.subscription = null;
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   render () {
 | |
|     const { intl } = this.props;
 | |
| 
 | |
|     return (
 | |
|       <Column icon='globe' heading={intl.formatMessage(messages.title)}>
 | |
|         <ColumnBackButtonSlim />
 | |
|         <StatusListContainer type='public' />
 | |
|       </Column>
 | |
|     );
 | |
|   },
 | |
| 
 | |
| });
 | |
| 
 | |
| export default connect(mapStateToProps)(injectIntl(PublicTimeline));
 |