sapo-components-ui-rn 1.1.40 → 1.1.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.esm.js +179 -161
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +179 -161
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/NumberKeyboard/index.tsx +183 -175
- package/src/components/Text/index.tsx +1 -1
- package/src/components/TextInput/Label/InputLabel.tsx +1 -1
- package/src/components/TextInput/TextInputFlat.tsx +8 -3
package/dist/index.esm.js
CHANGED
|
@@ -4784,7 +4784,7 @@ var Text = function (props) {
|
|
|
4784
4784
|
color: colors.textDefault,
|
|
4785
4785
|
fontFamily: "Inter-Regular",
|
|
4786
4786
|
fontSize: 15,
|
|
4787
|
-
lineHeight: 24,
|
|
4787
|
+
// lineHeight: 24,
|
|
4788
4788
|
};
|
|
4789
4789
|
var _a = props.size, size = _a === void 0 ? 15 : _a, lineHeight = props.lineHeight, center = props.center, color = props.color, bold = props.bold, medium = props.medium, semibold = props.semibold;
|
|
4790
4790
|
style.color = theme.colors.textDefault || "black";
|
|
@@ -4879,7 +4879,7 @@ var InputLabel = function (props) {
|
|
|
4879
4879
|
var commonStyles = [
|
|
4880
4880
|
placeholderStyle,
|
|
4881
4881
|
{
|
|
4882
|
-
top: topPosition - (Platform.OS === "android" ?
|
|
4882
|
+
top: topPosition - (Platform.OS === "android" ? 1 : inputValue ? 0 : 2),
|
|
4883
4883
|
},
|
|
4884
4884
|
{
|
|
4885
4885
|
maxWidth: labelWidth,
|
|
@@ -5292,7 +5292,11 @@ var TextInputFlat = function (_a) {
|
|
|
5292
5292
|
renderPrefix(), render === null || render === void 0 ? void 0 :
|
|
5293
5293
|
render(__assign(__assign({}, rest), { ref: innerRef, onChangeText: handleChangeText, value: inputValue, placeholder: rest.placeholder, editable: !disabled && editable, selectionColor: selectionColor, cursorColor: typeof cursorColor === "undefined" ? activeColor : cursorColor, placeholderTextColor: placeholderTextColorBasedOnState, onFocus: onFocus, onBlur: onBlur, underlineColorAndroid: "transparent", multiline: multiline, style: [
|
|
5294
5294
|
styles$e.input,
|
|
5295
|
-
__assign(__assign({ paddingLeft: paddingLeft, paddingRight: paddingRight, paddingTop: parentState.focused || parentState.value
|
|
5295
|
+
__assign(__assign({ paddingLeft: paddingLeft, paddingRight: paddingRight, paddingTop: parentState.focused || parentState.value
|
|
5296
|
+
? Platform.OS === "android"
|
|
5297
|
+
? SPACE_16
|
|
5298
|
+
: SPACE_12
|
|
5299
|
+
: 0 }, font), { fontSize: fontSize, lineHeight: lineHeight, fontWeight: fontWeight, color: inputTextColor, textAlignVertical: multiline ? "top" : "center", marginTop: Platform.OS === "android" ? SPACE_8 : SPACE_6 }),
|
|
5296
5300
|
contentStyle,
|
|
5297
5301
|
] })),
|
|
5298
5302
|
renderSuffix())),
|
|
@@ -7434,15 +7438,15 @@ var styles$1 = StyleSheet.create(__assign({}, containerStyles));
|
|
|
7434
7438
|
|
|
7435
7439
|
var formatNumberInput = function (value, formatDecimal) {
|
|
7436
7440
|
if (!value)
|
|
7437
|
-
return "
|
|
7441
|
+
return "";
|
|
7438
7442
|
if (value === "")
|
|
7439
|
-
return "
|
|
7443
|
+
return "";
|
|
7440
7444
|
// Xử lý số âm
|
|
7441
7445
|
var isNegative = value.startsWith("-");
|
|
7442
7446
|
var _a = value.replace(/[^0-9.]/g, "").split("."), intPart = _a[0], decimalPart = _a[1];
|
|
7443
7447
|
// Format phần nguyên
|
|
7444
7448
|
intPart = intPart.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
7445
|
-
// Giới hạn phần thập phân
|
|
7449
|
+
// Giới hạn phần thập phân 3 số
|
|
7446
7450
|
if (decimalPart)
|
|
7447
7451
|
decimalPart = decimalPart.slice(0, formatDecimal);
|
|
7448
7452
|
var result = intPart;
|
|
@@ -7461,17 +7465,20 @@ var NumberKeyboard = function (_a) {
|
|
|
7461
7465
|
var _k = useState(true), canSave = _k[0], setCanSave = _k[1];
|
|
7462
7466
|
useEffect(function () {
|
|
7463
7467
|
if (visible) {
|
|
7464
|
-
|
|
7468
|
+
var newValue = (value === null || value === void 0 ? void 0 : value.toString()) || "";
|
|
7469
|
+
setInputValue(newValue);
|
|
7465
7470
|
// Logic mới: Không reset về trạng thái nhập mới khi đã có giá trị
|
|
7466
|
-
// Chỉ set isFirstInput = true khi
|
|
7467
|
-
|
|
7471
|
+
// Chỉ set isFirstInput = true khi newValue rỗng hoặc chỉ có dấu trừ
|
|
7472
|
+
// Điều này cho phép người dùng tiếp tục nhập từ giá trị hiện tại
|
|
7473
|
+
// Ví dụ: value=999, người dùng có thể nhập "000" để tạo "999000"
|
|
7474
|
+
if (newValue === "" || newValue === "-") {
|
|
7468
7475
|
setIsFirstInput(true);
|
|
7469
7476
|
}
|
|
7470
7477
|
else {
|
|
7471
7478
|
setIsFirstInput(false);
|
|
7472
7479
|
}
|
|
7473
7480
|
}
|
|
7474
|
-
}, [visible, value
|
|
7481
|
+
}, [visible, value]);
|
|
7475
7482
|
useEffect(function () {
|
|
7476
7483
|
var currentValue = Number(inputValue);
|
|
7477
7484
|
var minValueNumber = Number(minValue);
|
|
@@ -7506,39 +7513,39 @@ var NumberKeyboard = function (_a) {
|
|
|
7506
7513
|
}
|
|
7507
7514
|
setCanSave(isValid);
|
|
7508
7515
|
}, [inputValue, minValue, maxValue]);
|
|
7509
|
-
var handleKeyPress =
|
|
7516
|
+
var handleKeyPress = function (key) {
|
|
7510
7517
|
if (key === "del") {
|
|
7511
7518
|
setInputValue(function (prev) { return prev.slice(0, -1); });
|
|
7512
|
-
setIsFirstInput(false);
|
|
7513
|
-
return;
|
|
7514
7519
|
}
|
|
7515
|
-
if (key === "000") {
|
|
7516
|
-
if (type === "integer"
|
|
7520
|
+
else if (key === "000") {
|
|
7521
|
+
if (type === "integer") {
|
|
7517
7522
|
// Xử lý trường hợp nhập "000" để tạo số lớn hơn
|
|
7518
7523
|
// Ví dụ: "1" + "000" = "1000", "10" + "000" = "10000"
|
|
7519
7524
|
// Nếu vượt quá maxValue, sẽ tự động cắt bớt số 0
|
|
7520
|
-
|
|
7521
|
-
|
|
7522
|
-
var
|
|
7525
|
+
// Logic này đảm bảo người dùng có thể tiếp tục nhập số đã được khởi tạo
|
|
7526
|
+
// Ví dụ: value=999, người dùng có thể nhập "000" để tạo "999000"
|
|
7527
|
+
var newInputValue = inputValue + "000";
|
|
7528
|
+
var newValue = Number(newInputValue);
|
|
7529
|
+
var maxValueNumber = Number(maxValue);
|
|
7523
7530
|
// Kiểm tra nếu giá trị vượt quá maxValue, cắt bớt số 0
|
|
7524
|
-
if (!isNaN(
|
|
7525
|
-
!isNaN(
|
|
7526
|
-
|
|
7531
|
+
if (!isNaN(newValue) &&
|
|
7532
|
+
!isNaN(maxValueNumber) &&
|
|
7533
|
+
newValue > maxValueNumber) {
|
|
7527
7534
|
// Tìm số 0 tối đa có thể thêm vào mà không vượt quá maxValue
|
|
7528
7535
|
var tempValue = inputValue;
|
|
7529
7536
|
var tempNewValue = Number(tempValue + "000");
|
|
7530
7537
|
// Giảm dần số 0 cho đến khi không vượt quá maxValue
|
|
7531
|
-
while (tempNewValue >
|
|
7538
|
+
while (tempNewValue > maxValueNumber && tempValue.endsWith("0")) {
|
|
7532
7539
|
tempValue = tempValue.slice(0, -1);
|
|
7533
7540
|
tempNewValue = Number(tempValue + "000");
|
|
7534
7541
|
}
|
|
7535
7542
|
// Nếu vẫn vượt quá, chỉ thêm số 0 có thể
|
|
7536
|
-
if (tempNewValue >
|
|
7543
|
+
if (tempNewValue > maxValueNumber) {
|
|
7537
7544
|
// Tìm số 0 tối đa có thể thêm
|
|
7538
7545
|
var maxZeros = 0;
|
|
7539
7546
|
for (var i = 1; i <= 3; i++) {
|
|
7540
7547
|
var testValue = Number(inputValue + "0".repeat(i));
|
|
7541
|
-
if (testValue <=
|
|
7548
|
+
if (testValue <= maxValueNumber) {
|
|
7542
7549
|
maxZeros = i;
|
|
7543
7550
|
}
|
|
7544
7551
|
else {
|
|
@@ -7546,8 +7553,8 @@ var NumberKeyboard = function (_a) {
|
|
|
7546
7553
|
}
|
|
7547
7554
|
}
|
|
7548
7555
|
if (maxZeros > 0) {
|
|
7549
|
-
|
|
7550
|
-
|
|
7556
|
+
newInputValue = inputValue + "0".repeat(maxZeros);
|
|
7557
|
+
newValue = Number(newInputValue);
|
|
7551
7558
|
}
|
|
7552
7559
|
else {
|
|
7553
7560
|
// Không thể thêm số 0 nào
|
|
@@ -7555,22 +7562,23 @@ var NumberKeyboard = function (_a) {
|
|
|
7555
7562
|
}
|
|
7556
7563
|
}
|
|
7557
7564
|
else {
|
|
7558
|
-
|
|
7559
|
-
|
|
7565
|
+
newInputValue = tempValue + "000";
|
|
7566
|
+
newValue = Number(newInputValue);
|
|
7560
7567
|
}
|
|
7561
7568
|
}
|
|
7562
7569
|
// Kiểm tra xem có thể nhập được không sau khi xử lý "000"
|
|
7563
|
-
if (!isNaN(
|
|
7564
|
-
!isNaN(
|
|
7565
|
-
|
|
7566
|
-
setInputValue(
|
|
7570
|
+
if (!isNaN(newValue) &&
|
|
7571
|
+
!isNaN(maxValueNumber) &&
|
|
7572
|
+
newValue <= maxValueNumber) {
|
|
7573
|
+
setInputValue(newInputValue);
|
|
7567
7574
|
}
|
|
7568
7575
|
setIsFirstInput(false);
|
|
7569
7576
|
}
|
|
7570
|
-
|
|
7577
|
+
// Nếu type là float, không cho phép nhập "000" ở đầu
|
|
7571
7578
|
}
|
|
7572
|
-
if (key === ".") {
|
|
7573
|
-
if (
|
|
7579
|
+
else if (key === ".") {
|
|
7580
|
+
if (!inputValue.includes(".")) {
|
|
7581
|
+
// Nếu inputValue là "0" hoặc rỗng, giữ lại số 0 và thêm dấu "."
|
|
7574
7582
|
if (inputValue === "0" || inputValue === "") {
|
|
7575
7583
|
setInputValue("0.");
|
|
7576
7584
|
}
|
|
@@ -7579,33 +7587,51 @@ var NumberKeyboard = function (_a) {
|
|
|
7579
7587
|
setInputValue("-0.");
|
|
7580
7588
|
}
|
|
7581
7589
|
else {
|
|
7590
|
+
// Nếu đã có giá trị, thêm dấu "." vào cuối
|
|
7582
7591
|
setInputValue(function (prev) { return prev + key; });
|
|
7583
7592
|
}
|
|
7584
7593
|
setIsFirstInput(false);
|
|
7585
7594
|
}
|
|
7586
|
-
return;
|
|
7587
7595
|
}
|
|
7588
|
-
|
|
7589
|
-
|
|
7590
|
-
|
|
7591
|
-
|
|
7592
|
-
|
|
7593
|
-
// Kiểm tra xem có thể nhập được không khi là lần đầu
|
|
7594
|
-
var newValue_2 = Number(key);
|
|
7595
|
-
var maxValueNumber_2 = Number(maxValue);
|
|
7596
|
-
if (!isNaN(newValue_2) && !isNaN(maxValueNumber_2)) {
|
|
7597
|
-
var canInput_1 = false;
|
|
7598
|
-
if (newValue_2 < 0) {
|
|
7599
|
-
// Với số âm, kiểm tra giá trị tuyệt đối không vượt quá maxValue
|
|
7600
|
-
var absNewValue = Math.abs(newValue_2);
|
|
7601
|
-
var absMaxValue = Math.abs(maxValueNumber_2);
|
|
7602
|
-
canInput_1 = absNewValue <= absMaxValue;
|
|
7596
|
+
else {
|
|
7597
|
+
if (isFirstInput) {
|
|
7598
|
+
// Nếu type là float và key là "0", không cho phép nhập số 0 đầu tiên
|
|
7599
|
+
if (type === "float" && key === "000") {
|
|
7600
|
+
return;
|
|
7603
7601
|
}
|
|
7604
|
-
|
|
7605
|
-
|
|
7606
|
-
|
|
7602
|
+
// Cho phép nhập số 0 đầu tiên cho type float, nhưng không cho phép nhập "000"
|
|
7603
|
+
// Kiểm tra xem có thể nhập được không khi là lần đầu
|
|
7604
|
+
var newValue = Number(key);
|
|
7605
|
+
var maxValueNumber = Number(maxValue);
|
|
7606
|
+
if (!isNaN(newValue) && !isNaN(maxValueNumber)) {
|
|
7607
|
+
var canInput = false;
|
|
7608
|
+
if (newValue < 0) {
|
|
7609
|
+
// Với số âm, kiểm tra giá trị tuyệt đối không vượt quá maxValue
|
|
7610
|
+
var absNewValue = Math.abs(newValue);
|
|
7611
|
+
var absMaxValue = Math.abs(maxValueNumber);
|
|
7612
|
+
canInput = absNewValue <= absMaxValue;
|
|
7613
|
+
}
|
|
7614
|
+
else {
|
|
7615
|
+
// Với số dương, kiểm tra bình thường
|
|
7616
|
+
canInput = newValue <= maxValueNumber;
|
|
7617
|
+
}
|
|
7618
|
+
if (canInput) {
|
|
7619
|
+
// Nếu inputValue rỗng hoặc chỉ có dấu trừ, thay thế hoàn toàn
|
|
7620
|
+
if (inputValue === "" || inputValue === "-") {
|
|
7621
|
+
setInputValue(key);
|
|
7622
|
+
}
|
|
7623
|
+
else {
|
|
7624
|
+
// Nếu đã có giá trị, thêm vào cuối
|
|
7625
|
+
setInputValue(inputValue + key);
|
|
7626
|
+
}
|
|
7627
|
+
setIsFirstInput(false);
|
|
7628
|
+
}
|
|
7629
|
+
else {
|
|
7630
|
+
// Nếu vượt quá maxValue ngay từ đầu, không cho phép nhập
|
|
7631
|
+
return;
|
|
7632
|
+
}
|
|
7607
7633
|
}
|
|
7608
|
-
|
|
7634
|
+
else {
|
|
7609
7635
|
// Nếu inputValue rỗng hoặc chỉ có dấu trừ, thay thế hoàn toàn
|
|
7610
7636
|
if (inputValue === "" || inputValue === "-") {
|
|
7611
7637
|
setInputValue(key);
|
|
@@ -7616,137 +7642,129 @@ var NumberKeyboard = function (_a) {
|
|
|
7616
7642
|
}
|
|
7617
7643
|
setIsFirstInput(false);
|
|
7618
7644
|
}
|
|
7619
|
-
else {
|
|
7620
|
-
// Nếu vượt quá maxValue ngay từ đầu, không cho phép nhập
|
|
7621
|
-
return;
|
|
7622
|
-
}
|
|
7623
|
-
}
|
|
7624
|
-
else {
|
|
7625
|
-
// Nếu inputValue rỗng hoặc chỉ có dấu trừ, thay thế hoàn toàn
|
|
7626
|
-
if (inputValue === "" || inputValue === "-") {
|
|
7627
|
-
setInputValue(key);
|
|
7628
|
-
}
|
|
7629
|
-
else {
|
|
7630
|
-
// Nếu đã có giá trị, thêm vào cuối
|
|
7631
|
-
setInputValue(inputValue + key);
|
|
7632
|
-
}
|
|
7633
|
-
setIsFirstInput(false);
|
|
7634
|
-
}
|
|
7635
|
-
return;
|
|
7636
|
-
}
|
|
7637
|
-
// Kiểm tra nếu input bắt đầu bằng 0 và không có dấu chấm
|
|
7638
|
-
if (inputValue === "0") {
|
|
7639
|
-
if (key === ".") {
|
|
7640
|
-
setInputValue("0.");
|
|
7641
|
-
return;
|
|
7642
|
-
}
|
|
7643
|
-
else if (key >= "1" && key <= "9") {
|
|
7644
|
-
setInputValue(key);
|
|
7645
|
-
return;
|
|
7646
7645
|
}
|
|
7647
7646
|
else {
|
|
7648
|
-
|
|
7649
|
-
|
|
7650
|
-
|
|
7651
|
-
|
|
7652
|
-
var newValue = Number(newInputValue);
|
|
7653
|
-
var maxValueNumber = Number(maxValue);
|
|
7654
|
-
// Kiểm tra xem có thể nhập được không
|
|
7655
|
-
var canInput = false;
|
|
7656
|
-
var shouldCheckLength = true;
|
|
7657
|
-
if (!isNaN(newValue) && !isNaN(maxValueNumber)) {
|
|
7658
|
-
if (newValue < 0) {
|
|
7659
|
-
// Với số âm, kiểm tra giá trị tuyệt đối không vượt quá maxValue
|
|
7660
|
-
var absNewValue = Math.abs(newValue);
|
|
7661
|
-
var absMaxValue = Math.abs(maxValueNumber);
|
|
7662
|
-
if (absNewValue <= absMaxValue) {
|
|
7663
|
-
canInput = true;
|
|
7664
|
-
}
|
|
7665
|
-
else {
|
|
7666
|
-
// Nếu vượt quá maxValue, kiểm tra xem có thể nhập được không
|
|
7667
|
-
var maxValueStr = absMaxValue.toString();
|
|
7668
|
-
inputValue.length;
|
|
7669
|
-
var newLength = newInputValue.length;
|
|
7670
|
-
// Nếu độ dài mới lớn hơn độ dài của maxValue, không cho phép nhập
|
|
7671
|
-
if (newLength > maxValueStr.length) {
|
|
7672
|
-
return;
|
|
7673
|
-
}
|
|
7674
|
-
// Nếu độ dài bằng nhau, kiểm tra giá trị
|
|
7675
|
-
if (newLength === maxValueStr.length && absNewValue > absMaxValue) {
|
|
7647
|
+
// Kiểm tra nếu input bắt đầu bằng 0 và không có dấu chấm
|
|
7648
|
+
if (inputValue === "0") {
|
|
7649
|
+
if (key === ".") {
|
|
7650
|
+
setInputValue("0.");
|
|
7676
7651
|
return;
|
|
7677
7652
|
}
|
|
7678
|
-
|
|
7679
|
-
|
|
7680
|
-
shouldCheckLength = false;
|
|
7681
|
-
}
|
|
7682
|
-
}
|
|
7683
|
-
else {
|
|
7684
|
-
// Với số dương, kiểm tra bình thường
|
|
7685
|
-
if (newValue <= maxValueNumber) {
|
|
7686
|
-
canInput = true;
|
|
7687
|
-
}
|
|
7688
|
-
else {
|
|
7689
|
-
// Nếu vượt quá maxValue, kiểm tra xem có thể nhập được không
|
|
7690
|
-
var maxValueStr = maxValueNumber.toString();
|
|
7691
|
-
inputValue.length;
|
|
7692
|
-
var newLength = newInputValue.length;
|
|
7693
|
-
// Nếu độ dài mới lớn hơn độ dài của maxValue, không cho phép nhập
|
|
7694
|
-
if (newLength > maxValueStr.length) {
|
|
7653
|
+
else if (key >= "1" && key <= "9") {
|
|
7654
|
+
setInputValue(key);
|
|
7695
7655
|
return;
|
|
7696
7656
|
}
|
|
7697
|
-
|
|
7698
|
-
if (newLength === maxValueStr.length && newValue > maxValueNumber) {
|
|
7657
|
+
else {
|
|
7699
7658
|
return;
|
|
7700
7659
|
}
|
|
7701
|
-
// Nếu độ dài nhỏ hơn, có thể nhập được (sẽ kiểm tra khi nhập tiếp)
|
|
7702
|
-
// Ví dụ: maxValue = 999, inputValue = "99", nhập "9" → "999" (OK)
|
|
7703
|
-
canInput = true;
|
|
7704
|
-
shouldCheckLength = false;
|
|
7705
|
-
}
|
|
7706
|
-
}
|
|
7707
|
-
}
|
|
7708
|
-
if (canInput) {
|
|
7709
|
-
if (inputValue.includes(".")) {
|
|
7710
|
-
// Xử lý số thập phân
|
|
7711
|
-
var _a = inputValue.split("."); _a[0]; var _b = _a[1], decimalPart = _b === void 0 ? "" : _b;
|
|
7712
|
-
if (newInputValue.length <= 12 && decimalPart.length === 0) {
|
|
7713
|
-
setInputValue(function (prev) { return prev + key; });
|
|
7714
7660
|
}
|
|
7715
|
-
|
|
7716
|
-
|
|
7717
|
-
|
|
7718
|
-
|
|
7719
|
-
|
|
7720
|
-
|
|
7721
|
-
|
|
7722
|
-
|
|
7723
|
-
|
|
7661
|
+
var newInputValue = inputValue + key;
|
|
7662
|
+
var newValue = Number(newInputValue);
|
|
7663
|
+
var maxValueNumber = Number(maxValue);
|
|
7664
|
+
// Kiểm tra xem có thể nhập được không
|
|
7665
|
+
var canInput = false;
|
|
7666
|
+
var shouldCheckLength = true;
|
|
7667
|
+
if (!isNaN(newValue) && !isNaN(maxValueNumber)) {
|
|
7668
|
+
if (newValue < 0) {
|
|
7669
|
+
// Với số âm, kiểm tra giá trị tuyệt đối không vượt quá maxValue
|
|
7670
|
+
var absNewValue = Math.abs(newValue);
|
|
7671
|
+
var absMaxValue = Math.abs(maxValueNumber);
|
|
7672
|
+
if (absNewValue <= absMaxValue) {
|
|
7673
|
+
canInput = true;
|
|
7674
|
+
}
|
|
7675
|
+
else {
|
|
7676
|
+
// Nếu vượt quá maxValue, kiểm tra xem có thể nhập được không
|
|
7677
|
+
var maxValueStr = absMaxValue.toString();
|
|
7678
|
+
inputValue.length;
|
|
7679
|
+
var newLength = newInputValue.length;
|
|
7680
|
+
// Nếu độ dài mới lớn hơn độ dài của maxValue, không cho phép nhập
|
|
7681
|
+
if (newLength > maxValueStr.length) {
|
|
7682
|
+
return;
|
|
7683
|
+
}
|
|
7684
|
+
// Nếu độ dài bằng nhau, kiểm tra giá trị
|
|
7685
|
+
if (newLength === maxValueStr.length &&
|
|
7686
|
+
absNewValue > absMaxValue) {
|
|
7687
|
+
return;
|
|
7688
|
+
}
|
|
7689
|
+
// Nếu độ dài nhỏ hơn, có thể nhập được (sẽ kiểm tra khi nhập tiếp)
|
|
7690
|
+
canInput = true;
|
|
7691
|
+
shouldCheckLength = false;
|
|
7692
|
+
}
|
|
7693
|
+
}
|
|
7694
|
+
else {
|
|
7695
|
+
// Với số dương, kiểm tra bình thường
|
|
7696
|
+
if (newValue <= maxValueNumber) {
|
|
7697
|
+
canInput = true;
|
|
7698
|
+
}
|
|
7699
|
+
else {
|
|
7700
|
+
// Nếu vượt quá maxValue, kiểm tra xem có thể nhập được không
|
|
7701
|
+
var maxValueStr = maxValueNumber.toString();
|
|
7702
|
+
inputValue.length;
|
|
7703
|
+
var newLength = newInputValue.length;
|
|
7704
|
+
// Nếu độ dài mới lớn hơn độ dài của maxValue, không cho phép nhập
|
|
7705
|
+
if (newLength > maxValueStr.length) {
|
|
7706
|
+
return;
|
|
7707
|
+
}
|
|
7708
|
+
// Nếu độ dài bằng nhau, kiểm tra giá trị
|
|
7709
|
+
if (newLength === maxValueStr.length &&
|
|
7710
|
+
newValue > maxValueNumber) {
|
|
7711
|
+
return;
|
|
7712
|
+
}
|
|
7713
|
+
// Nếu độ dài nhỏ hơn, có thể nhập được (sẽ kiểm tra khi nhập tiếp)
|
|
7714
|
+
// Ví dụ: maxValue = 999, inputValue = "99", nhập "9" → "999" (OK)
|
|
7715
|
+
canInput = true;
|
|
7716
|
+
shouldCheckLength = false;
|
|
7717
|
+
}
|
|
7718
|
+
}
|
|
7724
7719
|
}
|
|
7725
|
-
|
|
7726
|
-
|
|
7727
|
-
|
|
7720
|
+
if (canInput) {
|
|
7721
|
+
if (inputValue.includes(".")) {
|
|
7722
|
+
// Xử lý số thập phân
|
|
7723
|
+
var _a = inputValue.split("."); _a[0]; var _b = _a[1], decimalPart = _b === void 0 ? "" : _b;
|
|
7724
|
+
if (newInputValue.length <= 12 && decimalPart.length === 0) {
|
|
7725
|
+
setInputValue(function (prev) { return prev + key; });
|
|
7726
|
+
}
|
|
7727
|
+
else if (newInputValue.length <= 12 && decimalPart.length < 3) {
|
|
7728
|
+
setInputValue(function (prev) { return prev + key; });
|
|
7729
|
+
}
|
|
7730
|
+
}
|
|
7731
|
+
else {
|
|
7732
|
+
// Xử lý số nguyên
|
|
7733
|
+
if (shouldCheckLength && newInputValue.length <= 12) {
|
|
7734
|
+
setInputValue(function (prev) { return prev + key; });
|
|
7735
|
+
}
|
|
7736
|
+
else if (!shouldCheckLength) {
|
|
7737
|
+
// Nếu không cần kiểm tra độ dài (đã kiểm tra maxValue ở trên)
|
|
7738
|
+
setInputValue(function (prev) { return prev + key; });
|
|
7739
|
+
}
|
|
7740
|
+
}
|
|
7728
7741
|
}
|
|
7729
7742
|
}
|
|
7730
7743
|
}
|
|
7731
|
-
}
|
|
7744
|
+
};
|
|
7732
7745
|
var handleClear = useCallback(function () {
|
|
7733
7746
|
setInputValue("");
|
|
7734
7747
|
setIsFirstInput(true);
|
|
7735
7748
|
}, []);
|
|
7736
7749
|
var handleSave = useCallback(function () {
|
|
7737
|
-
if (!canSave)
|
|
7738
|
-
return;
|
|
7739
7750
|
var finalValue = inputValue;
|
|
7740
7751
|
if (inputValue.endsWith(".")) {
|
|
7741
7752
|
finalValue = inputValue.slice(0, -1);
|
|
7742
7753
|
}
|
|
7743
|
-
|
|
7754
|
+
if (type === "integer") {
|
|
7755
|
+
onChangeText === null || onChangeText === void 0 ? void 0 : onChangeText(finalValue);
|
|
7756
|
+
}
|
|
7757
|
+
else {
|
|
7758
|
+
onChangeText === null || onChangeText === void 0 ? void 0 : onChangeText(formatNumberInput(finalValue, formatDecimal));
|
|
7759
|
+
}
|
|
7744
7760
|
onClose();
|
|
7745
|
-
}, [inputValue, onChangeText, onClose,
|
|
7761
|
+
}, [inputValue, onChangeText, onClose, type, formatDecimal]);
|
|
7746
7762
|
var handleClose = useCallback(function () {
|
|
7747
7763
|
onClose();
|
|
7748
|
-
|
|
7749
|
-
|
|
7764
|
+
setTimeout(function () {
|
|
7765
|
+
setInputValue((value === null || value === void 0 ? void 0 : value.toString()) || "");
|
|
7766
|
+
}, 300);
|
|
7767
|
+
}, [onClose, value]);
|
|
7750
7768
|
return (React__default.createElement(Modal, { visible: visible, transparent: true, animationType: "fade", onRequestClose: handleClose },
|
|
7751
7769
|
React__default.createElement(TouchableOpacity, { style: styles.modalOverlay, activeOpacity: 1, onPress: handleClose },
|
|
7752
7770
|
React__default.createElement(View, { onPress: function () { }, activeOpacity: 1, backgroundColor: colors.surfacePrimaryDefault, style: styles.modalContent },
|