@qrvey/utils 1.2.10-7 → 1.2.10-8

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.
Files changed (44) hide show
  1. package/README.md +1 -1
  2. package/bitbucket-pipelines.yml +1 -1
  3. package/dist/cjs/filters/helpers/common/getMergeValuesSettings.d.ts +7 -0
  4. package/dist/cjs/filters/helpers/common/getMergeValuesSettings.js +15 -0
  5. package/dist/cjs/filters/helpers/common/index.d.ts +1 -0
  6. package/dist/cjs/filters/helpers/common/index.js +1 -0
  7. package/dist/cjs/filters/helpers/common/mergeFilters.js +2 -86
  8. package/dist/cjs/filters/helpers/common/mergeValues.d.ts +11 -0
  9. package/dist/cjs/filters/helpers/common/mergeValues.js +92 -0
  10. package/dist/cjs/filters/interfaces/functions/IFFiltersMergeFilters.d.ts +2 -2
  11. package/dist/cjs/filters/interfaces/functions/IFFiltersMergeValues.d.ts +3 -0
  12. package/dist/cjs/filters/interfaces/functions/IFFiltersMergeValues.js +2 -0
  13. package/dist/cjs/filters/interfaces/functions/index.d.ts +1 -0
  14. package/dist/cjs/filters/interfaces/functions/index.js +1 -0
  15. package/dist/cjs/format/localization.js +16 -2
  16. package/dist/cjs/globalization/interfaces/dashboard/II18nDashboardToast.d.ts +1 -0
  17. package/dist/cjs/globalization/labels/dashboard/I18N_DASHBOARD.js +1 -0
  18. package/dist/filters/helpers/common/getMergeValuesSettings.d.ts +7 -0
  19. package/dist/filters/helpers/common/getMergeValuesSettings.js +11 -0
  20. package/dist/filters/helpers/common/index.d.ts +1 -0
  21. package/dist/filters/helpers/common/index.js +1 -0
  22. package/dist/filters/helpers/common/mergeFilters.js +1 -85
  23. package/dist/filters/helpers/common/mergeValues.d.ts +11 -0
  24. package/dist/filters/helpers/common/mergeValues.js +88 -0
  25. package/dist/filters/interfaces/functions/IFFiltersMergeFilters.d.ts +2 -2
  26. package/dist/filters/interfaces/functions/IFFiltersMergeValues.d.ts +3 -0
  27. package/dist/filters/interfaces/functions/IFFiltersMergeValues.js +1 -0
  28. package/dist/filters/interfaces/functions/index.d.ts +1 -0
  29. package/dist/filters/interfaces/functions/index.js +1 -0
  30. package/dist/format/localization.js +16 -2
  31. package/dist/globalization/interfaces/dashboard/II18nDashboardToast.d.ts +1 -0
  32. package/dist/globalization/labels/dashboard/I18N_DASHBOARD.js +1 -0
  33. package/package.json +5 -4
  34. package/publishing.js +9 -1
  35. package/src/filters/helpers/common/getMergeValuesSettings.ts +12 -0
  36. package/src/filters/helpers/common/index.ts +1 -0
  37. package/src/filters/helpers/common/mergeFilters.ts +1 -81
  38. package/src/filters/helpers/common/mergeValues.ts +87 -0
  39. package/src/filters/interfaces/functions/IFFiltersMergeFilters.ts +2 -2
  40. package/src/filters/interfaces/functions/IFFiltersMergeValues.ts +3 -0
  41. package/src/filters/interfaces/functions/index.ts +1 -0
  42. package/src/format/localization.ts +16 -2
  43. package/src/globalization/interfaces/dashboard/II18nDashboardToast.ts +1 -0
  44. package/src/globalization/labels/dashboard/I18N_DASHBOARD.ts +1 -0
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # [@qrvey/utils](https://bitbucket.org/qrvey/qrvey_utils/wiki/Home) *1.2.10-6*
1
+ # [@qrvey/utils](https://bitbucket.org/qrvey/qrvey_utils/wiki/Home) *1.2.10-8*
2
2
 
3
3
  > Helper, Utils for all Qrvey Projects
4
4
 
@@ -1,4 +1,4 @@
1
- image: node:16.14.1
1
+ image: node:16.14
2
2
 
3
3
  pipelines:
4
4
  default:
@@ -0,0 +1,7 @@
1
+ import { IFFiltersMergeValues } from "../../interfaces/functions/IFFiltersMergeValues";
2
+ /**
3
+ * Transforms the given MergeFilters settings object. Adds the missing properties if they do not exist.
4
+ * @param settings an object to the MergeFilters settings
5
+ * @returns a new MergeFilters settings object.
6
+ */
7
+ export declare function getMergeValuesSettings(settings?: IFFiltersMergeValues): IFFiltersMergeValues;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMergeValuesSettings = void 0;
4
+ /**
5
+ * Transforms the given MergeFilters settings object. Adds the missing properties if they do not exist.
6
+ * @param settings an object to the MergeFilters settings
7
+ * @returns a new MergeFilters settings object.
8
+ */
9
+ function getMergeValuesSettings(settings) {
10
+ var _a;
11
+ return {
12
+ overwriteValues: (_a = settings === null || settings === void 0 ? void 0 : settings.overwriteValues) !== null && _a !== void 0 ? _a : false,
13
+ };
14
+ }
15
+ exports.getMergeValuesSettings = getMergeValuesSettings;
@@ -22,6 +22,7 @@ export * from './isNullValidator';
22
22
  export * from './isRangeValidator';
23
23
  export * from './isRegularValidator';
24
24
  export * from './mergeFilters';
25
+ export * from './mergeValues';
25
26
  export * from './resolveDatasetConditions';
26
27
  export * from './resolveFilterConditions';
27
28
  export * from './resolveScopeConditions';
@@ -38,6 +38,7 @@ __exportStar(require("./isNullValidator"), exports);
38
38
  __exportStar(require("./isRangeValidator"), exports);
39
39
  __exportStar(require("./isRegularValidator"), exports);
40
40
  __exportStar(require("./mergeFilters"), exports);
41
+ __exportStar(require("./mergeValues"), exports);
41
42
  __exportStar(require("./resolveDatasetConditions"), exports);
42
43
  __exportStar(require("./resolveFilterConditions"), exports);
43
44
  __exportStar(require("./resolveScopeConditions"), exports);
@@ -6,10 +6,7 @@ const cloneDeep_1 = require("../../../general/object/cloneDeep");
6
6
  const FILTER_GROUPED_COLUMN_OPERATOR_1 = require("../../constants/common/FILTER_GROUPED_COLUMN_OPERATOR");
7
7
  const getFilterid_1 = require("./getFilterid");
8
8
  const getMergeFiltersSettings_1 = require("./getMergeFiltersSettings");
