@thoughtspot/ts-chart-sdk 0.0.2-alpha.24 → 0.0.2-alpha.25
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/ts-chart-sdk.d.ts +65 -5
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/main/custom-chart-context.d.ts.map +1 -1
- package/lib/main/custom-chart-context.js +3 -1
- package/lib/main/custom-chart-context.js.map +1 -1
- package/lib/types/answer-column.types.d.ts +3 -3
- package/lib/types/answer-column.types.d.ts.map +1 -1
- package/lib/types/answer-column.types.js +3 -3
- package/lib/types/answer-column.types.js.map +1 -1
- package/lib/types/number-formatting.types.d.ts +2 -2
- package/lib/types/number-formatting.types.d.ts.map +1 -1
- package/lib/types/visual-prop.types.d.ts +40 -0
- package/lib/types/visual-prop.types.d.ts.map +1 -1
- package/lib/types/visual-prop.types.js +32 -1
- package/lib/types/visual-prop.types.js.map +1 -1
- package/lib/utils/globalize-Initializer/globalize-utils.d.ts +16 -0
- package/lib/utils/globalize-Initializer/globalize-utils.d.ts.map +1 -0
- package/lib/utils/globalize-Initializer/globalize-utils.js +101 -0
- package/lib/utils/globalize-Initializer/globalize-utils.js.map +1 -0
- package/lib/utils/globalize-Initializer/globalize-utils.spec.d.ts +2 -0
- package/lib/utils/globalize-Initializer/globalize-utils.spec.d.ts.map +1 -0
- package/lib/utils/globalize-Initializer/globalize-utils.spec.js +149 -0
- package/lib/utils/globalize-Initializer/globalize-utils.spec.js.map +1 -0
- package/lib/utils/number-formatting/number-formatting-utils.d.ts +33 -0
- package/lib/utils/number-formatting/number-formatting-utils.d.ts.map +1 -0
- package/lib/utils/number-formatting/number-formatting-utils.js +180 -0
- package/lib/utils/number-formatting/number-formatting-utils.js.map +1 -0
- package/lib/utils/number-formatting/number-formatting-utils.spec.d.ts +2 -0
- package/lib/utils/number-formatting/number-formatting-utils.spec.d.ts.map +1 -0
- package/lib/utils/number-formatting/number-formatting-utils.spec.js +235 -0
- package/lib/utils/number-formatting/number-formatting-utils.spec.js.map +1 -0
- package/lib/utils/number-formatting/number-formatting.d.ts +5 -0
- package/lib/utils/number-formatting/number-formatting.d.ts.map +1 -0
- package/lib/utils/number-formatting/number-formatting.js +131 -0
- package/lib/utils/number-formatting/number-formatting.js.map +1 -0
- package/lib/utils/number-formatting/number-formatting.spec.d.ts +2 -0
- package/lib/utils/number-formatting/number-formatting.spec.d.ts.map +1 -0
- package/lib/utils/number-formatting/number-formatting.spec.js +159 -0
- package/lib/utils/number-formatting/number-formatting.spec.js.map +1 -0
- package/package.json +4 -1
- package/src/index.ts +2 -0
- package/src/main/custom-chart-context.ts +4 -1
- package/src/types/answer-column.types.ts +3 -3
- package/src/types/number-formatting.types.ts +2 -2
- package/src/types/visual-prop.types.ts +86 -0
- package/src/utils/globalize-Initializer/globalize-utils.spec.ts +192 -0
- package/src/utils/globalize-Initializer/globalize-utils.ts +216 -0
- package/src/utils/number-formatting/number-formatting-utils.spec.ts +321 -0
- package/src/utils/number-formatting/number-formatting-utils.ts +288 -0
- package/src/utils/number-formatting/number-formatting.spec.ts +243 -0
- package/src/utils/number-formatting/number-formatting.ts +268 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { CurrencyFormatType, FormatType, } from '../../types/answer-column.types';
|
|
2
|
+
import { CategoryType, NegativeValueFormat, Unit, } from '../../types/number-formatting.types';
|
|
3
|
+
import * as globalizeUtils from '../globalize-Initializer/globalize-utils';
|
|
4
|
+
import { defaultFormatConfig, formatNegativeValue, formatSpecialDataValue, getAutoUnit, getLocaleBasedStringFormats, getLocaleName, mapFormatterConfig, PROTO_TO_UNITS, setLocaleBasedStringFormats, UNITS_TO_DIVIDING_FACTOR, } from './number-formatting-utils';
|
|
5
|
+
describe('formatNegativeValue', () => {
|
|
6
|
+
it('should format with prefix dash', () => {
|
|
7
|
+
const result = formatNegativeValue('100', NegativeValueFormat.PrefixDash);
|
|
8
|
+
expect(result).toBe('-100');
|
|
9
|
+
});
|
|
10
|
+
it('should format with suffix dash', () => {
|
|
11
|
+
const result = formatNegativeValue('100', NegativeValueFormat.SuffixDash);
|
|
12
|
+
expect(result).toBe('100-');
|
|
13
|
+
});
|
|
14
|
+
it('should format with braces without dash', () => {
|
|
15
|
+
const result = formatNegativeValue('100', NegativeValueFormat.BracesNodash);
|
|
16
|
+
expect(result).toBe('(100)');
|
|
17
|
+
});
|
|
18
|
+
it('should default to prefix dash if no format is provided', () => {
|
|
19
|
+
const result = formatNegativeValue('100');
|
|
20
|
+
expect(result).toBe('-100');
|
|
21
|
+
});
|
|
22
|
+
it('should convert a numeric negative format to a string format', () => {
|
|
23
|
+
const negativeFormatNumber = 1;
|
|
24
|
+
const formattedValue = '100.25';
|
|
25
|
+
let result = formatNegativeValue(formattedValue, negativeFormatNumber);
|
|
26
|
+
expect(result).toBe('-100.25');
|
|
27
|
+
const negativeFormatNumber2 = 2;
|
|
28
|
+
result = formatNegativeValue(formattedValue, negativeFormatNumber2);
|
|
29
|
+
expect(result).toBe('100.25-');
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
describe('getAutoUnit', () => {
|
|
33
|
+
it('should return Trillion for values above 1 Trillion', () => {
|
|
34
|
+
const result = getAutoUnit(1e12);
|
|
35
|
+
expect(result).toBe(Unit.Trillion);
|
|
36
|
+
});
|
|
37
|
+
it('should return Billion for values above 1 Billion', () => {
|
|
38
|
+
const result = getAutoUnit(1e9);
|
|
39
|
+
expect(result).toBe(Unit.Billion);
|
|
40
|
+
});
|
|
41
|
+
it('should return Million for values above 1 Million', () => {
|
|
42
|
+
const result = getAutoUnit(1e6);
|
|
43
|
+
expect(result).toBe(Unit.Million);
|
|
44
|
+
});
|
|
45
|
+
it('should return Thousands for values above 1 Thousand', () => {
|
|
46
|
+
const result = getAutoUnit(1e3);
|
|
47
|
+
expect(result).toBe(Unit.Thousands);
|
|
48
|
+
});
|
|
49
|
+
it('should return None for values below 1000', () => {
|
|
50
|
+
const result = getAutoUnit(500);
|
|
51
|
+
expect(result).toBe(Unit.None);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe('getLocaleName', () => {
|
|
55
|
+
it('should return default locale if currency format is not ISO_CODE', () => {
|
|
56
|
+
jest.spyOn(globalizeUtils, 'getDefaultCurrencyCode').mockReturnValueOnce('GBP');
|
|
57
|
+
const currencyFormat = {
|
|
58
|
+
type: CurrencyFormatType.USER_LOCALE,
|
|
59
|
+
column: '',
|
|
60
|
+
isoCode: '',
|
|
61
|
+
};
|
|
62
|
+
const result = getLocaleName(currencyFormat);
|
|
63
|
+
expect(result).toBe('GBP');
|
|
64
|
+
});
|
|
65
|
+
it('should return ISO code if currency format is ISO_CODE', () => {
|
|
66
|
+
const currencyFormat = {
|
|
67
|
+
type: CurrencyFormatType.ISO_CODE,
|
|
68
|
+
column: '',
|
|
69
|
+
isoCode: 'USD',
|
|
70
|
+
};
|
|
71
|
+
const result = getLocaleName(currencyFormat);
|
|
72
|
+
expect(result).toBe('USD');
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe('defaultFormatConfig', () => {
|
|
76
|
+
it('should return custom format config for a pattern', () => {
|
|
77
|
+
var _a;
|
|
78
|
+
const columnFormatConfig = {
|
|
79
|
+
type: FormatType.PATTERN,
|
|
80
|
+
pattern: '###,###',
|
|
81
|
+
};
|
|
82
|
+
const result = defaultFormatConfig(columnFormatConfig);
|
|
83
|
+
expect(result.category).toBe(CategoryType.Custom);
|
|
84
|
+
expect((_a = result.customFormatConfig) === null || _a === void 0 ? void 0 : _a.format).toBe('###,###');
|
|
85
|
+
});
|
|
86
|
+
it('should return currency format config if currencyFormat is defined', () => {
|
|
87
|
+
var _a;
|
|
88
|
+
const columnFormatConfig = {
|
|
89
|
+
type: FormatType.CURRENCY,
|
|
90
|
+
currencyFormat: {
|
|
91
|
+
type: CurrencyFormatType.ISO_CODE,
|
|
92
|
+
column: '',
|
|
93
|
+
isoCode: 'USD',
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
const result = defaultFormatConfig(columnFormatConfig);
|
|
97
|
+
expect(result.category).toBe(CategoryType.Currency);
|
|
98
|
+
expect((_a = result.currencyFormatConfig) === null || _a === void 0 ? void 0 : _a.locale).toBe('USD');
|
|
99
|
+
});
|
|
100
|
+
it('should return number format config by default', () => {
|
|
101
|
+
var _a;
|
|
102
|
+
const result = defaultFormatConfig();
|
|
103
|
+
expect(result.category).toBe(CategoryType.Number);
|
|
104
|
+
expect((_a = result.numberFormatConfig) === null || _a === void 0 ? void 0 : _a.decimals).toBe(0);
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe('mapFormatterConfig', () => {
|
|
108
|
+
it('should return correct formatter config for a number format', () => {
|
|
109
|
+
const absFloatValue = 1000;
|
|
110
|
+
const configDetails = {
|
|
111
|
+
decimals: 2,
|
|
112
|
+
negativeValueFormat: NegativeValueFormat.PrefixDash,
|
|
113
|
+
removeTrailingZeroes: false,
|
|
114
|
+
toSeparateThousands: true,
|
|
115
|
+
unit: Unit.Million,
|
|
116
|
+
};
|
|
117
|
+
const result = mapFormatterConfig(absFloatValue, configDetails);
|
|
118
|
+
expect(result.unitDetails).toBe(Unit.Million);
|
|
119
|
+
expect(result.decimalDetails).toBe(2);
|
|
120
|
+
expect(result.shouldRemoveTrailingZeros).toBe(false);
|
|
121
|
+
});
|
|
122
|
+
it('should return auto unit and decimal precision for large value', () => {
|
|
123
|
+
const absFloatValue = 1e9;
|
|
124
|
+
const configDetails = {
|
|
125
|
+
decimals: 0,
|
|
126
|
+
negativeValueFormat: NegativeValueFormat.PrefixDash,
|
|
127
|
+
removeTrailingZeroes: false,
|
|
128
|
+
toSeparateThousands: true,
|
|
129
|
+
unit: Unit.Auto,
|
|
130
|
+
};
|
|
131
|
+
const result = mapFormatterConfig(absFloatValue, configDetails);
|
|
132
|
+
expect(result.unitDetails).toBe(Unit.Billion);
|
|
133
|
+
expect(result.decimalDetails).toBe(2);
|
|
134
|
+
});
|
|
135
|
+
it('should return correct config for currency formatting', () => {
|
|
136
|
+
const absFloatValue = 1000;
|
|
137
|
+
const configDetails = {
|
|
138
|
+
decimals: 2,
|
|
139
|
+
locale: 'en',
|
|
140
|
+
removeTrailingZeroes: false,
|
|
141
|
+
toSeparateThousands: true,
|
|
142
|
+
unit: Unit.Auto,
|
|
143
|
+
};
|
|
144
|
+
const result = mapFormatterConfig(absFloatValue, configDetails);
|
|
145
|
+
expect(result.unitDetails).toBe(Unit.Thousands);
|
|
146
|
+
expect(result.decimalDetails).toBe(2);
|
|
147
|
+
});
|
|
148
|
+
it('should correctly map valid unit numbers to the corresponding unit', () => {
|
|
149
|
+
const input = { unit: 1 };
|
|
150
|
+
const result = mapFormatterConfig(1000, input);
|
|
151
|
+
expect(result.unitDetails).toBe(PROTO_TO_UNITS[1]);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
describe('formatSpecialDataValue', () => {
|
|
155
|
+
it('should return {Null} for {Null} values', () => {
|
|
156
|
+
const result = formatSpecialDataValue('{Null}');
|
|
157
|
+
expect(result).toBe('{Null}');
|
|
158
|
+
});
|
|
159
|
+
it('should return {Null} for null values', () => {
|
|
160
|
+
const result = formatSpecialDataValue(null);
|
|
161
|
+
expect(result).toBe('{Null}');
|
|
162
|
+
});
|
|
163
|
+
it('should return {Empty} for empty string', () => {
|
|
164
|
+
const result = formatSpecialDataValue('');
|
|
165
|
+
expect(result).toBe('{Empty}');
|
|
166
|
+
});
|
|
167
|
+
it('should return {Null} for undefined values', () => {
|
|
168
|
+
const result = formatSpecialDataValue(undefined);
|
|
169
|
+
expect(result).toBe('{Null}');
|
|
170
|
+
});
|
|
171
|
+
it('should return NaN for string "NaN"', () => {
|
|
172
|
+
const result = formatSpecialDataValue(['NaN']);
|
|
173
|
+
expect(result).toBe('NaN');
|
|
174
|
+
});
|
|
175
|
+
it('should return {Null} for empty array', () => {
|
|
176
|
+
const result = formatSpecialDataValue([]);
|
|
177
|
+
expect(result).toBe('{Null}');
|
|
178
|
+
});
|
|
179
|
+
it('should return Null for array', () => {
|
|
180
|
+
const result = formatSpecialDataValue(['Test']);
|
|
181
|
+
expect(result).toBe(null);
|
|
182
|
+
});
|
|
183
|
+
it('should return Infinity for string "Infinity"', () => {
|
|
184
|
+
const result = formatSpecialDataValue(['Infinity']);
|
|
185
|
+
expect(result).toBe('Infinity');
|
|
186
|
+
});
|
|
187
|
+
it('should return null for non-special values', () => {
|
|
188
|
+
const result = formatSpecialDataValue('Test');
|
|
189
|
+
expect(result).toBeNull();
|
|
190
|
+
});
|
|
191
|
+
it('should return Infinity for Infinity', () => {
|
|
192
|
+
const result = formatSpecialDataValue(Infinity);
|
|
193
|
+
expect(result).toBe('Infinity');
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
describe('Unit constants', () => {
|
|
197
|
+
it('should map unit to correct dividing factor', () => {
|
|
198
|
+
expect(UNITS_TO_DIVIDING_FACTOR[Unit.Thousands]).toBe(1000);
|
|
199
|
+
expect(UNITS_TO_DIVIDING_FACTOR[Unit.Million]).toBe(1000000);
|
|
200
|
+
expect(UNITS_TO_DIVIDING_FACTOR[Unit.Billion]).toBe(1000000000);
|
|
201
|
+
});
|
|
202
|
+
it('should map proto to correct unit', () => {
|
|
203
|
+
expect(PROTO_TO_UNITS[1]).toBe(Unit.None);
|
|
204
|
+
expect(PROTO_TO_UNITS[2]).toBe(Unit.Thousands);
|
|
205
|
+
expect(PROTO_TO_UNITS[3]).toBe(Unit.Million);
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
describe('Locale String Formats', () => {
|
|
209
|
+
const strings = {
|
|
210
|
+
NULL_VALUE_PLACEHOLDER_LABEL: '{Null}',
|
|
211
|
+
EMPTY_VALUE_PLACEHOLDER_LABEL: '{Empty}',
|
|
212
|
+
};
|
|
213
|
+
it('should return an default object if setLocaleBasedStringFormats is not called', () => {
|
|
214
|
+
const result = getLocaleBasedStringFormats();
|
|
215
|
+
expect(result).toEqual(strings);
|
|
216
|
+
});
|
|
217
|
+
it('should set and get locale-based string formats correctly', () => {
|
|
218
|
+
const testLocaleStrings = {
|
|
219
|
+
greeting: 'Hello',
|
|
220
|
+
farewell: 'Goodbye',
|
|
221
|
+
};
|
|
222
|
+
setLocaleBasedStringFormats(testLocaleStrings);
|
|
223
|
+
const result = getLocaleBasedStringFormats();
|
|
224
|
+
expect(result).toEqual(testLocaleStrings);
|
|
225
|
+
});
|
|
226
|
+
it('should update the string formats when setLocaleBasedStringFormats is called multiple times', () => {
|
|
227
|
+
const firstSet = { greeting: 'Hola' };
|
|
228
|
+
const secondSet = { greeting: 'Bonjour' };
|
|
229
|
+
setLocaleBasedStringFormats(firstSet);
|
|
230
|
+
expect(getLocaleBasedStringFormats()).toEqual(firstSet);
|
|
231
|
+
setLocaleBasedStringFormats(secondSet);
|
|
232
|
+
expect(getLocaleBasedStringFormats()).toEqual(secondSet);
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
//# sourceMappingURL=number-formatting-utils.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-formatting-utils.spec.js","sourceRoot":"","sources":["../../../src/utils/number-formatting/number-formatting-utils.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ColumnFormat } from '../../types/answer-column.types';
|
|
2
|
+
import { FormatConfig } from '../../types/number-formatting.types';
|
|
3
|
+
export declare const formatCurrencyWithCustomPattern: (value: number, currencyCode: string, formatPattern: string) => string;
|
|
4
|
+
export declare const getFormattedValue: (value: string | number, formatConfigProp: FormatConfig, columnFormatConfig: ColumnFormat) => string;
|
|
5
|
+
//# sourceMappingURL=number-formatting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-formatting.d.ts","sourceRoot":"","sources":["../../../src/utils/number-formatting/number-formatting.ts"],"names":[],"mappings":"AASA,OAAO,EACH,YAAY,EAGf,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAEH,YAAY,EAEf,MAAM,qCAAqC,CAAC;AA+B7C,eAAO,MAAM,+BAA+B,UACjC,MAAM,gBACC,MAAM,iBACL,MAAM,KACtB,MAsBF,CAAC;AAUF,eAAO,MAAM,iBAAiB,UACnB,MAAM,GAAG,MAAM,oBACJ,YAAY,sBACV,YAAY,KACjC,MAkLF,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import { create } from '../../main/logger';
|
|
3
|
+
import { CurrencyFormatType, } from '../../types/answer-column.types';
|
|
4
|
+
import { CategoryType, } from '../../types/number-formatting.types';
|
|
5
|
+
import { formatNumberSafely, getDefaultCurrencyCode, globalizeCurrencyFormatter, globalizeNumberFormatter, sanitizeFormat, validateNumberFormat, } from '../globalize-Initializer/globalize-utils';
|
|
6
|
+
import { defaultFormatConfig, formatNegativeValue, formatSpecialDataValue, getLocaleName, mapFormatterConfig, UNITS_TO_DIVIDING_FACTOR, UNITS_TO_SUFFIX, } from './number-formatting-utils';
|
|
7
|
+
const logger = create('number-formatting');
|
|
8
|
+
const CURRENCY_CODE_EXTRACTOR_REGEX = /[\d.,]+/g;
|
|
9
|
+
export const formatCurrencyWithCustomPattern = (value, currencyCode, formatPattern) => {
|
|
10
|
+
const sanitizedPattern = sanitizeFormat(formatPattern);
|
|
11
|
+
const customFormatter = globalizeNumberFormatter({
|
|
12
|
+
...{ raw: sanitizedPattern },
|
|
13
|
+
});
|
|
14
|
+
const formattedValue = customFormatter(value);
|
|
15
|
+
const currencyFormatter = globalizeCurrencyFormatter(currencyCode, {
|
|
16
|
+
style: 'symbol',
|
|
17
|
+
});
|
|
18
|
+
const currencySymbol = currencyFormatter(0).replace(CURRENCY_CODE_EXTRACTOR_REGEX, '');
|
|
19
|
+
return `${currencySymbol}${formattedValue}`;
|
|
20
|
+
};
|
|
21
|
+
export const getFormattedValue = (value, formatConfigProp, columnFormatConfig) => {
|
|
22
|
+
var _a, _b;
|
|
23
|
+
let formatConfig = _.cloneDeep(formatConfigProp);
|
|
24
|
+
if (_.isNil(formatConfig) || _.isEmpty(formatConfig)) {
|
|
25
|
+
formatConfig = defaultFormatConfig(columnFormatConfig);
|
|
26
|
+
}
|
|
27
|
+
if (typeof formatConfig.category === 'number') {
|
|
28
|
+
formatConfig.category = CategoryType.Number;
|
|
29
|
+
}
|
|
30
|
+
const specialVal = formatSpecialDataValue(value);
|
|
31
|
+
if (specialVal) {
|
|
32
|
+
return specialVal;
|
|
33
|
+
}
|
|
34
|
+
const floatValue = parseFloat(value.toString());
|
|
35
|
+
const absFloatValue = Math.abs(floatValue);
|
|
36
|
+
switch (formatConfig.category) {
|
|
37
|
+
case CategoryType.Number: {
|
|
38
|
+
const configDetails = formatConfig.numberFormatConfig || {};
|
|
39
|
+
const formatterConfigMap = mapFormatterConfig(absFloatValue, configDetails);
|
|
40
|
+
const compactValue = absFloatValue /
|
|
41
|
+
UNITS_TO_DIVIDING_FACTOR[formatterConfigMap.unitDetails];
|
|
42
|
+
const suffix = UNITS_TO_SUFFIX[formatterConfigMap.unitDetails];
|
|
43
|
+
const formattedValue = formatNumberSafely({
|
|
44
|
+
style: 'decimal',
|
|
45
|
+
maximumFractionDigits: formatterConfigMap.decimalDetails,
|
|
46
|
+
minimumFractionDigits: formatterConfigMap.shouldRemoveTrailingZeros
|
|
47
|
+
? 0
|
|
48
|
+
: formatterConfigMap.decimalDetails,
|
|
49
|
+
useGrouping: configDetails.toSeparateThousands || false,
|
|
50
|
+
}, compactValue);
|
|
51
|
+
const absFormattedValue = `${formattedValue}${suffix}`;
|
|
52
|
+
if (absFloatValue !== floatValue) {
|
|
53
|
+
return formatNegativeValue(absFormattedValue, configDetails.negativeValueFormat);
|
|
54
|
+
}
|
|
55
|
+
return absFormattedValue;
|
|
56
|
+
}
|
|
57
|
+
case CategoryType.Percentage: {
|
|
58
|
+
const configDetails = formatConfig.percentageFormatConfig;
|
|
59
|
+
const decimalDetails = (configDetails === null || configDetails === void 0 ? void 0 : configDetails.decimals) || 0;
|
|
60
|
+
return formatNumberSafely({
|
|
61
|
+
style: 'percent',
|
|
62
|
+
maximumFractionDigits: decimalDetails,
|
|
63
|
+
minimumFractionDigits: (configDetails === null || configDetails === void 0 ? void 0 : configDetails.removeTrailingZeroes)
|
|
64
|
+
? 0
|
|
65
|
+
: decimalDetails,
|
|
66
|
+
}, floatValue);
|
|
67
|
+
}
|
|
68
|
+
case CategoryType.Currency: {
|
|
69
|
+
const configDetails = formatConfig.currencyFormatConfig || {};
|
|
70
|
+
const formatterConfigMap = mapFormatterConfig(absFloatValue, configDetails);
|
|
71
|
+
const compactValue = floatValue /
|
|
72
|
+
UNITS_TO_DIVIDING_FACTOR[formatterConfigMap.unitDetails];
|
|
73
|
+
let locale = configDetails.locale || getDefaultCurrencyCode();
|
|
74
|
+
if (locale === CurrencyFormatType.USER_LOCALE) {
|
|
75
|
+
locale = getLocaleName({
|
|
76
|
+
type: locale,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
const formatter = globalizeCurrencyFormatter(locale, {
|
|
81
|
+
style: 'symbol',
|
|
82
|
+
maximumFractionDigits: formatterConfigMap.decimalDetails,
|
|
83
|
+
minimumFractionDigits: formatterConfigMap.shouldRemoveTrailingZeros
|
|
84
|
+
? 0
|
|
85
|
+
: formatterConfigMap.decimalDetails,
|
|
86
|
+
useGrouping: configDetails.toSeparateThousands || false,
|
|
87
|
+
});
|
|
88
|
+
const formattedValue = formatter(compactValue);
|
|
89
|
+
const currencyCode = formattedValue.replace(CURRENCY_CODE_EXTRACTOR_REGEX, '');
|
|
90
|
+
const suffix = !_.isNil(floatValue)
|
|
91
|
+
? UNITS_TO_SUFFIX[formatterConfigMap.unitDetails]
|
|
92
|
+
: '';
|
|
93
|
+
if (/[0-9]$/.test(formattedValue.charAt(0))) {
|
|
94
|
+
return `${formattedValue.replace(currencyCode, '')}${suffix}${currencyCode}`;
|
|
95
|
+
}
|
|
96
|
+
return `${formattedValue}${suffix}`;
|
|
97
|
+
}
|
|
98
|
+
catch (e) {
|
|
99
|
+
logger.error('Corrupted format config passed, formatting using default config', formatConfig, e);
|
|
100
|
+
}
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
case CategoryType.Custom: {
|
|
104
|
+
const formatPattern = (_a = formatConfig.customFormatConfig) === null || _a === void 0 ? void 0 : _a.format;
|
|
105
|
+
const currencyCode = (_b = columnFormatConfig.currencyFormat) === null || _b === void 0 ? void 0 : _b.isoCode;
|
|
106
|
+
if (!_.isNil(formatPattern) &&
|
|
107
|
+
validateNumberFormat(sanitizeFormat(formatPattern))) {
|
|
108
|
+
const sanitizedPattern = sanitizeFormat(formatPattern);
|
|
109
|
+
if (!_.isNil(currencyCode)) {
|
|
110
|
+
const formattedValueWithLocaleAndPattern = formatCurrencyWithCustomPattern(floatValue, currencyCode, formatPattern);
|
|
111
|
+
return `${formattedValueWithLocaleAndPattern}`;
|
|
112
|
+
}
|
|
113
|
+
return formatNumberSafely({
|
|
114
|
+
style: 'decimal',
|
|
115
|
+
raw: sanitizedPattern,
|
|
116
|
+
}, floatValue);
|
|
117
|
+
}
|
|
118
|
+
logger.error('Invalid custom format config passed:', formatConfig);
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
default: {
|
|
122
|
+
return formatNumberSafely({
|
|
123
|
+
style: 'decimal',
|
|
124
|
+
}, floatValue);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return formatNumberSafely({
|
|
128
|
+
style: 'decimal',
|
|
129
|
+
}, floatValue);
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=number-formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-formatting.js","sourceRoot":"","sources":["../../../src/utils/number-formatting/number-formatting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-formatting.spec.d.ts","sourceRoot":"","sources":["../../../src/utils/number-formatting/number-formatting.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { create, LogLevel, logMethods } from '../../main/logger';
|
|
2
|
+
import { CurrencyFormatType, FormatType, } from '../../types/answer-column.types';
|
|
3
|
+
import { CategoryType, NegativeValueFormat, Unit, } from '../../types/number-formatting.types';
|
|
4
|
+
import { initGlobalize } from '../globalize-Initializer/globalize-utils';
|
|
5
|
+
import * as globalizeUtils from '../globalize-Initializer/globalize-utils';
|
|
6
|
+
import { formatCurrencyWithCustomPattern, getFormattedValue, } from './number-formatting';
|
|
7
|
+
jest.mock('../../main/util', () => ({
|
|
8
|
+
getQueryParam: jest.fn().mockReturnValue('true'),
|
|
9
|
+
}));
|
|
10
|
+
describe('formatCurrencyWithCustomPattern', () => {
|
|
11
|
+
beforeAll(() => {
|
|
12
|
+
initGlobalize('en-US');
|
|
13
|
+
});
|
|
14
|
+
test('formats value with a custom pattern and currency symbol', () => {
|
|
15
|
+
const value = 12345.678;
|
|
16
|
+
const currencyCode = 'USD';
|
|
17
|
+
const formatPattern = '#,##0.00';
|
|
18
|
+
const result = formatCurrencyWithCustomPattern(value, currencyCode, formatPattern);
|
|
19
|
+
expect(result).toBe('$12,345.68');
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe('getFormattedValue', () => {
|
|
23
|
+
beforeAll(() => {
|
|
24
|
+
initGlobalize('en-US');
|
|
25
|
+
});
|
|
26
|
+
const columnFormatConfig = {
|
|
27
|
+
type: FormatType.CURRENCY,
|
|
28
|
+
currencyFormat: {
|
|
29
|
+
type: CurrencyFormatType.ISO_CODE,
|
|
30
|
+
column: '',
|
|
31
|
+
isoCode: 'USD',
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
jest.clearAllMocks();
|
|
36
|
+
});
|
|
37
|
+
test('uses Number Fromatting as default configuration when formatConfigProp & columnFormatConfig are null', () => {
|
|
38
|
+
const result = getFormattedValue(12345, {}, {});
|
|
39
|
+
expect(result).toBe('12.35K');
|
|
40
|
+
});
|
|
41
|
+
test('use Custom Formatting as default configuration when only formatConfigProp is null', () => {
|
|
42
|
+
const result = getFormattedValue(12345, {}, columnFormatConfig);
|
|
43
|
+
expect(result).toBe('$12.35K');
|
|
44
|
+
});
|
|
45
|
+
test('formats special values (NaN, Infinity)', () => {
|
|
46
|
+
expect(getFormattedValue(NaN, {}, {})).toBe('NaN');
|
|
47
|
+
expect(getFormattedValue(Infinity, {}, {})).toBe('Infinity');
|
|
48
|
+
expect(getFormattedValue(-Infinity, {}, {})).toBe('-Infinity');
|
|
49
|
+
});
|
|
50
|
+
test('formats number category values with units and trailing zeroes', () => {
|
|
51
|
+
const formatConfig = {
|
|
52
|
+
category: CategoryType.Number,
|
|
53
|
+
numberFormatConfig: {
|
|
54
|
+
unit: Unit.Thousands,
|
|
55
|
+
decimals: 2,
|
|
56
|
+
toSeparateThousands: true,
|
|
57
|
+
negativeValueFormat: NegativeValueFormat.PrefixDash,
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
const result = getFormattedValue(-12345, formatConfig, {});
|
|
61
|
+
expect(result).toBe('-12.35K');
|
|
62
|
+
});
|
|
63
|
+
test('formats percentage values correctly', () => {
|
|
64
|
+
const formatConfig = {
|
|
65
|
+
category: CategoryType.Percentage,
|
|
66
|
+
percentageFormatConfig: { decimals: 2, removeTrailingZeroes: true },
|
|
67
|
+
};
|
|
68
|
+
const result = getFormattedValue(0.1234, formatConfig, {});
|
|
69
|
+
expect(result).toBe('12.34%');
|
|
70
|
+
});
|
|
71
|
+
test('formats currency values with compact units', () => {
|
|
72
|
+
const formatConfig = {
|
|
73
|
+
category: CategoryType.Currency,
|
|
74
|
+
currencyFormatConfig: {
|
|
75
|
+
locale: 'USD',
|
|
76
|
+
toSeparateThousands: true,
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
const result = getFormattedValue(12345.678, formatConfig, {});
|
|
80
|
+
expect(result).toMatch(/^\$\d+,\d+(\.\d+)?$/);
|
|
81
|
+
});
|
|
82
|
+
test('formats currency values with user Locale', () => {
|
|
83
|
+
jest.spyOn(globalizeUtils, 'getDefaultCurrencyCode').mockImplementationOnce(() => 'INR');
|
|
84
|
+
const formatConfig = {
|
|
85
|
+
category: CategoryType.Currency,
|
|
86
|
+
currencyFormatConfig: {
|
|
87
|
+
unit: Unit.Thousands,
|
|
88
|
+
decimals: 2,
|
|
89
|
+
locale: CurrencyFormatType.USER_LOCALE,
|
|
90
|
+
toSeparateThousands: true,
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
const result = getFormattedValue(12345.678, formatConfig, {});
|
|
94
|
+
expect(result).toMatch('₹12.35K');
|
|
95
|
+
});
|
|
96
|
+
test('should normalize category to CategoryType.Number when it is a number', () => {
|
|
97
|
+
const formatConfig = {
|
|
98
|
+
category: 12345,
|
|
99
|
+
numberFormatConfig: {
|
|
100
|
+
unit: Unit.Thousands,
|
|
101
|
+
decimals: 2,
|
|
102
|
+
toSeparateThousands: true,
|
|
103
|
+
negativeValueFormat: NegativeValueFormat.PrefixDash,
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
const result = getFormattedValue(1000, formatConfig, {});
|
|
107
|
+
expect(result).toBe('1.00K');
|
|
108
|
+
});
|
|
109
|
+
test('falls back to default formatting for unsupported categories', () => {
|
|
110
|
+
const formatConfig = { category: 'Unknown' };
|
|
111
|
+
const result = getFormattedValue(12345.678, formatConfig, {});
|
|
112
|
+
expect(result).toBe('12,345.678');
|
|
113
|
+
});
|
|
114
|
+
test('formats custom pattern correctly', () => {
|
|
115
|
+
const formatConfig = {
|
|
116
|
+
category: CategoryType.Custom,
|
|
117
|
+
customFormatConfig: { format: '#,##0.00' },
|
|
118
|
+
};
|
|
119
|
+
const result = getFormattedValue(12345.678, formatConfig, {});
|
|
120
|
+
expect(result).toBe('12,345.68');
|
|
121
|
+
});
|
|
122
|
+
test('formats custom pattern with valid customColumn format', () => {
|
|
123
|
+
const formatConfig = {
|
|
124
|
+
category: CategoryType.Custom,
|
|
125
|
+
customFormatConfig: { format: '#,##0.00' },
|
|
126
|
+
};
|
|
127
|
+
const result = getFormattedValue(12345.678, formatConfig, columnFormatConfig);
|
|
128
|
+
expect(result).toBe('$12,345.68');
|
|
129
|
+
});
|
|
130
|
+
test('logs error for invalid custom format patterns', () => {
|
|
131
|
+
const formatConfig = {
|
|
132
|
+
category: CategoryType.Custom,
|
|
133
|
+
customFormatConfig: { format: 'invalid-format' },
|
|
134
|
+
};
|
|
135
|
+
const error = jest.fn();
|
|
136
|
+
logMethods[LogLevel.ERROR] = error;
|
|
137
|
+
const logger = create('TestLogger');
|
|
138
|
+
logger.error = error;
|
|
139
|
+
getFormattedValue(12345.678, formatConfig, {});
|
|
140
|
+
expect(logger.error).toHaveBeenCalled();
|
|
141
|
+
jest.restoreAllMocks();
|
|
142
|
+
});
|
|
143
|
+
test('handles currency formatting failure', () => {
|
|
144
|
+
const formatConfig = {
|
|
145
|
+
category: CategoryType.Currency,
|
|
146
|
+
};
|
|
147
|
+
jest.spyOn(globalizeUtils, 'globalizeCurrencyFormatter').mockImplementationOnce(() => {
|
|
148
|
+
throw new Error('Currency format error');
|
|
149
|
+
});
|
|
150
|
+
const error = jest.fn();
|
|
151
|
+
logMethods[LogLevel.ERROR] = error;
|
|
152
|
+
const logger = create('TestLogger');
|
|
153
|
+
logger.error = error;
|
|
154
|
+
getFormattedValue(12345.678, formatConfig, {});
|
|
155
|
+
expect(logger.error).toHaveBeenCalled();
|
|
156
|
+
jest.restoreAllMocks();
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
//# sourceMappingURL=number-formatting.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-formatting.spec.js","sourceRoot":"","sources":["../../../src/utils/number-formatting/number-formatting.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thoughtspot/ts-chart-sdk",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.0.2-alpha.
|
|
4
|
+
"version": "0.0.2-alpha.25",
|
|
5
5
|
"module": "lib/index",
|
|
6
6
|
"main": "lib/index",
|
|
7
7
|
"types": "lib/index",
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@testing-library/react": "12.1.5",
|
|
36
36
|
"@testing-library/react-hooks": "^7.0.2",
|
|
37
|
+
"@types/globalize": "^1.5.5",
|
|
37
38
|
"@types/jest": "^27.0.3",
|
|
38
39
|
"@types/lodash": "4.14.175",
|
|
39
40
|
"@types/luxon": "^3.4.2",
|
|
@@ -74,6 +75,8 @@
|
|
|
74
75
|
"vite": "4.2.1"
|
|
75
76
|
},
|
|
76
77
|
"dependencies": {
|
|
78
|
+
"cldr-data": "^36.0.2",
|
|
79
|
+
"globalize": "^1.7.0",
|
|
77
80
|
"lodash": "^4.17.21",
|
|
78
81
|
"luxon": "^3.4.4",
|
|
79
82
|
"promise-postmessage": "^3.5.0",
|
package/src/index.ts
CHANGED
|
@@ -10,3 +10,5 @@ export * from './types/conditional-formatting.types';
|
|
|
10
10
|
export * from './types/number-formatting.types';
|
|
11
11
|
export * from './utils/date-formatting';
|
|
12
12
|
export * from './utils/conditional-formatting/conditional-formatting';
|
|
13
|
+
export * from './utils/number-formatting/number-formatting';
|
|
14
|
+
export * from './utils/globalize-Initializer/globalize-utils';
|
|
@@ -52,6 +52,7 @@ import {
|
|
|
52
52
|
VisualEditorDefinitionSetter,
|
|
53
53
|
VisualPropEditorDefinition,
|
|
54
54
|
} from '../types/visual-prop.types';
|
|
55
|
+
import { setLocaleBasedStringFormats } from '../utils/number-formatting/number-formatting-utils';
|
|
55
56
|
import { create } from './logger';
|
|
56
57
|
import {
|
|
57
58
|
globalThis,
|
|
@@ -1020,7 +1021,9 @@ export class CustomChartContext {
|
|
|
1020
1021
|
this.containerEl = payload.containerElSelector
|
|
1021
1022
|
? document.querySelector(payload.containerElSelector)
|
|
1022
1023
|
: null;
|
|
1023
|
-
|
|
1024
|
+
setLocaleBasedStringFormats(
|
|
1025
|
+
this.appConfig.dateFormatsConfig?.tsLocaleBasedStringsFormats,
|
|
1026
|
+
);
|
|
1024
1027
|
return this.publishChartContextPropsToHost();
|
|
1025
1028
|
};
|
|
1026
1029
|
|