49 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import Rx from 'rx';
 | 
						|
import React from 'react';
 | 
						|
import Fetchr from 'fetchr';
 | 
						|
import debugFactory from 'debug';
 | 
						|
import { Router } from 'react-router';
 | 
						|
import { history } from 'react-router/lib/BrowserHistory';
 | 
						|
import { hydrate } from 'thundercats';
 | 
						|
import { Render } from 'thundercats-react';
 | 
						|
 | 
						|
import { app$ } from '../common/app';
 | 
						|
 | 
						|
const debug = debugFactory('fcc:client');
 | 
						|
const DOMContianer = document.getElementById('fcc');
 | 
						|
const catState = window.__fcc__.data || {};
 | 
						|
const services = new Fetchr({
 | 
						|
  xhrPath: '/services'
 | 
						|
});
 | 
						|
 | 
						|
Rx.longStackSupport = !!debug.enabled;
 | 
						|
 | 
						|
// returns an observable
 | 
						|
app$(history)
 | 
						|
  .flatMap(
 | 
						|
    ({ AppCat }) => {
 | 
						|
      const appCat = AppCat(null, services);
 | 
						|
      return hydrate(appCat, catState)
 | 
						|
        .map(() => appCat);
 | 
						|
    },
 | 
						|
    ({ initialState }, appCat) => ({ initialState, appCat })
 | 
						|
  )
 | 
						|
  .flatMap(({ initialState, appCat }) => {
 | 
						|
    return Render(
 | 
						|
      appCat,
 | 
						|
      React.createElement(Router, initialState),
 | 
						|
      DOMContianer
 | 
						|
    );
 | 
						|
  })
 | 
						|
  .subscribe(
 | 
						|
    () => {
 | 
						|
      debug('react rendered');
 | 
						|
    },
 | 
						|
    err => {
 | 
						|
      debug('an error has occured', err.stack);
 | 
						|
    },
 | 
						|
    () => {
 | 
						|
      debug('react closed subscription');
 | 
						|
    }
 | 
						|
  );
 |