Skip to content

Instantly share code, notes, and snippets.

View faceyspacey's full-sized avatar

James Gillmore faceyspacey

View GitHub Profile
@faceyspacey
faceyspacey / isLoadingSelector.js
Last active July 24, 2017 01:45
isLoadingSelector.js
import { createSelector } from 'reselect'
export default createSelector([
state => state.location.type,
state => state.location.payload,
state => state.videosHash,
state => state.videosByCategory.categories,
],
(type, { slug, category }, videosHash, videosByCategory) => {
if (type === 'VIDEO') return !videosHash[slug]
@faceyspacey
faceyspacey / isLoadingReducer.js
Last active July 24, 2017 01:43
isLoadingReducer.js
export default (state = { cache: {} }, action = {}) => {
switch (action.type) {
case 'LIST': {
const { category } = action.payload
return {
...state,
current: category,
loading: !state.cache[category]
}
const components = {
Home: universal(() => import('./Home'), {
resolve: () => require.resolveWeak('./Home'),
}),
List: universal(() => import('./List'), {
resolve: () => require.resolveWeak('./List'),
}),
Video: universal(() => import('./Video'), {
resolve: () => require.resolveWeak('./Video'),
}),
@faceyspacey
faceyspacey / old-universal-component.js
Created July 26, 2017 08:15
hash-based universal component (the old way)
const components = {
Home: universal(() => import('./Home'), {
resolve: () => require.resolveWeak('./Home'),
}),
List: universal(() => import('./List'), {
resolve: () => require.resolveWeak('./List'),
}),
Video: universal(() => import('./Video'), {
resolve: () => require.resolveWeak('./Video'),
}),
@faceyspacey
faceyspacey / webpack.requireWeak.js
Created July 28, 2017 07:53
proposal for webpack requireWeak function
const requireWeak = (modulePath) => {
try {
const moduleId = require.resolveWeak(modulePath)
return __webpack_require__(moduleId)
}
catch (err) {
return null
}
}
@faceyspacey
faceyspacey / universalNodeExternalsStrategy.js
Last active July 31, 2017 07:04
Universal node externals strategy
externals: !isNode ? [] :
fs.readdirSync(path.resolve(__dirname, '../../node_modules'))
.filter(
x => !/\.bin|react-universal-component|webpack-flush-chunks|^normalize.css/.test(x),
)
.reduce((externals, mod) => {
externals[mod] = `commonjs ${mod}`; // eslint-disable-line
return externals;
}, {}),
@faceyspacey
faceyspacey / server-configureStore.js
Last active August 8, 2017 06:34
redux-first router server/configureStore.js
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
@faceyspacey
faceyspacey / server-configureStore.js
Created August 8, 2017 06:37
redux-first router server/configureStore.js (simple)
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)
// perhaps request + dispatch app-wide state as well:
// await Promise.all([ store.dispatch(myThunkA), store.dispatch(myThunkB) ])
@faceyspacey
faceyspacey / server-configureStore.js
Created August 8, 2017 06:39
redux-first router server/configureStore.js (simple - no promise all, no redirect)
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!
@faceyspacey
faceyspacey / server-configureStore.js
Created August 8, 2017 06:39
redux-first router server/configureStore.js (with 1 redirect)
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!