コード例 #1
0
ファイル: createTest.js プロジェクト: jamesmaa/node-platform
  const getStore = (initialState={}) => {
    const well = PromiseWell.create();
    const thunk = Thunker.create();
    const nav = navigationMiddleware.create(routes);

    const storeReducers = combineReducers({
      ...reducers,
      platform,
    });

    const storeMiddleware = middleware.concat([nav, thunk, well.middleware]);
    const store = createStore(storeReducers, initialState, applyMiddleware(...storeMiddleware));

    class StoreWrapper extends React.Component {
      render() {
        return (
          <Provider store={ store }>
            { this.props.children }
          </Provider>
        );
      }
    }

    return { store, StoreWrapper };
  };
コード例 #2
0
ファイル: Client.js プロジェクト: phil303/node-platform
export default config => {
  const {
    container='container',
    dataVar='___r',
    modifyData=data => data,
    appComponent=<div/>,
    reducers={},
    reduxMiddleware=[],
    routes=[],
    debug=false,
  } = config;

  const well = PromiseWell.create();
  const thunk = Thunker.create();
  const nav = navigationMiddleware.create(routes);

  const reds = combineReducers({ ...reducers, platform });
  const wares = reduxMiddleware.concat([nav, thunk, well.middleware]);

  if (debug) {
    wares.push(Logger);
  }

  return () => {
    const $container = document.getElementById(container);

    let data;
    try {
      const temp = window[dataVar];
      data = modifyData(temp);
    } catch (e) {
      data = {};
    }

    const store = createStore(reds, data, compose(
      applyMiddleware(...wares),
      window.devToolsExtension ? window.devToolsExtension() : f => f
    ));

    ReactDOM.render(
      <Provider store={ store }>
        { appComponent }
      </Provider>
      ,$container
    ); 

    return store;
  };
};
コード例 #3
0
ファイル: Server.js プロジェクト: nramadas/node-platform
  const handleRoute = async (ctx) => {
    const nav = navigationMiddleware.create(routes);
    const well = PromiseWell.create();
    const thunk = Thunker.create();

    const r = combineReducers({ ...reducers, platform });

    const store = createStore(r, {}, applyMiddleware(
      ...reduxMiddleware,
      nav,
      thunk,
      well.middleware,
    ));

    store.dispatch(async (dispatch, getState, utils) => {
      await dispatchBeforeNavigation(ctx, dispatch, getState, utils);
    });

    store.dispatch(actions.navigateToUrl(
      ctx.request.method.toLowerCase(),
      ctx.path,
      {
        queryParams: ctx.request.query,
        bodyParams: ctx.request.body,
        referrer: ctx.headers.referer,
      }
    ));

    await well.onComplete();
    const state = store.getState();

    // check for redirects
    const currentUrl = state.platform.currentPage.url;
    const currentQuery = state.platform.currentPage.queryParams;

    if (!isEqual(currentUrl, ctx.path) || !isEqual(currentQuery, ctx.request.query)) {
      if (currentUrl) {
        let newUrl = currentUrl;
        if (!isEmpty(currentQuery)) { newUrl += createQuery(currentQuery); }
        ctx.redirect(newUrl);
      } else {
        ctx.redirect('/');
      }
    } else {
      ctx.body = template(state, store);
    }
  };