Home Reference Source Repository

src/reducers/editProject.js

/*!
 * Codefolio
 * Copyright(c) 2016 MSMFSD
 * MIT Licensed
 */
import update from 'react/lib/update'
import {
  EDIT_PROJECT,
  EDIT_PROJECT_SUCCESS,
  EDIT_PROJECT_FAIL,
  EDIT_PROJECT_RESET,
  EDIT_PROJECT_SET,
  EDIT_PROJECT_UPLOADING_FILES,
  EDIT_PROJECT_UPLOADING_FILES_COMPLETE,
  EDIT_PROJECT_UPLOADING_FILES_ERROR,
  EDIT_PROJECT_UPDATE_MEDIA,
  EDIT_PROJECT_REMOVE_MEDIA,
  EDIT_PROJECT_ON_SPLICE_FIELD_ARRAY,
  EDIT_PROJECT_ON_PUSH_FIELD_ARRAY,
  EDIT_PROJECT_ADD_LINK,
  EDIT_PROJECT_REMOVE_LINK,
  EDIT_PROJECT_UPDATE_FIELD
} from '../actions/index'

const editProject = (state = {}, action) => {
  switch (action.type) {
    case EDIT_PROJECT:
      return Object.assign({}, state, {
        editProjectLoading: true,
        editProjectErrMessage: null,
        editProjectError: null,
        editProjectSuccess: null
      })
    case EDIT_PROJECT_SUCCESS:
      return Object.assign({}, state, {
        editProjectLoading: false,
        editProjectErrMessage: null,
        editProjectError: null,
        editProjectSuccess: true
      })
    case EDIT_PROJECT_FAIL:
      return Object.assign({}, state, {
        editProjectLoading: false,
        editProjectErrMessage: action.payload,
        editProjectError: true,
        editProjectSuccess: null
      })
    case EDIT_PROJECT_RESET:
      return Object.assign({}, state, {
        editProjectFilesLoading: false,
        editProjectFilesErrMessage: null,
        editProjectFilesError: null,
        editProjectFilesSuccess: null,
        editProjectLoading: false,
        editProjectErrMessage: null,
        editProjectError: null,
        editProjectSuccess: null,
        name: '',
        role: '',
        description: '',
        client: '',
        viewOrder: 1,
        sticky: 0,
        repoDisplay: 'no',
        repoUrl: '',
        repoUser: '',
        repoName: '',
        codeDisplay: 'no',
        code: '',
        projectTech: [],
        linkWeb: [],
        media: []
      })
    case EDIT_PROJECT_SET:
      return Object.assign({}, state, {
        editProjectFilesLoading: false,
        editProjectFilesErrMessage: null,
        editProjectFilesError: null,
        editProjectFilesSuccess: null,
        editProjectLoading: false,
        editProjectErrMessage: null,
        editProjectError: null,
        editProjectSuccess: null,
        name: action.project.name,
        role: action.project.role,
        description: action.project.description,
        client: action.project.client,
        viewOrder: action.project.viewOrder,
        sticky: action.project.sticky,
        repoDisplay: action.project.repo.display,
        repoUrl: action.project.repo.repoUrl,
        repoUser: action.project.repo.repoUser,
        repoName: action.project.repo.repoName,
        codeDisplay: action.project.codeSnippet.display,
        code: action.project.codeSnippet.code,
        projectTech: action.project.projectTech,
        linkWeb: action.project.linkWeb,
        media: action.project.media
      })
    case EDIT_PROJECT_UPLOADING_FILES:
      return Object.assign({}, state, {
        editProjectFilesLoading: true,
        editProjectFilesErrMessage: null,
        editProjectFilesError: null,
        editProjectFilesSuccess: null
      })
    case EDIT_PROJECT_UPLOADING_FILES_COMPLETE:
      // TODO update media
      return Object.assign({}, state, {
        editProjectFilesLoading: false,
        editProjectFilesErrMessage: null,
        editProjectFilesError: null,
        editProjectFilesSuccess: true
      })
    case EDIT_PROJECT_UPLOADING_FILES_ERROR:
      return Object.assign({}, state, {
        editProjectFilesLoading: false,
        editProjectFilesErrMessage: action.payload,
        editProjectFilesError: true,
        editProjectFilesSuccess: null
      })
    case EDIT_PROJECT_UPDATE_MEDIA:
      return update(state, {
        media: { $push: action.filenames }
      })
    case EDIT_PROJECT_REMOVE_MEDIA:
      return update(state, {
        media: {$splice: [[action.index, 1]]}
      })
    case EDIT_PROJECT_ON_PUSH_FIELD_ARRAY:
      return update(state, {
        [action.fieldName]: { $push: [action.fieldValue] }
      })
    case EDIT_PROJECT_ON_SPLICE_FIELD_ARRAY:
      return update(state, {
        [action.fieldName]: {$splice: [[action.index, 1]]}
      })
    case EDIT_PROJECT_ADD_LINK:
      return update(state, {
        [action.linkGroup]: {$push: [{ name: action.linkName, url: action.linkUrl }]}
      })
    case EDIT_PROJECT_REMOVE_LINK:
      return update(state, {
        [action.linkGroup]: {$splice: [[action.index, 1]]}
      })
    case EDIT_PROJECT_UPDATE_FIELD:
      return update(state, {
        [action.fieldName]: { $set: action.fieldValue }
      })
    default:
      return state
  }
}

export default editProject