Skip to content

Instantly share code, notes, and snippets.

@mmazzarolo
Created September 6, 2016 21:44
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mmazzarolo/d85a975bd915245c5c10f378a35f6553 to your computer and use it in GitHub Desktop.
Save mmazzarolo/d85a975bd915245c5c10f378a35f6553 to your computer and use it in GitHub Desktop.
Redux naming example
import { find, findIndex, pullAt } from 'lodash'
import { actionTypes as appActionTypes } from 'reducers/appReducer'
export const actionTypes = {
CREATE_MENU_ENTRY_REQUEST: 'MENU/CREATE_MENU_ENTRY_REQUEST',
CREATE_MENU_ENTRY_SUCCESS: 'MENU/CREATE_MENU_ENTRY_SUCCESS',
CREATE_MENU_ENTRY_FAILURE: 'MENU/CREATE_MENU_ENTRY_FAILURE',
UPDATE_MENU_ENTRY_REQUEST: 'MENU/UPDATE_MENU_ENTRY_REQUEST',
UPDATE_MENU_ENTRY_SUCCESS: 'MENU/UPDATE_MENU_ENTRY_SUCCESS',
UPDATE_MENU_ENTRY_FAILURE: 'MENU/UPDATE_MENU_ENTRY_FAILURE',
DELETE_MENU_ENTRY_REQUEST: 'MENU/DELETE_MENU_ENTRY_REQUEST',
DELETE_MENU_ENTRY_SUCCESS: 'MENU/DELETE_MENU_ENTRY_SUCCESS',
DELETE_MENU_ENTRY_FAILURE: 'MENU/DELETE_MENU_ENTRY_FAILURE'
}
export const initialState = {
menuEntries: [],
isSaving: false,
error: null
}
export default (state = initialState, action) => {
switch (action.type) {
case appActionTypes.LOAD_DATA_SUCCESS:
return { ...state, menuEntries: action.menuEntries }
case actionTypes.CREATE_MENU_ENTRY_REQUEST:
case actionTypes.UPDATE_MENU_ENTRY_REQUEST:
case actionTypes.DELETE_MENU_ENTRY_REQUEST:
return { ...state, isSaving: true }
case actionTypes.CREATE_MENU_ENTRY_SUCCESS: {
const menuEntries = state.menuEntries.slice(0)
menuEntries.push(action.menuEntry)
return { ...state, isSaving: false, menuEntries }
}
case actionTypes.UPDATE_MENU_ENTRY_SUCCESS: {
const menuEntries = state.menuEntries.slice(0)
const index = findIndex(menuEntries, { objectId: action.menuEntry.objectId })
menuEntries[index] = action.menuEntry
return { ...state, isSaving: false, menuEntries }
}
case actionTypes.DELETE_MENU_ENTRY_SUCCESS: {
const menuEntries = state.menuEntries.slice(0)
const index = findIndex(menuEntries, { objectId: action.menuEntry.objectId })
pullAt(menuEntries, index)
return { ...state, isSaving: false, menuEntries }
}
case actionTypes.CREATE_MENU_ENTRY_FAILURE:
case actionTypes.UPDATE_MENU_ENTRY_FAILURE:
case actionTypes.DELETE_MENU_ENTRY_FAILURE:
return { ...state, isSaving: false, error: action.error }
default:
return state
}
}
export const actionCreators = {
createMenuEntry: (fields) => ({
type: actionTypes.CREATE_MENU_ENTRY_REQUEST, fields
}),
updateMenuEntry: (menuEntryId, updatedFields) => ({
type: actionTypes.UPDATE_MENU_ENTRY_REQUEST, menuEntryId, updatedFields
}),
deleteMenuEntry: (menuEntryId) => ({
type: actionTypes.DELETE_MENU_ENTRY_REQUEST, menuEntryId
})
}
export const getMenuEntry = (state, objectId) => find(state.menu.menuEntries, { objectId })
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment