Skip to content

Instantly share code, notes, and snippets.

View faceyspacey's full-sized avatar

James Gillmore faceyspacey

View GitHub Profile
const { ...theUsual, thunk, initialDispatch } = connectRoutes(
history,
routesMap, {
...options,
initialDispatch: isServer ? false : true
}
)
...
export default async (req, res) => {
const jwToken = req.cookies.jwToken
const preLoadedState = { jwToken }
const history = createHistory({ initialEntries: [req.path] })
const { store, thunk } = configureStore(history, preLoadedState)
...
// src/options.js
const options = {
onBeforeChange: (dispatch, getState, action) => {
const state = getState()
const user = userFromState(action.type, state)
if (!user) {
const action = redirect({ type: 'LOGIN' })
dispatch(action)
}
import { myThunkA, myThunkB } from '../src/actions/async'
export default async (req, res) => {
const history = createHistory({ initialEntries: [req.path] })
const { store, thunk } = configureStore(history)
await Promise.all([
store.dispatch(myThunkA),
store.dispatch(myThunkB)
])
import createHistory from 'history/createMemoryHistory'
import { NOT_FOUND } from 'redux-first-router'
import configureStore from '../src/configureStore'
export default async (req, res) => {
const history = createHistory({ initialEntries: [req.path] })
const { store, thunk } = configureStore(history)
let location = store.getState().location
if (doesRedirect(location, res)) return false
import { redirect } from 'redux-first-router'
import { isAllowed } from './utils'
const options = {
onBeforeChange: (dispatch, getState, action) => {
const allowed = isAllowed(action.type, getState())
if (!allowed) {
const action = redirect({ type: 'LOGIN' })
dispatch(action)
export default () => async (req, res, next) => {
const store = await configureStore(req, res)
if (!store) return
const app = <Provider store={store}><App /></Provider>
...
import createHistory from 'history/createMemoryHistory'
import { NOT_FOUND } from 'redux-first-router'
import configureStore from '../src/configureStore'
export default async (req, res) => {
const history = createHistory({ initialEntries: [req.path] })
const { store, thunk } = configureStore(history)
await thunk(store) // THE PAYOFF!
const routesMap = {
HOME: '/',
LIST: {
path: '/list/:category',
thunk: async (dispatch, getState) => {
const { payload: { category } } = getState().location
const videos = await fetchData(`/api/videos/${category}`)
dispatch({ type: 'VIDEOS_FETCHED', payload: { videos, category } })
}
import { createStore, applyMiddleware, compose, combineReducers } from 'redux'
import { connectRoutes } from 'redux-first-router'
import routesMap from './routesMap'
import options from './options'
import * as reducers from './reducers'
export default (history, preLoadedState) => {
const { reducer, middleware, enhancer, thunk } = connectRoutes(
history,