All files / src common.js

100% Statements 21/21
100% Branches 12/12
100% Functions 9/9
100% Lines 16/16
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                  6x 119x     6x 28x 62x     28x     55x 79x     6x   6x 6x   8x     6x     6x 6x   6x          
import R from 'ramda';
 
import {
    isNonEmptyTrimmedString, hasLengthBetween as hasLengthBetweenPredicate,
    isEqualOrShorterThan as isEqualOrShorterThanPredicate
} from './predicates';
import { NUMBER_REGEX, WITHOUT_NUMBER_REGEX, WITH_LETTER_REGEX } from './regexes';
import errorMessages from './errorMessages';
 
export const check = R.curry((predicate, msg, val) => {
    return predicate(val) ? undefined : msg;
});
 
export const checkMultiple = R.curry((predicates, value) => {
    const firstFailedPredicate = R.find((predicate) => {
        return Boolean(predicate(value));
    }, predicates);
 
    return firstFailedPredicate ? firstFailedPredicate(value) : undefined;
});
 
export const setupCheck = (checkCallback) => (predicate, defaultMessage) => (customMessage) => {
    return checkCallback(predicate, customMessage || defaultMessage);
};
 
export const checkSingle = setupCheck(check);
 
export const isRequired = checkSingle(isNonEmptyTrimmedString, errorMessages.emptyField);
export const isNumber = checkSingle(R.test(NUMBER_REGEX), errorMessages.numberField);
 
export const hasLengthBetween = (from, to) => checkSingle(
    hasLengthBetweenPredicate(from, to), errorMessages.fieldWrongLength
);
export const isEqualOrShorterThan = (length) => checkSingle(
    isEqualOrShorterThanPredicate(length), errorMessages.toShortFieldValue
);
export const isStringWithoutNumbers = checkSingle(R.test(WITHOUT_NUMBER_REGEX), errorMessages.fieldWithNumbers);
export const hasAtLeastOneLetter = checkSingle(R.test(WITH_LETTER_REGEX), errorMessages.fieldWithNumbersOnly);
 
export const createNameSchema = (fieldName) => checkMultiple([
    isRequired(errorMessages[`${fieldName}Empty`] || ''),
    hasLengthBetween(2, 50)(errorMessages[`${fieldName}WrongLength`] || ''),
    isStringWithoutNumbers(errorMessages[`${fieldName}WithNumbers`] || '')
]);