app/javascript/vue/tasks/observation_matrices/matrix_row_coder/store/actions/requestMatrixRow.js
import { MutationNames } from '../mutations/mutations'
import DescriptorTypes from '../helpers/DescriptorTypes'
import ComponentNames from '../helpers/ComponentNames'
import makeEmptyObservationsFor from '../helpers/makeEmptyObservationsFor'
export default function ({ commit, state }, rowId) {
return state.request.getMatrixRow(rowId)
.then(response => {
const descriptors = response.descriptors.map(transformDescriptorForViewmodel)
commit(MutationNames.SetDescriptors, descriptors)
commit(MutationNames.SetMatrixRow, response)
const emptyObservations = makeEmptyObservationsForDescriptors(descriptors)
emptyObservations.forEach(o => commit(MutationNames.SetObservation, o))
addOtuToState()
function addOtuToState () {
const {
global_id,
object_tag
} = response.observation_object
commit(MutationNames.SetTaxonId, global_id)
commit(MutationNames.SetTaxonTitle, object_tag)
}
})
};
function transformDescriptorForViewmodel (descriptorData) {
const descriptor = makeBaseDescriptor(descriptorData)
attemptToAddCharacterStates(descriptorData, descriptor)
attemptToAddDefaultUnit(descriptorData, descriptor)
return descriptor
}
function makeBaseDescriptor (descriptorData) {
return {
id: descriptorData.id,
componentName: getComponentNameForDescriptorType(descriptorData),
title: descriptorData.object_tag,
globalId: descriptorData.global_id,
description: getDescription(descriptorData),
type: getComponentNameForDescriptorType(descriptorData),
columnId: descriptorData.column_id,
isUnsaved: false,
needsCountdown: false,
isSaving: false,
hasSavedAtLeastOnce: false,
depictions: null
}
}
const DescriptorTypesToComponentNames = {
[DescriptorTypes.FreeText]: ComponentNames.FreeText,
[DescriptorTypes.Media]: ComponentNames.Media,
[DescriptorTypes.Qualitative]: ComponentNames.Qualitative,
[DescriptorTypes.Continuous]: ComponentNames.Continuous,
[DescriptorTypes.Sample]: ComponentNames.Sample,
[DescriptorTypes.Presence]: ComponentNames.Presence
}
function getComponentNameForDescriptorType (descriptorData) {
return DescriptorTypesToComponentNames[descriptorData.type]
}
function getDescription (descriptorData) {
return descriptorData.description || null
}
function attemptToAddCharacterStates (descriptorData, descriptor) {
if (descriptor.componentName === ComponentNames.Qualitative) { descriptor.characterStates = descriptorData.character_states.map(transformCharacterStateForViewmodel) }
}
function attemptToAddDefaultUnit (descriptorData, descriptor) {
if (descriptor.componentName === ComponentNames.Continuous || descriptor.componentName === ComponentNames.Sample) { descriptor.default_unit = descriptorData.default_unit }
}
function transformCharacterStateForViewmodel (characterStateData) {
return {
id: characterStateData.id,
name: characterStateData.name,
label: characterStateData.label,
globalId: characterStateData.global_id,
description: characterStateData.description || null
}
}
function makeEmptyObservationsForDescriptors (descriptors) {
let observations = []
descriptors.forEach(descriptor => {
observations = [...observations, ...makeEmptyObservationsFor(descriptor)]
})
return observations
}