From 337462aa5e68014aa15788e4513e190b2e434d7e Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 19 Sep 2016 23:25:59 +0200 Subject: Re-organizing components to be more modular, adding loading bars --- .../javascripts/components/containers/mastodon.jsx | 74 ++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 app/assets/javascripts/components/containers/mastodon.jsx (limited to 'app/assets/javascripts/components/containers/mastodon.jsx') diff --git a/app/assets/javascripts/components/containers/mastodon.jsx b/app/assets/javascripts/components/containers/mastodon.jsx new file mode 100644 index 000000000..ba6e568ac --- /dev/null +++ b/app/assets/javascripts/components/containers/mastodon.jsx @@ -0,0 +1,74 @@ +import { Provider } from 'react-redux'; +import configureStore from '../store/configureStore'; +import { setTimeline, updateTimeline, deleteFromTimelines, refreshTimeline } from '../actions/timelines'; +import { setAccessToken } from '../actions/meta'; +import { setAccountSelf } from '../actions/accounts'; +import PureRenderMixin from 'react-addons-pure-render-mixin'; +import { Router, Route, hashHistory } from 'react-router'; +import Account from '../features/account'; +import Settings from '../features/settings'; +import Status from '../features/status'; +import Subscriptions from '../features/subscriptions'; +import UI from '../features/ui'; + +const store = configureStore(); + +const Mastodon = React.createClass({ + + propTypes: { + token: React.PropTypes.string.isRequired, + timelines: React.PropTypes.object, + account: React.PropTypes.string + }, + + mixins: [PureRenderMixin], + + componentWillMount() { + store.dispatch(setAccessToken(this.props.token)); + store.dispatch(setAccountSelf(JSON.parse(this.props.account))); + + for (var timelineType in this.props.timelines) { + if (this.props.timelines.hasOwnProperty(timelineType)) { + store.dispatch(setTimeline(timelineType, JSON.parse(this.props.timelines[timelineType]))); + } + } + + if (typeof App !== 'undefined') { + App.timeline = App.cable.subscriptions.create("TimelineChannel", { + connected: function() {}, + + disconnected: function() {}, + + received: function(data) { + switch(data.type) { + case 'update': + return store.dispatch(updateTimeline(data.timeline, JSON.parse(data.message))); + case 'delete': + return store.dispatch(deleteFromTimelines(data.id)); + case 'merge': + case 'unmerge': + return store.dispatch(refreshTimeline('home')); + } + } + }); + } + }, + + render () { + return ( + + + + + + + + + + + ); + } + +}); + +export default Mastodon; -- cgit