SpeciesFileGroup/taxonworks

View on GitHub
app/javascript/vue/tasks/observation_matrices/matrix_row_coder/store/actions/saveObservationsFor.js

Summary

Maintainability
D
1 day
Test Coverage
import ActionNames from './actionNames'
import { MutationNames } from '../mutations/mutations'
import ObservationTypes from '../helpers/ObservationTypes'

export default function ({ dispatch, state, commit }, descriptorId) {
  const observations = state.observations
    .filter(o => o.descriptorId === descriptorId && o.isUnsaved)

  return Promise.all(observations.map(o => {
    if (isQualitativeObservation(o)) {
      saveQualitativeObservation(o)
    } else if (o.id) {
      return dispatch(ActionNames.UpdateObservation, { descriptorId, observationId: o.id })
    } else {
      return dispatch(ActionNames.CreateObservation, { descriptorId, internalId: o.internalId })
    }
  }))

  function saveQualitativeObservation (observation) {
    if (observation.id && !observation.isChecked) {
      return dispatch(ActionNames.RemoveObservation, makeObservationArgs(observation))
    } else if (observation.isChecked && observation.id) {
      return dispatch(ActionNames.UpdateObservation, makeObservationArgs(observation))
    } else if (observation.isChecked) {
      return dispatch(ActionNames.CreateObservation, makeObservationArgs(observation))
    } else {
      commit(MutationNames.ObservationSaved, makeObservationArgs(observation))
    }
  }
};

function isQualitativeObservation (observation) {
  return observation.type === ObservationTypes.Qualitative
}

function makeObservationArgs (observation) {
  const args = {
    descriptorId: observation.descriptorId,
    observationId: observation.id || observation.internalId,
    characterStateId: observation.characterStateId
  }

  return args
}