9
- const isInValidator_1 = require("./isInValidator");
10
- const isNullValidator_1 = require("./isNullValidator");
11
- const isRangeValidator_1 = require("./isRangeValidator");
12
- const isRegularValidator_1 = require("./isRegularValidator");
9
+ const mergeValues_1 = require("./mergeValues");
13
10
  const resolveDatasetConditions_1 = require("./resolveDatasetConditions");
14
11
  const resolveFilterConditions_1 = require("./resolveFilterConditions");
15
12
  const resolveScopeConditions_1 = require("./resolveScopeConditions");
@@ -92,7 +89,7 @@ function mergeFilterss(filters1 = [], filters2 = [], settings) {
92
89
  let newFilters = filters1.reduce((filters, filter1) => {
93
90
  const filter2Index = filters2.findIndex(filter2 => (0, resolveFilterConditions_1.resolveFilterConditions)(filter2, { column: filter1.column, dateSection: filter1.dateSection, panelid: filter1.extras.panelid, property: filter1.property, validator: filter1.validator }));
94
91
  if (filter2Index > -1) {
95
- filter1 = Object.assign(Object.assign({}, filter1), { values: mergeValues(filter1, filters2[filter2Index], settings) });
92
+ filter1 = Object.assign(Object.assign({}, filter1), { values: (0, mergeValues_1.mergeValues)(filter1, filters2[filter2Index], settings) });
96
93
  filter1 = mergeFilterProps(filter1, filters2[filter2Index], settings);
97
94
  filters2.splice(filter2Index, 1);
98
95
  }
@@ -121,84 +118,3 @@ function mergeFilterProps(filter1, filter2, settings) {
121
118
  }
122
119
  return filter1;
123
120
  }
124
- /**
125
- * Gets a new value structure array by merging two value structures
126
- * @param filter1 the target filter structure
127
- * @param filter2 the filter to be used to merge the values
128
- * @param settings configuration of the mergeFilter
129
- * @returns a new value structure array
130
- */
131
- function mergeValues(filter1, filter2, settings) {
132
- if ((0, isEmpty_1.isEmpty)(filter1) && (0, isEmpty_1.isEmpty)(filter2))
133
- return [];
134
- let newValues = [];
135
- let filter1Values = filter1.values || [];
136
- const filter2Values = filter2.values || [];
137
- if (settings.overwriteValues) {
138
- filter1Values = filter2Values;
139
- newValues = filter1Values;
140
- }
141
- else {
142
- if ((0, isInValidator_1.isInValidator)(filter1.validator)) {
143
- newValues = filter2Values.reduce((values, value2) => {
144
- var _a;
145
- const value1Index = filter1Values.findIndex(value1 => value2.anchor === value1.anchor && value2.cursor === value1.cursor && value2.includeCurrent === value1.includeCurrent && value2.isCalendarDate === value1.isCalendarDate && value2.number === value1.number && value2.unit === value1.unit);
146
- if (value1Index === -1) {
147
- values.push(value2);
148
- }
149
- else {
150
- values[value1Index] = {
151
- anchor: value2.anchor,
152
- cursor: value2.cursor,
153
- enabled: (_a = value2.enabled) !== null && _a !== void 0 ? _a : values[value1Index].enabled,
154
- includeCurrent: value2.includeCurrent,
155
- isCalendarDate: value2.isCalendarDate,
156
- number: value2.number,
157
- unit: value2.unit,
158
- };
159
- }
160
- return values;
161
- }, filter1Values);
162
- }
163
- else if ((0, isRangeValidator_1.isRangeValidator)(filter1.validator)) {
164
- newValues = filter2Values.reduce((values, value2) => {
165
- var _a;
166
- const value1Index = filter1Values.findIndex(value1 => value2.max === value1.max && value2.min === value1.min);
167
- if (value1Index === -1) {
168
- values.push(value2);
169
- }
170
- else {
171
- values[value1Index] = {
172
- enabled: (_a = value2.enabled) !== null && _a !== void 0 ? _a : values[value1Index].enabled,
173
- max: value2.max,
174
- min: value2.min,
175
- };
176
- }
177
- return values;
178
- }, filter1Values);
179
- }
180
- else if ((0, isRegularValidator_1.isRegularValidator)(filter1.validator) || (0, isNullValidator_1.isNullValidator)(filter1.validator)) {
181
- newValues = filter2Values.reduce((values, value2) => {
182
- var _a;
183
- const value1Index = filter1Values.findIndex(value1 => value2.imageUrl === value1.imageUrl && value2.value === value1.value);
184
- if (value1Index === -1) {
185
- values.push(value2);
186
- }
187
- else {
188
- values[value1Index] = {
189
- enabled: (_a = value2.enabled) !== null && _a !== void 0 ? _a : values[value1Index].enabled,
190
- imageUrl: value2.imageUrl,
191
- value: value2.value,
192
- valueid: value2.valueid,
193
- };
194
- }
195
- return values;
196
- }, filter1Values);
197
- }
198
- else {
199
- filter1Values = filter1Values.concat(filter2Values);
200
- newValues = filter1Values;
201
- }
202
- }
203
- return newValues;
204
- }
@@ -0,0 +1,11 @@
1
+ import { IFSFilter } from "../../interfaces/common/IFSFilter";
2
+ import { IFFiltersMergeValues } from "../../interfaces/functions/IFFiltersMergeValues";
3
+ import { IFValue } from "../../interfaces/IFValue";
4
+ /**
5
+ * Gets a new value structure array by merging two value structures
6
+ * @param filter1 the target filter structure
7
+ * @param filter2 the filter to be used to merge the values
8
+ * @param settings configuration of the mergeFilter
9
+ * @returns a new value structure array
10
+ */
11
+ export declare function mergeValues(filter1: IFSFilter, filter2: IFSFilter, settings?: IFFiltersMergeValues): IFValue[];
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mergeValues = void 0;
4
+ const isEmpty_1 = require("../../../general/mix/isEmpty");
5
+ const getMergeValuesSettings_1 = require("./getMergeValuesSettings");
6
+ const isInValidator_1 = require("./isInValidator");
7
+ const isNullValidator_1 = require("./isNullValidator");
8
+ const isRangeValidator_1 = require("./isRangeValidator");
9
+ const isRegularValidator_1 = require("./isRegularValidator");
10
+ /**
11
+ * Gets a new value structure array by merging two value structures
12
+ * @param filter1 the target filter structure
13
+ * @param filter2 the filter to be used to merge the values
14
+ * @param settings configuration of the mergeFilter
15
+ * @returns a new value structure array
16
+ */
17
+ function mergeValues(filter1, filter2, settings) {
18
+ if ((0, isEmpty_1.isEmpty)(filter1) && (0, isEmpty_1.isEmpty)(filter2))
19
+ return [];
20
+ settings = (0, getMergeValuesSettings_1.getMergeValuesSettings)(settings);
21
+ let newValues = [];
22
+ let filter1Values = filter1.values || [];
23
+ const filter2Values = filter2.values || [];
24
+ if (settings.overwriteValues) {
25
+ filter1Values = filter2Values;
26
+ newValues = filter1Values;
27
+ }
28
+ else {
29
+ if ((0, isInValidator_1.isInValidator)(filter1.validator)) {
30
+ newValues = filter2Values.reduce((values, value2) => {
31
+ var _a;
32
+ const value1Index = filter1Values.findIndex(value1 => value2.anchor === value1.anchor && value2.cursor === value1.cursor && value2.includeCurrent === value1.includeCurrent && value2.isCalendarDate === value1.isCalendarDate && value2.number === value1.number && value2.unit === value1.unit);
33
+ if (value1Index === -1) {
34
+ values.push(value2);
35
+ }
36
+ else {
37
+ values[value1Index] = {
38
+ anchor: value2.anchor,
39
+ cursor: value2.cursor,
40
+ enabled: (_a = value2.enabled) !== null && _a !== void 0 ? _a : values[value1Index].enabled,
41
+ includeCurrent: value2.includeCurrent,
42
+ isCalendarDate: value2.isCalendarDate,
43
+ number: value2.number,
44
+ unit: value2.unit,
45
+ };
46
+ }
47
+ return values;
48
+ }, filter1Values);
49
+ }
50
+ else if ((0, isRangeValidator_1.isRangeValidator)(filter1.validator)) {
51
+ newValues = filter2Values.reduce((values, value2) => {
52
+ var _a;
53
+ const value1Index = filter1Values.findIndex(value1 => value2.max === value1.max && value2.min === value1.min);
54
+ if (value1Index === -1) {
55
+ values.push(value2);
56
+ }
57
+ else {
58
+ values[value1Index] = {
59
+ enabled: (_a = value2.enabled) !== null && _a !== void 0 ? _a : values[value1Index].enabled,
60
+ max: value2.max,
61
+ min: value2.min,
62
+ };
63
+ }
64
+ return values;
65
+ }, filter1Values);
66
+ }
67
+ else if ((0, isRegularValidator_1.isRegularValidator)(filter1.validator) || (0, isNullValidator_1.isNullValidator)(filter1.validator)) {
68
+ newValues = filter2Values.reduce((values, value2) => {
69
+ var _a;
70
+ const value1Index = filter1Values.findIndex(value1 => value2.imageUrl === value1.imageUrl && value2.value === value1.value);
71
+ if (value1Index === -1) {
72
+ values.push(value2);
73
+ }
74
+ else {
75
+ values[value1Index] = {
76
+ enabled: (_a = value2.enabled) !== null && _a !== void 0 ? _a : values[value1Index].enabled,
77
+ imageUrl: value2.imageUrl,
78
+ value: value2.value,
79
+ valueid: value2.valueid,
80
+ };
81
+ }
82
+ return values;
83
+ }, filter1Values);
84
+ }
85
+ else {
86
+ filter1Values = filter1Values.concat(filter2Values);
87
+ newValues = filter1Values;
88
+ }
89
+ }
90
+ return newValues;
91
+ }
92
+ exports.mergeValues = mergeValues;
@@ -1,8 +1,8 @@
1
+ import { IFFiltersMergeValues } from "./IFFiltersMergeValues";
1
2
  /**
2
3
  * Structure for MergeFilters property settings
3
4
  */
4
- export interface IFFiltersMergeFilters {
5
+ export interface IFFiltersMergeFilters extends IFFiltersMergeValues {
5
6
  overwriteFilterProps?: boolean;
6
- overwriteValues?: boolean;
7
7
  setGroupedColumnOperator?: boolean;
8
8
  }
@@ -0,0 +1,3 @@
1
+ export interface IFFiltersMergeValues {
2
+ overwriteValues?: boolean;
3
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -2,4 +2,5 @@ export * from './IFFiltersGetData';
2
2
  export * from './IFFiltersGetValuesFromDataset';
3
3
  export * from './IFFiltersGetValuesFromModel';
4
4
  export * from './IFFiltersMergeFilters';
5
+ export * from './IFFiltersMergeValues';
5
6
  export * from './IFFiltersParamsToGetFilter';
@@ -18,4 +18,5 @@ __exportStar(require("./IFFiltersGetData"), exports);
18
18
  __exportStar(require("./IFFiltersGetValuesFromDataset"), exports);
19
19
  __exportStar(require("./IFFiltersGetValuesFromModel"), exports);
20
20
  __exportStar(require("./IFFiltersMergeFilters"), exports);
21
+ __exportStar(require("./IFFiltersMergeValues"), exports);
21
22
  __exportStar(require("./IFFiltersParamsToGetFilter"), exports);
@@ -30,6 +30,7 @@ const formatWithLocale = (value, outputFormat, config = {}) => {
30
30
  }
31
31
  };
32
32
  exports.formatWithLocale = formatWithLocale;
33
+ const DATE_FORMAT_CACHE = [];
33
34
  function formatLocaleDate(value, outputFormat, config) {
34
35
  const { lang = definition_1.LANG_DEFAULT, options } = config;
35
36
  const dateValue = value === null || value === void 0 ? void 0 : value.replace(/Z$/i, '');
@@ -41,18 +42,31 @@ function formatLocaleDate(value, outputFormat, config) {
41
42
  langOpts = definition_1.DATETIME_OPTIONS;
42
43
  }
43
44
  try {
44
- return new Intl.DateTimeFormat([lang, definition_1.LANG_DEFAULT], langOpts).format(dateParam);
45
+ const key = lang + JSON.stringify(langOpts);
46
+ let formatter = DATE_FORMAT_CACHE[key];
47
+ if (!formatter) {
48
+ formatter = new Intl.DateTimeFormat([lang, definition_1.LANG_DEFAULT], langOpts);
49
+ DATE_FORMAT_CACHE[key] = formatter;
50
+ }
51
+ return formatter.format(dateParam);
45
52
  }
46
53
  catch (error) {
47
54
  return (0, isEmpty_1.isEmpty)(dateParam) ? value : new Intl.DateTimeFormat(definition_1.LANG_DEFAULT, langOpts).format(dateParam);
48
55
  }
49
56
  }
57
+ const NUMBER_FORMAT_CACHE = [];
50
58
  function formatLocaleNumber(value, outputFormat, config) {
51
59
  const { lang = definition_1.LANG_DEFAULT, options } = config;
52
60
  const langOpts = options || getLocaleOptions(outputFormat);
53
61
  const valueToFormat = (outputFormat === null || outputFormat === void 0 ? void 0 : outputFormat.format) === "Percentage" /* PERCENTAGE */ ? value / 100 : value;
54
62
  try {
55
- return new Intl.NumberFormat([lang, definition_1.LANG_DEFAULT], langOpts).format(valueToFormat);
63
+ const key = lang + JSON.stringify(langOpts);
64
+ let formatter = NUMBER_FORMAT_CACHE[key];
65
+ if (!formatter) {
66
+ formatter = new Intl.NumberFormat([lang, definition_1.LANG_DEFAULT], langOpts);
67
+ NUMBER_FORMAT_CACHE[key] = formatter;
68
+ }
69
+ return formatter.format(valueToFormat);
56
70
  }
57
71
  catch (e) {
58
72
  return new Intl.NumberFormat(definition_1.LANG_DEFAULT, langOpts).format(valueToFormat);
@@ -3,4 +3,5 @@ export interface II18nDashboardToast {
3
3
  delete_record_message: string;
4
4
  add_record_message: string;
5
5
  data_views_updated_message: string;
6
+ failed_download: string;
6
7
  }
@@ -26,6 +26,7 @@ exports.I18N_DASHBOARD = {
26
26
  data_views_updated_message: 'Data views updated successfully.',
27
27
  delete_record_message: 'Record Successfully Deleted.',
28
28
  refresh_table_message: 'Record Successfully Edited.',
29
+ failed_download: 'The file(s) could not be exported at this time.',
29
30
  },
30
31
  tooltips: {
31
32
  buckets: "Buckets",
@@ -0,0 +1,7 @@
1
+ import { IFFiltersMergeValues } from "../../interfaces/functions/IFFiltersMergeValues";
2
+ /**
3
+ * Transforms the given MergeFilters settings object. Adds the missing properties if they do not exist.
4
+ * @param settings an object to the MergeFilters settings
5
+ * @returns a new MergeFilters settings object.
6
+ */
7
+ export declare function getMergeValuesSettings(settings?: IFFiltersMergeValues): IFFiltersMergeValues;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Transforms the given MergeFilters settings object. Adds the missing properties if they do not exist.
3
+ * @param settings an object to the MergeFilters settings
4
+ * @returns a new MergeFilters settings object.
5
+ */
6
+ export function getMergeValuesSettings(settings) {
7
+ var _a;
8
+ return {
9
+ overwriteValues: (_a = settings === null || settings === void 0 ? void 0 : settings.overwriteValues) !== null && _a !== void 0 ? _a : false,
10
+ };
11
+ }
@@ -22,6 +22,7 @@ export * from './isNullValidator';
22
22
  export * from './isRangeValidator';
23
23
  export * from './isRegularValidator';
24
24
  export * from './mergeFilters';
25
+ export * from './mergeValues';
25
26
  export * from './resolveDatasetConditions';
26
27
  export * from './resolveFilterConditions';
27
28
  export * from './resolveScopeConditions';
@@ -22,6 +22,7 @@ export * from './isNullValidator';
22
22
  export * from './isRangeValidator';
23
23
  export * from './isRegularValidator';
24
24
  export * from './mergeFilters';
25
+ export * from './mergeValues';
25
26
  export * from './resolveDatasetConditions';
26
27
  export * from './resolveFilterConditions';
27
28
  export * from './resolveScopeConditions';
@@ -3,10 +3,7 @@ import { cloneDeep } from "../../../general/object/cloneDeep";
3
3
  import { FILTER_GROUPED_COLUMN_OPERATOR } from "../../constants/common/FILTER_GROUPED_COLUMN_OPERATOR";
4
4
  import { getFilterid } from "./getFilterid";
5
5
  import { getMergeFiltersSettings } from "./getMergeFiltersSettings";
6
- import { isInValidator } from "./isInValidator";
7
- import { isNullValidator } from "./isNullValidator";
8
- import { isRangeValidator } from "./isRangeValidator";
9
- import { isRegularValidator } from "./isRegularValidator";
6
+ import { mergeValues } from "./mergeValues";
10
7
  import { resolveDatasetConditions } from "./resolveDatasetConditions";
11
8
  import { resolveFilterConditions } from "./resolveFilterConditions";
12
9
  import { resolveScopeConditions } from "./resolveScopeConditions";
@@ -117,84 +114,3 @@ function mergeFilterProps(filter1, filter2, settings) {
117
114
  }
118
115
  return filter1;
119
116
  }
120
- /**
121
- * Gets a new value structure array by merging two value structures
122
- * @param filter1 the target filter structure
123
- * @param filter2 the filter to be used to merge the values
124
- * @param settings configuration of the mergeFilter
125
- * @returns a new value structure array
126
- */
127
- function mergeValues(filter1, filter2, settings) {
128
- if (isEmpty(filter1) && isEmpty(filter2))
129
- return [];
130
- let newValues = [];
131
- let filter1Values = filter1.values || [];
132
- const filter2Values = filter2.values || [];
133
- if (settings.overwriteValues) {
134
- filter1Values = filter2Values;
135
- newValues = filter1Values;
136
- }
137
- else {
138
- if (isInValidator(filter1.validator)) {
139
- newValues = filter2Values.reduce((values, value2) => {
140
- var _a;
141
- const value1Index = filter1Values.findIndex(value1 => value2.anchor === value1.anchor && value2.cursor === value1.cursor && value2.includeCurrent === value1.includeCurrent && value2.isCalendarDate === value1.isCalendarDate && value2.number === value1.number && value2.unit === value1.unit);
142
- if (value1Index === -1) {
143
- values.push(value2);
144
- }
145
- else {
146
- values[value1Index] = {
147
- anchor: value2.anchor,
148
- cursor: value2.cursor,
149
- enabled: (_a = value2.enabled) !== null && _a !== void 0 ? _a : values[value1Index].enabled,
150
- includeCurrent: value2.includeCurrent,
151
- isCalendarDate: value2.isCalendarDate,
152
- number: value2.number,
153
- unit: value2.unit,
154
- };
155
- }
156
- return values;
157
- }, filter1Values);
158
- }
159
- else if (isRangeValidator(filter1.validator)) {
160
- newValues = filter2Values.reduce((values, value2) => {
161
- var _a;
162
- const value1Index = filter1Values.findIndex(value1 => value2.max === value1.max && value2.min === value1.min);
163
- if (value1Index === -1) {
164
- values.push(value2);
165
- }
166
- else {
167
- values[value1Index] = {
168
- enabled: (_a = value2.enabled) !== null && _a !== void 0 ? _a : values[value1Index].enabled,
169
- max: value2.max,
170
- min: value2.min,
171
- };
172
- }
173
- return values;
174
- }, filter1Values);
175
- }
176
- else if (isRegularValidator(filter1.validator) || isNullValidator(filter1.validator)) {
177
- newValues = filter2Values.reduce((values, value2) => {
178
- var _a;
179
- const value1Index = filter1Values.findIndex(value1 => value2.imageUrl === value1.imageUrl && value2.value === value1.value);
180
- if (value1Index === -1) {
181
- values.push(value2);
182
- }
183
- else {
184
- values[value1Index] = {
185
- enabled: (_a = value2.enabled) !== null && _a !== void 0 ? _a : values[value1Index].enabled,
186
- imageUrl: value2.imageUrl,
187
- value: value2.value,
188
- valueid: value2.valueid,
189
- };
190
- }
191
- return values;
192
- }, filter1Values);
193
- }
194
- else {
195
- filter1Values = filter1Values.concat(filter2Values);
196
- newValues = filter1Values;
197
- }
198
- }
199
- return newValues;
200
- }
@@ -0,0 +1,11 @@
1
+ import { IFSFilter } from "../../interfaces/common/IFSFilter";
2
+ import { IFFiltersMergeValues } from "../../interfaces/functions/IFFiltersMergeValues";
3
+ import { IFValue } from "../../interfaces/IFValue";
4
+ /**
5
+ * Gets a new value structure array by merging two value structures
6
+ * @param filter1 the target filter structure
7
+ * @param filter2 the filter to be used to merge the values
8
+ * @param settings configuration of the mergeFilter
9
+ * @returns a new value structure array
10
+ */
11
+ export declare function mergeValues(filter1: IFSFilter, filter2: IFSFilter, settings?: IFFiltersMergeValues): IFValue[];
@@ -0,0 +1,88 @@
1
+ import { isEmpty } from "../../../general/mix/isEmpty";
2
+ import { getMergeValuesSettings } from "./getMergeValuesSettings";
3
+ import { isInValidator } from "./isInValidator";
4
+ import { isNullValidator } from "./isNullValidator";
5
+ import { isRangeValidator } from "./isRangeValidator";
6
+ import { isRegularValidator } from "./isRegularValidator";
7
+ /**
8
+ * Gets a new value structure array by merging two value structures
9
+ * @param filter1 the target filter structure
10
+ * @param filter2 the filter to be used to merge the values
11
+ * @param settings configuration of the mergeFilter
12
+ * @returns a new value structure array
13
+ */
14
+ export function mergeValues(filter1, filter2, settings) {
15
+ if (isEmpty(filter1) && isEmpty(filter2))
16
+ return [];
17
+ settings = getMergeValuesSettings(settings);
18
+ let newValues = [];
19
+ let filter1Values = filter1.values || [];
20
+ const filter2Values = filter2.values || [];
21
+ if (settings.overwriteValues) {
22
+ filter1Values = filter2Values;
23
+ newValues = filter1Values;
24
+ }
25
+ else {
26
+ if (isInValidator(filter1.validator)) {
27
+ newValues = filter2Values.reduce((values, value2) => {
28
+ var _a;
29
+ const value1Index = filter1Values.findIndex(value1 => value2.anchor === value1.anchor && value2.cursor === value1.cursor && value2.includeCurrent === value1.includeCurrent && value2.isCalendarDate === value1.isCalendarDate && value2.number === value1.number && value2.unit === value1.unit);
30
+ if (value1Index === -1) {
31
+ values.push(value2);
32
+ }
33
+ else {
34
+ values[value1Index] = {
35
+ anchor: value2.anchor,
36
+ cursor: value2.cursor,
37
+ enabled: (_a = value2.enabled) !== null && _a !== void 0 ? _a : values[value1Index].enabled,
38
+ includeCurrent: value2.includeCurrent,
39
+ isCalendarDate: value2.isCalendarDate,
40
+ number: value2.number,
41
+ unit: value2.unit,
42
+ };
43
+ }
44
+ return values;
45
+ }, filter1Values);
46
+ }
47
+ else if (isRangeValidator(filter1.validator)) {
48
+ newValues = filter2Values.reduce((values, value2) => {
49
+ var _a;
50
+ const value1Index = filter1Values.findIndex(value1 => value2.max === value1.max && value2.min === value1.min);
51
+ if (value1Index === -1) {
52
+ values.push(value2);
53
+ }
54
+ else {
55
+ values[value1Index] = {
56
+ enabled: (_a = value2.enabled) !== null && _a !== void 0 ? _a : values[value1Index].enabled,
57
+ max: value2.max,
58
+ min: value2.min,
59
+ };
60
+ }
61
+ return values;
62
+ }, filter1Values);
63
+ }
64
+ else if (isRegularValidator(filter1.validator) || isNullValidator(filter1.validator)) {
65
+ newValues = filter2Values.reduce((values, value2) => {
66
+ var _a;
67
+ const value1Index = filter1Values.findIndex(value1 => value2.imageUrl === value1.imageUrl && value2.value === value1.value);
68
+ if (value1Index === -1) {
69
+ values.push(value2);
70
+ }
71
+ else {
72
+ values[value1Index] = {
73
+ enabled: (_a = value2.enabled) !== null && _a !== void 0 ? _a : values[value1Index].enabled,
74
+ imageUrl: value2.imageUrl,
75
+ value: value2.value,
76
+ valueid: value2.valueid,
77
+ };
78
+ }
79
+ return values;
80
+ }, filter1Values);
81
+ }
82
+ else {
83
+ filter1Values = filter1Values.concat(filter2Values);
84
+ newValues = filter1Values;
85
+ }
86
+ }
87
+ return newValues;
88
+ }
@@ -1,8 +1,8 @@
1
+ import { IFFiltersMergeValues } from "./IFFiltersMergeValues";
1
2
  /**
2
3
  * Structure for MergeFilters property settings
3
4
  */
4
- export interface IFFiltersMergeFilters {
5
+ export interface IFFiltersMergeFilters extends IFFiltersMergeValues {
5
6
  overwriteFilterProps?: boolean;
6
- overwriteValues?: boolean;
7
7
  setGroupedColumnOperator?: boolean;
8
8
  }
@@ -0,0 +1,3 @@
1
+ export interface IFFiltersMergeValues {
2
+ overwriteValues?: boolean;
3
+ }
@@ -2,4 +2,5 @@ export * from './IFFiltersGetData';
2
2
  export * from './IFFiltersGetValuesFromDataset';
3
3
  export * from './IFFiltersGetValuesFromModel';
4
4
  export * from './IFFiltersMergeFilters';
5
+ export * from './IFFiltersMergeValues';
5
6
  export * from './IFFiltersParamsToGetFilter';
@@ -2,4 +2,5 @@ export * from './IFFiltersGetData';
2
2
  export * from './IFFiltersGetValuesFromDataset';
3
3
  export * from './IFFiltersGetValuesFromModel';
4
4
  export * from './IFFiltersMergeFilters';
5
+ export * from './IFFiltersMergeValues';
5
6
  export * from './IFFiltersParamsToGetFilter';
@@ -24,6 +24,7 @@ export const formatWithLocale = (value, outputFormat, config = {}) => {
24
24
  return formatLocaleNumber(value, outputFormat, config);
25
25
  }
26
26
  };
27
+ const DATE_FORMAT_CACHE = [];
27
28
  function formatLocaleDate(value, outputFormat, config) {
28
29
  const { lang = LANG_DEFAULT, options } = config;
29
30
  const dateValue = value === null || value === void 0 ? void 0 : value.replace(/Z$/i, '');
@@ -35,18 +36,31 @@ function formatLocaleDate(value, outputFormat, config) {
35
36
  langOpts = DATETIME_OPTIONS;
36
37
  }
37
38
  try {
38
- return new Intl.DateTimeFormat([lang, LANG_DEFAULT], langOpts).format(dateParam);
39
+ const key = lang + JSON.stringify(langOpts);
40
+ let formatter = DATE_FORMAT_CACHE[key];
41
+ if (!formatter) {
42
+ formatter = new Intl.DateTimeFormat([lang, LANG_DEFAULT], langOpts);
43
+ DATE_FORMAT_CACHE[key] = formatter;
44
+ }
45
+ return formatter.format(dateParam);
39
46
  }
40
47
  catch (error) {
41
48
  return isEmpty(dateParam) ? value : new Intl.DateTimeFormat(LANG_DEFAULT, langOpts).format(dateParam);
42
49
  }
43
50
  }
51
+ const NUMBER_FORMAT_CACHE = [];
44
52
  function formatLocaleNumber(value, outputFormat, config) {
45
53
  const { lang = LANG_DEFAULT, options } = config;
46
54
  const langOpts = options || getLocaleOptions(outputFormat);
47
55
  const valueToFormat = (outputFormat === null || outputFormat === void 0 ? void 0 : outputFormat.format) === "Percentage" /* PERCENTAGE */ ? value / 100 : value;
48
56
  try {
49
- return new Intl.NumberFormat([lang, LANG_DEFAULT], langOpts).format(valueToFormat);
57
+ const key = lang + JSON.stringify(langOpts);
58
+ let formatter = NUMBER_FORMAT_CACHE[key];
59
+ if (!formatter) {
60
+ formatter = new Intl.NumberFormat([lang, LANG_DEFAULT], langOpts);
61
+ NUMBER_FORMAT_CACHE[key] = formatter;
62
+ }
63
+ return formatter.format(valueToFormat);
50
64
  }
51
65
  catch (e) {
52
66
  return new Intl.NumberFormat(LANG_DEFAULT, langOpts).format(valueToFormat);
@@ -3,4 +3,5 @@ export interface II18nDashboardToast {
3
3
  delete_record_message: string;
4
4
  add_record_message: string;
5
5
  data_views_updated_message: string;
6
+ failed_download: string;
6
7
  }
@@ -23,6 +23,7 @@ export const I18N_DASHBOARD = {
23
23
  data_views_updated_message: 'Data views updated successfully.',
24
24
  delete_record_message: 'Record Successfully Deleted.',
25
25
  refresh_table_message: 'Record Successfully Edited.',
26
+ failed_download: 'The file(s) could not be exported at this time.',
26
27
  },
27
28
  tooltips: {
28
29
  buckets: "Buckets",
package/package.json CHANGED
@@ -1,19 +1,20 @@
1
1
  {
2
2
  "name": "@qrvey/utils",
3
- "version": "1.2.10-7",
3
+ "version": "1.2.10-8",
4
4
  "description": "Helper, Utils for all Qrvey Projects",
5
5
  "homepage": "https://bitbucket.org/qrvey/qrvey_utils/wiki/Home",
6
6
  "main": "dist/index.js",
7
7
  "scripts": {
8
8
  "build": "tsc && tsc -m commonjs --outDir dist/cjs",
9
9
  "docs": "./node_modules/.bin/jsdoc -c ./jsdoc.config.json",
10
+ "doxs": "doxdox './dist/**/*.js' --ignore './dist/cjs/**/*.js' --output README.md --layout markdown --package ./package.json",
11
+ "lint": "eslint src --quiet --exit-on-fatal-error --ext .ts,.js",
12
+ "lint-dev": "eslint src --debug --ext .ts,.tsx",
10
13
  "publishing": "node prepareToPublish.js && np",
11
14
  "publishing-prerelease": "node prepareToPublish.js && np --any-branch --tag=$npm_config_tag",
12
15
  "publishing-v2": "node publishing.js --np-new-version=$npm_config_np_new_version --np-any-branch=$npm_config_np_any_branch --np-tag=$npm_config_np_tag",
13
16
  "test": "jest test",
14
- "test:watch": "jest --watch test",
15
- "lint": "eslint src --quiet --exit-on-fatal-error --ext .ts,.js",
16
- "lint-dev": "eslint src --debug --ext .ts,.tsx"
17
+ "test:watch": "jest --watch test"
17
18
  },
18
19
  "author": "Qrvey Inc",
19
20
  "license": "MIT",
package/publishing.js CHANGED
@@ -134,6 +134,7 @@ async function startGeneratingDocs(settings) {
134
134
  console.log('==>>> Starting the Docs generation');
135
135
 
136
136
  await generatingDocument(settings);
137
+ await changingVersion(settings);
137
138
  await pushingChanges(settings);
138
139
  }
139
140
 
@@ -142,6 +143,13 @@ async function generatingDocument(settings) {
142
143
  await execute(`doxdox './dist/.+\\.js' --output ${settings.docsFileName} --ignore './dist/cjs/.+\\.js' --package ${settings.packagePath}`);
143
144
  }
144
145
 
146
+ async function changingVersion(settings) {
147
+ console.log('==>>> Replacing the old version in the document');
148
+ const doc = await fs.readFileSync(settings.docsPath, 'utf8');
149
+ const replacedDoc = doc.replace(settings.currentVersion, settings.newVersion);
150
+ await fs.writeFileSync(settings.docsPath, replacedDoc, 'utf8');
151
+ }
152
+
145
153
  async function pushingChanges(settings) {
146
154
  console.log('==>>> Commiting and Pushing Docs changes...');
147
155
 
@@ -181,8 +189,8 @@ async function init() {
181
189
 
182
190
  await cleaningProject(settings);
183
191
  await buildingBundle(settings);
184
- await startPublishingVersion(settings);
185
192
  await startGeneratingDocs(settings);
193
+ await startPublishingVersion(settings);
186
194
  console.info('Finished Publishing');
187
195
  } catch (err) {
188
196
  console.error('Error: ', err);
@@ -0,0 +1,12 @@
1
+ import { IFFiltersMergeValues } from "../../interfaces/functions/IFFiltersMergeValues";
2
+
3
+ /**
4
+ * Transforms the given MergeFilters settings object. Adds the missing properties if they do not exist.
5
+ * @param settings an object to the MergeFilters settings
6
+ * @returns a new MergeFilters settings object.
7
+ */
8
+ export function getMergeValuesSettings(settings?: IFFiltersMergeValues): IFFiltersMergeValues {
9
+ return {
10
+ overwriteValues: settings?.overwriteValues ?? false,
11
+ };
12
+ }
@@ -24,6 +24,7 @@ export * from './isNullValidator';
24
24
  export * from './isRangeValidator';
25
25
  export * from './isRegularValidator';
26
26
  export * from './mergeFilters';
27
+ export * from './mergeValues';
27
28
  export * from './resolveDatasetConditions';
28
29
  export * from './resolveFilterConditions';
29
30
  export * from './resolveScopeConditions';
@@ -5,18 +5,11 @@ import { IFSData } from "../../interfaces/common/IFSData";
5
5
  import { IFSDataset } from "../../interfaces/common/IFSDataset";
6
6
  import { IFSFilter } from "../../interfaces/common/IFSFilter";
7
7
  import { IFSScope } from "../../interfaces/common/IFSScope";
8
- import { IFSValue } from "../../interfaces/common/IFSValue";
9
- import { IFSValueRange } from "../../interfaces/common/IFSValueRange";
10
- import { IFSValueRelativeDate } from "../../interfaces/common/IFSValueRelativeDate";
11
8
  import { IFFiltersMergeFilters } from "../../interfaces/functions/IFFiltersMergeFilters";
12
- import { IFValue } from "../../interfaces/IFValue";
13
9
  import { IFUData } from "../../interfaces/ui/IFUData";
14
10
  import { getFilterid } from "./getFilterid";
15
11
  import { getMergeFiltersSettings } from "./getMergeFiltersSettings";
16
- import { isInValidator } from "./isInValidator";
17
- import { isNullValidator } from "./isNullValidator";
18
- import { isRangeValidator } from "./isRangeValidator";
19
- import { isRegularValidator } from "./isRegularValidator";
12
+ import { mergeValues } from "./mergeValues";
20
13
  import { resolveDatasetConditions } from "./resolveDatasetConditions";
21
14
  import { resolveFilterConditions } from "./resolveFilterConditions";
22
15
  import { resolveScopeConditions } from "./resolveScopeConditions";
@@ -147,76 +140,3 @@ function mergeFilterProps(filter1: IFSFilter, filter2: IFSFilter, settings?: IFF
147
140
  }
148
141
  return filter1;
149
142
  }
150
-
151
- /**
152
- * Gets a new value structure array by merging two value structures
153
- * @param filter1 the target filter structure
154
- * @param filter2 the filter to be used to merge the values
155
- * @param settings configuration of the mergeFilter
156
- * @returns a new value structure array
157
- */
158
- function mergeValues(filter1: IFSFilter, filter2: IFSFilter, settings?: IFFiltersMergeFilters): IFValue[] {
159
- if (isEmpty(filter1) && isEmpty(filter2)) return [];
160
-
161
- let newValues = [];
162
- let filter1Values = filter1.values || [];
163
- const filter2Values = filter2.values || [];
164
- if (settings.overwriteValues) {
165
- filter1Values = filter2Values;
166
- newValues = filter1Values;
167
- } else {
168
- if (isInValidator(filter1.validator)) {
169
- newValues = filter2Values.reduce((values: IFSValueRelativeDate[], value2: IFSValueRelativeDate) => {
170
- const value1Index = (filter1Values as IFSValueRelativeDate[]).findIndex(value1 => value2.anchor === value1.anchor && value2.cursor === value1.cursor && value2.includeCurrent === value1.includeCurrent && value2.isCalendarDate === value1.isCalendarDate && value2.number === value1.number && value2.unit === value1.unit);
171
- if (value1Index === -1) {
172
- values.push(value2);
173
- } else {
174
- values[value1Index] = {
175
- anchor: value2.anchor,
176
- cursor: value2.cursor,
177
- enabled: value2.enabled ?? values[value1Index].enabled,
178
- includeCurrent: value2.includeCurrent,
179
- isCalendarDate: value2.isCalendarDate,
180
- number: value2.number,
181
- unit: value2.unit,
182
- };
183
- }
184
- return values;
185
- }, filter1Values as IFValue[]);
186
- } else if (isRangeValidator(filter1.validator)) {
187
- newValues = filter2Values.reduce((values: IFSValueRange[], value2: IFSValueRange) => {
188
- const value1Index = (filter1Values as IFSValueRange[]).findIndex(value1 => value2.max === value1.max && value2.min === value1.min);
189
- if (value1Index === -1) {
190
- values.push(value2);
191
- } else {
192
- values[value1Index] = {
193
- enabled: value2.enabled ?? values[value1Index].enabled,
194
- max: value2.max,
195
- min: value2.min,
196
- };
197
- }
198
- return values;
199
- }, filter1Values as IFValue[]);
200
- } else if (isRegularValidator(filter1.validator) || isNullValidator(filter1.validator)) {
201
- newValues = filter2Values.reduce((values: IFSValue[], value2: IFSValue) => {
202
- const value1Index = (filter1Values as IFSValue[]).findIndex(value1 => value2.imageUrl === value1.imageUrl && value2.value === value1.value);
203
- if (value1Index === -1) {
204
- values.push(value2);
205
- } else {
206
- values[value1Index] = {
207
- enabled: value2.enabled ?? values[value1Index].enabled,
208
- imageUrl: value2.imageUrl,
209
- value: value2.value,
210
- valueid: value2.valueid,
211
- };
212
- }
213
- return values;
214
- }, filter1Values as IFValue[]);
215
- } else {
216
- filter1Values = filter1Values.concat(filter2Values);
217
- newValues = filter1Values;
218
- }
219
- }
220
-
221
- return newValues;
222
- }
@@ -0,0 +1,87 @@
1
+ import { isEmpty } from "../../../general/mix/isEmpty";
2
+ import { IFSFilter } from "../../interfaces/common/IFSFilter";
3
+ import { IFSValue } from "../../interfaces/common/IFSValue";
4
+ import { IFSValueRange } from "../../interfaces/common/IFSValueRange";
5
+ import { IFSValueRelativeDate } from "../../interfaces/common/IFSValueRelativeDate";
6
+ import { IFFiltersMergeValues } from "../../interfaces/functions/IFFiltersMergeValues";
7
+ import { IFValue } from "../../interfaces/IFValue";
8
+ import { getMergeValuesSettings } from "./getMergeValuesSettings";
9
+ import { isInValidator } from "./isInValidator";
10
+ import { isNullValidator } from "./isNullValidator";
11
+ import { isRangeValidator } from "./isRangeValidator";
12
+ import { isRegularValidator } from "./isRegularValidator";
13
+
14
+ /**
15
+ * Gets a new value structure array by merging two value structures
16
+ * @param filter1 the target filter structure
17
+ * @param filter2 the filter to be used to merge the values
18
+ * @param settings configuration of the mergeFilter
19
+ * @returns a new value structure array
20
+ */
21
+ export function mergeValues(filter1: IFSFilter, filter2: IFSFilter, settings?: IFFiltersMergeValues): IFValue[] {
22
+ if (isEmpty(filter1) && isEmpty(filter2)) return [];
23
+
24
+ settings = getMergeValuesSettings(settings);
25
+
26
+ let newValues = [];
27
+ let filter1Values = filter1.values || [];
28
+ const filter2Values = filter2.values || [];
29
+ if (settings.overwriteValues) {
30
+ filter1Values = filter2Values;
31
+ newValues = filter1Values;
32
+ } else {
33
+ if (isInValidator(filter1.validator)) {
34
+ newValues = filter2Values.reduce((values: IFSValueRelativeDate[], value2: IFSValueRelativeDate) => {
35
+ const value1Index = (filter1Values as IFSValueRelativeDate[]).findIndex(value1 => value2.anchor === value1.anchor && value2.cursor === value1.cursor && value2.includeCurrent === value1.includeCurrent && value2.isCalendarDate === value1.isCalendarDate && value2.number === value1.number && value2.unit === value1.unit);
36
+ if (value1Index === -1) {
37
+ values.push(value2);
38
+ } else {
39
+ values[value1Index] = {
40
+ anchor: value2.anchor,
41
+ cursor: value2.cursor,
42
+ enabled: value2.enabled ?? values[value1Index].enabled,
43
+ includeCurrent: value2.includeCurrent,
44
+ isCalendarDate: value2.isCalendarDate,
45
+ number: value2.number,
46
+ unit: value2.unit,
47
+ };
48
+ }
49
+ return values;
50
+ }, filter1Values as IFValue[]);
51
+ } else if (isRangeValidator(filter1.validator)) {
52
+ newValues = filter2Values.reduce((values: IFSValueRange[], value2: IFSValueRange) => {
53
+ const value1Index = (filter1Values as IFSValueRange[]).findIndex(value1 => value2.max === value1.max && value2.min === value1.min);
54
+ if (value1Index === -1) {
55
+ values.push(value2);
56
+ } else {
57
+ values[value1Index] = {
58
+ enabled: value2.enabled ?? values[value1Index].enabled,
59
+ max: value2.max,
60
+ min: value2.min,
61
+ };
62
+ }
63
+ return values;
64
+ }, filter1Values as IFValue[]);
65
+ } else if (isRegularValidator(filter1.validator) || isNullValidator(filter1.validator)) {
66
+ newValues = filter2Values.reduce((values: IFSValue[], value2: IFSValue) => {
67
+ const value1Index = (filter1Values as IFSValue[]).findIndex(value1 => value2.imageUrl === value1.imageUrl && value2.value === value1.value);
68
+ if (value1Index === -1) {
69
+ values.push(value2);
70
+ } else {
71
+ values[value1Index] = {
72
+ enabled: value2.enabled ?? values[value1Index].enabled,
73
+ imageUrl: value2.imageUrl,
74
+ value: value2.value,
75
+ valueid: value2.valueid,
76
+ };
77
+ }
78
+ return values;
79
+ }, filter1Values as IFValue[]);
80
+ } else {
81
+ filter1Values = filter1Values.concat(filter2Values);
82
+ newValues = filter1Values;
83
+ }
84
+ }
85
+
86
+ return newValues;
87
+ }
@@ -1,9 +1,9 @@
1
+ import { IFFiltersMergeValues } from "./IFFiltersMergeValues";
1
2
 
2
3
  /**
3
4
  * Structure for MergeFilters property settings
4
5
  */
5
- export interface IFFiltersMergeFilters {
6
+ export interface IFFiltersMergeFilters extends IFFiltersMergeValues{
6
7
  overwriteFilterProps?: boolean;
7
- overwriteValues?: boolean;
8
8
  setGroupedColumnOperator?: boolean;
9
9
  }
@@ -0,0 +1,3 @@
1
+ export interface IFFiltersMergeValues {
2
+ overwriteValues?: boolean;
3
+ }
@@ -2,4 +2,5 @@ export * from './IFFiltersGetData';
2
2
  export * from './IFFiltersGetValuesFromDataset';
3
3
  export * from './IFFiltersGetValuesFromModel';
4
4
  export * from './IFFiltersMergeFilters';
5
+ export * from './IFFiltersMergeValues';
5
6
  export * from './IFFiltersParamsToGetFilter';
@@ -27,6 +27,7 @@ export const formatWithLocale = (value: any, outputFormat: IFormatOutputFormat,
27
27
  }
28
28
  };
29
29
 
30
+ const DATE_FORMAT_CACHE = [];
30
31
  function formatLocaleDate(value: any, outputFormat: IFormatOutputFormat, config: IFormatConfig) {
31
32
  const { lang = LANG_DEFAULT, options } = config;
32
33
  const dateValue = value?.replace(/Z$/i, '');
@@ -37,18 +38,31 @@ function formatLocaleDate(value: any, outputFormat: IFormatOutputFormat, config:
37
38
  if (DATETIME_COLUMN_FORMAT.includes(format)) langOpts = DATETIME_OPTIONS;
38
39
  }
39
40
  try {
40
- return new Intl.DateTimeFormat([lang, LANG_DEFAULT], langOpts).format(dateParam);
41
+ const key = lang + JSON.stringify(langOpts);
42
+ let formatter = DATE_FORMAT_CACHE[key];
43
+ if (!formatter) {
44
+ formatter = new Intl.DateTimeFormat([lang, LANG_DEFAULT], langOpts);
45
+ DATE_FORMAT_CACHE[key] = formatter;
46
+ }
47
+ return formatter.format(dateParam);
41
48
  } catch (error) {
42
49
  return isEmpty(dateParam) ? value : new Intl.DateTimeFormat(LANG_DEFAULT, langOpts).format(dateParam);
43
50
  }
44
51
  }
45
52
 
53
+ const NUMBER_FORMAT_CACHE = [];
46
54
  function formatLocaleNumber(value: any, outputFormat: IFormatOutputFormat, config: IFormatConfig,) {
47
55
  const { lang = LANG_DEFAULT, options } = config;
48
56
  const langOpts = options || getLocaleOptions(outputFormat);
49
57
  const valueToFormat = outputFormat?.format === LOCALE_FORMATS.PERCENTAGE ? value/100 : value;
50
58
  try {
51
- return new Intl.NumberFormat([lang, LANG_DEFAULT], langOpts).format(valueToFormat);
59
+ const key = lang + JSON.stringify(langOpts);
60
+ let formatter = NUMBER_FORMAT_CACHE[key];
61
+ if (!formatter) {
62
+ formatter = new Intl.NumberFormat([lang, LANG_DEFAULT], langOpts);
63
+ NUMBER_FORMAT_CACHE[key] = formatter;
64
+ }
65
+ return formatter.format(valueToFormat);
52
66
  } catch (e) {
53
67
  return new Intl.NumberFormat(LANG_DEFAULT, langOpts).format(valueToFormat);
54
68
  }
@@ -3,4 +3,5 @@ export interface II18nDashboardToast {
3
3
  delete_record_message: string;
4
4
  add_record_message: string;
5
5
  data_views_updated_message: string;
6
+ failed_download: string;
6
7
  }
@@ -25,6 +25,7 @@ export const I18N_DASHBOARD: II18nDashboard = {
25
25
  data_views_updated_message: 'Data views updated successfully.',
26
26
  delete_record_message: 'Record Successfully Deleted.',
27
27
  refresh_table_message: 'Record Successfully Edited.',
28
+ failed_download: 'The file(s) could not be exported at this time.',
28
29
  },
29
30
  tooltips: {
30
31
  buckets: "Buckets",