// - Import react components import moment from 'moment' import _ from 'lodash' // - Import domain import { User } from "domain/users"; import { Comment } from "domain/comments"; // - Import action types import {CommentActionType} from 'constants/commentActionType' import { CommentState } from "./CommentState"; import { ICommentAction } from "./ICommentAction"; /** * Comment reducer * @param state * @param action */ export var commentReducer = (state: CommentState = new CommentState(), action: ICommentAction) => { var { payload } = action switch (action.type) { /* _____________ CRUD _____________ */ case CommentActionType.ADD_COMMENT: return { ...state, postComments: { ...state.postComments, [payload.postId]: { ...state.postComments![payload.postId], [payload.id]: { ...payload.comment, editorStatus: false } } } } case CommentActionType.ADD_COMMENT_LIST: return { ...state, postComments: { ...payload }, loaded:true } case CommentActionType.UPDATE_COMMENT: return { ...state, postComments: { ...state.postComments, [payload.postId]: { ...state.postComments![payload.postId], [payload.id]: { ...state.postComments![payload.postId][payload.id], text: payload.text, editorStatus: false } } } } case CommentActionType.DELETE_COMMENT: var parsedComments = {} if (!state.postComments![payload.postId]) { return state } Object.keys(state.postComments![payload.postId]).map((id) => { if (id !== payload.id) { _.merge(parsedComments, { [id]: { ...state.postComments![payload.postId][id] } }) } }) return { ...state, postComments: { ...state.postComments, [payload.postId]: { ...parsedComments } } } case CommentActionType.CLOSE_COMMENT_EDITOR: return { ...state, postComments: { ...state.postComments, [payload.postId]: { ...state.postComments![payload.postId], [payload.id]: { ...state.postComments![payload.postId][payload.id], editorStatus: false } } } } case CommentActionType.OPEN_COMMENT_EDITOR: return { ...state, postComments: { ...state.postComments, [payload.postId]: { ...state.postComments![payload.postId], [payload.id]: { ...state.postComments![payload.postId][payload.id], editorStatus: true } } } } case CommentActionType.CLEAR_ALL_DATA_COMMENT: return new CommentState(); default: return state; } }