From 48b9619439818ecb344ae33c9c31a55ecb1aa27a Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 5 Nov 2016 15:20:05 +0100 Subject: Adding hashtags --- .../components/features/hashtag_timeline/index.jsx | 72 ++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 app/assets/javascripts/components/features/hashtag_timeline/index.jsx (limited to 'app/assets/javascripts/components/features/hashtag_timeline') diff --git a/app/assets/javascripts/components/features/hashtag_timeline/index.jsx b/app/assets/javascripts/components/features/hashtag_timeline/index.jsx new file mode 100644 index 000000000..de6a9618e --- /dev/null +++ b/app/assets/javascripts/components/features/hashtag_timeline/index.jsx @@ -0,0 +1,72 @@ +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 +} from '../../actions/timelines'; + +const HashtagTimeline = React.createClass({ + + propTypes: { + params: React.PropTypes.object.isRequired, + dispatch: React.PropTypes.func.isRequired + }, + + mixins: [PureRenderMixin], + + _subscribe (dispatch, id) { + if (typeof App !== 'undefined') { + this.subscription = App.cable.subscriptions.create({ + channel: 'HashtagChannel', + tag: id + }, { + + received (data) { + dispatch(updateTimeline('tag', JSON.parse(data.message))); + } + + }); + } + }, + + _unsubscribe () { + if (typeof this.subscription !== 'undefined') { + this.subscription.unsubscribe(); + } + }, + + componentWillMount () { + const { dispatch } = this.props; + const { id } = this.props.params; + + dispatch(refreshTimeline('tag', true, id)); + this._subscribe(dispatch, id); + }, + + componentWillReceiveProps (nextProps) { + if (nextProps.params.id !== this.props.params.id) { + this.props.dispatch(refreshTimeline('tag', true, nextProps.params.id)); + this._unsubscribe(); + this._subscribe(this.props.dispatch, nextProps.params.id); + } + }, + + componentWillUnmount () { + this._unsubscribe(); + }, + + render () { + const { id } = this.props.params; + + return ( + + + + ); + }, + +}); + +export default connect()(HashtagTimeline); -- cgit