glitchier-soc/app/assets/javascripts/components/features/public_timeline/index.jsx

67 lines
1.6 KiB
React
Raw Normal View History

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';
2016-10-07 17:00:11 +03:00
import {
refreshTimeline,
updateTimeline,
deleteFromTimelines
} from '../../actions/timelines';
2016-11-18 16:36:16 +02:00
import { defineMessages, injectIntl } from 'react-intl';
import ColumnBackButtonSlim from '../../components/column_back_button_slim';
2016-11-18 16:36:16 +02:00
const messages = defineMessages({
title: { id: 'column.public', defaultMessage: 'Public' }
});
2016-10-07 17:00:11 +03:00
const PublicTimeline = React.createClass({
propTypes: {
dispatch: React.PropTypes.func.isRequired,
intl: React.PropTypes.object.isRequired
},
2016-10-07 17:00:11 +03:00
mixins: [PureRenderMixin],
componentWillMount () {
const { dispatch } = this.props;
dispatch(refreshTimeline('public'));
if (typeof App !== 'undefined') {
this.subscription = App.cable.subscriptions.create('PublicChannel', {
received (data) {
switch(data.type) {
case 'update':
return dispatch(updateTimeline('public', JSON.parse(data.message)));
case 'delete':
return dispatch(deleteFromTimelines(data.id));
}
2016-10-07 17:00:11 +03:00
}
});
}
},
componentWillUnmount () {
if (typeof this.subscription !== 'undefined') {
this.subscription.unsubscribe();
}
},
render () {
const { intl } = this.props;
2016-10-07 17:00:11 +03:00
return (
2016-11-18 16:36:16 +02:00
<Column icon='globe' heading={intl.formatMessage(messages.title)}>
<ColumnBackButtonSlim />
<StatusListContainer type='public' />
2016-10-07 17:00:11 +03:00
</Column>
);
},
});
export default connect()(injectIntl(PublicTimeline));