You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
2.9 KiB

  1. import { Provider } from 'react-redux';
  2. import configureStore from '../store/configureStore';
  3. import Frontend from '../components/frontend';
  4. import { setTimeline, updateTimeline, deleteFromTimelines, refreshTimeline } from '../actions/timelines';
  5. import { setAccessToken } from '../actions/meta';
  6. import { setAccountSelf } from '../actions/accounts';
  7. import PureRenderMixin from 'react-addons-pure-render-mixin';
  8. import { Router, Route, hashHistory } from 'react-router';
  9. import Account from '../features/account';
  10. import Settings from '../features/settings';
  11. import Status from '../features/status';
  12. import Subscriptions from '../features/subscriptions';
  13. const store = configureStore();
  14. const Root = React.createClass({
  15. propTypes: {
  16. token: React.PropTypes.string.isRequired,
  17. timelines: React.PropTypes.object,
  18. account: React.PropTypes.string
  19. },
  20. mixins: [PureRenderMixin],
  21. componentWillMount() {
  22. store.dispatch(setAccessToken(this.props.token));
  23. store.dispatch(setAccountSelf(JSON.parse(this.props.account)));
  24. for (var timelineType in this.props.timelines) {
  25. if (this.props.timelines.hasOwnProperty(timelineType)) {
  26. store.dispatch(setTimeline(timelineType, JSON.parse(this.props.timelines[timelineType])));
  27. }
  28. }
  29. if (typeof App !== 'undefined') {
  30. App.timeline = App.cable.subscriptions.create("TimelineChannel", {
  31. connected: function() {},
  32. disconnected: function() {},
  33. received: function(data) {
  34. switch(data.type) {
  35. case 'update':
  36. return store.dispatch(updateTimeline(data.timeline, JSON.parse(data.message)));
  37. case 'delete':
  38. return store.dispatch(deleteFromTimelines(data.id));
  39. case 'merge':
  40. case 'unmerge':
  41. return store.dispatch(refreshTimeline('home'));
  42. }
  43. }
  44. });
  45. }
  46. },
  47. render () {
  48. return (
  49. <Provider store={store}>
  50. <Router history={hashHistory}>
  51. <Route path='/' component={Frontend}>
  52. <Route path='/settings' component={Settings} />
  53. <Route path='/subscriptions' component={Subscriptions} />
  54. <Route path='/statuses/:statusId' component={Status} />
  55. <Route path='/accounts/:accountId' component={Account} />
  56. </Route>
  57. </Router>
  58. </Provider>
  59. );
  60. }
  61. });
  62. export default Root;