@reown/appkit-common-react-native 0.0.0-feat-onramp-20250325191412 → 0.0.0-feat-onramp-20250401173834
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/lib/commonjs/utils/ConstantsUtil.js +1 -1
- package/lib/commonjs/utils/NumberUtil.js +48 -13
- package/lib/commonjs/utils/NumberUtil.js.map +1 -1
- package/lib/module/utils/ConstantsUtil.js +1 -1
- package/lib/module/utils/NumberUtil.js +48 -13
- package/lib/module/utils/NumberUtil.js.map +1 -1
- package/lib/typescript/utils/NumberUtil.d.ts +5 -0
- package/lib/typescript/utils/NumberUtil.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/utils/ConstantsUtil.ts +1 -1
- package/src/utils/NumberUtil.ts +53 -14
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.ConstantsUtil = void 0;
|
|
7
7
|
const ConstantsUtil = exports.ConstantsUtil = {
|
|
8
|
-
VERSION: '0.0.0-feat-onramp-
|
|
8
|
+
VERSION: '0.0.0-feat-onramp-20250401173834',
|
|
9
9
|
EIP155: 'eip155',
|
|
10
10
|
ADD_CHAIN_METHOD: 'wallet_addEthereumChain',
|
|
11
11
|
WC_NAME_SUFFIX: '.reown.id',
|
|
@@ -43,19 +43,29 @@ const NumberUtil = exports.NumberUtil = {
|
|
|
43
43
|
* @returns
|
|
44
44
|
*/
|
|
45
45
|
formatNumberToLocalString(value, decimals = 2) {
|
|
46
|
+
const options = {
|
|
47
|
+
maximumFractionDigits: decimals
|
|
48
|
+
// Omit minimumFractionDigits to remove trailing zeros
|
|
49
|
+
};
|
|
50
|
+
|
|
46
51
|
if (value === undefined) {
|
|
47
|
-
|
|
52
|
+
// Use undefined locale to get system default
|
|
53
|
+
return 0 .toLocaleString(undefined, options);
|
|
54
|
+
}
|
|
55
|
+
let numberValue;
|
|
56
|
+
if (typeof value === 'string') {
|
|
57
|
+
// Attempt to parse the string, handling potential locale-specific formats might be complex here,
|
|
58
|
+
// assuming parseFloat works for common cases after removing grouping separators might be needed if issues arise.
|
|
59
|
+
// For now, stick to parseFloat as it was.
|
|
60
|
+
numberValue = parseFloat(value);
|
|
61
|
+
} else {
|
|
62
|
+
numberValue = value;
|
|
48
63
|
}
|
|
49
|
-
if (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
minimumFractionDigits: decimals
|
|
53
|
-
});
|
|
64
|
+
if (isNaN(numberValue)) {
|
|
65
|
+
// Handle cases where parsing might fail, return a default or based on requirements
|
|
66
|
+
return 0 .toLocaleString(undefined, options);
|
|
54
67
|
}
|
|
55
|
-
return
|
|
56
|
-
maximumFractionDigits: decimals,
|
|
57
|
-
minimumFractionDigits: decimals
|
|
58
|
-
});
|
|
68
|
+
return numberValue.toLocaleString(undefined, options);
|
|
59
69
|
},
|
|
60
70
|
/**
|
|
61
71
|
* Parse a formatted local string back to a number
|
|
@@ -63,12 +73,37 @@ const NumberUtil = exports.NumberUtil = {
|
|
|
63
73
|
* @returns
|
|
64
74
|
*/
|
|
65
75
|
parseLocalStringToNumber(value) {
|
|
66
|
-
if (value === undefined) {
|
|
76
|
+
if (value === undefined || value === null || value.trim() === '') {
|
|
67
77
|
return 0;
|
|
68
78
|
}
|
|
79
|
+
const decimalSeparator = this.getLocaleDecimalSeparator();
|
|
80
|
+
let processedValue = value;
|
|
81
|
+
if (decimalSeparator === ',') {
|
|
82
|
+
// If locale uses COMMA for decimal:
|
|
83
|
+
// 1. Remove all period characters (thousand separators)
|
|
84
|
+
processedValue = processedValue.replace(/\./g, '');
|
|
85
|
+
// 2. Replace the comma decimal separator with a period
|
|
86
|
+
processedValue = processedValue.replace(/,/g, '.');
|
|
87
|
+
} else {
|
|
88
|
+
// If locale uses PERIOD for decimal (or anything else):
|
|
89
|
+
// 1. Remove all comma characters (thousand separators)
|
|
90
|
+
processedValue = processedValue.replace(/,/g, '');
|
|
91
|
+
// 2. Period decimal separator is already correct
|
|
92
|
+
}
|
|
69
93
|
|
|
70
|
-
//
|
|
71
|
-
|
|
94
|
+
// Parse the cleaned string which should now use '.' as decimal and no thousand separators
|
|
95
|
+
const result = parseFloat(processedValue);
|
|
96
|
+
|
|
97
|
+
// Return the parsed number, or 0 if parsing failed (NaN)
|
|
98
|
+
return isNaN(result) ? 0 : result;
|
|
99
|
+
},
|
|
100
|
+
/**
|
|
101
|
+
* Determines the decimal separator based on the user's locale.
|
|
102
|
+
* @returns The locale's decimal separator (e.g., '.' or ',').
|
|
103
|
+
*/
|
|
104
|
+
getLocaleDecimalSeparator() {
|
|
105
|
+
// Format a known decimal number and extract the second character
|
|
106
|
+
return 1.1.toLocaleString().substring(1, 2);
|
|
72
107
|
}
|
|
73
108
|
};
|
|
74
109
|
//# sourceMappingURL=NumberUtil.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BigNumber","_interopRequireWildcard","require","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","NumberUtil","exports","bigNumber","value","replace","multiply","b","undefined","aBigNumber","bBigNumber","multipliedBy","roundNumber","number","threshold","fixed","roundedNumber","toString","length","Number","toFixed","nextMultipleOfTen","amount","Math","max","ceil","formatNumberToLocalString","decimals","
|
|
1
|
+
{"version":3,"names":["BigNumber","_interopRequireWildcard","require","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","NumberUtil","exports","bigNumber","value","replace","multiply","b","undefined","aBigNumber","bBigNumber","multipliedBy","roundNumber","number","threshold","fixed","roundedNumber","toString","length","Number","toFixed","nextMultipleOfTen","amount","Math","max","ceil","formatNumberToLocalString","decimals","options","maximumFractionDigits","toLocaleString","numberValue","parseFloat","isNaN","parseLocalStringToNumber","trim","decimalSeparator","getLocaleDecimalSeparator","processedValue","result","substring"],"sourceRoot":"../../../src","sources":["utils/NumberUtil.ts"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,uBAAA,CAAAC,OAAA;AAA0C,SAAAC,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAH,wBAAAG,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAEnC,MAAMW,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAG;EACxBE,SAASA,CAACC,KAAgC,EAAE;IAC1C,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC7B,OAAO,IAAI1B,SAAS,CAACA,SAAS,CAAC0B,KAAK,CAACC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACzD;IAEA,OAAO,IAAI3B,SAAS,CAACA,SAAS,CAAC0B,KAAK,CAAC;EACvC,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEE,QAAQA,CAACd,CAAwC,EAAEe,CAAwC,EAAE;IAC3F,IAAIf,CAAC,KAAKgB,SAAS,IAAID,CAAC,KAAKC,SAAS,EAAE;MACtC,OAAO9B,SAAS,CAACA,SAAS,CAAC,CAAC,CAAC;IAC/B;IAEA,MAAM+B,UAAU,GAAG,IAAI/B,SAAS,CAACA,SAAS,CAAC,OAAOc,CAAC,KAAK,QAAQ,GAAGA,CAAC,CAACa,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAGb,CAAC,CAAC;IAC5F,MAAMkB,UAAU,GAAG,IAAIhC,SAAS,CAACA,SAAS,CAAC,OAAO6B,CAAC,KAAK,QAAQ,GAAGA,CAAC,CAACF,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAGE,CAAC,CAAC;IAE5F,OAAOE,UAAU,CAACE,YAAY,CAACD,UAAU,CAAC;EAC5C,CAAC;EAEDE,WAAWA,CAACC,MAAc,EAAEC,SAAiB,EAAEC,KAAa,EAAE;IAC5D,MAAMC,aAAa,GACjBH,MAAM,CAACI,QAAQ,CAAC,CAAC,CAACC,MAAM,IAAIJ,SAAS,GAAGK,MAAM,CAACN,MAAM,CAAC,CAACO,OAAO,CAACL,KAAK,CAAC,GAAGF,MAAM;IAEhF,OAAOG,aAAa;EACtB,CAAC;EAEDK,iBAAiBA,CAACC,MAAe,EAAE;IACjC,IAAI,CAACA,MAAM,EAAE,OAAO,EAAE;IAEtB,OAAOC,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,IAAI,CAACH,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;EAClD,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEI,yBAAyBA,CAACtB,KAAkC,EAAEuB,QAAQ,GAAG,CAAC,EAAE;IAC1E,MAAMC,OAAiC,GAAG;MACxCC,qBAAqB,EAAEF;MACvB;IACF,CAAC;;IAED,IAAIvB,KAAK,KAAKI,SAAS,EAAE;MACvB;MACA,OAAQ,CAAC,EAAEsB,cAAc,CAACtB,SAAS,EAAEoB,OAAO,CAAC;IAC/C;IAEA,IAAIG,WAAmB;IACvB,IAAI,OAAO3B,KAAK,KAAK,QAAQ,EAAE;MAC7B;MACA;MACA;MACA2B,WAAW,GAAGC,UAAU,CAAC5B,KAAK,CAAC;IACjC,CAAC,MAAM;MACL2B,WAAW,GAAG3B,KAAK;IACrB;IAEA,IAAI6B,KAAK,CAACF,WAAW,CAAC,EAAE;MACtB;MACA,OAAQ,CAAC,EAAED,cAAc,CAACtB,SAAS,EAAEoB,OAAO,CAAC;IAC/C;IAEA,OAAOG,WAAW,CAACD,cAAc,CAACtB,SAAS,EAAEoB,OAAO,CAAC;EACvD,CAAC;EACD;AACF;AACA;AACA;AACA;EACEM,wBAAwBA,CAAC9B,KAAyB,EAAU;IAC1D,IAAIA,KAAK,KAAKI,SAAS,IAAIJ,KAAK,KAAK,IAAI,IAAIA,KAAK,CAAC+B,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;MAChE,OAAO,CAAC;IACV;IAEA,MAAMC,gBAAgB,GAAG,IAAI,CAACC,yBAAyB,CAAC,CAAC;IACzD,IAAIC,cAAc,GAAGlC,KAAK;IAE1B,IAAIgC,gBAAgB,KAAK,GAAG,EAAE;MAC5B;MACA;MACAE,cAAc,GAAGA,cAAc,CAACjC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;MAClD;MACAiC,cAAc,GAAGA,cAAc,CAACjC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;IACpD,CAAC,MAAM;MACL;MACA;MACAiC,cAAc,GAAGA,cAAc,CAACjC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;MACjD;IACF;;IAEA;IACA,MAAMkC,MAAM,GAAGP,UAAU,CAACM,cAAc,CAAC;;IAEzC;IACA,OAAOL,KAAK,CAACM,MAAM,CAAC,GAAG,CAAC,GAAGA,MAAM;EACnC,CAAC;EAED;AACF;AACA;AACA;EACEF,yBAAyBA,CAAA,EAAW;IAClC;IACA,OAAQ,GAAG,CAAEP,cAAc,CAAC,CAAC,CAACU,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;EAC/C;AACF,CAAC"}
|
|
@@ -35,19 +35,29 @@ export const NumberUtil = {
|
|
|
35
35
|
* @returns
|
|
36
36
|
*/
|
|
37
37
|
formatNumberToLocalString(value, decimals = 2) {
|
|
38
|
+
const options = {
|
|
39
|
+
maximumFractionDigits: decimals
|
|
40
|
+
// Omit minimumFractionDigits to remove trailing zeros
|
|
41
|
+
};
|
|
42
|
+
|
|
38
43
|
if (value === undefined) {
|
|
39
|
-
|
|
44
|
+
// Use undefined locale to get system default
|
|
45
|
+
return 0 .toLocaleString(undefined, options);
|
|
46
|
+
}
|
|
47
|
+
let numberValue;
|
|
48
|
+
if (typeof value === 'string') {
|
|
49
|
+
// Attempt to parse the string, handling potential locale-specific formats might be complex here,
|
|
50
|
+
// assuming parseFloat works for common cases after removing grouping separators might be needed if issues arise.
|
|
51
|
+
// For now, stick to parseFloat as it was.
|
|
52
|
+
numberValue = parseFloat(value);
|
|
53
|
+
} else {
|
|
54
|
+
numberValue = value;
|
|
40
55
|
}
|
|
41
|
-
if (
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
minimumFractionDigits: decimals
|
|
45
|
-
});
|
|
56
|
+
if (isNaN(numberValue)) {
|
|
57
|
+
// Handle cases where parsing might fail, return a default or based on requirements
|
|
58
|
+
return 0 .toLocaleString(undefined, options);
|
|
46
59
|
}
|
|
47
|
-
return
|
|
48
|
-
maximumFractionDigits: decimals,
|
|
49
|
-
minimumFractionDigits: decimals
|
|
50
|
-
});
|
|
60
|
+
return numberValue.toLocaleString(undefined, options);
|
|
51
61
|
},
|
|
52
62
|
/**
|
|
53
63
|
* Parse a formatted local string back to a number
|
|
@@ -55,12 +65,37 @@ export const NumberUtil = {
|
|
|
55
65
|
* @returns
|
|
56
66
|
*/
|
|
57
67
|
parseLocalStringToNumber(value) {
|
|
58
|
-
if (value === undefined) {
|
|
68
|
+
if (value === undefined || value === null || value.trim() === '') {
|
|
59
69
|
return 0;
|
|
60
70
|
}
|
|
71
|
+
const decimalSeparator = this.getLocaleDecimalSeparator();
|
|
72
|
+
let processedValue = value;
|
|
73
|
+
if (decimalSeparator === ',') {
|
|
74
|
+
// If locale uses COMMA for decimal:
|
|
75
|
+
// 1. Remove all period characters (thousand separators)
|
|
76
|
+
processedValue = processedValue.replace(/\./g, '');
|
|
77
|
+
// 2. Replace the comma decimal separator with a period
|
|
78
|
+
processedValue = processedValue.replace(/,/g, '.');
|
|
79
|
+
} else {
|
|
80
|
+
// If locale uses PERIOD for decimal (or anything else):
|
|
81
|
+
// 1. Remove all comma characters (thousand separators)
|
|
82
|
+
processedValue = processedValue.replace(/,/g, '');
|
|
83
|
+
// 2. Period decimal separator is already correct
|
|
84
|
+
}
|
|
61
85
|
|
|
62
|
-
//
|
|
63
|
-
|
|
86
|
+
// Parse the cleaned string which should now use '.' as decimal and no thousand separators
|
|
87
|
+
const result = parseFloat(processedValue);
|
|
88
|
+
|
|
89
|
+
// Return the parsed number, or 0 if parsing failed (NaN)
|
|
90
|
+
return isNaN(result) ? 0 : result;
|
|
91
|
+
},
|
|
92
|
+
/**
|
|
93
|
+
* Determines the decimal separator based on the user's locale.
|
|
94
|
+
* @returns The locale's decimal separator (e.g., '.' or ',').
|
|
95
|
+
*/
|
|
96
|
+
getLocaleDecimalSeparator() {
|
|
97
|
+
// Format a known decimal number and extract the second character
|
|
98
|
+
return 1.1.toLocaleString().substring(1, 2);
|
|
64
99
|
}
|
|
65
100
|
};
|
|
66
101
|
//# sourceMappingURL=NumberUtil.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BigNumber","NumberUtil","bigNumber","value","replace","multiply","a","b","undefined","aBigNumber","bBigNumber","multipliedBy","roundNumber","number","threshold","fixed","roundedNumber","toString","length","Number","toFixed","nextMultipleOfTen","amount","Math","max","ceil","formatNumberToLocalString","decimals","
|
|
1
|
+
{"version":3,"names":["BigNumber","NumberUtil","bigNumber","value","replace","multiply","a","b","undefined","aBigNumber","bBigNumber","multipliedBy","roundNumber","number","threshold","fixed","roundedNumber","toString","length","Number","toFixed","nextMultipleOfTen","amount","Math","max","ceil","formatNumberToLocalString","decimals","options","maximumFractionDigits","toLocaleString","numberValue","parseFloat","isNaN","parseLocalStringToNumber","trim","decimalSeparator","getLocaleDecimalSeparator","processedValue","result","substring"],"sourceRoot":"../../../src","sources":["utils/NumberUtil.ts"],"mappings":"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"}
|
|
@@ -23,5 +23,10 @@ export declare const NumberUtil: {
|
|
|
23
23
|
* @returns
|
|
24
24
|
*/
|
|
25
25
|
parseLocalStringToNumber(value: string | undefined): number;
|
|
26
|
+
/**
|
|
27
|
+
* Determines the decimal separator based on the user's locale.
|
|
28
|
+
* @returns The locale's decimal separator (e.g., '.' or ',').
|
|
29
|
+
*/
|
|
30
|
+
getLocaleDecimalSeparator(): string;
|
|
26
31
|
};
|
|
27
32
|
//# sourceMappingURL=NumberUtil.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberUtil.d.ts","sourceRoot":"","sources":["../../../src/utils/NumberUtil.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAE1C,eAAO,MAAM,UAAU;qBACJ,mBAAmB,CAAC,KAAK;IAQ1C;;;;;OAKG;gBACS,mBAAmB,CAAC,KAAK,GAAG,SAAS,KAAK,mBAAmB,CAAC,KAAK,GAAG,SAAS;wBAWvE,MAAM,aAAa,MAAM,SAAS,MAAM;+BAOjC,MAAM;IAMjC;;;;;OAKG;qCAC8B,MAAM,GAAG,MAAM,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"NumberUtil.d.ts","sourceRoot":"","sources":["../../../src/utils/NumberUtil.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,cAAc,CAAC;AAE1C,eAAO,MAAM,UAAU;qBACJ,mBAAmB,CAAC,KAAK;IAQ1C;;;;;OAKG;gBACS,mBAAmB,CAAC,KAAK,GAAG,SAAS,KAAK,mBAAmB,CAAC,KAAK,GAAG,SAAS;wBAWvE,MAAM,aAAa,MAAM,SAAS,MAAM;+BAOjC,MAAM;IAMjC;;;;;OAKG;qCAC8B,MAAM,GAAG,MAAM,GAAG,SAAS;IA4B5D;;;;OAIG;oCAC6B,MAAM,GAAG,SAAS,GAAG,MAAM;IA4B3D;;;OAGG;iCAC0B,MAAM;CAIpC,CAAC"}
|
package/package.json
CHANGED
package/src/utils/NumberUtil.ts
CHANGED
|
@@ -46,33 +46,72 @@ export const NumberUtil = {
|
|
|
46
46
|
* @returns
|
|
47
47
|
*/
|
|
48
48
|
formatNumberToLocalString(value: string | number | undefined, decimals = 2) {
|
|
49
|
+
const options: Intl.NumberFormatOptions = {
|
|
50
|
+
maximumFractionDigits: decimals
|
|
51
|
+
// Omit minimumFractionDigits to remove trailing zeros
|
|
52
|
+
};
|
|
53
|
+
|
|
49
54
|
if (value === undefined) {
|
|
50
|
-
|
|
55
|
+
// Use undefined locale to get system default
|
|
56
|
+
return (0).toLocaleString(undefined, options);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
let numberValue: number;
|
|
60
|
+
if (typeof value === 'string') {
|
|
61
|
+
// Attempt to parse the string, handling potential locale-specific formats might be complex here,
|
|
62
|
+
// assuming parseFloat works for common cases after removing grouping separators might be needed if issues arise.
|
|
63
|
+
// For now, stick to parseFloat as it was.
|
|
64
|
+
numberValue = parseFloat(value);
|
|
65
|
+
} else {
|
|
66
|
+
numberValue = value;
|
|
51
67
|
}
|
|
52
68
|
|
|
53
|
-
if (
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
minimumFractionDigits: decimals
|
|
57
|
-
});
|
|
69
|
+
if (isNaN(numberValue)) {
|
|
70
|
+
// Handle cases where parsing might fail, return a default or based on requirements
|
|
71
|
+
return (0).toLocaleString(undefined, options);
|
|
58
72
|
}
|
|
59
73
|
|
|
60
|
-
return
|
|
61
|
-
maximumFractionDigits: decimals,
|
|
62
|
-
minimumFractionDigits: decimals
|
|
63
|
-
});
|
|
74
|
+
return numberValue.toLocaleString(undefined, options);
|
|
64
75
|
},
|
|
65
76
|
/**
|
|
66
77
|
* Parse a formatted local string back to a number
|
|
67
78
|
* @param value - The formatted string to parse
|
|
68
79
|
* @returns
|
|
69
80
|
*/
|
|
70
|
-
parseLocalStringToNumber(value: string | undefined) {
|
|
71
|
-
if (value === undefined) {
|
|
81
|
+
parseLocalStringToNumber(value: string | undefined): number {
|
|
82
|
+
if (value === undefined || value === null || value.trim() === '') {
|
|
72
83
|
return 0;
|
|
73
84
|
}
|
|
74
85
|
|
|
75
|
-
|
|
76
|
-
|
|
86
|
+
const decimalSeparator = this.getLocaleDecimalSeparator();
|
|
87
|
+
let processedValue = value;
|
|
88
|
+
|
|
89
|
+
if (decimalSeparator === ',') {
|
|
90
|
+
// If locale uses COMMA for decimal:
|
|
91
|
+
// 1. Remove all period characters (thousand separators)
|
|
92
|
+
processedValue = processedValue.replace(/\./g, '');
|
|
93
|
+
// 2. Replace the comma decimal separator with a period
|
|
94
|
+
processedValue = processedValue.replace(/,/g, '.');
|
|
95
|
+
} else {
|
|
96
|
+
// If locale uses PERIOD for decimal (or anything else):
|
|
97
|
+
// 1. Remove all comma characters (thousand separators)
|
|
98
|
+
processedValue = processedValue.replace(/,/g, '');
|
|
99
|
+
// 2. Period decimal separator is already correct
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// Parse the cleaned string which should now use '.' as decimal and no thousand separators
|
|
103
|
+
const result = parseFloat(processedValue);
|
|
104
|
+
|
|
105
|
+
// Return the parsed number, or 0 if parsing failed (NaN)
|
|
106
|
+
return isNaN(result) ? 0 : result;
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Determines the decimal separator based on the user's locale.
|
|
111
|
+
* @returns The locale's decimal separator (e.g., '.' or ',').
|
|
112
|
+
*/
|
|
113
|
+
getLocaleDecimalSeparator(): string {
|
|
114
|
+
// Format a known decimal number and extract the second character
|
|
115
|
+
return (1.1).toLocaleString().substring(1, 2);
|
|
77
116
|
}
|
|
78
117
|
};
|