sapo-components-ui-rn 1.1.41 → 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 CHANGED
@@ -7438,15 +7438,15 @@ var styles$1 = StyleSheet.create(__assign({}, containerStyles));
7438
7438
 
7439
7439
  var formatNumberInput = function (value, formatDecimal) {
7440
7440
  if (!value)
7441
- return "0";
7441
+ return "";
7442
7442
  if (value === "")
7443
- return "0";
7443
+ return "";
7444
7444
  // Xử lý số âm
7445
7445
  var isNegative = value.startsWith("-");
7446
7446
  var _a = value.replace(/[^0-9.]/g, "").split("."), intPart = _a[0], decimalPart = _a[1];
7447
7447
  // Format phần nguyên
7448
7448
  intPart = intPart.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
7449
- // Giới hạn phần thập phân
7449
+ // Giới hạn phần thập phân 3 số
7450
7450
  if (decimalPart)
7451
7451
  decimalPart = decimalPart.slice(0, formatDecimal);
7452
7452
  var result = intPart;
@@ -7465,17 +7465,20 @@ var NumberKeyboard = function (_a) {
7465
7465
  var _k = useState(true), canSave = _k[0], setCanSave = _k[1];
7466
7466
  useEffect(function () {
7467
7467
  if (visible) {
7468
- setInputValue((value === null || value === void 0 ? void 0 : value.toString()) || "");
7468
+ var newValue = (value === null || value === void 0 ? void 0 : value.toString()) || "";
7469
+ setInputValue(newValue);
7469
7470
  // 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 inputValue rỗng hoặc chỉ có dấu trừ
7471
- if (inputValue === "" || inputValue === "-") {
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 === "-") {
7472
7475
  setIsFirstInput(true);
7473
7476
  }
7474
7477
  else {
7475
7478
  setIsFirstInput(false);
7476
7479
  }
7477
7480
  }
7478
- }, [visible, value, inputValue]);
7481
+ }, [visible, value]);
7479
7482
  useEffect(function () {
7480
7483
  var currentValue = Number(inputValue);
7481
7484
  var minValueNumber = Number(minValue);
@@ -7510,39 +7513,39 @@ var NumberKeyboard = function (_a) {
7510
7513
  }
7511
7514
  setCanSave(isValid);
7512
7515
  }, [inputValue, minValue, maxValue]);
