FormItem validate

Run Settings
LanguageJavaScript
Language Version
Run Command
const isEmptyObject = (val) => val !== null && typeof val === 'object' && !Object.keys(val).length; const isEmpty = (val) => !Boolean(val); const isNull = (val) => val === null; const isUndefined = (val) => val === undefined; const DEFAULT_PARAMS = {lang: null, display: 'kv'}; const formItemChecks = { check_error_format: [], check_error_height: {kv: 500}, check_error_ratio: null, check_error_regex: '', check_error_size: {kv: 1}, check_error_width: {}, check_mandatory: true, check_max_characters: 57 }; const formItemLabels = { error_format: 'format', error_height: 'More than height', error_max_characters: 'More than max', error_ratio: 'More than ratio', error_regex: 'Not match', error_size: 'More than size', // ? get message error_width: 'More than width', mandatory: 'Empty field' }; const checkRegexp = (val, reg) => reg.test(val); const checkLessThanMax = (val, number) => val <= number; const checkMapper = { check_error_regex: checkRegexp, check_error_width: checkLessThanMax, check_error_height: checkLessThanMax, check_error_ratio: checkLessThanMax, check_error_size: checkLessThanMax, check_max_characters: checkLessThanMax, }; function createChecks(formItem, labels) { const checks = {}; const messages = {}; if (labels) { Object.keys(formItem) .filter((key) => key.match(/check/)) .forEach((key) => { const checkKey = formItem[key]; if (checkKey && !isEmptyObject(checkKey)) { checks[key] = checkKey; } }); Object.keys(checks) .forEach((key) => { const checkKey = key.replace('check_', ''); messages[key] = labels[checkKey]; }); } return { checks, messages }; } function validate(val, {checks, messages}, params = DEFAULT_PARAMS) { const {lang, display} = params; // console.log({checks, messages}); if (!Object.keys(checks).length || isEmpty(checks)) { return ''; } if (checks.check_mandatory && (!val || isEmptyObject(val))) { return messages.check_mandatory; } // eslint-disable-next-line guard-for-in for (let key in checks) { const checkFn = checkMapper[key]; const valueKey = typeof val === 'string' ? val.length : val[key.replace('check_error_', '')]; // console.log({key, valueKey}); if (checkFn && valueKey) { let initialValue; const checkValue = checks[key]; // console.log({checkValue}); switch (true) { case lang && !display: initialValue = checkValue[lang]; break; case display && !lang: initialValue = checkValue[display]; break; case lang && display: initialValue = checkValue[lang][display]; // ? break; default: initialValue = checkValue; } console.log({initialValue}); const check = checkFn(valueKey, initialValue); if (!check) { return messages[key]; } } } return ''; } const a = createChecks(formItemChecks, formItemLabels); // const message = validate(null, a); // console.log(a); /* TESTS */ // console.log('Check for empty field: ', validate(null, a)); // console.log('Check for wrong image height: ', validate({ // height: 1000, // width: 600 // }, a)); console.log('Check for wrong image size: ', validate({ height: 100, width: 100, size: 50000 }, a));
Editor Settings
Theme
Key bindings
Full width
Lines