All files createDataFlowMixin.js

30.77% Statements 4/13
100% Branches 4/4
100% Functions 1/1
30.77% Lines 4/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51                          1x 2x 2x 2x                                                                    
import * as DataFlow from './DataFlow'
import format from './formatMethod'
 
/**
 * create a dataflow mixin for a given value prop.
 *
 * a 'value' dataflow implements the `v-model` interface.
 *
 * custom dataflows follow a pattern: methods are prefixed with the `valueProp`
 * name and `update:${valueProp}` is emitted.
 *
 * @param {string} valueProp - bind dataflow to this prop
 */
const createDataFlowMixin = (valueProp) => {
  const event = (valueProp === 'value') ? 'input' : `update:${valueProp}`
  const prefix = (valueProp === 'value') ? '' : valueProp
  return {
    methods: {
      [format('forwardInput', prefix)] (e) {
        this.$emit(event, e)
      },
      [format('handleChange', prefix)] (diff) {
        this.$emit(event, DataFlow.handleChange({value: this[valueProp], diff}))
      },
      [format('handleKeyChange', prefix)] (key, diff) {
        this.$emit(event, DataFlow.handleKeyChange({value: this[valueProp], key, diff}))
      },
      [format('handleArrayKeyChange', prefix)] (index, key, diff) {
        this.$emit(event, DataFlow.handleArrayKeyChange({value: this[valueProp], index, key, diff}))
      },
      [format('handleArrayChange', prefix)] (index, diff) {
        this.$emit(event, DataFlow.handleArrayChange({value: this[valueProp], index, diff}))
      },
      [format('pushToArray', prefix)] (diff) {
        this.$emit(event, DataFlow.pushToArray({value: this[valueProp], diff}))
      },
      [format('pushToArrayKey', prefix)] (key, diff) {
        this.$emit(event, DataFlow.pushToArrayKey({value: this[valueProp], key, diff}))
      },
      [format('removeFromArray', prefix)] (index) {
        this.$emit(event, DataFlow.removeFromArray({value: this[valueProp], index}))
      },
      [format('removeFromArrayKey', prefix)] (index, key) {
        this.$emit(event, DataFlow.removeFromArrayKey({value: this[valueProp], index, key}))
      }
    }
  }
}
 
export default createDataFlowMixin