Files
freeCodeCamp/client/index.js

49 lines
1.2 KiB
JavaScript
Raw Normal View History

2015-07-04 11:59:22 -07:00
import Rx from 'rx';
import React from 'react';
import Fetchr from 'fetchr';
import debugFactory from 'debug';
2015-07-04 11:59:22 -07:00
import { Router } from 'react-router';
import { history } from 'react-router/lib/BrowserHistory';
2015-07-21 14:06:21 -07:00
import { hydrate } from 'thundercats';
import { Render } from 'thundercats-react';
2015-06-17 21:04:28 -07:00
2015-07-01 15:14:10 -07:00
import { app$ } from '../common/app';
2015-06-17 21:04:28 -07:00
const debug = debugFactory('fcc:client');
2015-07-04 11:59:22 -07:00
const DOMContianer = document.getElementById('fcc');
const catState = window.__fcc__.data || {};
const services = new Fetchr({
xhrPath: '/services'
});
2015-06-17 21:04:28 -07:00
2015-08-12 11:46:34 -07:00
Rx.config.longStackSupport = !!debug.enabled;
2015-07-04 11:59:22 -07:00
2015-06-17 21:04:28 -07:00
// returns an observable
2015-07-04 11:59:22 -07:00
app$(history)
.flatMap(
({ AppCat }) => {
const appCat = AppCat(null, services);
2015-07-21 14:06:21 -07:00
return hydrate(appCat, catState)
.map(() => appCat);
},
({ initialState }, appCat) => ({ initialState, appCat })
)
.flatMap(({ initialState, appCat }) => {
return Render(
appCat,
React.createElement(Router, initialState),
DOMContianer
);
2015-06-29 09:50:25 -07:00
})
2015-06-17 21:04:28 -07:00
.subscribe(
2015-07-04 11:59:22 -07:00
() => {
2015-06-17 21:04:28 -07:00
debug('react rendered');
},
2015-07-04 11:59:22 -07:00
err => {
2015-06-17 21:04:28 -07:00
debug('an error has occured', err.stack);
2015-07-04 11:59:22 -07:00
},
() => {
debug('react closed subscription');
2015-06-17 21:04:28 -07:00
}
);