UNPKG

@fto-consult/expo-ui

Version:

Bibliothèque de composants UI Expo,react-native

137 lines (132 loc) 6.41 kB
import getSelectFieldValue from "./getSelectFieldValue"; import appConfig from "$capp/config"; export default function validate(args){ let {data,requiredFields,index,fields,table,tableText}= defaultObj(args) data = defaultObj(data); requiredFields = defaultArray(requiredFields); if(!isObj(fields)) return "champs de validation incorects"; for(let i in fields){ let field = fields[i]; if(!isObj(field)) continue; let code = defaultStr(i,field.code); let label = defaultStr(field.label,field.text,i); let v = data[code]; let isFieldSelected = arrayValueExists(requiredFields,code); let type = defaultStr(field.type,'text').toLowerCase().trim(); let validType = defaultStr(field.validType).toLowerCase(); let lSuffix = isNonNullString(tableText)? ("["+tableText+"]"):""; let labelStr = (isNonNullString(v) || isNumber(v) ? (" la valeur <"+v+"> du champ ") : "le champ ")+label+lSuffix+""; labelStr += (index)? (", ligne "+index):"" let isIdField = type == 'id' || type =="piece"; /**** les donées passés en paramètre de type tableau */ if(type.contains("select")){ if(field.multiple){ v = isArray(v)? v : (v?(v+""):"").split(","); } else v = defaultStr(v); let itemCodes = ""; let itemsL = Object.size((isObjOrArray(field.items)? field.items : [])) > 0 ? true : false; let hasF = true; let isSelectTableData = type == "selecttabledata"; if(isArray(v)){ let arr = []; v.map((value)=>{ if(itemsL){ let _v = getSelectFieldValue({field,value}); itemCodes = defaultStr(itemCodes,_v.itemCodes); if(_v.value !== false){ arr.push(_v.value); } } else if(isNonNullString(value)) { arr.push(isSelectTableData? value.toUpperCase():value) } }); hasF = arr.length > 0 ? true : false; v = arr; } else { if(itemsL){ let _v = getSelectFieldValue({field,value:v}); itemCodes = _v.itemCodes; hasF = _v.value !== false? true : false; if(hasF){ v = _v.value; } } if(isSelectTableData && hasF){ v = v.toUpperCase(); } //eif(isFieldSelected) console.log(hasF, code,_v,' is value'); } if(isFieldSelected && !hasF && itemCodes){ return labelStr+" doit figurer parmi la liste : ["+itemCodes+"]"; } } if((isIdField || validType.contains("required") || field.required)){ if(isIdField && isNonNullString(data.table)){ } else if(v == undefined || v == null || v =='' || (isArray(v) && v.length <= 0)) { return labelStr+" est requis"; } } if(isIdField && isNonNullString(v)){ v = v.trim(); if(!isValidDataFileName(v.replaceAll("/",""))) return labelStr+" a une valeur invalide"; } if(type =="datafile" && v && !APP.DATA_FILE_MANAGER.get(v)){ return labelStr+ ", le "+APP.DATA_FILE_MANAGER.dataFileText+" "+defaultStr(v) +" est innexistant" } if((type =="number" || type=="decimal" || validType.contains("number") || validType.contains("decimal"))){ if(!isNumber(v)){ v = parseDecimal(v); if(!isNumber(v) && isFieldSelected){ return labelStr+" doit être un nombre"; } else { v = defaultDecimal(v); } } } if(type =='email' && v && !isValidEmail(v,false)){ return labelStr+" doit être un email valide"; } if(type == 'date' && v){ let date = APP.date.toDateObj(v,true); if(!date || !date.date){ return labelStr+" doit être une date valide au format yyyy-mm-dd"; } } if(type == 'time' && v && !APP.date.isValidSQLTime(v)){ return labelStr+" doit être une heure valide au format hh:mm:ss"; } let strValid = labelStr+" doit être une chaine de caractère non nulle "; if(isNumber(field.length) && isNonNullString(v) && v.length != field.length){ return strValid+" de "+field.length + " caractères"; } if(isNumber(field.minLength) && isNonNullString(v) && v.length < field.minLength){ return strValid+" de "+field.minLength+" caractères minimum"; } if(isNumber(field.maxLength) && isNonNullString(v) && v.length > field.maxLength){ return strValid+" de "+field.maxLength+" caractères maximum"; } if(type =='switch'){ let checkedLabel = defaultStr(field.checkedLabel,code =='archived'?'Archivé':'Désactivé').toLowerCase().trim(), uncheckedLabel = defaultStr(field.uncheckedLabel,code =='archived'?'Non archivé':'Activé').toLowerCase().trim(), checkedValue = defaultVal(field.checkedValue,1),uncheckedValue = defaultVal(field.uncheckedValue,0) v = (defaultVal(v,field.defaultValue,"")+"").toLowerCase().trim(); if(v == checkedValue+""){ v = checkedValue; } else if(v == uncheckedValue+""){ v = uncheckedValue; } else if(v == checkedLabel){ v = checkedValue; } else if(v == uncheckedLabel){ v = uncheckedValue; } if(!arrayValueExists([checkedValue,uncheckedValue],v)){ return labelStr+" doit l'une des valeur : "+checkedLabel+"/"+uncheckedLabel+"/"+checkedValue+"/"+uncheckedValue; } } if(isFieldSelected && v !== undefined){ data[code] = v; } } data["has-validate-content-imp"] = true; return true; }