@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,101 @@
|
|
|
1
|
+
import enCaGregorian from 'cldr-data/main/en/ca-gregorian.json';
|
|
2
|
+
import enCurrencies from 'cldr-data/main/en/currencies.json';
|
|
3
|
+
import enNumbers from 'cldr-data/main/en/numbers.json';
|
|
4
|
+
import currencyData from 'cldr-data/supplemental/currencyData.json';
|
|
5
|
+
import supplemental from 'cldr-data/supplemental/likelySubtags.json';
|
|
6
|
+
import enpluralJson from 'cldr-data/supplemental/plurals.json';
|
|
7
|
+
import Globalize from 'globalize';
|
|
8
|
+
import { create } from '../../main/logger';
|
|
9
|
+
const logger = create('globalize-initializer');
|
|
10
|
+
let currentLocale;
|
|
11
|
+
let currentCurrencyFormat;
|
|
12
|
+
let supplementalCurrencyDataJson;
|
|
13
|
+
export const getCountryCode = (locale) => {
|
|
14
|
+
let parts = locale.split('_');
|
|
15
|
+
if (parts.length === 2) {
|
|
16
|
+
return parts[1].toUpperCase();
|
|
17
|
+
}
|
|
18
|
+
parts = locale.split('-');
|
|
19
|
+
if (parts.length === 2) {
|
|
20
|
+
return parts[1].toUpperCase();
|
|
21
|
+
}
|
|
22
|
+
return locale;
|
|
23
|
+
};
|
|
24
|
+
export const getDefaultCurrencyCode = () => {
|
|
25
|
+
var _a, _b;
|
|
26
|
+
if (currentCurrencyFormat) {
|
|
27
|
+
return currentCurrencyFormat;
|
|
28
|
+
}
|
|
29
|
+
const countryCode = getCountryCode(currentLocale);
|
|
30
|
+
const regionData = (_b = (_a = supplementalCurrencyDataJson === null || supplementalCurrencyDataJson === void 0 ? void 0 : supplementalCurrencyDataJson.supplemental) === null || _a === void 0 ? void 0 : _a.currencyData) === null || _b === void 0 ? void 0 : _b.region[countryCode.toUpperCase()];
|
|
31
|
+
if (!regionData || regionData.length === 0) {
|
|
32
|
+
logger.warn('No currency data found for country:', countryCode);
|
|
33
|
+
return 'GBP';
|
|
34
|
+
}
|
|
35
|
+
return Object.keys(regionData[regionData.length - 1])[0];
|
|
36
|
+
};
|
|
37
|
+
export const setGlobalizeLocale = (locale) => {
|
|
38
|
+
Globalize.locale(locale);
|
|
39
|
+
currentLocale = locale;
|
|
40
|
+
};
|
|
41
|
+
export const getGlobalizeLocale = () => currentLocale;
|
|
42
|
+
export const setCurrentCurrencyFormat = (currencyFormat) => {
|
|
43
|
+
currentCurrencyFormat = currencyFormat;
|
|
44
|
+
};
|
|
45
|
+
export const getCurrentCurrencyFormat = () => currentCurrencyFormat;
|
|
46
|
+
export const loadCurrencyData = (data) => {
|
|
47
|
+
supplementalCurrencyDataJson = data;
|
|
48
|
+
};
|
|
49
|
+
export const loadGlobalizeData = (data) => {
|
|
50
|
+
Globalize.load(data);
|
|
51
|
+
};
|
|
52
|
+
export const initGlobalize = (locale = 'en-GB') => {
|
|
53
|
+
loadGlobalizeData(enNumbers);
|
|
54
|
+
loadGlobalizeData(enCaGregorian);
|
|
55
|
+
loadGlobalizeData(supplemental);
|
|
56
|
+
loadGlobalizeData(currencyData);
|
|
57
|
+
loadGlobalizeData(enpluralJson);
|
|
58
|
+
loadGlobalizeData(enCurrencies);
|
|
59
|
+
loadCurrencyData(currencyData);
|
|
60
|
+
setGlobalizeLocale(locale);
|
|
61
|
+
};
|
|
62
|
+
export function globalizeNumberFormatter(format) {
|
|
63
|
+
return Globalize.numberFormatter(format);
|
|
64
|
+
}
|
|
65
|
+
export function globalizeCurrencyFormatter(currencyCode, format) {
|
|
66
|
+
return Globalize.currencyFormatter(currencyCode, format);
|
|
67
|
+
}
|
|
68
|
+
export function formatNumberSafely(format, num) {
|
|
69
|
+
try {
|
|
70
|
+
const formatter = globalizeNumberFormatter(format);
|
|
71
|
+
const formattedNumber = formatter(num);
|
|
72
|
+
return formattedNumber;
|
|
73
|
+
}
|
|
74
|
+
catch (e) {
|
|
75
|
+
logger.error('Error formatting pattern: ', format, num, e);
|
|
76
|
+
if (Math.abs(num) < 1e-7) {
|
|
77
|
+
return '0';
|
|
78
|
+
}
|
|
79
|
+
return String(num);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export const sanitizeFormat = (format) => {
|
|
83
|
+
let sanitizedFormat = format.replace(/#\./, '0.');
|
|
84
|
+
if (!sanitizedFormat.includes('.')) {
|
|
85
|
+
sanitizedFormat = sanitizedFormat.replace(/#(%?)$/, '0$1');
|
|
86
|
+
}
|
|
87
|
+
return sanitizedFormat;
|
|
88
|
+
};
|
|
89
|
+
export const validateNumberFormat = (format) => {
|
|
90
|
+
try {
|
|
91
|
+
Globalize.numberFormatter({
|
|
92
|
+
...{ raw: sanitizeFormat(format) },
|
|
93
|
+
})(123);
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
logger.error('Invalid number format:', format, e);
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
return true;
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=globalize-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globalize-utils.js","sourceRoot":"","sources":["../../../src/utils/globalize-Initializer/globalize-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globalize-utils.spec.d.ts","sourceRoot":"","sources":["../../../src/utils/globalize-Initializer/globalize-utils.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import Globalize from 'globalize';
|
|
2
|
+
import { formatNumberSafely, getCountryCode, getCurrentCurrencyFormat, getDefaultCurrencyCode, getGlobalizeLocale, globalizeCurrencyFormatter, globalizeNumberFormatter, initGlobalize, loadCurrencyData, loadGlobalizeData, sanitizeFormat, setCurrentCurrencyFormat, setGlobalizeLocale, validateNumberFormat, } from './globalize-utils';
|
|
3
|
+
describe('Initialize Globalize', () => {
|
|
4
|
+
beforeEach(() => {
|
|
5
|
+
jest.clearAllMocks();
|
|
6
|
+
initGlobalize('en-US');
|
|
7
|
+
});
|
|
8
|
+
describe('getCountryCode', () => {
|
|
9
|
+
it('should extract country code from locale with underscore', () => {
|
|
10
|
+
expect(getCountryCode('en_US')).toBe('US');
|
|
11
|
+
});
|
|
12
|
+
it('should extract country code from locale with hyphen', () => {
|
|
13
|
+
expect(getCountryCode('en-US')).toBe('US');
|
|
14
|
+
});
|
|
15
|
+
it('should return the input locale if no delimiter is found', () => {
|
|
16
|
+
expect(getCountryCode('en')).toBe('en');
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
describe('getDefaultCurrencyCode', () => {
|
|
20
|
+
it('should return the current currency format if set', () => {
|
|
21
|
+
setCurrentCurrencyFormat('EUR');
|
|
22
|
+
expect(getDefaultCurrencyCode()).toBe('EUR');
|
|
23
|
+
});
|
|
24
|
+
it('should return GBP if no currency data is found', () => {
|
|
25
|
+
setCurrentCurrencyFormat(null);
|
|
26
|
+
loadCurrencyData({});
|
|
27
|
+
expect(getDefaultCurrencyCode()).toBe('GBP');
|
|
28
|
+
});
|
|
29
|
+
it('should retrieve the default currency code from supplemental data', () => {
|
|
30
|
+
loadCurrencyData({
|
|
31
|
+
supplemental: {
|
|
32
|
+
currencyData: {
|
|
33
|
+
region: {
|
|
34
|
+
US: [{ USD: {} }],
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
setGlobalizeLocale('en-US');
|
|
40
|
+
expect(getDefaultCurrencyCode()).toBe('USD');
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('setGlobalizeLocale', () => {
|
|
44
|
+
it('should set the Globalize locale', () => {
|
|
45
|
+
setGlobalizeLocale('fr-FR');
|
|
46
|
+
expect(getGlobalizeLocale()).toBe('fr-FR');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe('getGlobalizeLocale', () => {
|
|
50
|
+
it('should return the current locale', () => {
|
|
51
|
+
expect(getGlobalizeLocale()).toBe('en-US');
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe('setCurrentCurrencyFormat', () => {
|
|
55
|
+
it('should set the current currency format', () => {
|
|
56
|
+
setCurrentCurrencyFormat('JPY');
|
|
57
|
+
expect(getCurrentCurrencyFormat()).toBe('JPY');
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
describe('loadCurrencyData', () => {
|
|
61
|
+
it('should load supplemental currency data', () => {
|
|
62
|
+
const data = {
|
|
63
|
+
supplemental: {
|
|
64
|
+
currencyData: {
|
|
65
|
+
region: {
|
|
66
|
+
US: [{ USD: {} }],
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
setCurrentCurrencyFormat(null);
|
|
72
|
+
loadCurrencyData(data);
|
|
73
|
+
expect(getDefaultCurrencyCode()).toBe('USD');
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
describe('loadGlobalizeData', () => {
|
|
77
|
+
it('should load CLDR data', () => {
|
|
78
|
+
jest.spyOn(Globalize, 'load').mockImplementationOnce((data) => {
|
|
79
|
+
return data;
|
|
80
|
+
});
|
|
81
|
+
const data = { key: 'value' };
|
|
82
|
+
loadGlobalizeData(data);
|
|
83
|
+
expect(Globalize.load).toHaveBeenCalledWith(data);
|
|
84
|
+
jest.clearAllMocks();
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('globalizeNumberFormatter', () => {
|
|
88
|
+
it('should create a number formatter', () => {
|
|
89
|
+
const formatter = globalizeNumberFormatter({
|
|
90
|
+
minimumFractionDigits: 2,
|
|
91
|
+
});
|
|
92
|
+
expect(typeof formatter).toBe('function');
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe('globalizeCurrencyFormatter', () => {
|
|
96
|
+
it('should create a currency formatter', () => {
|
|
97
|
+
const formatter = globalizeCurrencyFormatter('USD', {
|
|
98
|
+
style: 'symbol',
|
|
99
|
+
});
|
|
100
|
+
expect(typeof formatter).toBe('function');
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
describe('formatNumberSafely', () => {
|
|
104
|
+
it('should format numbers safely', () => {
|
|
105
|
+
const formattedNumber = formatNumberSafely({ maximumFractionDigits: 2, minimumFractionDigits: 2 }, 123.456);
|
|
106
|
+
expect(formattedNumber).toBe('123.46');
|
|
107
|
+
});
|
|
108
|
+
it('should return 0 for very small numbers', () => {
|
|
109
|
+
jest.spyOn(Globalize, 'numberFormatter').mockImplementationOnce(() => {
|
|
110
|
+
throw new Error('Test Error');
|
|
111
|
+
});
|
|
112
|
+
const formattedNumber = formatNumberSafely({}, 1e-8);
|
|
113
|
+
expect(formattedNumber).toBe('0');
|
|
114
|
+
jest.clearAllMocks();
|
|
115
|
+
});
|
|
116
|
+
it('should return the string representation for errors', () => {
|
|
117
|
+
jest.spyOn(Globalize, 'numberFormatter').mockImplementationOnce(() => {
|
|
118
|
+
throw new Error('Test Error');
|
|
119
|
+
});
|
|
120
|
+
const formattedNumber = formatNumberSafely({}, 123);
|
|
121
|
+
expect(formattedNumber).toBe('123');
|
|
122
|
+
jest.clearAllMocks();
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
describe('sanitizeFormat', () => {
|
|
126
|
+
it('should add zero before decimal point', () => {
|
|
127
|
+
expect(sanitizeFormat('#.##')).toBe('0.##');
|
|
128
|
+
});
|
|
129
|
+
it('should add zero at the end if no decimal point', () => {
|
|
130
|
+
expect(sanitizeFormat('#%')).toBe('0%');
|
|
131
|
+
});
|
|
132
|
+
it('should return the same format if no changes are needed', () => {
|
|
133
|
+
expect(sanitizeFormat('0.##')).toBe('0.##');
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe('validateNumberFormat', () => {
|
|
137
|
+
it('should return true for valid number formats', () => {
|
|
138
|
+
expect(validateNumberFormat('#.##')).toBe(true);
|
|
139
|
+
});
|
|
140
|
+
it('should return false for invalid number formats', () => {
|
|
141
|
+
jest.spyOn(Globalize, 'numberFormatter').mockImplementation(() => {
|
|
142
|
+
throw new Error('Test Error');
|
|
143
|
+
});
|
|
144
|
+
expect(validateNumberFormat('#.#')).toBe(false);
|
|
145
|
+
jest.clearAllMocks();
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
//# sourceMappingURL=globalize-utils.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globalize-utils.spec.js","sourceRoot":"","sources":["../../../src/utils/globalize-Initializer/globalize-utils.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ColumnFormat, CurrencyFormat } from '../../types/answer-column.types';
|
|
2
|
+
import { Maybe } from '../../types/common.types';
|
|
3
|
+
import { CurrencyFormatConfig, FormatConfig, NegativeValueFormat, NumberFormatConfig, Unit } from '../../types/number-formatting.types';
|
|
4
|
+
interface FormatterConfig {
|
|
5
|
+
unitDetails: Unit;
|
|
6
|
+
decimalDetails: number;
|
|
7
|
+
shouldRemoveTrailingZeros: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const PROTO_TO_NEGATIVE_VALUE_FORMAT: {
|
|
10
|
+
1: NegativeValueFormat;
|
|
11
|
+
2: NegativeValueFormat;
|
|
12
|
+
3: NegativeValueFormat;
|
|
13
|
+
};
|
|
14
|
+
export declare const UNITS_TO_DIVIDING_FACTOR: Record<Unit, number>;
|
|
15
|
+
export declare const PROTO_TO_UNITS: {
|
|
16
|
+
1: Unit;
|
|
17
|
+
2: Unit;
|
|
18
|
+
3: Unit;
|
|
19
|
+
4: Unit;
|
|
20
|
+
5: Unit;
|
|
21
|
+
6: Unit;
|
|
22
|
+
};
|
|
23
|
+
export declare const setLocaleBasedStringFormats: (tsLocaleBasedStringsFormats?: Record<string, string>) => void;
|
|
24
|
+
export declare const getLocaleBasedStringFormats: () => Record<string, string>;
|
|
25
|
+
export declare const UNITS_TO_SUFFIX: Record<Unit, string>;
|
|
26
|
+
export declare const formatNegativeValue: (formattedValue: string, negativeFormat?: Maybe<NegativeValueFormat> | number) => string;
|
|
27
|
+
export declare const getAutoUnit: (value: number) => Unit;
|
|
28
|
+
export declare const getLocaleName: (currencyFormat: CurrencyFormat) => string;
|
|
29
|
+
export declare const defaultFormatConfig: (columnFormatConfig?: ColumnFormat) => FormatConfig;
|
|
30
|
+
export declare const mapFormatterConfig: (absFloatValue: number, configDetails: NumberFormatConfig | CurrencyFormatConfig) => FormatterConfig;
|
|
31
|
+
export declare function formatSpecialDataValue(value: any): any;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=number-formatting-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-formatting-utils.d.ts","sourceRoot":"","sources":["../../../src/utils/number-formatting/number-formatting-utils.ts"],"names":[],"mappings":"AASA,OAAO,EACH,YAAY,EACZ,cAAc,EAEjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAEH,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,IAAI,EACP,MAAM,qCAAqC,CAAC;AAG7C,UAAU,eAAe;IACrB,WAAW,EAAE,IAAI,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,yBAAyB,EAAE,OAAO,CAAC;CACtC;AAED,eAAO,MAAM,8BAA8B;;;;CAI1C,CAAC;AAKF,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAOzD,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;CAO1B,CAAC;AAUF,eAAO,MAAM,2BAA2B,iCACN,OAAO,MAAM,EAAE,MAAM,CAAC,SAKvD,CAAC;AAEF,eAAO,MAAM,2BAA2B,8BAAgB,CAAC;AAEzD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAOhD,CAAC;AAWF,eAAO,MAAM,mBAAmB,mBACZ,MAAM,mBACL,MAAM,mBAAmB,CAAC,GAAG,MAAM,KACrD,MAkBF,CAAC;AAQF,eAAO,MAAM,WAAW,UAAW,MAAM,KAAG,IAc3C,CAAC;AAQF,eAAO,MAAM,aAAa,mBAAoB,cAAc,KAAG,MAO9D,CAAC;AAQF,eAAO,MAAM,mBAAmB,wBACP,YAAY,KAClC,YA8CF,CAAC;AASF,eAAO,MAAM,kBAAkB,kBACZ,MAAM,iBACN,kBAAkB,GAAG,oBAAoB,KACzD,eAuBF,CAAC;AAQF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,GAAG,OAoChD"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import _ from 'lodash';
|
|
2
|
+
import { CurrencyFormatType, } from '../../types/answer-column.types';
|
|
3
|
+
import { CategoryType, NegativeValueFormat, Unit, } from '../../types/number-formatting.types';
|
|
4
|
+
import { getDefaultCurrencyCode } from '../globalize-Initializer/globalize-utils';
|
|
5
|
+
export const PROTO_TO_NEGATIVE_VALUE_FORMAT = {
|
|
6
|
+
1: NegativeValueFormat.PrefixDash,
|
|
7
|
+
2: NegativeValueFormat.SuffixDash,
|
|
8
|
+
3: NegativeValueFormat.BracesNodash,
|
|
9
|
+
};
|
|
10
|
+
export const UNITS_TO_DIVIDING_FACTOR = {
|
|
11
|
+
[Unit.None]: 1,
|
|
12
|
+
[Unit.Thousands]: 1000,
|
|
13
|
+
[Unit.Million]: 1000 * 1000,
|
|
14
|
+
[Unit.Billion]: 1000 * 1000 * 1000,
|
|
15
|
+
[Unit.Trillion]: 1000 * 1000 * 1000 * 1000,
|
|
16
|
+
[Unit.Auto]: 1,
|
|
17
|
+
};
|
|
18
|
+
export const PROTO_TO_UNITS = {
|
|
19
|
+
1: Unit.None,
|
|
20
|
+
2: Unit.Thousands,
|
|
21
|
+
3: Unit.Million,
|
|
22
|
+
4: Unit.Billion,
|
|
23
|
+
5: Unit.Trillion,
|
|
24
|
+
6: Unit.Auto,
|
|
25
|
+
};
|
|
26
|
+
let strings = {
|
|
27
|
+
NULL_VALUE_PLACEHOLDER_LABEL: '{Null}',
|
|
28
|
+
EMPTY_VALUE_PLACEHOLDER_LABEL: '{Empty}',
|
|
29
|
+
};
|
|
30
|
+
export const setLocaleBasedStringFormats = (tsLocaleBasedStringsFormats) => {
|
|
31
|
+
if (tsLocaleBasedStringsFormats) {
|
|
32
|
+
strings = tsLocaleBasedStringsFormats;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
export const getLocaleBasedStringFormats = () => strings;
|
|
36
|
+
export const UNITS_TO_SUFFIX = {
|
|
37
|
+
[Unit.None]: '',
|
|
38
|
+
[Unit.Thousands]: 'K',
|
|
39
|
+
[Unit.Million]: 'M',
|
|
40
|
+
[Unit.Billion]: 'B',
|
|
41
|
+
[Unit.Trillion]: 'T',
|
|
42
|
+
[Unit.Auto]: '',
|
|
43
|
+
};
|
|
44
|
+
const DEFAULT_DECIMAL_PRECISION = 2;
|
|
45
|
+
export const formatNegativeValue = (formattedValue, negativeFormat) => {
|
|
46
|
+
if (typeof negativeFormat === 'number') {
|
|
47
|
+
negativeFormat =
|
|
48
|
+
PROTO_TO_NEGATIVE_VALUE_FORMAT[negativeFormat];
|
|
49
|
+
}
|
|
50
|
+
switch (negativeFormat) {
|
|
51
|
+
case NegativeValueFormat.PrefixDash:
|
|
52
|
+
return `-${formattedValue}`;
|
|
53
|
+
case NegativeValueFormat.SuffixDash:
|
|
54
|
+
return `${formattedValue}-`;
|
|
55
|
+
case NegativeValueFormat.BracesNodash:
|
|
56
|
+
return `(${formattedValue})`;
|
|
57
|
+
default:
|
|
58
|
+
return `-${formattedValue}`;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
export const getAutoUnit = (value) => {
|
|
62
|
+
if (value >= UNITS_TO_DIVIDING_FACTOR[Unit.Trillion]) {
|
|
63
|
+
return Unit.Trillion;
|
|
64
|
+
}
|
|
65
|
+
if (value >= UNITS_TO_DIVIDING_FACTOR[Unit.Billion]) {
|
|
66
|
+
return Unit.Billion;
|
|
67
|
+
}
|
|
68
|
+
if (value >= UNITS_TO_DIVIDING_FACTOR[Unit.Million]) {
|
|
69
|
+
return Unit.Million;
|
|
70
|
+
}
|
|
71
|
+
if (value >= UNITS_TO_DIVIDING_FACTOR[Unit.Thousands]) {
|
|
72
|
+
return Unit.Thousands;
|
|
73
|
+
}
|
|
74
|
+
return Unit.None;
|
|
75
|
+
};
|
|
76
|
+
export const getLocaleName = (currencyFormat) => {
|
|
77
|
+
if (currencyFormat.type === CurrencyFormatType.ISO_CODE) {
|
|
78
|
+
return currencyFormat.isoCode;
|
|
79
|
+
}
|
|
80
|
+
const locale = getDefaultCurrencyCode();
|
|
81
|
+
return locale;
|
|
82
|
+
};
|
|
83
|
+
export const defaultFormatConfig = (columnFormatConfig) => {
|
|
84
|
+
if (columnFormatConfig === null || columnFormatConfig === void 0 ? void 0 : columnFormatConfig.pattern) {
|
|
85
|
+
return {
|
|
86
|
+
__typename: 'FormatConfig',
|
|
87
|
+
category: CategoryType.Custom,
|
|
88
|
+
isCategoryEditable: true,
|
|
89
|
+
customFormatConfig: {
|
|
90
|
+
__typename: 'CustomFormatConfig',
|
|
91
|
+
format: columnFormatConfig === null || columnFormatConfig === void 0 ? void 0 : columnFormatConfig.pattern,
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
if (columnFormatConfig === null || columnFormatConfig === void 0 ? void 0 : columnFormatConfig.currencyFormat) {
|
|
96
|
+
const locale = getLocaleName(columnFormatConfig === null || columnFormatConfig === void 0 ? void 0 : columnFormatConfig.currencyFormat);
|
|
97
|
+
const currencyFormatConfig = {
|
|
98
|
+
__typename: 'CurrencyFormatConfig',
|
|
99
|
+
decimals: 0,
|
|
100
|
+
locale,
|
|
101
|
+
removeTrailingZeroes: false,
|
|
102
|
+
toSeparateThousands: true,
|
|
103
|
+
unit: Unit.Auto,
|
|
104
|
+
};
|
|
105
|
+
const formatConfig = {
|
|
106
|
+
__typename: 'FormatConfig',
|
|
107
|
+
category: CategoryType.Currency,
|
|
108
|
+
isCategoryEditable: true,
|
|
109
|
+
currencyFormatConfig,
|
|
110
|
+
};
|
|
111
|
+
return formatConfig;
|
|
112
|
+
}
|
|
113
|
+
const numberFormatConfig = {
|
|
114
|
+
__typename: 'NumberFormatConfig',
|
|
115
|
+
decimals: 0,
|
|
116
|
+
negativeValueFormat: NegativeValueFormat.PrefixDash,
|
|
117
|
+
removeTrailingZeroes: false,
|
|
118
|
+
toSeparateThousands: true,
|
|
119
|
+
unit: Unit.Auto,
|
|
120
|
+
};
|
|
121
|
+
const formatConfig = {
|
|
122
|
+
__typename: 'FormatConfig',
|
|
123
|
+
category: CategoryType.Number,
|
|
124
|
+
isCategoryEditable: true,
|
|
125
|
+
numberFormatConfig,
|
|
126
|
+
percentageFormatConfig: null,
|
|
127
|
+
};
|
|
128
|
+
return formatConfig;
|
|
129
|
+
};
|
|
130
|
+
export const mapFormatterConfig = (absFloatValue, configDetails) => {
|
|
131
|
+
if (typeof configDetails.unit === 'number') {
|
|
132
|
+
configDetails.unit =
|
|
133
|
+
PROTO_TO_UNITS[configDetails.unit];
|
|
134
|
+
}
|
|
135
|
+
const isAutoFormatted = configDetails.unit === Unit.Auto;
|
|
136
|
+
let unitDetails = configDetails.unit || Unit.Auto;
|
|
137
|
+
let decimalDetails = configDetails.decimals || 0;
|
|
138
|
+
if (isAutoFormatted) {
|
|
139
|
+
unitDetails = getAutoUnit(absFloatValue);
|
|
140
|
+
if (unitDetails !== Unit.None) {
|
|
141
|
+
decimalDetails = DEFAULT_DECIMAL_PRECISION;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const shouldRemoveTrailingZeros = configDetails.removeTrailingZeroes || isAutoFormatted;
|
|
145
|
+
return {
|
|
146
|
+
unitDetails,
|
|
147
|
+
decimalDetails,
|
|
148
|
+
shouldRemoveTrailingZeros,
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
export function formatSpecialDataValue(value) {
|
|
152
|
+
if (value === strings.NULL_VALUE_PLACEHOLDER_LABEL ||
|
|
153
|
+
value === strings.EMPTY_VALUE_PLACEHOLDER_LABEL) {
|
|
154
|
+
return value;
|
|
155
|
+
}
|
|
156
|
+
if (value === null || value === undefined) {
|
|
157
|
+
return strings.NULL_VALUE_PLACEHOLDER_LABEL;
|
|
158
|
+
}
|
|
159
|
+
if (value === Infinity || value === -Infinity || _.isNaN(value)) {
|
|
160
|
+
return value.toString();
|
|
161
|
+
}
|
|
162
|
+
if (value === '') {
|
|
163
|
+
return strings.EMPTY_VALUE_PLACEHOLDER_LABEL;
|
|
164
|
+
}
|
|
165
|
+
if (value instanceof Array) {
|
|
166
|
+
if (_.isEmpty(value) || _.isNil(value[0])) {
|
|
167
|
+
return strings.NULL_VALUE_PLACEHOLDER_LABEL;
|
|
168
|
+
}
|
|
169
|
+
switch (value[0]) {
|
|
170
|
+
case 'NaN':
|
|
171
|
+
return 'NaN';
|
|
172
|
+
case 'Infinity':
|
|
173
|
+
return 'Infinity';
|
|
174
|
+
default:
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=number-formatting-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-formatting-utils.js","sourceRoot":"","sources":["../../../src/utils/number-formatting/number-formatting-utils.ts"],"names":[],"mappings":"AAQA,OAAO,CAAC,MAAM,QAAQ,CAAC;AACvB,OAAO,EAGH,kBAAkB,GACrB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACH,YAAY,EAGZ,mBAAmB,EAEnB,IAAI,GACP,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAQlF,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC1C,CAAC,EAAE,mBAAmB,CAAC,UAAU;IACjC,CAAC,EAAE,mBAAmB,CAAC,UAAU;IACjC,CAAC,EAAE,mBAAmB,CAAC,YAAY;CACtC,CAAC;AAKF,MAAM,CAAC,MAAM,wBAAwB,GAAyB;IAC1D,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACd,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI;IACtB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI;IAC3B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;IAClC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;IAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;CACjB,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,CAAC,EAAE,IAAI,CAAC,IAAI;IACZ,CAAC,EAAE,IAAI,CAAC,SAAS;IACjB,CAAC,EAAE,IAAI,CAAC,OAAO;IACf,CAAC,EAAE,IAAI,CAAC,OAAO;IACf,CAAC,EAAE,IAAI,CAAC,QAAQ;IAChB,CAAC,EAAE,IAAI,CAAC,IAAI;CACf,CAAC;AAKF,IAAI,OAAO,GAA2B;IAClC,4BAA4B,EAAE,QAAQ;IACtC,6BAA6B,EAAE,SAAS;CAC3C,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACvC,2BAAoD,EACtD,EAAE;IACA,IAAI,2BAA2B,EAAE;QAC7B,OAAO,GAAG,2BAA2B,CAAC;KACzC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;AAEzD,MAAM,CAAC,MAAM,eAAe,GAAyB;IACjD,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;IACf,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG;IACrB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG;IACnB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG;IACnB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG;IACpB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;CAClB,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,CAAC;AASpC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAC/B,cAAsB,EACtB,cAAoD,EAC9C,EAAE;IACR,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;QAEpC,cAAc;YACV,8BAA8B,CAC1B,cAA6D,CAChE,CAAC;KACT;IACD,QAAQ,cAAc,EAAE;QACpB,KAAK,mBAAmB,CAAC,UAAU;YAC/B,OAAO,IAAI,cAAc,EAAE,CAAC;QAChC,KAAK,mBAAmB,CAAC,UAAU;YAC/B,OAAO,GAAG,cAAc,GAAG,CAAC;QAChC,KAAK,mBAAmB,CAAC,YAAY;YACjC,OAAO,IAAI,cAAc,GAAG,CAAC;QACjC;YACI,OAAO,IAAI,cAAc,EAAE,CAAC;KACnC;AACL,CAAC,CAAC;AAQF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAQ,EAAE;IAC/C,IAAI,KAAK,IAAI,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAClD,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;IACD,IAAI,KAAK,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QACjD,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IACD,IAAI,KAAK,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QACjD,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IACD,IAAI,KAAK,IAAI,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QACnD,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;AACrB,CAAC,CAAC;AAQF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,cAA8B,EAAU,EAAE;IACpE,IAAI,cAAc,CAAC,IAAI,KAAK,kBAAkB,CAAC,QAAQ,EAAE;QACrD,OAAO,cAAc,CAAC,OAAO,CAAC;KACjC;IAED,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;IACxC,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAQF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAC/B,kBAAiC,EACrB,EAAE;IACd,IAAI,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,OAAO,EAAE;QAC7B,OAAO;YACH,UAAU,EAAE,cAAc;YAC1B,QAAQ,EAAE,YAAY,CAAC,MAAM;YAC7B,kBAAkB,EAAE,IAAI;YACxB,kBAAkB,EAAE;gBAChB,UAAU,EAAE,oBAAoB;gBAChC,MAAM,EAAE,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,OAAO;aACtC;SACJ,CAAC;KACL;IACD,IAAI,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,cAAc,EAAE;QACpC,MAAM,MAAM,GAAG,aAAa,CAAC,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,cAAc,CAAC,CAAC;QACjE,MAAM,oBAAoB,GAAyB;YAC/C,UAAU,EAAE,sBAAsB;YAClC,QAAQ,EAAE,CAAC;YACX,MAAM;YACN,oBAAoB,EAAE,KAAK;YAC3B,mBAAmB,EAAE,IAAI;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;SAClB,CAAC;QACF,MAAM,YAAY,GAAiB;YAC/B,UAAU,EAAE,cAAc;YAC1B,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,kBAAkB,EAAE,IAAI;YACxB,oBAAoB;SACvB,CAAC;QACF,OAAO,YAAY,CAAC;KACvB;IACD,MAAM,kBAAkB,GAAuB;QAC3C,UAAU,EAAE,oBAAoB;QAChC,QAAQ,EAAE,CAAC;QACX,mBAAmB,EAAE,mBAAmB,CAAC,UAAU;QACnD,oBAAoB,EAAE,KAAK;QAC3B,mBAAmB,EAAE,IAAI;QACzB,IAAI,EAAE,IAAI,CAAC,IAAI;KAClB,CAAC;IACF,MAAM,YAAY,GAAiB;QAC/B,UAAU,EAAE,cAAc;QAC1B,QAAQ,EAAE,YAAY,CAAC,MAAM;QAC7B,kBAAkB,EAAE,IAAI;QACxB,kBAAkB;QAClB,sBAAsB,EAAE,IAAI;KAC/B,CAAC;IACF,OAAO,YAAY,CAAC;AACxB,CAAC,CAAC;AASF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAC9B,aAAqB,EACrB,aAAwD,EACzC,EAAE;IACjB,IAAI,OAAO,aAAa,CAAC,IAAI,KAAK,QAAQ,EAAE;QAExC,aAAa,CAAC,IAAI;YACd,cAAc,CAAC,aAAa,CAAC,IAAmC,CAAC,CAAC;KACzE;IACD,MAAM,eAAe,GAAG,aAAa,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;IACzD,IAAI,WAAW,GAAG,aAAa,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,cAAc,GAAG,aAAa,CAAC,QAAQ,IAAI,CAAC,CAAC;IAEjD,IAAI,eAAe,EAAE;QACjB,WAAW,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;QACzC,IAAI,WAAW,KAAK,IAAI,CAAC,IAAI,EAAE;YAC3B,cAAc,GAAG,yBAAyB,CAAC;SAC9C;KACJ;IACD,MAAM,yBAAyB,GAC3B,aAAa,CAAC,oBAAoB,IAAI,eAAe,CAAC;IAC1D,OAAO;QACH,WAAW;QACX,cAAc;QACd,yBAAyB;KAC5B,CAAC;AACN,CAAC,CAAC;AAQF,MAAM,UAAU,sBAAsB,CAAC,KAAU;IAC7C,IACI,KAAK,KAAK,OAAO,CAAC,4BAA4B;QAC9C,KAAK,KAAK,OAAO,CAAC,6BAA6B,EACjD;QACE,OAAO,KAAK,CAAC;KAChB;IAED,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;QACvC,OAAO,OAAO,CAAC,4BAA4B,CAAC;KAC/C;IAED,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QAC7D,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;KAC3B;IAGD,IAAI,KAAK,KAAK,EAAE,EAAE;QACd,OAAO,OAAO,CAAC,6BAA6B,CAAC;KAChD;IACD,IAAI,KAAK,YAAY,KAAK,EAAE;QACxB,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YACvC,OAAO,OAAO,CAAC,4BAA4B,CAAC;SAC/C;QAED,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE;YACd,KAAK,KAAK;gBACN,OAAO,KAAK,CAAC;YACjB,KAAK,UAAU;gBACX,OAAO,UAAU,CAAC;YACtB;gBACI,OAAO,IAAI,CAAC;SACnB;KACJ;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-formatting-utils.spec.d.ts","sourceRoot":"","sources":["../../../src/utils/number-formatting/number-formatting-utils.spec.ts"],"names":[],"mappings":""}
|