@tecsinapse/react-core 1.14.2 → 1.14.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/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.14.3](https://github.com/tecsinapse/design-system/compare/@tecsinapse/react-core@1.14.2...@tecsinapse/react-core@1.14.3) (2022-02-16)
7
+
8
+ **Note:** Version bump only for package @tecsinapse/react-core
9
+
10
+
11
+
12
+
13
+
6
14
  ## [1.14.2](https://github.com/tecsinapse/design-system/compare/@tecsinapse/react-core@1.14.1...@tecsinapse/react-core@1.14.2) (2022-02-15)
7
15
 
8
16
 
@@ -37,44 +37,41 @@ const InputElement = _react2.default.forwardRef(({
37
37
 
38
38
  const getInputHook = () => {
39
39
  if (mask !== undefined) {
40
- if (Array.isArray(mask) || typeof mask === 'function') return (0, _useStringMask.useStringMask)(mask, value ?? '');else {
40
+ if (Array.isArray(mask) || typeof mask === 'function') {
41
+ return (0, _useStringMask.useStringMask)(mask, value ?? '');
42
+ } else {
41
43
  return (0, _useNumberMask.useNumberMask)(mask, value ?? '');
42
44
  }
43
45
  } else {
44
- return (0, _react2.useState)(value ?? '');
46
+ return [undefined, undefined];
45
47
  }
46
48
  };
47
49
 
48
50
  const [maskValue, setMaskValue] = getInputHook();
49
51
 
50
- const _value = typeof maskValue === 'object' ? (maskValue === null || maskValue === void 0 ? void 0 : maskValue.formatted) ?? '' : maskValue === null || maskValue === void 0 ? void 0 : maskValue.toString();
52
+ const _value = maskValue !== undefined ? (maskValue === null || maskValue === void 0 ? void 0 : maskValue.formatted) ?? '' : (value === null || value === void 0 ? void 0 : value.toString()) ?? '';
51
53
 
52
- (0, _react2.useEffect)(() => {
54
+ const onChangeMaskValue = (0, _react2.useCallback)(() => {
53
55
  if (onChange) {
54
- if (typeof maskValue === 'object') onChange(maskValue === null || maskValue === void 0 ? void 0 : maskValue.raw);else onChange(maskValue);
56
+ onChange(maskValue === null || maskValue === void 0 ? void 0 : maskValue.raw);
55
57
  }
56
58
  }, [maskValue]);
57
- const onChangeValue = (0, _react2.useCallback)(value => {
58
- setMaskValue(value);
59
+ const onChangeValue = (0, _react2.useCallback)(async value => {
60
+ if (maskValue !== undefined && setMaskValue !== undefined) {
61
+ await setMaskValue(value);
62
+ onChangeMaskValue();
63
+ } else onChange && onChange(value);
59
64
  }, [value]);
60
65
  (0, _react2.useEffect)(() => {
61
66
  if (!valueReinitialized) {
62
- if ((maskValue === undefined || maskValue === '') && value !== undefined && value !== '') {
63
- setMaskValue(value);
64
- setValueReinitialized(true);
65
- } else if (maskValue !== undefined && value !== undefined && typeof maskValue === 'object') {
66
- if (maskValue.raw !== value) {
67
- if ((Array.isArray(mask) || typeof mask === 'function') && (maskValue.raw === undefined || maskValue.raw === '')) {
68
- setValueReinitialized(true);
69
- setMaskValue(value);
70
- } else if (typeof mask === 'object' && maskValue.raw === 0) {
71
- setValueReinitialized(true);
72
- setMaskValue(value);
73
- }
67
+ if (maskValue !== undefined && setMaskValue !== undefined && value !== undefined && typeof maskValue === 'object') {
68
+ if (maskValue.raw !== value.toString()) {
69
+ setValueReinitialized(true);
70
+ setMaskValue(value);
74
71
  }
75
72
  }
76
73
  }
77
- }, [value, maskValue, setMaskValue, valueReinitialized]);
74
+ }, [value, maskValue, valueReinitialized]);
78
75
  return _react2.default.createElement(_styled.StyledInputElement, _extends({}, rest, {
79
76
  ref: ref,
80
77
  onChangeText: onChangeValue,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/atoms/Input/InputElement/InputElement.tsx"],"names":["InputElement","React","forwardRef","onChange","placeholder","value","disabled","placeholderTextColor","mask","rest","ref","theme","valueReinitialized","setValueReinitialized","_placeholderColor","font","color","dark","getInputHook","undefined","Array","isArray","maskValue","setMaskValue","_value","formatted","toString","raw","onChangeValue","displayName"],"mappings":"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","sourcesContent":["import { useTheme } from '@emotion/react';\nimport { ThemeProp } from '@tecsinapse/react-core';\nimport React, { FC, useCallback, useEffect, useState } from 'react';\nimport { StyleProp, TextInputProps, TextStyle } from 'react-native';\nimport { StyledInputElement } from '../styled';\nimport { MaskType, useStringMask } from '../hooks/useStringMask';\nimport { CurrencyOptions, useNumberMask } from '../hooks/useNumberMask';\n\nexport interface InputElementProps\n extends Omit<TextInputProps, 'onChange' | 'value' | 'ref'> {\n style?: StyleProp<TextStyle>;\n value: string | number;\n placeholder?: string;\n disabled?: boolean;\n onChange?: (value: any) => void;\n /**\n To use mask for strings you have to pass a MaskType[] or ((value: string) => MaskType[])\n A MaskType can be a string, RegExp, or Array<RegExp>.\n In case we have a string, '9' represents digits, 'a' represents alphabet characters, and any other character represents fixed characters in the mask.\n For example a phone mask can be represented as ['(99) \\\\99999-9999'], or ['(99) ', '/[9]/', '9999-9999'], or ['(', /[0-9]/, /[0-9]/, ') ', '/[9]/', '9999-9999'] and many others.\n To use mask for numbers you have to pass a CurrencyOptions object\n A CurrencyOptions object contains symbol, separator, decimal, precision. For example {symbol: 'R$ ', separator: '.', decimal: ',', precision: 2,}.\n **/\n mask?: (MaskType[] | ((value: string) => MaskType[])) | CurrencyOptions;\n onFocus?: () => void;\n onBlur?: () => void;\n ref?: React.Ref<any>;\n}\n\nconst InputElement: FC<InputElementProps> = React.forwardRef(\n (\n {\n onChange,\n placeholder,\n value,\n disabled = false,\n placeholderTextColor,\n mask,\n ...rest\n },\n ref: React.Ref<any>\n ): JSX.Element => {\n const theme = useTheme() as ThemeProp;\n\n /** Check if value was reinitialized, without this state we can't total \"erase\" a value that was already reinitialized **/\n const [valueReinitialized, setValueReinitialized] = useState<boolean>(\n false\n );\n\n const _placeholderColor = placeholderTextColor || theme.font.color.dark;\n\n const getInputHook = () => {\n if (mask !== undefined) {\n if (Array.isArray(mask) || typeof mask === 'function')\n return useStringMask(mask, value ?? '');\n else {\n return useNumberMask(mask, value ?? '');\n }\n } else {\n return useState<string | number>(value ?? '');\n }\n };\n\n const [maskValue, setMaskValue] = getInputHook();\n\n const _value =\n typeof maskValue === 'object'\n ? maskValue?.formatted ?? ''\n : maskValue?.toString();\n\n useEffect(() => {\n if (onChange) {\n if (typeof maskValue === 'object') onChange(maskValue?.raw);\n else onChange(maskValue);\n }\n }, [maskValue]);\n\n const onChangeValue = useCallback(\n (value: string | number) => {\n setMaskValue(value);\n },\n [value]\n );\n\n useEffect(() => {\n if (!valueReinitialized) {\n /** Used to reinitialize maskValue with a value that was loaded after Input was rendered **/\n if (\n (maskValue === undefined || maskValue === '') &&\n value !== undefined &&\n value !== ''\n ) {\n /** Case there is not a mask **/\n setMaskValue(value);\n setValueReinitialized(true);\n } else if (\n maskValue !== undefined &&\n value !== undefined &&\n typeof maskValue === 'object'\n ) {\n /** Case there is a mask **/\n if (maskValue.raw !== value) {\n if (\n (Array.isArray(mask) || typeof mask === 'function') &&\n (maskValue.raw === undefined || maskValue.raw === '')\n ) {\n setValueReinitialized(true);\n setMaskValue(value);\n } else if (typeof mask === 'object' && maskValue.raw === 0) {\n setValueReinitialized(true);\n setMaskValue(value);\n }\n }\n }\n }\n }, [value, maskValue, setMaskValue, valueReinitialized]);\n\n return (\n <StyledInputElement\n {...rest}\n ref={ref}\n onChangeText={onChangeValue}\n value={_value}\n placeholder={placeholder}\n placeholderTextColor={_placeholderColor}\n disabled={disabled}\n editable={!disabled}\n />\n );\n }\n);\n\nInputElement.displayName = 'InputElement';\n\nexport default InputElement;\n"],"file":"InputElement.js"}
1
+ {"version":3,"sources":["../../../../../src/components/atoms/Input/InputElement/InputElement.tsx"],"names":["InputElement","React","forwardRef","onChange","placeholder","value","disabled","placeholderTextColor","mask","rest","ref","theme","valueReinitialized","setValueReinitialized","_placeholderColor","font","color","dark","getInputHook","undefined","Array","isArray","maskValue","setMaskValue","_value","formatted","toString","onChangeMaskValue","raw","onChangeValue","displayName"],"mappings":"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","sourcesContent":["import { useTheme } from '@emotion/react';\nimport { ThemeProp } from '@tecsinapse/react-core';\nimport React, { FC, useCallback, useEffect, useState } from 'react';\nimport { StyleProp, TextInputProps, TextStyle } from 'react-native';\nimport { StyledInputElement } from '../styled';\nimport { MaskType, useStringMask } from '../hooks/useStringMask';\nimport { CurrencyOptions, useNumberMask } from '../hooks/useNumberMask';\n\nexport interface InputElementProps\n extends Omit<TextInputProps, 'onChange' | 'value' | 'ref'> {\n style?: StyleProp<TextStyle>;\n value: string | number;\n placeholder?: string;\n disabled?: boolean;\n onChange?: (value: any) => void;\n /**\n To use mask for strings you have to pass a MaskType[] or ((value: string) => MaskType[])\n A MaskType can be a string, RegExp, or Array<RegExp>.\n In case we have a string, '9' represents digits, 'a' represents alphabet characters, and any other character represents fixed characters in the mask.\n For example a phone mask can be represented as ['(99) \\\\99999-9999'], or ['(99) ', '/[9]/', '9999-9999'], or ['(', /[0-9]/, /[0-9]/, ') ', '/[9]/', '9999-9999'] and many others.\n To use mask for numbers you have to pass a CurrencyOptions object\n A CurrencyOptions object contains symbol, separator, decimal, precision. For example {symbol: 'R$ ', separator: '.', decimal: ',', precision: 2,}.\n **/\n mask?: (MaskType[] | ((value: string) => MaskType[])) | CurrencyOptions;\n onFocus?: () => void;\n onBlur?: () => void;\n ref?: React.Ref<any>;\n}\n\nconst InputElement: FC<InputElementProps> = React.forwardRef(\n (\n {\n onChange,\n placeholder,\n value,\n disabled = false,\n placeholderTextColor,\n mask,\n ...rest\n },\n ref: React.Ref<any>\n ): JSX.Element => {\n const theme = useTheme() as ThemeProp;\n\n /** Check if value was reinitialized, without this state we can't total \"erase\" a value that was already reinitialized **/\n const [valueReinitialized, setValueReinitialized] = useState<boolean>(\n false\n );\n\n const _placeholderColor = placeholderTextColor || theme.font.color.dark;\n\n const getInputHook = () => {\n if (mask !== undefined) {\n if (Array.isArray(mask) || typeof mask === 'function') {\n return useStringMask(mask, value ?? '');\n } else {\n return useNumberMask(mask, value ?? '');\n }\n } else {\n return [undefined, undefined];\n }\n };\n\n const [maskValue, setMaskValue] = getInputHook();\n\n const _value =\n maskValue !== undefined\n ? maskValue?.formatted ?? ''\n : value?.toString() ?? '';\n\n const onChangeMaskValue = useCallback(() => {\n if (onChange) {\n onChange(maskValue?.raw);\n }\n }, [maskValue]);\n\n const onChangeValue = useCallback(\n async (value: string | number) => {\n if (maskValue !== undefined && setMaskValue !== undefined) {\n await setMaskValue(value);\n onChangeMaskValue();\n } else onChange && onChange(value);\n },\n [value]\n );\n\n useEffect(() => {\n if (!valueReinitialized) {\n /** Used to reinitialize maskValue with a value that was loaded after Input was rendered **/\n if (\n maskValue !== undefined &&\n setMaskValue !== undefined &&\n value !== undefined &&\n typeof maskValue === 'object'\n ) {\n /** Case there is a mask **/\n if (maskValue.raw !== value.toString()) {\n setValueReinitialized(true);\n setMaskValue(value);\n }\n }\n }\n }, [value, maskValue, valueReinitialized]);\n\n return (\n <StyledInputElement\n {...rest}\n ref={ref}\n onChangeText={onChangeValue}\n value={_value}\n placeholder={placeholder}\n placeholderTextColor={_placeholderColor}\n disabled={disabled}\n editable={!disabled}\n />\n );\n }\n);\n\nInputElement.displayName = 'InputElement';\n\nexport default InputElement;\n"],"file":"InputElement.js"}
@@ -91,12 +91,12 @@ const useStringMask = (mask, defaultValue) => {
91
91
  formatted
92
92
  };
93
93
  }, [mask]);
94
- const [value, setValue] = (0, _react.useState)(applyMask(String(defaultValue)));
94
+ const [value, setValue] = (0, _react.useState)(applyMask(defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.toString()));
95
95
  const handleChangeValue = (0, _react.useCallback)(formattedValue => {
96
96
  const {
97
97
  raw,
98
98
  formatted
99
- } = applyMask(formattedValue);
99
+ } = applyMask(formattedValue.toString());
100
100
  setValue({
101
101
  raw,
102
102
  formatted
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/atoms/Input/hooks/useStringMask.ts"],"names":["mergeMask","value","mask","formatted","raw","iMask","iChars","length","maskChar","valueChar","rawValueChar","maskCharRegex","Array","isArray","matchRegex","RegExp","test","getMask","newValue","maskArray","regexArray","forEach","exp","push","i","useStringMask","defaultValue","applyMask","selectedMask","setValue","String","handleChangeValue","formattedValue"],"mappings":"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","sourcesContent":["import { useCallback, useState } from 'react';\n\nexport interface MaskValue {\n formatted?: string;\n raw?: string | number;\n}\n\nexport type MaskType = string | RegExp | Array<RegExp>;\n\n/**\n * TODO:\n * @param value\n * @param mask\n * @returns\n */\nexport const mergeMask = (value = '', mask: MaskType[]): MaskValue => {\n let formatted = '';\n let raw = '';\n let iMask = 0;\n let iChars = 0;\n\n while (!(iMask === mask.length || iChars === value.length)) {\n const maskChar = mask[iMask];\n const valueChar = value[iChars];\n\n if (maskChar === valueChar) {\n formatted += maskChar;\n iChars++;\n iMask++;\n continue;\n }\n\n const rawValueChar = value[iChars];\n\n if (typeof maskChar === 'object') {\n iChars++;\n\n const maskCharRegex = Array.isArray(maskChar) ? maskChar[0] : maskChar;\n const matchRegex = RegExp(maskCharRegex).test(valueChar);\n\n if (matchRegex) {\n formatted += valueChar;\n raw += rawValueChar;\n iMask++;\n }\n } else {\n formatted += maskChar;\n iMask++;\n }\n }\n\n return { raw, formatted };\n};\n\nexport const getMask = (\n mask: MaskType[] | ((value: string) => MaskType[]),\n newValue: string\n): MaskType[] => {\n let maskArray: MaskType[];\n const regexArray: MaskType[] = [];\n\n if (typeof mask === 'function') {\n maskArray = mask(newValue);\n } else {\n maskArray = mask;\n }\n\n maskArray.forEach(exp => {\n if (typeof exp !== 'string') {\n if (Array.isArray(exp)) regexArray.push(exp);\n else regexArray.push(exp);\n } else {\n for (let i = 0; i < exp.length; i++) {\n if (exp[i] === '\\\\') {\n regexArray.push(exp[i + 1]);\n i++;\n } else {\n if (exp[i] === '9') regexArray.push(/\\d/);\n else if (exp[i] === 'a') regexArray.push(/[a-zA-Z]/);\n else regexArray.push(exp[i]);\n }\n }\n }\n });\n\n return regexArray;\n};\n\n/**\n * TODO:\n * @param mask\n * @param defaultValue\n * @returns\n */\nexport const useStringMask = (\n mask: MaskType[] | ((value: string) => MaskType[]),\n defaultValue?: string | number\n): [MaskValue, (text: string | number) => void] => {\n const applyMask = useCallback(\n (value = ''): MaskValue => {\n const selectedMask = getMask(mask, value);\n const { formatted, raw } = mergeMask(value, selectedMask);\n\n return {\n raw,\n formatted,\n };\n },\n [mask]\n );\n\n const [value, setValue] = useState<MaskValue>(\n applyMask(String(defaultValue))\n );\n\n const handleChangeValue = useCallback(\n (formattedValue: string | number) => {\n const { raw, formatted } = applyMask(formattedValue);\n setValue({\n raw,\n formatted,\n });\n },\n [applyMask, setValue]\n );\n\n return [value, handleChangeValue];\n};\n"],"file":"useStringMask.js"}
1
+ {"version":3,"sources":["../../../../../src/components/atoms/Input/hooks/useStringMask.ts"],"names":["mergeMask","value","mask","formatted","raw","iMask","iChars","length","maskChar","valueChar","rawValueChar","maskCharRegex","Array","isArray","matchRegex","RegExp","test","getMask","newValue","maskArray","regexArray","forEach","exp","push","i","useStringMask","defaultValue","applyMask","selectedMask","setValue","toString","handleChangeValue","formattedValue"],"mappings":"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","sourcesContent":["import { useCallback, useState } from 'react';\n\nexport interface MaskValue {\n formatted?: string;\n raw?: string | number;\n}\n\nexport type MaskType = string | RegExp | Array<RegExp>;\n\n/**\n * TODO:\n * @param value\n * @param mask\n * @returns\n */\nexport const mergeMask = (value = '', mask: MaskType[]): MaskValue => {\n let formatted = '';\n let raw = '';\n let iMask = 0;\n let iChars = 0;\n\n while (!(iMask === mask.length || iChars === value.length)) {\n const maskChar = mask[iMask];\n const valueChar = value[iChars];\n\n if (maskChar === valueChar) {\n formatted += maskChar;\n iChars++;\n iMask++;\n continue;\n }\n\n const rawValueChar = value[iChars];\n\n if (typeof maskChar === 'object') {\n iChars++;\n\n const maskCharRegex = Array.isArray(maskChar) ? maskChar[0] : maskChar;\n const matchRegex = RegExp(maskCharRegex).test(valueChar);\n\n if (matchRegex) {\n formatted += valueChar;\n raw += rawValueChar;\n iMask++;\n }\n } else {\n formatted += maskChar;\n iMask++;\n }\n }\n\n return { raw, formatted };\n};\n\nexport const getMask = (\n mask: MaskType[] | ((value: string) => MaskType[]),\n newValue: string\n): MaskType[] => {\n let maskArray: MaskType[];\n const regexArray: MaskType[] = [];\n\n if (typeof mask === 'function') {\n maskArray = mask(newValue);\n } else {\n maskArray = mask;\n }\n\n maskArray.forEach(exp => {\n if (typeof exp !== 'string') {\n if (Array.isArray(exp)) regexArray.push(exp);\n else regexArray.push(exp);\n } else {\n for (let i = 0; i < exp.length; i++) {\n if (exp[i] === '\\\\') {\n regexArray.push(exp[i + 1]);\n i++;\n } else {\n if (exp[i] === '9') regexArray.push(/\\d/);\n else if (exp[i] === 'a') regexArray.push(/[a-zA-Z]/);\n else regexArray.push(exp[i]);\n }\n }\n }\n });\n\n return regexArray;\n};\n\n/**\n * TODO:\n * @param mask\n * @param defaultValue\n * @returns\n */\nexport const useStringMask = (\n mask: MaskType[] | ((value: string) => MaskType[]),\n defaultValue?: string | number\n): [MaskValue, (text: string | number) => void] => {\n const applyMask = useCallback(\n (value = ''): MaskValue => {\n const selectedMask = getMask(mask, value);\n const { formatted, raw } = mergeMask(value, selectedMask);\n\n return {\n raw,\n formatted,\n };\n },\n [mask]\n );\n\n const [value, setValue] = useState<MaskValue>(\n applyMask(defaultValue?.toString())\n );\n\n const handleChangeValue = useCallback(\n (formattedValue: string | number) => {\n const { raw, formatted } = applyMask(formattedValue.toString());\n setValue({\n raw,\n formatted,\n });\n },\n [applyMask, setValue]\n );\n\n return [value, handleChangeValue];\n};\n"],"file":"useStringMask.js"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tecsinapse/react-core",
3
3
  "description": "TecSinapse hybrid React components",
4
- "version": "1.14.2",
4
+ "version": "1.14.3",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -31,5 +31,5 @@
31
31
  "react-native": ">=0.64.0",
32
32
  "react-native-vector-icons": ">=8.1.0"
33
33
  },
34
- "gitHead": "77f184e195dd967e7ed41aca0f562b25808e2126"
34
+ "gitHead": "66b219caf752d5f3ed2fcbf096d530fe6c1d2938"
35
35
  }
@@ -51,33 +51,35 @@ const InputElement: FC<InputElementProps> = React.forwardRef(
51
51
 
52
52
  const getInputHook = () => {
53
53
  if (mask !== undefined) {
54
- if (Array.isArray(mask) || typeof mask === 'function')
54
+ if (Array.isArray(mask) || typeof mask === 'function') {
55
55
  return useStringMask(mask, value ?? '');
56
- else {
56
+ } else {
57
57
  return useNumberMask(mask, value ?? '');
58
58
  }
59
59
  } else {
60
- return useState<string | number>(value ?? '');
60
+ return [undefined, undefined];
61
61
  }
62
62
  };
63
63
 
64
64
  const [maskValue, setMaskValue] = getInputHook();
65
65
 
66
66
  const _value =
67
- typeof maskValue === 'object'
67
+ maskValue !== undefined
68
68
  ? maskValue?.formatted ?? ''
69
- : maskValue?.toString();
69
+ : value?.toString() ?? '';
70
70
 
71
- useEffect(() => {
71
+ const onChangeMaskValue = useCallback(() => {
72
72
  if (onChange) {
73
- if (typeof maskValue === 'object') onChange(maskValue?.raw);
74
- else onChange(maskValue);
73
+ onChange(maskValue?.raw);
75
74
  }
76
75
  }, [maskValue]);
77
76
 
78
77
  const onChangeValue = useCallback(
79
- (value: string | number) => {
80
- setMaskValue(value);
78
+ async (value: string | number) => {
79
+ if (maskValue !== undefined && setMaskValue !== undefined) {
80
+ await setMaskValue(value);
81
+ onChangeMaskValue();
82
+ } else onChange && onChange(value);
81
83
  },
82
84
  [value]
83
85
  );
@@ -86,34 +88,19 @@ const InputElement: FC<InputElementProps> = React.forwardRef(
86
88
  if (!valueReinitialized) {
87
89
  /** Used to reinitialize maskValue with a value that was loaded after Input was rendered **/
88
90
  if (
89
- (maskValue === undefined || maskValue === '') &&
90
- value !== undefined &&
91
- value !== ''
92
- ) {
93
- /** Case there is not a mask **/
94
- setMaskValue(value);
95
- setValueReinitialized(true);
96
- } else if (
97
91
  maskValue !== undefined &&
92
+ setMaskValue !== undefined &&
98
93
  value !== undefined &&
99
94
  typeof maskValue === 'object'
100
95
  ) {
101
96
  /** Case there is a mask **/
102
- if (maskValue.raw !== value) {
103
- if (
104
- (Array.isArray(mask) || typeof mask === 'function') &&
105
- (maskValue.raw === undefined || maskValue.raw === '')
106
- ) {
107
- setValueReinitialized(true);
108
- setMaskValue(value);
109
- } else if (typeof mask === 'object' && maskValue.raw === 0) {
110
- setValueReinitialized(true);
111
- setMaskValue(value);
112
- }
97
+ if (maskValue.raw !== value.toString()) {
98
+ setValueReinitialized(true);
99
+ setMaskValue(value);
113
100
  }
114
101
  }
115
102
  }
116
- }, [value, maskValue, setMaskValue, valueReinitialized]);
103
+ }, [value, maskValue, valueReinitialized]);
117
104
 
118
105
  return (
119
106
  <StyledInputElement
@@ -110,12 +110,12 @@ export const useStringMask = (
110
110
  );
111
111
 
112
112
  const [value, setValue] = useState<MaskValue>(
113
- applyMask(String(defaultValue))
113
+ applyMask(defaultValue?.toString())
114
114
  );
115
115
 
116
116
  const handleChangeValue = useCallback(
117
117
  (formattedValue: string | number) => {
118
- const { raw, formatted } = applyMask(formattedValue);
118
+ const { raw, formatted } = applyMask(formattedValue.toString());
119
119
  setValue({
120
120
  raw,
121
121
  formatted,