Skip to content

Instantly share code, notes, and snippets.

@gvergnaud
Last active June 18, 2017 13:02
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gvergnaud/5aa0bbac62c74ebff62d to your computer and use it in GitHub Desktop.
Save gvergnaud/5aa0bbac62c74ebff62d to your computer and use it in GitHub Desktop.
const stateIdLens = propLens('id')
const stateTokenLens = propLens('token')
let setCurrentUserId = (state, action) => set(idLens, action.payload.result, state)
let setCurrentUserToken = (state, action) => set(tokenLens, action.payload.token, state)
compose(setCurrentUserId, setCurrentUserToken)
const actionResultLens = propsLens('payload', 'result')
const actionTokenLens = propsLens('payload', 'token')
// set :: Lens a -> Lens a -> State -> Action -> State
const setState = (stateLens, actionLens) =>
(state, action) => set(stateLens, view(actionLens, action), state)
const overState = (stateLens, actionLens, f) =>
(state, action) => over(stateLens, f(view(actionLens, action), view(stateLens, state)), state)
const setCurrentUserId = setState(stateIdLens, actionResultLens)
const setCurrentUserToken = setState(stateTokenLens, actionTokenLens)
const reducer = createReducer(initialState, {
[UPDATE]: compose(setCurrentUserId, setCurrentUserToken)
})
const countL = propLens('count')
const valueL = propsLens('payload', 'value')
const setCount = setState(countL, valueL)
const increment = overState(countL, valueL, (count, value) => count + value)
// or with a simplyer overState
const increment = ({ payload: { value } }) => overState(countL, (count) => count + value)
const increment = action => overState(countL, (count) => count + action.payload.value)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment