all files / src/events/ getValue.js

100% Statements 36/36
97.3% Branches 36/37
100% Functions 3/3
100% Lines 26/26
1 branch Ignored     
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             236× 31×   30×     27×   23×   19×   17×   13×     205×            
import isEvent from './isEvent';
 
const getSelectedValues = options => {
  const result = [];
  Eif (options) {
    for (let index = 0; index < options.length; index++) {
      const option = options[index];
      if (option.selected) {
        result.push(option.value);
      }
    }
  }
  return result;
};
 
const getValue = (event, isReactNative) => {
  if (isEvent(event)) {
    if (!isReactNative && event.nativeEvent && event.nativeEvent.text !== undefined) {
      return event.nativeEvent.text;
    }
    if (isReactNative && event.nativeEvent !== undefined) {
      return event.nativeEvent.text;
    }
    const {target: {type, value, checked, files}, dataTransfer} = event;
    if (type === 'checkbox') {
      return checked;
    }
    if (type === 'file') {
      return files || dataTransfer && dataTransfer.files;
    }
    if (type === 'select-multiple') {
      return getSelectedValues(event.target.options);
    }
    if (type === 'number' || type === 'range') {
      return parseFloat(value);
    }
    return value;
  }
  // not an event, so must be either our value or an object containing our value in the 'value' key
  return event && typeof event === 'object' && event.value !== undefined ?
    event.value : // extract value from { value: value } structure. https://github.com/nikgraf/belle/issues/58
    event;
};
 
export default getValue;