// - Import react components var uuid = require('uuid'); import moment from 'moment' import _ from 'lodash' // - Import action types import * as types from 'actionTypes' /* ---------------- */ /** * Default State */ var defaultState = { userPosts: {}, loaded: false } /** * Post reducer * @param {object} state * @param {object} action */ export var postReducer = (state = defaultState, action) => { const { payload } = action switch (action.type) { case types.CLEAR_ALL_DATA_POST: return defaultState case types.ADD_IMAGE_POST: return { ...state, userPosts: { ...state.userPosts, [payload.uid]: { ...state.userPosts[payload.uid], [payload.post.id]: { ...payload.post } } } } case types.ADD_POST: return { ...state, userPosts: { ...state.userPosts, [payload.uid]: { ...state.userPosts[payload.uid], [payload.post.id]: { ...payload.post } } } } case types.UPDATE_POST: return { ...state, userPosts: { ...state.userPosts, [payload.uid]: { ...state.userPosts[payload.uid], [payload.post.id]: { ...state.userPosts[payload.uid][payload.post.id], ...payload.post } } } } case types.DELETE_POST: let filteredPosts = {} Object.keys(state.userPosts[payload.uid]).map((key) => { if (key !== payload.id) { return _.merge(filteredPosts, { [key]: { ...state.userPosts[payload.uid][key] } }) } }) return { ...state, userPosts: { ...state.userPosts, [payload.uid]: { ...filteredPosts } } } case types.ADD_LIST_POST: return { ...state, userPosts: { ...state.userPosts, [payload.uid]: { ...state.userPosts[payload.uid], ...payload.posts } }, loaded:true } default: return state; } }