diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2016-09-19 23:25:59 +0200 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2016-09-19 23:26:21 +0200 |
commit | 337462aa5e68014aa15788e4513e190b2e434d7e (patch) | |
tree | a760e80e2bc9b1fef55f118ddeb8603b20155a61 /app/assets/javascripts/components/containers/mastodon.jsx | |
parent | f820edb463109e313e836d8e2f210927a0eba7d1 (diff) |
Re-organizing components to be more modular, adding loading bars
Diffstat (limited to 'app/assets/javascripts/components/containers/mastodon.jsx')
-rw-r--r-- | app/assets/javascripts/components/containers/mastodon.jsx | 74 |
1 files changed, 74 insertions, 0 deletions
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 ( + <Provider store={store}> + <Router history={hashHistory}> + <Route path='/' component={UI}> + <Route path='/settings' component={Settings} /> + <Route path='/subscriptions' component={Subscriptions} /> + <Route path='/statuses/:statusId' component={Status} /> + <Route path='/accounts/:accountId' component={Account} /> + </Route> + </Router> + </Provider> + ); + } + +}); + +export default Mastodon; |