@alfalab/core-components-phone-input 7.2.2 → 7.2.3

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/Component.js CHANGED
@@ -38,6 +38,17 @@ var PhoneInput = React__default.default.forwardRef(function (_a, ref) {
38
38
  var inputRef = React.useRef(null);
39
39
  var handleBeforeDisplay = React.useCallback(function (conformedValue, config) {
40
40
  var rawValue = config.rawValue, previousConformedValue = config.previousConformedValue, currentCaretPosition = config.currentCaretPosition;
41
+ var previousValueWithoutFormatting = previousConformedValue
42
+ ? utils_index.deleteFormatting(previousConformedValue)
43
+ : '';
44
+ /*
45
+ * Удаляем лишний символ маски при вводе или вставке значений перед знаком + или после него.
46
+ */
47
+ if (previousConformedValue && rawValue.indexOf('+7') !== 0) {
48
+ var newRaw = utils_index.deleteMaskChar(previousValueWithoutFormatting, rawValue);
49
+ conformedValue = textMaskCore.conformToMask(newRaw, mask, config).conformedValue;
50
+ }
51
+ var currentValueWithoutFormatting = utils_index.deleteFormatting(conformedValue) || '';
41
52
  /*
42
53
  * код ниже нужен для фикса следующих багов библиотеки text-mask:
43
54
  * 1) так как код страны указан в маске жестко как "+7",
@@ -46,10 +57,6 @@ var PhoneInput = React__default.default.forwardRef(function (_a, ref) {
46
57
  * при редактировании цифр рядом с этими символами каретка перескакивает через них,
47
58
  * а не остается на том же месте, на котором была до редактирования
48
59
  */
49
- var previousValueWithoutFormatting = previousConformedValue
50
- ? utils_index.deleteFormatting(previousConformedValue)
51
- : '';
52
- var currentValueWithoutFormatting = utils_index.deleteFormatting(conformedValue) || '';
53
60
  if (previousConformedValue &&
54
61
  (([3, 6].includes(currentCaretPosition) &&
55
62
  Math.abs(previousValueWithoutFormatting.length -
package/cssm/Component.js CHANGED
@@ -38,6 +38,17 @@ var PhoneInput = React__default.default.forwardRef(function (_a, ref) {
38
38
  var inputRef = React.useRef(null);
39
39
  var handleBeforeDisplay = React.useCallback(function (conformedValue, config) {
40
40
  var rawValue = config.rawValue, previousConformedValue = config.previousConformedValue, currentCaretPosition = config.currentCaretPosition;
41
+ var previousValueWithoutFormatting = previousConformedValue
42
+ ? utils_index.deleteFormatting(previousConformedValue)
43
+ : '';
44
+ /*
45
+ * Удаляем лишний символ маски при вводе или вставке значений перед знаком + или после него.
46
+ */
47
+ if (previousConformedValue && rawValue.indexOf('+7') !== 0) {
48
+ var newRaw = utils_index.deleteMaskChar(previousValueWithoutFormatting, rawValue);
49
+ conformedValue = textMaskCore.conformToMask(newRaw, mask, config).conformedValue;
50
+ }
51
+ var currentValueWithoutFormatting = utils_index.deleteFormatting(conformedValue) || '';
41
52
  /*
42
53
  * код ниже нужен для фикса следующих багов библиотеки text-mask:
43
54
  * 1) так как код страны указан в маске жестко как "+7",
@@ -46,10 +57,6 @@ var PhoneInput = React__default.default.forwardRef(function (_a, ref) {
46
57
  * при редактировании цифр рядом с этими символами каретка перескакивает через них,
47
58
  * а не остается на том же месте, на котором была до редактирования
48
59
  */
49
- var previousValueWithoutFormatting = previousConformedValue
50
- ? utils_index.deleteFormatting(previousConformedValue)
51
- : '';
52
- var currentValueWithoutFormatting = utils_index.deleteFormatting(conformedValue) || '';
53
60
  if (previousConformedValue &&
54
61
  (([3, 6].includes(currentCaretPosition) &&
55
62
  Math.abs(previousValueWithoutFormatting.length -
@@ -14,4 +14,5 @@ declare function getInsertedNumber({ rawValue, clearableCountryCode, countryPref
14
14
  countryPrefix: string;
15
15
  previousConformedValue: string;
16
16
  }): string;
17
- export { deleteFormatting, setCaretPosition, getInsertedNumber };
17
+ declare function deleteMaskChar(previousValue: string, rawValue: string): string;
18
+ export { deleteFormatting, setCaretPosition, getInsertedNumber, deleteMaskChar };
@@ -27,7 +27,24 @@ function getInsertedNumber(_a) {
27
27
  }
28
28
  return rawValue;
29
29
  }
30
+ function deleteMaskChar(previousValue, rawValue) {
31
+ var prevRawValueAsArr = deleteFormatting(rawValue).split('').reverse();
32
+ var prevConformedCharIdx = previousValue.length - 1;
33
+ var isMaskRemoved = false;
34
+ var newRaw = [];
35
+ prevRawValueAsArr.forEach(function (char) {
36
+ if (isMaskRemoved || char === previousValue[prevConformedCharIdx]) {
37
+ newRaw.push(char);
38
+ prevConformedCharIdx -= 1;
39
+ }
40
+ else if (char === '7') {
41
+ isMaskRemoved = true;
42
+ }
43
+ });
44
+ return newRaw.reverse().join('');
45
+ }
30
46
 
31
47
  exports.deleteFormatting = deleteFormatting;
48
+ exports.deleteMaskChar = deleteMaskChar;
32
49
  exports.getInsertedNumber = getInsertedNumber;
33
50
  exports.setCaretPosition = setCaretPosition;
package/esm/Component.js CHANGED
@@ -3,7 +3,7 @@ import React, { useRef, useCallback } from 'react';
3
3
  import mergeRefs from 'react-merge-refs';
4
4
  import { conformToMask } from 'text-mask-core';
5
5
  import { MaskedInput } from '@alfalab/core-components-masked-input/esm';
6
- import { deleteFormatting, setCaretPosition, getInsertedNumber } from './utils/index.js';
6
+ import { deleteFormatting, deleteMaskChar, setCaretPosition, getInsertedNumber } from './utils/index.js';
7
7
 
8
8
  var mask = [
9
9
  '+',
@@ -29,6 +29,17 @@ var PhoneInput = React.forwardRef(function (_a, ref) {
29
29
  var inputRef = useRef(null);
30
30
  var handleBeforeDisplay = useCallback(function (conformedValue, config) {
31
31
  var rawValue = config.rawValue, previousConformedValue = config.previousConformedValue, currentCaretPosition = config.currentCaretPosition;
32
+ var previousValueWithoutFormatting = previousConformedValue
33
+ ? deleteFormatting(previousConformedValue)
34
+ : '';
35
+ /*
36
+ * Удаляем лишний символ маски при вводе или вставке значений перед знаком + или после него.
37
+ */
38
+ if (previousConformedValue && rawValue.indexOf('+7') !== 0) {
39
+ var newRaw = deleteMaskChar(previousValueWithoutFormatting, rawValue);
40
+ conformedValue = conformToMask(newRaw, mask, config).conformedValue;
41
+ }
42
+ var currentValueWithoutFormatting = deleteFormatting(conformedValue) || '';
32
43
  /*
33
44
  * код ниже нужен для фикса следующих багов библиотеки text-mask:
34
45
  * 1) так как код страны указан в маске жестко как "+7",
@@ -37,10 +48,6 @@ var PhoneInput = React.forwardRef(function (_a, ref) {
37
48
  * при редактировании цифр рядом с этими символами каретка перескакивает через них,
38
49
  * а не остается на том же месте, на котором была до редактирования
39
50
  */
40
- var previousValueWithoutFormatting = previousConformedValue
41
- ? deleteFormatting(previousConformedValue)
42
- : '';
43
- var currentValueWithoutFormatting = deleteFormatting(conformedValue) || '';
44
51
  if (previousConformedValue &&
45
52
  (([3, 6].includes(currentCaretPosition) &&
46
53
  Math.abs(previousValueWithoutFormatting.length -
@@ -14,4 +14,5 @@ declare function getInsertedNumber({ rawValue, clearableCountryCode, countryPref
14
14
  countryPrefix: string;
15
15
  previousConformedValue: string;
16
16
  }): string;
17
- export { deleteFormatting, setCaretPosition, getInsertedNumber };
17
+ declare function deleteMaskChar(previousValue: string, rawValue: string): string;
18
+ export { deleteFormatting, setCaretPosition, getInsertedNumber, deleteMaskChar };
@@ -23,5 +23,21 @@ function getInsertedNumber(_a) {
23
23
  }
24
24
  return rawValue;
25
25
  }
26
+ function deleteMaskChar(previousValue, rawValue) {
27
+ var prevRawValueAsArr = deleteFormatting(rawValue).split('').reverse();
28
+ var prevConformedCharIdx = previousValue.length - 1;
29
+ var isMaskRemoved = false;
30
+ var newRaw = [];
31
+ prevRawValueAsArr.forEach(function (char) {
32
+ if (isMaskRemoved || char === previousValue[prevConformedCharIdx]) {
33
+ newRaw.push(char);
34
+ prevConformedCharIdx -= 1;
35
+ }
36
+ else if (char === '7') {
37
+ isMaskRemoved = true;
38
+ }
39
+ });
40
+ return newRaw.reverse().join('');
41
+ }
26
42
 
27
- export { deleteFormatting, getInsertedNumber, setCaretPosition };
43
+ export { deleteFormatting, deleteMaskChar, getInsertedNumber, setCaretPosition };
@@ -2,8 +2,9 @@ import React, { useRef, useCallback } from 'react';
2
2
  import mergeRefs from 'react-merge-refs';
3
3
  import { conformToMask } from 'text-mask-core';
4
4
  import { MaskedInput } from '@alfalab/core-components-masked-input/modern';
5
- import { deleteFormatting, setCaretPosition, getInsertedNumber } from './utils/index.js';
5
+ import { deleteFormatting, deleteMaskChar, setCaretPosition, getInsertedNumber } from './utils/index.js';
6
6
 
7
+ /* eslint-disable complexity, no-param-reassign */
7
8
  const mask = [
8
9
  '+',
9
10
  '7',
@@ -27,6 +28,17 @@ const PhoneInput = React.forwardRef(({ clearableCountryCode = true, ...restProps
27
28
  const inputRef = useRef(null);
28
29
  const handleBeforeDisplay = useCallback((conformedValue, config) => {
29
30
  const { rawValue, previousConformedValue, currentCaretPosition } = config;
31
+ const previousValueWithoutFormatting = previousConformedValue
32
+ ? deleteFormatting(previousConformedValue)
33
+ : '';
34
+ /*
35
+ * Удаляем лишний символ маски при вводе или вставке значений перед знаком + или после него.
36
+ */
37
+ if (previousConformedValue && rawValue.indexOf('+7') !== 0) {
38
+ const newRaw = deleteMaskChar(previousValueWithoutFormatting, rawValue);
39
+ conformedValue = conformToMask(newRaw, mask, config).conformedValue;
40
+ }
41
+ const currentValueWithoutFormatting = deleteFormatting(conformedValue) || '';
30
42
  /*
31
43
  * код ниже нужен для фикса следующих багов библиотеки text-mask:
32
44
  * 1) так как код страны указан в маске жестко как "+7",
@@ -35,10 +47,6 @@ const PhoneInput = React.forwardRef(({ clearableCountryCode = true, ...restProps
35
47
  * при редактировании цифр рядом с этими символами каретка перескакивает через них,
36
48
  * а не остается на том же месте, на котором была до редактирования
37
49
  */
38
- const previousValueWithoutFormatting = previousConformedValue
39
- ? deleteFormatting(previousConformedValue)
40
- : '';
41
- const currentValueWithoutFormatting = deleteFormatting(conformedValue) || '';
42
50
  if (previousConformedValue &&
43
51
  (([3, 6].includes(currentCaretPosition) &&
44
52
  Math.abs(previousValueWithoutFormatting.length -
@@ -14,4 +14,5 @@ declare function getInsertedNumber({ rawValue, clearableCountryCode, countryPref
14
14
  countryPrefix: string;
15
15
  previousConformedValue: string;
16
16
  }): string;
17
- export { deleteFormatting, setCaretPosition, getInsertedNumber };
17
+ declare function deleteMaskChar(previousValue: string, rawValue: string): string;
18
+ export { deleteFormatting, setCaretPosition, getInsertedNumber, deleteMaskChar };
@@ -19,5 +19,21 @@ function getInsertedNumber({ rawValue, clearableCountryCode, countryPrefix, prev
19
19
  }
20
20
  return rawValue;
21
21
  }
22
+ function deleteMaskChar(previousValue, rawValue) {
23
+ const prevRawValueAsArr = deleteFormatting(rawValue).split('').reverse();
24
+ let prevConformedCharIdx = previousValue.length - 1;
25
+ let isMaskRemoved = false;
26
+ const newRaw = [];
27
+ prevRawValueAsArr.forEach((char) => {
28
+ if (isMaskRemoved || char === previousValue[prevConformedCharIdx]) {
29
+ newRaw.push(char);
30
+ prevConformedCharIdx -= 1;
31
+ }
32
+ else if (char === '7') {
33
+ isMaskRemoved = true;
34
+ }
35
+ });
36
+ return newRaw.reverse().join('');
37
+ }
22
38
 
23
- export { deleteFormatting, getInsertedNumber, setCaretPosition };
39
+ export { deleteFormatting, deleteMaskChar, getInsertedNumber, setCaretPosition };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfalab/core-components-phone-input",
3
- "version": "7.2.2",
3
+ "version": "7.2.3",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "license": "MIT",
package/src/Component.tsx CHANGED
@@ -1,10 +1,11 @@
1
+ /* eslint-disable complexity, no-param-reassign */
1
2
  import React, { useCallback, useRef } from 'react';
2
3
  import mergeRefs from 'react-merge-refs';
3
4
  import { conformToMask, TextMaskConfig } from 'text-mask-core';
4
5
 
5
6
  import { MaskedInput, MaskedInputProps } from '@alfalab/core-components-masked-input';
6
7
 
7
- import { deleteFormatting, getInsertedNumber, setCaretPosition } from './utils';
8
+ import { deleteFormatting, deleteMaskChar, getInsertedNumber, setCaretPosition } from './utils';
8
9
 
9
10
  const mask = [
10
11
  '+',
@@ -39,6 +40,21 @@ export const PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(
39
40
  (conformedValue: string, config: TextMaskConfig) => {
40
41
  const { rawValue, previousConformedValue, currentCaretPosition } = config;
41
42
 
43
+ const previousValueWithoutFormatting = previousConformedValue
44
+ ? deleteFormatting(previousConformedValue)
45
+ : '';
46
+
47
+ /*
48
+ * Удаляем лишний символ маски при вводе или вставке значений перед знаком + или после него.
49
+ */
50
+ if (previousConformedValue && rawValue.indexOf('+7') !== 0) {
51
+ const newRaw = deleteMaskChar(previousValueWithoutFormatting, rawValue);
52
+
53
+ conformedValue = conformToMask(newRaw, mask, config).conformedValue;
54
+ }
55
+
56
+ const currentValueWithoutFormatting = deleteFormatting(conformedValue) || '';
57
+
42
58
  /*
43
59
  * код ниже нужен для фикса следующих багов библиотеки text-mask:
44
60
  * 1) так как код страны указан в маске жестко как "+7",
@@ -47,11 +63,6 @@ export const PhoneInput = React.forwardRef<HTMLInputElement, PhoneInputProps>(
47
63
  * при редактировании цифр рядом с этими символами каретка перескакивает через них,
48
64
  * а не остается на том же месте, на котором была до редактирования
49
65
  */
50
- const previousValueWithoutFormatting = previousConformedValue
51
- ? deleteFormatting(previousConformedValue)
52
- : '';
53
- const currentValueWithoutFormatting = deleteFormatting(conformedValue) || '';
54
-
55
66
  if (
56
67
  previousConformedValue &&
57
68
  (([3, 6].includes(currentCaretPosition) &&
@@ -41,3 +41,21 @@ export function getInsertedNumber({
41
41
 
42
42
  return rawValue;
43
43
  }
44
+
45
+ export function deleteMaskChar(previousValue: string, rawValue: string) {
46
+ const prevRawValueAsArr = deleteFormatting(rawValue).split('').reverse();
47
+ let prevConformedCharIdx = previousValue.length - 1;
48
+ let isMaskRemoved = false;
49
+ const newRaw: string[] = [];
50
+
51
+ prevRawValueAsArr.forEach((char) => {
52
+ if (isMaskRemoved || char === previousValue[prevConformedCharIdx]) {
53
+ newRaw.push(char);
54
+ prevConformedCharIdx -= 1;
55
+ } else if (char === '7') {
56
+ isMaskRemoved = true;
57
+ }
58
+ });
59
+
60
+ return newRaw.reverse().join('');
61
+ }
package/utils/index.d.ts CHANGED
@@ -14,4 +14,5 @@ declare function getInsertedNumber({ rawValue, clearableCountryCode, countryPref
14
14
  countryPrefix: string;
15
15
  previousConformedValue: string;
16
16
  }): string;
17
- export { deleteFormatting, setCaretPosition, getInsertedNumber };
17
+ declare function deleteMaskChar(previousValue: string, rawValue: string): string;
18
+ export { deleteFormatting, setCaretPosition, getInsertedNumber, deleteMaskChar };
package/utils/index.js CHANGED
@@ -27,7 +27,24 @@ function getInsertedNumber(_a) {
27
27
  }
28
28
  return rawValue;
29
29
  }
30
+ function deleteMaskChar(previousValue, rawValue) {
31
+ var prevRawValueAsArr = deleteFormatting(rawValue).split('').reverse();
32
+ var prevConformedCharIdx = previousValue.length - 1;
33
+ var isMaskRemoved = false;
34
+ var newRaw = [];
35
+ prevRawValueAsArr.forEach(function (char) {
36
+ if (isMaskRemoved || char === previousValue[prevConformedCharIdx]) {
37
+ newRaw.push(char);
38
+ prevConformedCharIdx -= 1;
39
+ }
40
+ else if (char === '7') {
41
+ isMaskRemoved = true;
42
+ }
43
+ });
44
+ return newRaw.reverse().join('');
45
+ }
30
46
 
31
47
  exports.deleteFormatting = deleteFormatting;
48
+ exports.deleteMaskChar = deleteMaskChar;
32
49
  exports.getInsertedNumber = getInsertedNumber;
33
50
  exports.setCaretPosition = setCaretPosition;