Permalink
Cannot retrieve contributors at this time
Fetching contributors…

import unused from './es6-shims'; // eslint-disable-line | |
import Rx from 'rx'; | |
import React from 'react'; | |
import Fetchr from 'fetchr'; | |
import debugFactory from 'debug'; | |
import { Router } from 'react-router'; | |
import { createLocation, createHistory } from 'history'; | |
import { hydrate } from 'thundercats'; | |
import { render$ } from 'thundercats-react'; | |
import app$ from '../common/app'; | |
import historySaga from './history-saga'; | |
import errSaga from './err-saga'; | |
const debug = debugFactory('fcc:client'); | |
const DOMContianer = document.getElementById('fcc'); | |
const catState = window.__fcc__.data || {}; | |
const services = new Fetchr({ | |
xhrPath: '/services' | |
}); | |
Rx.config.longStackSupport = !!debug.enabled; | |
const history = createHistory(); | |
const appLocation = createLocation( | |
location.pathname + location.search | |
); | |
// returns an observable | |
app$({ history, location: appLocation }) | |
.flatMap( | |
({ AppCat }) => { | |
// instantiate the cat with service | |
const appCat = AppCat(null, services, history); | |
// hydrate the stores | |
return hydrate(appCat, catState).map(() => appCat); | |
}, | |
// not using nextLocation at the moment but will be used for | |
// redirects in the future | |
({ nextLocation, props }, appCat) => ({ nextLocation, props, appCat }) | |
) | |
.doOnNext(({ appCat }) => { | |
const appStore$ = appCat.getStore('appStore'); | |
const { | |
toast, | |
updateLocation, | |
goTo, | |
goBack | |
} = appCat.getActions('appActions'); | |
const routerState$ = appStore$ | |
.map(({ location }) => location) | |
.filter(location => !!location); | |
// set page title | |
appStore$ | |
.pluck('title') | |
.distinctUntilChanged() | |
.doOnNext(title => document.title = title) | |
.subscribe(() => {}); | |
historySaga( | |
history, | |
updateLocation, | |
goTo, | |
goBack, | |
routerState$ | |
); | |
const err$ = appStore$ | |
.pluck('err') | |
.filter(err => !!err) | |
.distinctUntilChanged(); | |
errSaga(err$, toast); | |
}) | |
// allow store subscribe to subscribe to actions | |
.delay(10) | |
.flatMap(({ props, appCat }) => { | |
props.history = history; | |
return render$( | |
appCat, | |
React.createElement(Router, props), | |
DOMContianer | |
); | |
}) | |
.subscribe( | |
() => { | |
debug('react rendered'); | |
}, | |
err => { | |
throw err; | |
}, | |
() => { | |
debug('react closed subscription'); | |
} | |
); |