all files / src/ numericality.js

100% Statements 39/39
100% Branches 84/84
100% Functions 3/3
100% Lines 35/35
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90                             43×   43×   43× 43× 43× 43× 43× 43× 43×   43× 94× 12×   82×   80×           75×           70×           65×           60×           55×           50×   46×            
import React from 'react'
import { FormattedMessage } from 'react-intl'
import { formatMessage, prepare, isNumber, trunc, memoize, DEFAULT_ALLOW_BLANK } from './helpers'
 
 
let numericality = memoize(function ({
      int, integer,
      even,
      odd,
      '=': equal, equalTo,
      '!=': diff, otherThan,
      '>': greater, greaterThan,
      '<': less, lessThan,
      '>=': greaterOrEqual, greaterThanOrEqualTo,
      '<=': lessOrEqual, lessThanOrEqualTo,
      message, msg,
      'if': ifCond, unless,
      allowBlank=DEFAULT_ALLOW_BLANK
    }={}) {
 
  msg            = formatMessage(msg || message)
 
  int            = int || integer
  equal          = isNumber(equal)          ? equal          : equalTo
  diff           = isNumber(diff)           ? diff           : otherThan
  greater        = isNumber(greater)        ? greater        : greaterThan
  less           = isNumber(less)           ? less           : lessThan
  greaterOrEqual = isNumber(greaterOrEqual) ? greaterOrEqual : greaterThanOrEqualTo
  lessOrEqual    = isNumber(lessOrEqual)    ? lessOrEqual    : lessThanOrEqualTo
 
  return prepare(ifCond, unless, allowBlank, function (value) {
    if (!isNumber(value)) {
      return msg || (<FormattedMessage id="form.errors.notANumber" defaultMessage="is not a number" />)
    }
    if (int && (+value % 1)) {
      return msg || (<FormattedMessage id="form.errors.notANumber" />)
    }
    if (isNumber(equal) && +value !== +equal) {
      return msg || (
        <FormattedMessage id="form.errors.equalTo"
          defaultMessage="must be equal to {count, number}"
          values={{ count: equal }} />
      )
    }
    if (isNumber(diff) && +value === +diff) {
      return msg || (
        <FormattedMessage id="form.errors.otherThan"
          defaultMessage="must be other than {count, number}"
          values={{ count: diff }} />
      )
    }
    if (isNumber(greater) && +value <= +greater) {
      return msg || (
        <FormattedMessage id="form.errors.greaterThan"
          defaultMessage="must be greater than {count, number}"
          values={{ count: greater }} />
      )
    }
    if (isNumber(greaterOrEqual) && +value < +greaterOrEqual) {
      return msg || (
        <FormattedMessage id="form.errors.greaterThanOrEqualTo"
          defaultMessage="must be greater than or equal to {count, number}"
          values={{ count: greaterOrEqual }} />
      )
    }
    if (isNumber(less) && +value >= +less) {
      return msg || (
        <FormattedMessage id="form.errors.lessThan"
          defaultMessage="must be less than {count, number}"
          values={{ count: less }} />
      )
    }
    if (isNumber(lessOrEqual) && +value > +lessOrEqual) {
      return msg || (
        <FormattedMessage id="form.errors.lessThanOrEqualTo"
          defaultMessage="must be less than or equal to {count, number}"
          values={{ count: lessOrEqual }} />
      )
    }
    if (even && (trunc(+value) % 2)) {
      return msg || (<FormattedMessage id="form.errors.even" defaultMessage="must be even" />)
    }
    if (odd && !(trunc(+value) % 2)) {
      return msg || (<FormattedMessage id="form.errors.odd" defaultMessage="must be odd" />)
    }
  })
})
 
export default numericality