UNPKG

react-hook-core

Version:
112 lines (111 loc) 4.04 kB
"use strict" Object.defineProperty(exports, "__esModule", { value: true }) var state_1 = require("./state") var r1 = / |,|\$|€|£|¥|'|٬|،| /g var r2 = / |\.|\$|€|£|¥|'|٬|،| /g function valueOf(ctrl, locale, eventType) { if (ctrl.type === "checkbox") { var ctrlOnValue = ctrl.getAttribute("data-on-value") var ctrlOffValue = ctrl.getAttribute("data-off-value") if (ctrlOnValue && ctrlOffValue) { var onValue = ctrlOnValue ? ctrlOnValue : true var offValue = ctrlOffValue ? ctrlOffValue : false return ctrl.checked === true ? { mustChange: true, value: onValue } : { mustChange: true, value: offValue } } else { return ctrl.checked === true ? { mustChange: true, value: true } : { mustChange: true, value: false } } } else { var datatype = ctrl.getAttribute("data-type") if (datatype === "number" || datatype === "int") { var v = void 0 if (locale && locale.decimalSeparator !== ".") { v = ctrl.value.replace(r2, "") if (v.indexOf(locale.decimalSeparator) >= 0) { v = v.replace(locale.decimalSeparator, ".") } } else { v = ctrl.value.replace(r1, "") } return isNaN(v) ? { mustChange: false } : { mustChange: true, value: parseFloat(v) } } else if (datatype === "currency" || datatype === "string-currency") { var ml = ctrl.getAttribute("maxlength") var nm = ml != null && !isNaN(ml) ? parseInt(ml, 10) : undefined var res = getStringCurrency(ctrl.value, datatype, locale, nm, eventType === "blur") return res } else { return { mustChange: true, value: ctrl.value } } } } exports.valueOf = valueOf function getStringCurrency(value, datatype, locale, maxLength, isOnBlur) { if (locale && locale.decimalSeparator !== ".") { value = value.replace(r2, "") if (value.indexOf(locale.decimalSeparator) >= 0) { value = value.replace(locale.decimalSeparator, ".") } } else { value = value.replace(r1, "") } if (value === "") { return { mustChange: true, value: "" } } value = extractNumber(value, ".") if (value.length === 0) { return { mustChange: false } } else if (value.length > 0 && value.charAt(0) === "0") { return { mustChange: true, value: value.substring(1) } } if (!locale) { locale = state_1.enLocale } var decimalDigits = locale ? locale.decimalDigits : 2 var groupDigits = 3 var decimalSeparator = locale.decimalSeparator var groupSeparator = locale.groupSeparator if (isOnBlur) { var number = Number(value.replace(/^0+/, "")) if (number === 0) { return { mustChange: true, value: "" } } else { value = number.toFixed(decimalDigits) } } var dotPosition = value.indexOf(".") var beforeDot = dotPosition >= 0 ? value.substring(0, dotPosition) : value if (datatype === "string-currency" || isOnBlur) { beforeDot = beforeDot.replace(new RegExp("\\B(?=(\\d{" + groupDigits + "})+(?!\\d))", "g"), groupSeparator) } var afterDot if (dotPosition > 0) { afterDot = value.substring(dotPosition + 1) if (afterDot.length > decimalDigits) { afterDot = afterDot.substring(0, decimalDigits) } } if (maxLength && beforeDot.length > maxLength - (decimalDigits + 1)) { return { mustChange: false } } value = dotPosition >= 0 ? beforeDot + decimalSeparator + afterDot : beforeDot return maxLength && value.length > maxLength ? { mustChange: false } : { mustChange: true, value: value } } function extractNumber(str, decimalSeparator) { var arrs = [] var d = false for (var i = 0; i < str.length; i++) { var ch = str.charAt(i) if (ch >= "0" && ch <= "9") { arrs.push(ch) } else if (ch === decimalSeparator) { if (d) { return arrs.join("") } else { d = true arrs.push(ch) } } else { return arrs.join("") } } return arrs.join("") }