code: function (state, action) {
      const {bunsenId, value} = action
  
      const newState = {
        lastAction: CHANGE_VALUE
      }
  
      if (bunsenId === null) {
        Object.assign(newState, changeEntireFormValue({
          model: state.model,
          nextValue: value,
          prevValue: state.value
        }))
      } else {
        Object.assign(newState, changeNestedFormValue({
          bunsenId,
          formValue: state.value,
          model: state.model,
          value
        }))
      }
  
      newState.model = state.model || state.baseModel
  
      // If the value actually changed then we need to re-compute the model and view
      // so conditionals are correctly applied
      if (newState.valueChangeSet.size > 0) {
        const newModel = evaluateConditions(state.baseModel, newState.value, undefined, newState.value)
        newState.model = _.isEqual(state.model, newModel) ? state.model : newModel
  
        if (state.baseView) {
          const newView = evaluateViewConditions(state.baseView, newState.value)
          newState.view = _.isEqual(state.view, newView) ? state.view : newView
        }
      }
  
      return _.defaults(newState, state)
    }
docs: /* eslint-disable complexity 
  Update the bunsen value
  @param {State} state - state to update
  @param {Action} action - action
  @returns {State} - updated state