@datarailsshared/dr_renderer 1.2.367 → 1.2.368

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datarailsshared/dr_renderer",
3
- "version": "1.2.367",
3
+ "version": "1.2.368",
4
4
  "description": "DataRails charts and tables renderer",
5
5
  "keywords": [
6
6
  "datarails",
@@ -2,6 +2,12 @@ function backendSortingKeysAreNotEmpty(keys) {
2
2
  return !!keys && (!!keys.row_keys && !!keys.row_keys.length || !!keys.col_keys && !!keys.col_keys.length);
3
3
  }
4
4
 
5
+ function capitalize(string) {
6
+ if (typeof string !== 'string') return '';
7
+ return string.charAt(0).toUpperCase() + string.slice(1);
8
+ }
9
+
5
10
  module.exports = {
6
- backendSortingKeysAreNotEmpty: backendSortingKeysAreNotEmpty,
11
+ backendSortingKeysAreNotEmpty,
12
+ capitalize,
7
13
  }
@@ -85,6 +85,8 @@ const HIGHCHARTS_CONSTANTS = {
85
85
  CHART_TYPES: CHART_TYPES,
86
86
  MAX_SELECTED_ITEMS_IN_LABEL: 20,
87
87
  MAX_SELECTED_ITEMS_CHARECHTERS_IN_LABEL: 50,
88
+ MAX_SELECTED_ITEMS_BEFORE_COLLAPSING: 11,
89
+ MAX_SELECTED_ITEMS_BEFORE_SHOWING_COUNTER: 3,
88
90
  }
89
91
 
90
92
  const SUBOPTIONS_FONTS = [
@@ -8040,7 +8042,22 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8040
8042
  suboptions: []
8041
8043
  };
8042
8044
 
8043
- highchartsRenderer.getFilterLabel = function (fieldFilter, showTemplateName, isFormattingNumbers) {
8045
+ highchartsRenderer.DATE_FILTER_TIMEFRAME_LABELS = {
8046
+ day: 'End of period',
8047
+ week: 'Week to date',
8048
+ month: 'Month to date',
8049
+ quarter: 'Quarter to date',
8050
+ year: 'Year to date',
8051
+ 'week-full': 'Full week',
8052
+ 'month-full': 'Full month',
8053
+ 'quarter-full': 'Full quarter',
8054
+ 'year-full': 'Full year',
8055
+ year_over_year: 'Year over Year',
8056
+ year_to_go: 'Year to Go',
8057
+ }
8058
+
8059
+ // TODO: refactor, too many conditions, unreadable
8060
+ highchartsRenderer.getFilterLabel = function (fieldFilter, showTemplateName, isFormattingNumbers, isGlobalFilter = false) {
8044
8061
  var displayname;
8045
8062
  if (fieldFilter.new_name)
8046
8063
  displayname = fieldFilter.new_name.replace('RH_DIM_', '');
@@ -8052,11 +8069,13 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8052
8069
  displayname = fieldFilter.template_name + " - " + displayname;
8053
8070
  }
8054
8071
 
8055
- if (fieldFilter.template_name && fieldFilter.datetypevalues && (fieldFilter.datetypevalues.datetype == 'range' || fieldFilter.datetypevalues.datetype == 'frame'))
8072
+ if (fieldFilter.template_name && fieldFilter.datetypevalues && (fieldFilter.datetypevalues.datetype == 'range' || fieldFilter.datetypevalues.datetype == 'frame')) {
8073
+ const label = displayname + (isGlobalFilter ? highchartsRenderer.getGlobalFilterValueHighlighter(fieldFilter.datetypevalues.datetype) : ' (' + fieldFilter.datetypevalues.datetype + ')');
8056
8074
  return {
8057
- label: displayname + ' (' + fieldFilter.datetypevalues.datetype + ')',
8075
+ label,
8058
8076
  tooltip: displayname + ' (' + fieldFilter.datetypevalues.datetype + ')'
8059
8077
  };
8078
+ }
8060
8079
 
8061
8080
  if ((fieldFilter.includes && lodash.isArray(fieldFilter.includes)) || (fieldFilter.excludes && lodash.isArray(fieldFilter.excludes))) {
8062
8081
  if (fieldFilter.includes && fieldFilter.includes.length > 0 && fieldFilter.includes.length < highchartsRenderer.MAX_SELECTED_ITEMS_IN_LABEL) {
@@ -8073,7 +8092,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8073
8092
  all_vals.push(val);
8074
8093
  });
8075
8094
  } else if (isFormattingNumbers && highchartsRenderer.isFormattingAxisFeatureOn()) {
8076
- all_vals = lodash.map(lodash.cloneDeep(fieldFilter.includes), val =>
8095
+ all_vals = lodash.map(lodash.cloneDeep(fieldFilter.includes), val =>
8077
8096
  highchartsRenderer.returnRawDataValue(fieldFilter.type, val, fieldFilter.format || '', null, null, true) + ""
8078
8097
  );
8079
8098
  } else {
@@ -8083,10 +8102,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8083
8102
  if (fieldFilter.allow_nulls && all_vals.length > 1) {
8084
8103
  all_vals = all_vals.filter(x => x !== '[null]')
8085
8104
  }
8086
- all_vals = all_vals.join(',');
8105
+ all_vals = all_vals.join(', ');
8087
8106
  tooltip = ' (' + all_vals + ')';
8088
- if (all_vals.length > highchartsRenderer.MAX_SELECTED_ITEMS_CHARECHTERS_IN_LABEL) {
8089
- all_vals = 'many';
8107
+ if (all_vals.split(',').length > highchartsRenderer.MAX_SELECTED_ITEMS_BEFORE_COLLAPSING && isGlobalFilter
8108
+ || all_vals.length > highchartsRenderer.MAX_SELECTED_ITEMS_CHARECHTERS_IN_LABEL && !isGlobalFilter) {
8109
+ all_vals = 'Many';
8090
8110
  }
8091
8111
  all_vals = ' (' + all_vals + ')';
8092
8112
  } else {
@@ -8096,7 +8116,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8096
8116
 
8097
8117
  all_vals = highchartsRenderer.decodeFunc(all_vals);
8098
8118
  tooltip = highchartsRenderer.decodeFunc(tooltip);
8099
-
8119
+ if (isGlobalFilter) {
8120
+ all_vals = highchartsRenderer.getGlobalFilterCounterString(all_vals);
8121
+ displayname = displayname + ': ';
8122
+ };
8100
8123
  return {
8101
8124
  label: displayname + all_vals,
8102
8125
  tooltip: displayname + tooltip
@@ -8123,20 +8146,24 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8123
8146
  if (fieldFilter.allow_nulls && all_vals.length > 1) {
8124
8147
  all_vals = all_vals.filter(x => x !== '[null]')
8125
8148
  }
8126
- all_vals = all_vals.join(',');
8149
+ all_vals = all_vals.join(', ');
8127
8150
  tooltip = ' (Exclusions: ' + all_vals + ')';
8128
- if (all_vals.length > highchartsRenderer.MAX_SELECTED_ITEMS_CHARECHTERS_IN_LABEL) {
8129
- all_vals = 'many';
8151
+ if (all_vals.split(',').length > highchartsRenderer.MAX_SELECTED_ITEMS_BEFORE_COLLAPSING && isGlobalFilter
8152
+ || all_vals.length > highchartsRenderer.MAX_SELECTED_ITEMS_CHARECHTERS_IN_LABEL && !isGlobalFilter) {
8153
+ all_vals = 'Many';
8130
8154
  }
8131
8155
  all_vals = ' (Exclusions: ' + all_vals + ')';
8132
8156
  } else {
8133
- tooltip = ' (All)';
8134
- all_vals = ' (All)';
8157
+ tooltip = isGlobalFilter ? ': All' : ' (All)';
8158
+ all_vals = 'All';
8135
8159
  }
8136
8160
 
8137
8161
  all_vals = highchartsRenderer.decodeFunc(all_vals);
8138
8162
  tooltip = highchartsRenderer.decodeFunc(tooltip);
8139
-
8163
+ if (isGlobalFilter) {
8164
+ all_vals = highchartsRenderer.getGlobalFilterCounterString(all_vals);
8165
+ displayname = displayname + ': ';
8166
+ };
8140
8167
  return {
8141
8168
  label: displayname + all_vals,
8142
8169
  tooltip: displayname + tooltip
@@ -8144,33 +8171,42 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8144
8171
  } else {
8145
8172
  if ((fieldFilter.includes && fieldFilter.includes.length == 0))
8146
8173
  return {
8147
- label: displayname + ' (none)',
8148
- tooltip: displayname + ' (none)'
8174
+ label: displayname + (isGlobalFilter ? ': None' : ' (None)'),
8175
+ tooltip: displayname + (isGlobalFilter ? ' None' : ' (None)'),
8149
8176
  };
8150
8177
  else if ((fieldFilter.excludes && fieldFilter.excludes.length == 0))
8151
8178
  return {
8152
- label: displayname + ' (All)',
8153
- tooltip: displayname + ' (All)'
8179
+ label: displayname + (isGlobalFilter ? ': All' : ' (All)'),
8180
+ tooltip: displayname + (isGlobalFilter ? ' All' : ' (All)'),
8154
8181
  };
8155
8182
  else if ((fieldFilter.includes))
8156
8183
  return {
8157
- label: displayname + ' (many)',
8184
+ label: displayname + (isGlobalFilter ? ': ' + highchartsRenderer.getGlobalFilterValueHighlighter('Many') : ' (Many)'),
8158
8185
  tooltip: displayname + ' (' +
8159
8186
  lodash.map(fieldFilter.includes, item => highchartsRenderer.returnRawDataValue(fieldFilter.type, item, fieldFilter.format)).join(', ') +
8160
8187
  ')'
8161
8188
  };
8162
- else
8163
- return {
8164
- label: displayname + ' (Exclusions many)',
8165
- tooltip: displayname + ' (Exclusions: ' +
8166
- lodash.map(fieldFilter.excludes, item => highchartsRenderer.returnRawDataValue(fieldFilter.type, item, fieldFilter.format)).join(', ') +
8167
- ')'
8168
- };
8189
+ else {
8190
+ const label = displayname + (isGlobalFilter ? ': ' + highchartsRenderer.getGlobalFilterValueHighlighter('Exclusions: Many') : ' (Exclusions Many)');
8191
+ return {
8192
+ label,
8193
+ tooltip: displayname + ' (Exclusions: ' +
8194
+ lodash.map(fieldFilter.excludes, item => highchartsRenderer.returnRawDataValue(fieldFilter.type, item, fieldFilter.format)).join(', ') +
8195
+ ')'
8196
+ };
8197
+ }
8169
8198
  }
8170
8199
  } else {
8171
8200
  if (fieldFilter && fieldFilter.type && fieldFilter.type === 'Date' && fieldFilter.datetypevalues) {
8172
8201
  if (fieldFilter.datetypevalues.datetype === "frame") {
8173
- displayname += ` (${fieldFilter.datetypevalues.val.timeframe})`;
8202
+ const timeframeLabel = highchartsRenderer.DATE_FILTER_TIMEFRAME_LABELS[fieldFilter.datetypevalues.val.timeframe] || highchartsRenderer.getDateFilterCustomTimeframeLabel(fieldFilter.datetypevalues.val);
8203
+ if (isGlobalFilter) {
8204
+ return {
8205
+ label: displayname + ': ' + highchartsRenderer.getGlobalFilterValueHighlighter(timeframeLabel),
8206
+ tooltip: displayname + ': ' + timeframeLabel,
8207
+ }
8208
+ }
8209
+ displayname += ` (${ timeframeLabel })`;
8174
8210
  } else if (fieldFilter.datetypevalues.datetype === "range") {
8175
8211
  const dates = {
8176
8212
  from: { timestamp: fieldFilter.datetypevalues.val.fromdate, displayedValue: '' },
@@ -8189,16 +8225,29 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8189
8225
  .toLocaleDateString();
8190
8226
  }
8191
8227
  });
8228
+ if (isGlobalFilter) {
8229
+ displayname += `: ${ highchartsRenderer.getGlobalFilterValueHighlighter(dates.from.displayedValue + '-' + dates.to.displayedValue) }`;
8230
+ return {
8231
+ label: displayname,
8232
+ tooltip: dates.from.displayedValue + '-' + dates.to.displayedValue,
8233
+ }
8234
+ }
8192
8235
  displayname += ` (${ dates.from.displayedValue }-${ dates.to.displayedValue })`;
8193
8236
  } else {
8194
- displayname += ' (All)';
8237
+ displayname += isGlobalFilter ? ': All' : ' (All)';
8195
8238
  }
8196
8239
  } else if (fieldFilter &&
8197
8240
  ((fieldFilter.values && fieldFilter.values.type === 'advanced') || (fieldFilter.datetypevalues && fieldFilter.datetypevalues.type === 'advanced'))) {
8198
- displayname += ' (Advanced)';
8241
+ displayname += (isGlobalFilter ? ': ' + highchartsRenderer.getGlobalFilterValueHighlighter('Advanced') : ' (Advanced)');
8242
+ return {
8243
+ label: displayname,
8244
+ tooltip: isGlobalFilter ? 'Advanced' : displayname,
8245
+ };
8246
+
8199
8247
  } else {
8200
- displayname += ' (All)';
8248
+ displayname += isGlobalFilter ? ': All' : ' (All)';
8201
8249
  }
8250
+
8202
8251
  return {
8203
8252
  label: displayname,
8204
8253
  tooltip: displayname
@@ -8206,6 +8255,27 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8206
8255
  }
8207
8256
  };
8208
8257
 
8258
+ highchartsRenderer.getGlobalFilterValueHighlighter = function (value) {
8259
+ return `<span class="filters-values-label">${ value }</span>`;
8260
+ }
8261
+
8262
+ highchartsRenderer.getDateFilterCustomTimeframeLabel = function (value) {
8263
+ if (!value || !value.timeframe || !value.timeframe.startsWith('x')) return 'Custom';
8264
+
8265
+ const deltaDirectionLabel = value.delta_direction === 'next' ? 'Next' : 'Last';
8266
+ return `${ deltaDirectionLabel } ${ value.delta_absolute } ${ helpers.capitalize(value.timeframe.slice(1)) }${ value.delta_absolute > 1 ? 's' : '' }`
8267
+ }
8268
+
8269
+ highchartsRenderer.getGlobalFilterCounterString = function(all_vals) {
8270
+ const counterStartsAt = highchartsRenderer.MAX_SELECTED_ITEMS_BEFORE_SHOWING_COUNTER;
8271
+
8272
+ all_vals = all_vals.slice(0, -1).slice(counterStartsAt - 1, all_vals.length);
8273
+ all_vals = all_vals.split(',');
8274
+ if (all_vals.length > counterStartsAt) all_vals = all_vals.slice(0, counterStartsAt - 1) + ' + ' + (all_vals.length - (counterStartsAt - 1));
8275
+ all_vals = highchartsRenderer.getGlobalFilterValueHighlighter(all_vals);
8276
+ return all_vals;
8277
+ }
8278
+
8209
8279
  highchartsRenderer.getRelevantFilters = function (filtersList) {
8210
8280
  var dashboardsFilters = lodash.filter(filtersList, function (element) {
8211
8281
  return (element.hasOwnProperty('includes') && element.includes != null) || (element.hasOwnProperty('excludes') && element.excludes != null) ||
@@ -1,6 +1,6 @@
1
- describe('dr-renderer-helpers', () => {
2
- const drRendererHelpers = require('../src/dr-renderer-helpers');
1
+ import drRendererHelpers from '../src/dr-renderer-helpers';
3
2
 
3
+ describe('dr-renderer-helpers', () => {
4
4
  describe('backendSortingKeysAreNotEmpty', () => {
5
5
  it('should return true if keys are not empty', () => {
6
6
  const keys = {
@@ -31,4 +31,21 @@ describe('dr-renderer-helpers', () => {
31
31
  expect(drRendererHelpers.backendSortingKeysAreNotEmpty(keys)).toBe(false);
32
32
  });
33
33
  });
34
+
35
+ describe('capitalize', () => {
36
+ it('should capitalize a string', () => {
37
+ const string = 'test';
38
+ expect(drRendererHelpers.capitalize(string)).toBe('Test');
39
+ });
40
+
41
+ it('should not capitalize a string when it was not trimmed', () => {
42
+ const string = ' test';
43
+ expect(drRendererHelpers.capitalize(string)).toBe(' test');
44
+ });
45
+
46
+ it('should return an empty string if string is null', () => {
47
+ const string = null;
48
+ expect(drRendererHelpers.capitalize(string)).toBe('');
49
+ });
50
+ });
34
51
  });
@@ -3571,95 +3571,145 @@ describe('highcharts_renderer', () => {
3571
3571
  });
3572
3572
 
3573
3573
  describe('Should present includes/excludes names', () => {
3574
- let fieldFilter;
3574
+ let fieldFilter;
3575
3575
 
3576
- beforeEach(() => {
3577
- fieldFilter = {
3578
- name: 'test',
3579
- includes: null,
3580
- excludes: null,
3581
- type: 'Text',
3582
- };
3583
- });
3576
+ beforeEach(() => {
3577
+ fieldFilter = {
3578
+ name: 'test',
3579
+ includes: null,
3580
+ excludes: null,
3581
+ type: 'Text',
3582
+ };
3583
+ });
3584
3584
 
3585
- it('Should return "none" label when excludes empty', () => {
3586
- fieldFilter.includes = [];
3587
- const res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3588
- expect(res.label).toEqual('test (none)');
3589
- expect(res.tooltip).toEqual('test (none)');
3590
- });
3585
+ it('Should return "none" label when excludes empty', () => {
3586
+ fieldFilter.includes = [];
3587
+ const res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3588
+ expect(res.label).toEqual('test (None)');
3589
+ expect(res.tooltip).toEqual('test (None)');
3590
+ });
3591
3591
 
3592
- it('Should return "All" label when excludes empty', () => {
3593
- fieldFilter.excludes = [];
3594
- const res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3595
- expect(res.label).toEqual('test (All)');
3596
- expect(res.tooltip).toEqual('test (All)');
3597
- });
3592
+ it('Should return "All" label when excludes empty', () => {
3593
+ fieldFilter.excludes = [];
3594
+ const res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3595
+ expect(res.label).toEqual('test (All)');
3596
+ expect(res.tooltip).toEqual('test (All)');
3597
+ });
3598
3598
 
3599
- it('Should return "many" label when includes/excludes has more than MAX_SELECTED_ITEMS_IN_LABEL items', () => {
3600
- fieldFilter.includes = new Array(highchartsRenderer.MAX_SELECTED_ITEMS_IN_LABEL).fill('val');
3601
- let res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3602
- expect(res.label).toEqual('test (many)');
3603
- expect(res.tooltip).toEqual('test (' + fieldFilter.includes.join(', ') + ')');
3604
-
3605
- fieldFilter.excludes = fieldFilter.includes;
3606
- delete fieldFilter.includes;
3607
- res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3608
- expect(res.label).toEqual('test (Exclusions many)');
3609
- expect(res.tooltip).toEqual('test (Exclusions: ' + fieldFilter.excludes.join(', ') + ')');
3610
- });
3599
+ it('Should return "none" global filter label when excludes empty', () => {
3600
+ fieldFilter.includes = [];
3601
+ const res = highchartsRenderer.getFilterLabel(fieldFilter, false, false, true);
3602
+ expect(res.label).toEqual('test: None');
3603
+ expect(res.tooltip).toEqual('test None');
3604
+ });
3611
3605
 
3612
- it('Should return "many" in label when includes has label length more than MAX_SELECTED_ITEMS_CHARECHTERS_IN_LABEL', () => {
3613
- fieldFilter.includes = ['[null]', 'long long long value 2', 'long long long value 3'];
3614
- let res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3615
- expect(res.label).toEqual('test (many)');
3616
- expect(res.tooltip).toEqual('test (' + fieldFilter.includes.join(',') + ')');
3617
- });
3618
3606
 
3619
- it('Should return "many" in label when excludes has label length more than MAX_SELECTED_ITEMS_CHARECHTERS_IN_LABEL', () => {
3620
- fieldFilter.excludes = ['[null]', 'long long long value 2', 'long long long value 3'];
3621
- let res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3622
- expect(res.label).toEqual('test (Exclusions: many)');
3623
- expect(res.tooltip).toEqual('test (Exclusions: ' + fieldFilter.excludes.join(',') + ')');
3624
- });
3607
+ it('Should return "All" global filter label when excludes empty', () => {
3608
+ fieldFilter.excludes = [];
3609
+ const res = highchartsRenderer.getFilterLabel(fieldFilter, false, false, true);
3610
+ expect(res.label).toEqual('test: All');
3611
+ expect(res.tooltip).toEqual('test All');
3612
+ });
3625
3613
 
3626
- it('Should exclude "[null]" from includes if allow_nulls enabled', () => {
3627
- fieldFilter.allow_nulls = true;
3628
- fieldFilter.includes = ['value 1', '[null]'];
3629
- let res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3630
- expect(res.label).toEqual('test (value 1)');
3631
- expect(res.tooltip).toEqual('test (' + fieldFilter.includes[0] + ')');
3632
- });
3614
+ it('Should return "many" label when includes/excludes has more than MAX_SELECTED_ITEMS_IN_LABEL items', () => {
3615
+ fieldFilter.includes = new Array(highchartsRenderer.MAX_SELECTED_ITEMS_IN_LABEL).fill('val');
3616
+ let res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3617
+ expect(res.label).toEqual('test (Many)');
3618
+ expect(res.tooltip).toEqual('test (' + fieldFilter.includes.join(', ') + ')');
3619
+
3620
+ fieldFilter.excludes = fieldFilter.includes;
3621
+ delete fieldFilter.includes;
3622
+ res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3623
+ expect(res.label).toEqual('test (Exclusions Many)');
3624
+ expect(res.tooltip).toEqual('test (Exclusions: ' + fieldFilter.excludes.join(', ') + ')');
3625
+ });
3633
3626
 
3634
- it('Should exclude "[null]" from excludes if allow_nulls enabled', () => {
3635
- fieldFilter.allow_nulls = true;
3636
- fieldFilter.excludes = ['value 1', '[null]'];
3637
- let res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3638
- expect(res.label).toEqual('test (Exclusions: value 1)');
3639
- expect(res.tooltip).toEqual('test (Exclusions: ' + fieldFilter.excludes[0] + ')');
3640
- });
3627
+ it('Should return "many" in label when includes has label length more than MAX_SELECTED_ITEMS_CHARECHTERS_IN_LABEL', () => {
3628
+ fieldFilter.includes = ['[null]', 'long long long value 2', 'long long long value 3'];
3629
+ let res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3630
+ expect(res.label).toEqual('test (Many)');
3631
+ expect(res.tooltip).toEqual('test (' + fieldFilter.includes.join(', ') + ')');
3632
+ });
3641
3633
 
3642
- it('Should present formatted dates in includes. Get formatted value from invertValueFormatMap object if exist ', () => {
3643
- fieldFilter.includes = [1682063884, 1682060884, 1682013884];
3644
- fieldFilter.type = 'Date';
3645
- fieldFilter.valueFormatMap = {
3646
- 'April 21, 2023': 1682063884
3647
- };
3648
- let res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3649
- expect(res.label).toEqual('test (April 21, 2023,04/21/2023,04/20/2023)');
3650
- expect(res.tooltip).toEqual('test (April 21, 2023,04/21/2023,04/20/2023)');
3651
- });
3634
+ it('Should return "many" in label when excludes has label length more than MAX_SELECTED_ITEMS_CHARECHTERS_IN_LABEL', () => {
3635
+ fieldFilter.excludes = ['[null]', 'long long long value 2', 'long long long value 3'];
3636
+ let res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3637
+ expect(res.label).toEqual('test (Exclusions: Many)');
3638
+ expect(res.tooltip).toEqual('test (Exclusions: ' + fieldFilter.excludes.join(', ') + ')');
3639
+ });
3652
3640
 
3653
- it('Should present formatted dates in excludes. Get formatted value from invertValueFormatMap object if exist ', () => {
3654
- fieldFilter.excludes = [1682063884, 1682060884];
3655
- fieldFilter.type = 'Date';
3656
- fieldFilter.valueFormatMap = {
3657
- 'April 21, 2023': 1682063884
3658
- };
3659
- let res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3660
- expect(res.label).toEqual('test (Exclusions: April 21, 2023,04/21/2023)');
3661
- expect(res.tooltip).toEqual('test (Exclusions: April 21, 2023,04/21/2023)');
3662
- });
3641
+ it('Should return all selected values in global filter label when selected is acceptable to show actual values', () => {
3642
+ fieldFilter.includes = ['value', 'value', 'value']
3643
+ let res = highchartsRenderer.getFilterLabel(fieldFilter, false, false, true);
3644
+ expect(res.label).toEqual('test: <span class=\"filters-values-label\">value, value, value</span>');
3645
+ expect(res.tooltip).toEqual('test: (' + fieldFilter.includes.join(', ') + ')');
3646
+ });
3647
+
3648
+ it('Should return "many" in global filter label when selected more than acceptable to show amount of values ', () => {
3649
+ fieldFilter.includes = new Array(highchartsRenderer.MAX_SELECTED_ITEMS_BEFORE_COLLAPSING + 1).fill('val');
3650
+ let res = highchartsRenderer.getFilterLabel(fieldFilter, false, false, true);
3651
+ expect(res.label).toEqual('test: <span class=\"filters-values-label\">Many</span>');
3652
+ expect(res.tooltip).toEqual('test: (' + fieldFilter.includes.join(', ') + ')');
3653
+ });
3654
+
3655
+ it('Should return selected value + counter in global filter label when selected more than acceptable to show amount of values but acceptable to show counter', () => {
3656
+ fieldFilter.includes = new Array(highchartsRenderer.MAX_SELECTED_ITEMS_BEFORE_COLLAPSING).fill('val');
3657
+ let res = highchartsRenderer.getFilterLabel(fieldFilter, false, false, true);
3658
+ expect(res.label).toEqual('test: <span class=\"filters-values-label\">val, val + 9</span>');
3659
+ expect(res.tooltip).toEqual('test: (' + fieldFilter.includes.join(', ') + ')');
3660
+ });
3661
+
3662
+ it('Should return selected values + counter in global filter label when selected more than acceptable to show amount of values but acceptable to show counter', () => {
3663
+ fieldFilter.includes = new Array(highchartsRenderer.MAX_SELECTED_ITEMS_BEFORE_COLLAPSING).fill('val');
3664
+ let res = highchartsRenderer.getFilterLabel(fieldFilter, false, false, true);
3665
+ expect(res.label).toEqual('test: <span class=\"filters-values-label\">val, val + 9</span>');
3666
+ expect(res.tooltip).toEqual('test: (' + fieldFilter.includes.join(', ') + ')');
3667
+ });
3668
+
3669
+ it('Should return excluded value + counter in global filter label when selected more than acceptable to show amount of values but acceptable to show counter', () => {
3670
+ fieldFilter.excludes = new Array(highchartsRenderer.MAX_SELECTED_ITEMS_BEFORE_COLLAPSING).fill('val');
3671
+ let res = highchartsRenderer.getFilterLabel(fieldFilter, false, false, true);
3672
+ expect(res.label).toEqual('test: <span class=\"filters-values-label\">Exclusions: val, val + 9</span>');
3673
+ expect(res.tooltip).toEqual('test: (Exclusions: ' + fieldFilter.excludes.join(', ') + ')');
3674
+ });
3675
+
3676
+ it('Should exclude "[null]" from includes if allow_nulls enabled', () => {
3677
+ fieldFilter.allow_nulls = true;
3678
+ fieldFilter.includes = ['value 1', '[null]'];
3679
+ let res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3680
+ expect(res.label).toEqual('test (value 1)');
3681
+ expect(res.tooltip).toEqual('test (' + fieldFilter.includes[0] + ')');
3682
+ });
3683
+
3684
+ it('Should exclude "[null]" from excludes if allow_nulls enabled', () => {
3685
+ fieldFilter.allow_nulls = true;
3686
+ fieldFilter.excludes = ['value 1', '[null]'];
3687
+ let res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3688
+ expect(res.label).toEqual('test (Exclusions: value 1)');
3689
+ expect(res.tooltip).toEqual('test (Exclusions: ' + fieldFilter.excludes[0] + ')');
3690
+ });
3691
+
3692
+ it('Should present formatted dates in includes. Get formatted value from invertValueFormatMap object if exist ', () => {
3693
+ fieldFilter.includes = [1682063884, 1682060884, 1682013884];
3694
+ fieldFilter.type = 'Date';
3695
+ fieldFilter.valueFormatMap = {
3696
+ 'April 21, 2023': 1682063884
3697
+ };
3698
+ let res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3699
+ expect(res.label).toEqual('test (April 21, 2023, 04/21/2023, 04/20/2023)');
3700
+ expect(res.tooltip).toEqual('test (April 21, 2023, 04/21/2023, 04/20/2023)');
3701
+ });
3702
+
3703
+ it('Should present formatted dates in excludes. Get formatted value from invertValueFormatMap object if exist ', () => {
3704
+ fieldFilter.excludes = [1682063884, 1682060884];
3705
+ fieldFilter.type = 'Date';
3706
+ fieldFilter.valueFormatMap = {
3707
+ 'April 21, 2023': 1682063884
3708
+ };
3709
+ let res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3710
+ expect(res.label).toEqual('test (Exclusions: April 21, 2023, 04/21/2023)');
3711
+ expect(res.tooltip).toEqual('test (Exclusions: April 21, 2023, 04/21/2023)');
3712
+ });
3663
3713
  });
3664
3714
 
3665
3715
  describe('Should present date range or frame selection', () => {
@@ -3691,12 +3741,12 @@ describe('highcharts_renderer', () => {
3691
3741
  fieldFilter.datetypevalues = {
3692
3742
  datetype: 'frame',
3693
3743
  val: {
3694
- timeframe: 'xday'
3744
+ timeframe: 'day'
3695
3745
  }
3696
3746
  };
3697
3747
  const res = highchartsRenderer.getFilterLabel(fieldFilter, false);
3698
- expect(res.label).toEqual('test (xday)');
3699
- expect(res.tooltip).toEqual('test (xday)');
3748
+ expect(res.label).toEqual('test (End of period)');
3749
+ expect(res.tooltip).toEqual('test (End of period)');
3700
3750
  });
3701
3751
 
3702
3752
  it('Should return "All" label when datetype is not selected', () => {
@@ -3707,19 +3757,31 @@ describe('highcharts_renderer', () => {
3707
3757
  });
3708
3758
  });
3709
3759
 
3710
- describe('Should present advanced filter selection', () => {
3711
- it('Should return "Advanced" label when advanced type in values', () => {
3760
+ describe('Should present advanced filter selection', () => {
3761
+ it('Should return "Advanced" label when advanced type in values', () => {
3712
3762
  const res = highchartsRenderer.getFilterLabel({ name: 'test', values: { type: 'advanced'} }, false);
3713
3763
  expect(res.label).toEqual('test (Advanced)');
3714
3764
  expect(res.tooltip).toEqual('test (Advanced)');
3715
- });
3765
+ });
3716
3766
 
3717
- it('Should return "Advanced" label when advanced type in datetypevalues', () => {
3767
+ it('Should return "Advanced" label when advanced type in datetypevalues', () => {
3718
3768
  const res = highchartsRenderer.getFilterLabel({ name: 'test', datetypevalues: { type: 'advanced'} }, false);
3719
3769
  expect(res.label).toEqual('test (Advanced)');
3720
3770
  expect(res.tooltip).toEqual('test (Advanced)');
3721
- });
3722
- });
3771
+ });
3772
+
3773
+ it('Should return "Advanced" global filter label when advanced type in values', () => {
3774
+ const res = highchartsRenderer.getFilterLabel({ name: 'test', values: { type: 'advanced'} }, false, false, true);
3775
+ expect(res.label).toEqual('test: <span class=\"filters-values-label\">Advanced</span>');
3776
+ expect(res.tooltip).toEqual('Advanced');
3777
+ });
3778
+
3779
+ it('Should return "Advanced" global filter label when advanced type in datetypevalues', () => {
3780
+ const res = highchartsRenderer.getFilterLabel({ name: 'test', datetypevalues: { type: 'advanced'} }, false, false, true);
3781
+ expect(res.label).toEqual('test: <span class=\"filters-values-label\">Advanced</span>');
3782
+ expect(res.tooltip).toEqual('Advanced');
3783
+ });
3784
+ });
3723
3785
 
3724
3786
  describe('Should present All if nothing selected', () => {
3725
3787
  it('Should return "All" label when nothing selected', () => {
@@ -3730,6 +3792,48 @@ describe('highcharts_renderer', () => {
3730
3792
  });
3731
3793
  });
3732
3794
 
3795
+ describe('function getGlobalFilterValueHighlighter', () => {
3796
+ it('should return a html wrapper with value', () => {
3797
+ const value = 'test';
3798
+ const res = highchartsRenderer.getGlobalFilterValueHighlighter(value);
3799
+ expect(res).toEqual('<span class=\"filters-values-label\">test</span>');
3800
+ });
3801
+
3802
+ it('should return a html wrapper with empty value', () => {
3803
+ const value = '';
3804
+ const res = highchartsRenderer.getGlobalFilterValueHighlighter(value);
3805
+ expect(res).toEqual('<span class=\"filters-values-label\"></span>');
3806
+ });
3807
+ });
3808
+
3809
+ describe('function getDateFilterCustomTimeframeLabel', () => {
3810
+ it('should return a label for a timeframe that not in the list', () => {
3811
+ const timeframe = 'custom';
3812
+ const res = highchartsRenderer.getDateFilterCustomTimeframeLabel({ timeframe });
3813
+ expect(res).toEqual('Custom');
3814
+ });
3815
+
3816
+ it('should return a label for a empty timeframe', () => {
3817
+ const timeframe = '';
3818
+ const res = highchartsRenderer.getDateFilterCustomTimeframeLabel({ timeframe });
3819
+ expect(res).toEqual('Custom');
3820
+ });
3821
+
3822
+ it('should return a label for a xday timeframe', () => {
3823
+ const timeframe = 'xday';
3824
+ const res = highchartsRenderer.getDateFilterCustomTimeframeLabel({ timeframe, delta_absolute: 1, delta_direction: 'next' });
3825
+
3826
+ expect(res).toEqual('Next 1 Day');
3827
+ });
3828
+
3829
+ it('should return a label for a xday timeframe with delta_absolute > 1', () => {
3830
+ const timeframe = 'xday';
3831
+ const res = highchartsRenderer.getDateFilterCustomTimeframeLabel({ timeframe, delta_absolute: 2, delta_direction: 'next' });
3832
+
3833
+ expect(res).toEqual('Next 2 Days');
3834
+ });
3835
+ });
3836
+
3733
3837
  describe('function getRelevantFilters', () => {
3734
3838
  it('should return an empty array if given an empty array', () => {
3735
3839
  const filters = highchartsRenderer.getRelevantFilters([]);