sapo-components-ui-rn 1.1.41 → 1.1.43
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 +169 -165
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +169 -165
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/NumberKeyboard/index.tsx +180 -174
- package/src/components/TextInput/TextInputNumber.tsx +2 -7
package/dist/index.esm.js
CHANGED
|
@@ -5927,14 +5927,8 @@ var TextInputNumber = function (_a) {
|
|
|
5927
5927
|
if (inputValue.endsWith(".")) {
|
|
5928
5928
|
finalValue = inputValue.slice(0, -1);
|
|
5929
5929
|
}
|
|
5930
|
-
|
|
5931
|
-
|
|
5932
|
-
setNumberValue(finalValue);
|
|
5933
|
-
}
|
|
5934
|
-
else {
|
|
5935
|
-
onChangeText === null || onChangeText === void 0 ? void 0 : onChangeText(formatNumberInput$1(finalValue, formatDecimal));
|
|
5936
|
-
setNumberValue(formatNumberInput$1(finalValue, formatDecimal));
|
|
5937
|
-
}
|
|
5930
|
+
// Luôn truyền giá trị gốc (không format) để giữ nguyên dạng số
|
|
5931
|
+
onChangeText === null || onChangeText === void 0 ? void 0 : onChangeText(finalValue);
|
|
5938
5932
|
setIsShowModalKeyboard(false);
|
|
5939
5933
|
};
|
|
5940
5934
|
var checkValueEmpty = function () {
|
|
@@ -7438,15 +7432,15 @@ var styles$1 = StyleSheet.create(__assign({}, containerStyles));
|
|
|
7438
7432
|
|
|
7439
7433
|
var formatNumberInput = function (value, formatDecimal) {
|
|
7440
7434
|
if (!value)
|
|
7441
|
-
return "
|
|
7435
|
+
return "";
|
|
7442
7436
|
if (value === "")
|
|
7443
|
-
return "
|
|
7437
|
+
return "";
|
|
7444
7438
|
// Xử lý số âm
|
|
7445
7439
|
var isNegative = value.startsWith("-");
|
|
7446
7440
|
var _a = value.replace(/[^0-9.]/g, "").split("."), intPart = _a[0], decimalPart = _a[1];
|
|
7447
7441
|
// Format phần nguyên
|
|
7448
7442
|
intPart = intPart.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
7449
|
-
// Giới hạn phần thập phân
|
|
7443
|
+
// Giới hạn phần thập phân 3 số
|
|
7450
7444
|
if (decimalPart)
|
|
7451
7445
|
decimalPart = decimalPart.slice(0, formatDecimal);
|
|
7452
7446
|
var result = intPart;
|
|
@@ -7465,17 +7459,20 @@ var NumberKeyboard = function (_a) {
|
|
|
7465
7459
|
var _k = useState(true), canSave = _k[0], setCanSave = _k[1];
|
|
7466
7460
|
useEffect(function () {
|
|
7467
7461
|
if (visible) {
|
|
7468
|
-
|
|
7462
|
+
var newValue = (value === null || value === void 0 ? void 0 : value.toString()) || "";
|
|
7463
|
+
setInputValue(newValue);
|
|
7469
7464
|
// Logic mới: Không reset về trạng thái nhập mới khi đã có giá trị
|
|
7470
|
-
// Chỉ set isFirstInput = true khi
|
|
7471
|
-
|
|
7465
|
+
// Chỉ set isFirstInput = true khi newValue rỗng hoặc chỉ có dấu trừ
|
|
7466
|
+
// Điều này cho phép người dùng tiếp tục nhập từ giá trị hiện tại
|
|
7467
|
+
// Ví dụ: value=999, người dùng có thể nhập "000" để tạo "999000"
|
|
7468
|
+
if (newValue === "" || newValue === "-") {
|
|
7472
7469
|
setIsFirstInput(true);
|
|
7473
7470
|
}
|
|
7474
7471
|
else {
|
|
7475
7472
|
setIsFirstInput(false);
|
|
7476
7473
|
}
|
|
7477
7474
|
}
|
|
7478
|
-
}, [visible, value
|
|
7475
|
+
}, [visible, value]);
|
|
7479
7476
|
useEffect(function () {
|
|
7480
7477
|
var currentValue = Number(inputValue);
|
|
7481
7478
|
var minValueNumber = Number(minValue);
|
|
@@ -7510,39 +7507,39 @@ var NumberKeyboard = function (_a) {
|
|
|
7510
7507
|
}
|
|
7511
7508
|
setCanSave(isValid);
|
|
7512
7509
|
}, [inputValue, minValue, maxValue]);
|
|
7513
|
-
var handleKeyPress =
|
|
7510
|
+
var handleKeyPress = function (key) {
|
|
7514
7511
|
if (key === "del") {
|
|
7515
7512
|
setInputValue(function (prev) { return prev.slice(0, -1); });
|
|
7516
|
-
setIsFirstInput(false);
|
|
7517
|
-
return;
|
|
7518
7513
|
}
|
|
7519
|
-
if (key === "000") {
|
|
7520
|
-
if (type === "integer"
|
|
7514
|
+
else if (key === "000") {
|
|
7515
|
+
if (type === "integer") {
|
|
7521
7516
|
// Xử lý trường hợp nhập "000" để tạo số lớn hơn
|
|
7522
7517
|
// Ví dụ: "1" + "000" = "1000", "10" + "000" = "10000"
|
|
7523
7518
|
// Nếu vượt quá maxValue, sẽ tự động cắt bớt số 0
|
|
7524
|
-
|
|
7525
|
-
|
|
7526
|
-
var
|
|
7519
|
+
// Logic này đảm bảo người dùng có thể tiếp tục nhập số đã được khởi tạo
|
|
7520
|
+
// Ví dụ: value=999, người dùng có thể nhập "000" để tạo "999000"
|
|
7521
|
+
var newInputValue = inputValue + "000";
|
|
7522
|
+
var newValue = Number(newInputValue);
|
|
7523
|
+
var maxValueNumber = Number(maxValue);
|
|
7527
7524
|
// Kiểm tra nếu giá trị vượt quá maxValue, cắt bớt số 0
|
|
7528
|
-
if (!isNaN(
|
|
7529
|
-
!isNaN(
|
|
7530
|
-
|
|
7525
|
+
if (!isNaN(newValue) &&
|
|
7526
|
+
!isNaN(maxValueNumber) &&
|
|
7527
|
+
newValue > maxValueNumber) {
|
|
7531
7528
|
// Tìm số 0 tối đa có thể thêm vào mà không vượt quá maxValue
|
|
7532
7529
|
var tempValue = inputValue;
|
|
7533
7530
|
var tempNewValue = Number(tempValue + "000");
|
|
7534
7531
|
// Giảm dần số 0 cho đến khi không vượt quá maxValue
|
|
7535
|
-
while (tempNewValue >
|
|
7532
|
+
while (tempNewValue > maxValueNumber && tempValue.endsWith("0")) {
|
|
7536
7533
|
tempValue = tempValue.slice(0, -1);
|
|
7537
7534
|
tempNewValue = Number(tempValue + "000");
|
|
7538
7535
|
}
|
|
7539
7536
|
// Nếu vẫn vượt quá, chỉ thêm số 0 có thể
|
|
7540
|
-
if (tempNewValue >
|
|
7537
|
+
if (tempNewValue > maxValueNumber) {
|
|
7541
7538
|
// Tìm số 0 tối đa có thể thêm
|
|
7542
7539
|
var maxZeros = 0;
|
|
7543
7540
|
for (var i = 1; i <= 3; i++) {
|
|
7544
7541
|
var testValue = Number(inputValue + "0".repeat(i));
|
|
7545
|
-
if (testValue <=
|
|
7542
|
+
if (testValue <= maxValueNumber) {
|
|
7546
7543
|
maxZeros = i;
|
|
7547
7544
|
}
|
|
7548
7545
|
else {
|
|
@@ -7550,8 +7547,8 @@ var NumberKeyboard = function (_a) {
|
|
|
7550
7547
|
}
|
|
7551
7548
|
}
|
|
7552
7549
|
if (maxZeros > 0) {
|
|
7553
|
-
|
|
7554
|
-
|
|
7550
|
+
newInputValue = inputValue + "0".repeat(maxZeros);
|
|
7551
|
+
newValue = Number(newInputValue);
|
|
7555
7552
|
}
|
|
7556
7553
|
else {
|
|
7557
7554
|
// Không thể thêm số 0 nào
|
|
@@ -7559,22 +7556,23 @@ var NumberKeyboard = function (_a) {
|
|
|
7559
7556
|
}
|
|
7560
7557
|
}
|
|
7561
7558
|
else {
|
|
7562
|
-
|
|
7563
|
-
|
|
7559
|
+
newInputValue = tempValue + "000";
|
|
7560
|
+
newValue = Number(newInputValue);
|
|
7564
7561
|
}
|
|
7565
7562
|
}
|
|
7566
7563
|
// Kiểm tra xem có thể nhập được không sau khi xử lý "000"
|
|
7567
|
-
if (!isNaN(
|
|
7568
|
-
!isNaN(
|
|
7569
|
-
|
|
7570
|
-
setInputValue(
|
|
7564
|
+
if (!isNaN(newValue) &&
|
|
7565
|
+
!isNaN(maxValueNumber) &&
|
|
7566
|
+
newValue <= maxValueNumber) {
|
|
7567
|
+
setInputValue(newInputValue);
|
|
7571
7568
|
}
|
|
7572
7569
|
setIsFirstInput(false);
|
|
7573
7570
|
}
|
|
7574
|
-
|
|
7571
|
+
// Nếu type là float, không cho phép nhập "000" ở đầu
|
|
7575
7572
|
}
|
|
7576
|
-
if (key === ".") {
|
|
7577
|
-
if (
|
|
7573
|
+
else if (key === ".") {
|
|
7574
|
+
if (!inputValue.includes(".")) {
|
|
7575
|
+
// Nếu inputValue là "0" hoặc rỗng, giữ lại số 0 và thêm dấu "."
|
|
7578
7576
|
if (inputValue === "0" || inputValue === "") {
|
|
7579
7577
|
setInputValue("0.");
|
|
7580
7578
|
}
|
|
@@ -7583,33 +7581,51 @@ var NumberKeyboard = function (_a) {
|
|
|
7583
7581
|
setInputValue("-0.");
|
|
7584
7582
|
}
|
|
7585
7583
|
else {
|
|
7584
|
+
// Nếu đã có giá trị, thêm dấu "." vào cuối
|
|
7586
7585
|
setInputValue(function (prev) { return prev + key; });
|
|
7587
7586
|
}
|
|
7588
7587
|
setIsFirstInput(false);
|
|
7589
7588
|
}
|
|
7590
|
-
return;
|
|
7591
7589
|
}
|
|
7592
|
-
|
|
7593
|
-
|
|
7594
|
-
|
|
7595
|
-
|
|
7596
|
-
|
|
7597
|
-
// Kiểm tra xem có thể nhập được không khi là lần đầu
|
|
7598
|
-
var newValue_2 = Number(key);
|
|
7599
|
-
var maxValueNumber_2 = Number(maxValue);
|
|
7600
|
-
if (!isNaN(newValue_2) && !isNaN(maxValueNumber_2)) {
|
|
7601
|
-
var canInput_1 = false;
|
|
7602
|
-
if (newValue_2 < 0) {
|
|
7603
|
-
// Với số âm, kiểm tra giá trị tuyệt đối không vượt quá maxValue
|
|
7604
|
-
var absNewValue = Math.abs(newValue_2);
|
|
7605
|
-
var absMaxValue = Math.abs(maxValueNumber_2);
|
|
7606
|
-
canInput_1 = absNewValue <= absMaxValue;
|
|
7590
|
+
else {
|
|
7591
|
+
if (isFirstInput) {
|
|
7592
|
+
// Nếu type là float và key là "0", không cho phép nhập số 0 đầu tiên
|
|
7593
|
+
if (type === "float" && key === "000") {
|
|
7594
|
+
return;
|
|
7607
7595
|
}
|
|
7608
|
-
|
|
7609
|
-
|
|
7610
|
-
|
|
7596
|
+
// Cho phép nhập số 0 đầu tiên cho type float, nhưng không cho phép nhập "000"
|
|
7597
|
+
// Kiểm tra xem có thể nhập được không khi là lần đầu
|
|
7598
|
+
var newValue = Number(key);
|
|
7599
|
+
var maxValueNumber = Number(maxValue);
|
|
7600
|
+
if (!isNaN(newValue) && !isNaN(maxValueNumber)) {
|
|
7601
|
+
var canInput = false;
|
|
7602
|
+
if (newValue < 0) {
|
|
7603
|
+
// Với số âm, kiểm tra giá trị tuyệt đối không vượt quá maxValue
|
|
7604
|
+
var absNewValue = Math.abs(newValue);
|
|
7605
|
+
var absMaxValue = Math.abs(maxValueNumber);
|
|
7606
|
+
canInput = absNewValue <= absMaxValue;
|
|
7607
|
+
}
|
|
7608
|
+
else {
|
|
7609
|
+
// Với số dương, kiểm tra bình thường
|
|
7610
|
+
canInput = newValue <= maxValueNumber;
|
|
7611
|
+
}
|
|
7612
|
+
if (canInput) {
|
|
7613
|
+
// Nếu inputValue rỗng hoặc chỉ có dấu trừ, thay thế hoàn toàn
|
|
7614
|
+
if (inputValue === "" || inputValue === "-") {
|
|
7615
|
+
setInputValue(key);
|
|
7616
|
+
}
|
|
7617
|
+
else {
|
|
7618
|
+
// Nếu đã có giá trị, thêm vào cuối
|
|
7619
|
+
setInputValue(inputValue + key);
|
|
7620
|
+
}
|
|
7621
|
+
setIsFirstInput(false);
|
|
7622
|
+
}
|
|
7623
|
+
else {
|
|
7624
|
+
// Nếu vượt quá maxValue ngay từ đầu, không cho phép nhập
|
|
7625
|
+
return;
|
|
7626
|
+
}
|
|
7611
7627
|
}
|
|
7612
|
-
|
|
7628
|
+
else {
|
|
7613
7629
|
// Nếu inputValue rỗng hoặc chỉ có dấu trừ, thay thế hoàn toàn
|
|
7614
7630
|
if (inputValue === "" || inputValue === "-") {
|
|
7615
7631
|
setInputValue(key);
|
|
@@ -7620,137 +7636,125 @@ var NumberKeyboard = function (_a) {
|
|
|
7620
7636
|
}
|
|
7621
7637
|
setIsFirstInput(false);
|
|
7622
7638
|
}
|
|
7623
|
-
else {
|
|
7624
|
-
// Nếu vượt quá maxValue ngay từ đầu, không cho phép nhập
|
|
7625
|
-
return;
|
|
7626
|
-
}
|
|
7627
7639
|
}
|
|
7628
7640
|
else {
|
|
7629
|
-
//
|
|
7630
|
-
if (inputValue === ""
|
|
7631
|
-
|
|
7632
|
-
|
|
7633
|
-
else {
|
|
7634
|
-
// Nếu đã có giá trị, thêm vào cuối
|
|
7635
|
-
setInputValue(inputValue + key);
|
|
7636
|
-
}
|
|
7637
|
-
setIsFirstInput(false);
|
|
7638
|
-
}
|
|
7639
|
-
return;
|
|
7640
|
-
}
|
|
7641
|
-
// Kiểm tra nếu input bắt đầu bằng 0 và không có dấu chấm
|
|
7642
|
-
if (inputValue === "0") {
|
|
7643
|
-
if (key === ".") {
|
|
7644
|
-
setInputValue("0.");
|
|
7645
|
-
return;
|
|
7646
|
-
}
|
|
7647
|
-
else if (key >= "1" && key <= "9") {
|
|
7648
|
-
setInputValue(key);
|
|
7649
|
-
return;
|
|
7650
|
-
}
|
|
7651
|
-
else {
|
|
7652
|
-
return;
|
|
7653
|
-
}
|
|
7654
|
-
}
|
|
7655
|
-
var newInputValue = inputValue + key;
|
|
7656
|
-
var newValue = Number(newInputValue);
|
|
7657
|
-
var maxValueNumber = Number(maxValue);
|
|
7658
|
-
// Kiểm tra xem có thể nhập được không
|
|
7659
|
-
var canInput = false;
|
|
7660
|
-
var shouldCheckLength = true;
|
|
7661
|
-
if (!isNaN(newValue) && !isNaN(maxValueNumber)) {
|
|
7662
|
-
if (newValue < 0) {
|
|
7663
|
-
// Với số âm, kiểm tra giá trị tuyệt đối không vượt quá maxValue
|
|
7664
|
-
var absNewValue = Math.abs(newValue);
|
|
7665
|
-
var absMaxValue = Math.abs(maxValueNumber);
|
|
7666
|
-
if (absNewValue <= absMaxValue) {
|
|
7667
|
-
canInput = true;
|
|
7668
|
-
}
|
|
7669
|
-
else {
|
|
7670
|
-
// Nếu vượt quá maxValue, kiểm tra xem có thể nhập được không
|
|
7671
|
-
var maxValueStr = absMaxValue.toString();
|
|
7672
|
-
inputValue.length;
|
|
7673
|
-
var newLength = newInputValue.length;
|
|
7674
|
-
// Nếu độ dài mới lớn hơn độ dài của maxValue, không cho phép nhập
|
|
7675
|
-
if (newLength > maxValueStr.length) {
|
|
7676
|
-
return;
|
|
7677
|
-
}
|
|
7678
|
-
// Nếu độ dài bằng nhau, kiểm tra giá trị
|
|
7679
|
-
if (newLength === maxValueStr.length && absNewValue > absMaxValue) {
|
|
7641
|
+
// Kiểm tra nếu input bắt đầu bằng 0 và không có dấu chấm
|
|
7642
|
+
if (inputValue === "0") {
|
|
7643
|
+
if (key === ".") {
|
|
7644
|
+
setInputValue("0.");
|
|
7680
7645
|
return;
|
|
7681
7646
|
}
|
|
7682
|
-
|
|
7683
|
-
|
|
7684
|
-
shouldCheckLength = false;
|
|
7685
|
-
}
|
|
7686
|
-
}
|
|
7687
|
-
else {
|
|
7688
|
-
// Với số dương, kiểm tra bình thường
|
|
7689
|
-
if (newValue <= maxValueNumber) {
|
|
7690
|
-
canInput = true;
|
|
7691
|
-
}
|
|
7692
|
-
else {
|
|
7693
|
-
// Nếu vượt quá maxValue, kiểm tra xem có thể nhập được không
|
|
7694
|
-
var maxValueStr = maxValueNumber.toString();
|
|
7695
|
-
inputValue.length;
|
|
7696
|
-
var newLength = newInputValue.length;
|
|
7697
|
-
// Nếu độ dài mới lớn hơn độ dài của maxValue, không cho phép nhập
|
|
7698
|
-
if (newLength > maxValueStr.length) {
|
|
7647
|
+
else if (key >= "1" && key <= "9") {
|
|
7648
|
+
setInputValue(key);
|
|
7699
7649
|
return;
|
|
7700
7650
|
}
|
|
7701
|
-
|
|
7702
|
-
if (newLength === maxValueStr.length && newValue > maxValueNumber) {
|
|
7651
|
+
else {
|
|
7703
7652
|
return;
|
|
7704
7653
|
}
|
|
7705
|
-
// Nếu độ dài nhỏ hơn, có thể nhập được (sẽ kiểm tra khi nhập tiếp)
|
|
7706
|
-
// Ví dụ: maxValue = 999, inputValue = "99", nhập "9" → "999" (OK)
|
|
7707
|
-
canInput = true;
|
|
7708
|
-
shouldCheckLength = false;
|
|
7709
|
-
}
|
|
7710
|
-
}
|
|
7711
|
-
}
|
|
7712
|
-
if (canInput) {
|
|
7713
|
-
if (inputValue.includes(".")) {
|
|
7714
|
-
// Xử lý số thập phân
|
|
7715
|
-
var _a = inputValue.split("."); _a[0]; var _b = _a[1], decimalPart = _b === void 0 ? "" : _b;
|
|
7716
|
-
if (newInputValue.length <= 12 && decimalPart.length === 0) {
|
|
7717
|
-
setInputValue(function (prev) { return prev + key; });
|
|
7718
|
-
}
|
|
7719
|
-
else if (newInputValue.length <= 12 &&
|
|
7720
|
-
decimalPart.length < formatDecimal) {
|
|
7721
|
-
setInputValue(function (prev) { return prev + key; });
|
|
7722
7654
|
}
|
|
7723
|
-
|
|
7724
|
-
|
|
7725
|
-
|
|
7726
|
-
|
|
7727
|
-
|
|
7655
|
+
var newInputValue = inputValue + key;
|
|
7656
|
+
var newValue = Number(newInputValue);
|
|
7657
|
+
var maxValueNumber = Number(maxValue);
|
|
7658
|
+
// Kiểm tra xem có thể nhập được không
|
|
7659
|
+
var canInput = false;
|
|
7660
|
+
var shouldCheckLength = true;
|
|
7661
|
+
if (!isNaN(newValue) && !isNaN(maxValueNumber)) {
|
|
7662
|
+
if (newValue < 0) {
|
|
7663
|
+
// Với số âm, kiểm tra giá trị tuyệt đối không vượt quá maxValue
|
|
7664
|
+
var absNewValue = Math.abs(newValue);
|
|
7665
|
+
var absMaxValue = Math.abs(maxValueNumber);
|
|
7666
|
+
if (absNewValue <= absMaxValue) {
|
|
7667
|
+
canInput = true;
|
|
7668
|
+
}
|
|
7669
|
+
else {
|
|
7670
|
+
// Nếu vượt quá maxValue, kiểm tra xem có thể nhập được không
|
|
7671
|
+
var maxValueStr = absMaxValue.toString();
|
|
7672
|
+
inputValue.length;
|
|
7673
|
+
var newLength = newInputValue.length;
|
|
7674
|
+
// Nếu độ dài mới lớn hơn độ dài của maxValue, không cho phép nhập
|
|
7675
|
+
if (newLength > maxValueStr.length) {
|
|
7676
|
+
return;
|
|
7677
|
+
}
|
|
7678
|
+
// Nếu độ dài bằng nhau, kiểm tra giá trị
|
|
7679
|
+
if (newLength === maxValueStr.length &&
|
|
7680
|
+
absNewValue > absMaxValue) {
|
|
7681
|
+
return;
|
|
7682
|
+
}
|
|
7683
|
+
// Nếu độ dài nhỏ hơn, có thể nhập được (sẽ kiểm tra khi nhập tiếp)
|
|
7684
|
+
canInput = true;
|
|
7685
|
+
shouldCheckLength = false;
|
|
7686
|
+
}
|
|
7687
|
+
}
|
|
7688
|
+
else {
|
|
7689
|
+
// Với số dương, kiểm tra bình thường
|
|
7690
|
+
if (newValue <= maxValueNumber) {
|
|
7691
|
+
canInput = true;
|
|
7692
|
+
}
|
|
7693
|
+
else {
|
|
7694
|
+
// Nếu vượt quá maxValue, kiểm tra xem có thể nhập được không
|
|
7695
|
+
var maxValueStr = maxValueNumber.toString();
|
|
7696
|
+
inputValue.length;
|
|
7697
|
+
var newLength = newInputValue.length;
|
|
7698
|
+
// Nếu độ dài mới lớn hơn độ dài của maxValue, không cho phép nhập
|
|
7699
|
+
if (newLength > maxValueStr.length) {
|
|
7700
|
+
return;
|
|
7701
|
+
}
|
|
7702
|
+
// Nếu độ dài bằng nhau, kiểm tra giá trị
|
|
7703
|
+
if (newLength === maxValueStr.length &&
|
|
7704
|
+
newValue > maxValueNumber) {
|
|
7705
|
+
return;
|
|
7706
|
+
}
|
|
7707
|
+
// Nếu độ dài nhỏ hơn, có thể nhập được (sẽ kiểm tra khi nhập tiếp)
|
|
7708
|
+
// Ví dụ: maxValue = 999, inputValue = "99", nhập "9" → "999" (OK)
|
|
7709
|
+
canInput = true;
|
|
7710
|
+
shouldCheckLength = false;
|
|
7711
|
+
}
|
|
7712
|
+
}
|
|
7728
7713
|
}
|
|
7729
|
-
|
|
7730
|
-
|
|
7731
|
-
|
|
7714
|
+
if (canInput) {
|
|
7715
|
+
if (inputValue.includes(".")) {
|
|
7716
|
+
// Xử lý số thập phân
|
|
7717
|
+
var _a = inputValue.split("."); _a[0]; var _b = _a[1], decimalPart = _b === void 0 ? "" : _b;
|
|
7718
|
+
if (newInputValue.length <= 12 && decimalPart.length === 0) {
|
|
7719
|
+
setInputValue(function (prev) { return prev + key; });
|
|
7720
|
+
}
|
|
7721
|
+
else if (newInputValue.length <= 12 && decimalPart.length < 3) {
|
|
7722
|
+
setInputValue(function (prev) { return prev + key; });
|
|
7723
|
+
}
|
|
7724
|
+
}
|
|
7725
|
+
else {
|
|
7726
|
+
// Xử lý số nguyên
|
|
7727
|
+
if (shouldCheckLength && newInputValue.length <= 12) {
|
|
7728
|
+
setInputValue(function (prev) { return prev + key; });
|
|
7729
|
+
}
|
|
7730
|
+
else if (!shouldCheckLength) {
|
|
7731
|
+
// Nếu không cần kiểm tra độ dài (đã kiểm tra maxValue ở trên)
|
|
7732
|
+
setInputValue(function (prev) { return prev + key; });
|
|
7733
|
+
}
|
|
7734
|
+
}
|
|
7732
7735
|
}
|
|
7733
7736
|
}
|
|
7734
7737
|
}
|
|
7735
|
-
}
|
|
7738
|
+
};
|
|
7736
7739
|
var handleClear = useCallback(function () {
|
|
7737
7740
|
setInputValue("");
|
|
7738
7741
|
setIsFirstInput(true);
|
|
7739
7742
|
}, []);
|
|
7740
7743
|
var handleSave = useCallback(function () {
|
|
7741
|
-
if (!canSave)
|
|
7742
|
-
return;
|
|
7743
7744
|
var finalValue = inputValue;
|
|
7744
7745
|
if (inputValue.endsWith(".")) {
|
|
7745
7746
|
finalValue = inputValue.slice(0, -1);
|
|
7746
7747
|
}
|
|
7748
|
+
// Luôn truyền giá trị gốc (không format) để giữ nguyên dạng số
|
|
7747
7749
|
onChangeText === null || onChangeText === void 0 ? void 0 : onChangeText(finalValue);
|
|
7748
7750
|
onClose();
|
|
7749
|
-
}, [inputValue, onChangeText, onClose
|
|
7751
|
+
}, [inputValue, onChangeText, onClose]);
|
|
7750
7752
|
var handleClose = useCallback(function () {
|
|
7751
7753
|
onClose();
|
|
7752
|
-
|
|
7753
|
-
|
|
7754
|
+
setTimeout(function () {
|
|
7755
|
+
setInputValue((value === null || value === void 0 ? void 0 : value.toString()) || "");
|
|
7756
|
+
}, 300);
|
|
7757
|
+
}, [onClose, value]);
|
|
7754
7758
|
return (React__default.createElement(Modal, { visible: visible, transparent: true, animationType: "fade", onRequestClose: handleClose },
|
|
7755
7759
|
React__default.createElement(TouchableOpacity, { style: styles.modalOverlay, activeOpacity: 1, onPress: handleClose },
|
|
7756
7760
|
React__default.createElement(View, { onPress: function () { }, activeOpacity: 1, backgroundColor: colors.surfacePrimaryDefault, style: styles.modalContent },
|