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 CHANGED
@@ -5927,14 +5927,8 @@ var TextInputNumber = function (_a) {
5927
5927
  if (inputValue.endsWith(".")) {
5928
5928
  finalValue = inputValue.slice(0, -1);
5929
5929
  }
5930
- if (type === "integer") {
5931
- onChangeText === null || onChangeText === void 0 ? void 0 : onChangeText(finalValue);
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 "0";
7435
+ return "";
7442
7436
  if (value === "")
7443
- return "0";
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
- setInputValue((value === null || value === void 0 ? void 0 : value.toString()) || "");
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 inputValue rỗng hoặc chỉ có dấu trừ
7471
- if (inputValue === "" || inputValue === "-") {
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, inputValue]);
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 = useCallback(function (key) {
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" && inputValue.length > 0) {
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
- var newInputValue_1 = inputValue + "000";
7525
- var newValue_1 = Number(newInputValue_1);
7526
- var maxValueNumber_1 = Number(maxValue);
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
+ // 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(newValue_1) &&
7529
- !isNaN(maxValueNumber_1) &&
7530
- newValue_1 > maxValueNumber_1) {
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 > maxValueNumber_1 && tempValue.endsWith("0")) {
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 > maxValueNumber_1) {
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 <= maxValueNumber_1) {
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
- newInputValue_1 = inputValue + "0".repeat(maxZeros);
7554
- newValue_1 = Number(newInputValue_1);
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
- newInputValue_1 = tempValue + "000";
7563
- newValue_1 = Number(newInputValue_1);
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(newValue_1) &&
7568
- !isNaN(maxValueNumber_1) &&
7569
- newValue_1 <= maxValueNumber_1) {
7570
- setInputValue(newInputValue_1);
7564
+ if (!isNaN(newValue) &&
7565
+ !isNaN(maxValueNumber) &&
7566
+ newValue <= maxValueNumber) {
7567
+ setInputValue(newInputValue);
7571
7568
  }
7572
7569
  setIsFirstInput(false);
7573
7570
  }
7574
- return;
7571
+ // Nếu type là float, không cho phép nhập "000" ở đầu
7575
7572
  }
7576
- if (key === ".") {
7577
- if (type === "float" && !inputValue.includes(".")) {
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
- 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;
7590
+ else {
7591
+ if (isFirstInput) {
7592
+ // Nếu type float key "0", không cho phép nhập số 0 đầu tiên
7593
+ if (type === "float" && key === "000") {
7594
+ return;
7607
7595
  }
7608
- else {
7609
- // Với số dương, kiểm tra bình thường
7610
- canInput_1 = newValue_2 <= maxValueNumber_2;
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 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
- if (canInput_1) {
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
- // Nếu inputValue rỗng hoặc chỉ 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
- }
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 không dấu chấm
7642
+ if (inputValue === "0") {
7643
+ if (key === ".") {
7644
+ setInputValue("0.");
7680
7645
  return;
7681
7646
  }
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) {
7647
+ else if (key >= "1" && key <= "9") {
7648
+ setInputValue(key);
7699
7649
  return;
7700
7650
  }
7701
- // Nếu độ dài bằng nhau, kiểm tra giá trị
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
- else {
7725
- // Xử số nguyên
7726
- if (shouldCheckLength && newInputValue.length <= 12) {
7727
- setInputValue(function (prev) { return prev + key; });
7655
+ var newInputValue = inputValue + key;
7656
+ var newValue = Number(newInputValue);
7657
+ var maxValueNumber = Number(maxValue);
7658
+ // Kiểm tra xem 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
- 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; });
7714
+ if (canInput) {
7715
+ if (inputValue.includes(".")) {
7716
+ // Xử 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
- }, [inputValue, maxValue, type, formatDecimal, isFirstInput]);
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, canSave]);
7751
+ }, [inputValue, onChangeText, onClose]);
7750
7752
  var handleClose = useCallback(function () {
7751
7753
  onClose();
7752
- setIsFirstInput(true);
7753
- }, [onClose]);
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 },