7513
- var handleKeyPress = useCallback(function (key) {
7516
+ var handleKeyPress = function (key) {
7514
7517
  if (key === "del") {
7515
7518
  setInputValue(function (prev) { return prev.slice(0, -1); });
7516
- setIsFirstInput(false);
7517
- return;
7518
7519
  }
7519
- if (key === "000") {
7520
- if (type === "integer" && inputValue.length > 0) {
7520
+ else if (key === "000") {
7521
+ if (type === "integer") {
7521
7522
  // Xử lý trường hợp nhập "000" để tạo số lớn hơn
7522
7523
  // Ví dụ: "1" + "000" = "1000", "10" + "000" = "10000"
7523
7524
  // Nếu vượt quá maxValue, sẽ tự động cắt bớt số 0
7524
- var newInputValue_1 = inputValue + "000";
7525
- var newValue_1 = Number(newInputValue_1);
7526
- var maxValueNumber_1 = Number(maxValue);
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
+ // 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);
7527
7530
  // Kiểm tra nếu giá trị vượt quá maxValue, cắt bớt số 0
7528
- if (!isNaN(newValue_1) &&
7529
- !isNaN(maxValueNumber_1) &&
7530
- newValue_1 > maxValueNumber_1) {
7531
+ if (!isNaN(newValue) &&
7532
+ !isNaN(maxValueNumber) &&
7533
+ newValue > maxValueNumber) {
7531
7534
  // Tìm số 0 tối đa có thể thêm vào mà không vượt quá maxValue
7532
7535
  var tempValue = inputValue;
7533
7536
  var tempNewValue = Number(tempValue + "000");
7534
7537
  // Giảm dần số 0 cho đến khi không vượt quá maxValue
7535
- while (tempNewValue > maxValueNumber_1 && tempValue.endsWith("0")) {
7538
+ while (tempNewValue > maxValueNumber && tempValue.endsWith("0")) {
7536
7539
  tempValue = tempValue.slice(0, -1);
7537
7540
  tempNewValue = Number(tempValue + "000");
7538
7541
  }
7539
7542
  // Nếu vẫn vượt quá, chỉ thêm số 0 có thể
7540
- if (tempNewValue > maxValueNumber_1) {
7543
+ if (tempNewValue > maxValueNumber) {
7541
7544
  // Tìm số 0 tối đa có thể thêm
7542
7545
  var maxZeros = 0;
7543
7546
  for (var i = 1; i <= 3; i++) {
7544
7547
  var testValue = Number(inputValue + "0".repeat(i));
7545
- if (testValue <= maxValueNumber_1) {
7548
+ if (testValue <= maxValueNumber) {
7546
7549
  maxZeros = i;
7547
7550
  }
7548
7551
  else {
@@ -7550,8 +7553,8 @@ var NumberKeyboard = function (_a) {
7550
7553
  }
7551
7554
  }
7552
7555
  if (maxZeros > 0) {
7553
- newInputValue_1 = inputValue + "0".repeat(maxZeros);
7554
- newValue_1 = Number(newInputValue_1);
7556
+ newInputValue = inputValue + "0".repeat(maxZeros);
7557
+ newValue = Number(newInputValue);
7555
7558
  }
7556
7559
  else {
7557
7560
  // Không thể thêm số 0 nào
@@ -7559,22 +7562,23 @@ var NumberKeyboard = function (_a) {
7559
7562
  }
7560
7563
  }
7561
7564
  else {
7562
- newInputValue_1 = tempValue + "000";
7563
- newValue_1 = Number(newInputValue_1);
7565
+ newInputValue = tempValue + "000";
7566
+ newValue = Number(newInputValue);
7564
7567
  }
7565
7568
  }
7566
7569
  // Kiểm tra xem có thể nhập được không sau khi xử lý "000"
7567
- if (!isNaN(newValue_1) &&
7568
- !isNaN(maxValueNumber_1) &&
7569
- newValue_1 <= maxValueNumber_1) {
7570
- setInputValue(newInputValue_1);
7570
+ if (!isNaN(newValue) &&
7571
+ !isNaN(maxValueNumber) &&
7572
+ newValue <= maxValueNumber) {
7573
+ setInputValue(newInputValue);
7571
7574
  }
7572
7575
  setIsFirstInput(false);
7573
7576
  }
7574
- return;
7577
+ // Nếu type là float, không cho phép nhập "000" ở đầu
7575
7578
  }
7576
- if (key === ".") {
7577
- if (type === "float" && !inputValue.includes(".")) {
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 "."
7578
7582
  if (inputValue === "0" || inputValue === "") {
7579
7583
  setInputValue("0.");
7580
7584
  }
@@ -7583,33 +7587,51 @@ var NumberKeyboard = function (_a) {
7583
7587
  setInputValue("-0.");
7584
7588
  }
7585
7589
  else {
7590
+ // Nếu đã có giá trị, thêm dấu "." vào cuối
7586
7591
  setInputValue(function (prev) { return prev + key; });
7587
7592
  }
7588
7593
  setIsFirstInput(false);
7589
7594
  }
7590
- return;
7591
7595
  }
7592
- if (isFirstInput) {
7593
- // Nếu type là float và key là "0", không cho phép nhập số 0 đầu tiên
7594
- if (type === "float" && (key === "0" || key === "000")) {
7595
- return;
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;
7596
+ else {
7597
+ if (isFirstInput) {
7598
+ // Nếu type float key "0", không cho phép nhập số 0 đầu tiên
7599
+ if (type === "float" && key === "000") {
7600
+ return;
7607
7601
  }
7608
- else {
7609
- // Với số dương, kiểm tra bình thường
7610
- canInput_1 = newValue_2 <= maxValueNumber_2;
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 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
+ }
7611
7633
  }
7612
- if (canInput_1) {
7634
+ else {
7613
7635
  // Nếu inputValue rỗng hoặc chỉ có dấu trừ, thay thế hoàn toàn
7614
7636
  if (inputValue === "" || inputValue === "-") {
7615
7637
  setInputValue(key);
@@ -7620,137 +7642,129 @@ var NumberKeyboard = function (_a) {
7620
7642
  }
7621
7643
  setIsFirstInput(false);
7622
7644
  }
7623
- else {
7624
- // Nếu vượt quá maxValue ngay từ đầu, không cho phép nhập
7625
- return;
7626
- }
7627
- }
7628
- else {
7629
- // Nếu inputValue rỗng hoặc chỉ có dấu trừ, thay thế hoàn toàn
7630
- if (inputValue === "" || inputValue === "-") {
7631
- setInputValue(key);
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
7645
  }
7651
7646
  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) {
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.");
7680
7651
  return;
7681
7652
  }
7682
- // Nếu độ dài nhỏ hơn, thể nhập được (sẽ kiểm tra khi nhập tiếp)
7683
- canInput = true;
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) {
7653
+ else if (key >= "1" && key <= "9") {
7654
+ setInputValue(key);
7699
7655
  return;
7700
7656
  }
7701
- // Nếu độ dài bằng nhau, kiểm tra giá trị
7702
- if (newLength === maxValueStr.length && newValue > maxValueNumber) {
7657
+ else {
7703
7658
  return;
7704
7659
  }
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
7660
  }
7719
- else if (newInputValue.length <= 12 &&
7720
- decimalPart.length < formatDecimal) {
7721
- setInputValue(function (prev) { return prev + key; });
7722
- }
7723
- }
7724
- else {
7725
- // Xử số nguyên
7726
- if (shouldCheckLength && newInputValue.length <= 12) {
7727
- setInputValue(function (prev) { return prev + key; });
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
+ }
7728
7719
  }
7729
- else if (!shouldCheckLength) {
7730
- // Nếu không cần kiểm tra độ dài (đã kiểm tra maxValue ở trên)
7731
- setInputValue(function (prev) { return prev + key; });
7720
+ if (canInput) {
7721
+ if (inputValue.includes(".")) {
7722
+ // Xử 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
+ }
7732
7741
  }
7733
7742
  }
7734
7743
  }
7735
- }, [inputValue, maxValue, type, formatDecimal, isFirstInput]);
7744
+ };
7736
7745
  var handleClear = useCallback(function () {
7737
7746
  setInputValue("");
7738
7747
  setIsFirstInput(true);
7739
7748
  }, []);
7740
7749
  var handleSave = useCallback(function () {
7741
- if (!canSave)
7742
- return;
7743
7750
  var finalValue = inputValue;
7744
7751
  if (inputValue.endsWith(".")) {
7745
7752
  finalValue = inputValue.slice(0, -1);
7746
7753
  }
7747
- onChangeText === null || onChangeText === void 0 ? void 0 : onChangeText(finalValue);
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
+ }
7748
7760
  onClose();
7749
- }, [inputValue, onChangeText, onClose, canSave]);
7761
+ }, [inputValue, onChangeText, onClose, type, formatDecimal]);
7750
7762
  var handleClose = useCallback(function () {
7751
7763
  onClose();
7752
- setIsFirstInput(true);
7753
- }, [onClose]);
7764
+ setTimeout(function () {
7765
+ setInputValue((value === null || value === void 0 ? void 0 : value.toString()) || "");
7766
+ }, 300);
7767
+ }, [onClose, value]);
7754
7768
  return (React__default.createElement(Modal, { visible: visible, transparent: true, animationType: "fade", onRequestClose: handleClose },
7755
7769
  React__default.createElement(TouchableOpacity, { style: styles.modalOverlay, activeOpacity: 1, onPress: handleClose },
7756
7770
  React__default.createElement(View, { onPress: function () { }, activeOpacity: 1, backgroundColor: colors.surfacePrimaryDefault, style: styles.modalContent },