@datarailsshared/dr_renderer 1.2.367 → 1.2.369

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.369",
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 = [
@@ -6546,25 +6548,29 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6546
6548
  element_type: 'input',
6547
6549
  value_name: 'low',
6548
6550
  element_label: 'Low %',
6549
- default_value: 10
6551
+ default_value: 10,
6552
+ value_type: 'number'
6550
6553
  },
6551
6554
  {
6552
6555
  element_type: 'input',
6553
6556
  value_name: 'medium',
6554
6557
  element_label: 'Medium %',
6555
- default_value: 50
6558
+ default_value: 50,
6559
+ value_type: 'number'
6556
6560
  },
6557
6561
  {
6558
6562
  element_type: 'input',
6559
6563
  value_name: 'high',
6560
6564
  element_label: 'High %',
6561
- default_value: 90
6565
+ default_value: 90,
6566
+ value_type: 'number'
6562
6567
  },
6563
6568
  {
6564
6569
  element_type: 'input',
6565
6570
  value_name: 'max',
6566
6571
  element_label: 'Max',
6567
- default_value: 1000
6572
+ default_value: 1000,
6573
+ value_type: 'number'
6568
6574
  }
6569
6575
  ]
6570
6576
  },
@@ -8040,7 +8046,22 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8040
8046
  suboptions: []
8041
8047
  };
8042
8048
 
8043
- highchartsRenderer.getFilterLabel = function (fieldFilter, showTemplateName, isFormattingNumbers) {
8049
+ highchartsRenderer.DATE_FILTER_TIMEFRAME_LABELS = {
8050
+ day: 'End of period',
8051
+ week: 'Week to date',
8052
+ month: 'Month to date',
8053
+ quarter: 'Quarter to date',
8054
+ year: 'Year to date',
8055
+ 'week-full': 'Full week',
8056
+ 'month-full': 'Full month',
8057
+ 'quarter-full': 'Full quarter',
8058
+ 'year-full': 'Full year',
8059
+ year_over_year: 'Year over Year',
8060
+ year_to_go: 'Year to Go',
8061
+ }
8062
+
8063
+ // TODO: refactor, too many conditions, unreadable
8064
+ highchartsRenderer.getFilterLabel = function (fieldFilter, showTemplateName, isFormattingNumbers, isGlobalFilter = false) {
8044
8065
  var displayname;
8045
8066
  if (fieldFilter.new_name)
8046
8067
  displayname = fieldFilter.new_name.replace('RH_DIM_', '');
@@ -8052,11 +8073,13 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8052
8073
  displayname = fieldFilter.template_name + " - " + displayname;
8053
8074
  }
8054
8075
 
8055
- if (fieldFilter.template_name && fieldFilter.datetypevalues && (fieldFilter.datetypevalues.datetype == 'range' || fieldFilter.datetypevalues.datetype == 'frame'))
8076
+ if (fieldFilter.template_name && fieldFilter.datetypevalues && (fieldFilter.datetypevalues.datetype == 'range' || fieldFilter.datetypevalues.datetype == 'frame')) {
8077
+ const label = displayname + (isGlobalFilter ? highchartsRenderer.getGlobalFilterValueHighlighter(fieldFilter.datetypevalues.datetype) : ' (' + fieldFilter.datetypevalues.datetype + ')');
8056
8078
  return {
8057
- label: displayname + ' (' + fieldFilter.datetypevalues.datetype + ')',
8079
+ label,
8058
8080
  tooltip: displayname + ' (' + fieldFilter.datetypevalues.datetype + ')'
8059
8081
  };
8082
+ }
8060
8083
 
8061
8084
  if ((fieldFilter.includes && lodash.isArray(fieldFilter.includes)) || (fieldFilter.excludes && lodash.isArray(fieldFilter.excludes))) {
8062
8085
  if (fieldFilter.includes && fieldFilter.includes.length > 0 && fieldFilter.includes.length < highchartsRenderer.MAX_SELECTED_ITEMS_IN_LABEL) {
@@ -8073,7 +8096,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8073
8096
  all_vals.push(val);
8074
8097
  });
8075
8098
  } else if (isFormattingNumbers && highchartsRenderer.isFormattingAxisFeatureOn()) {
8076
- all_vals = lodash.map(lodash.cloneDeep(fieldFilter.includes), val =>
8099
+ all_vals = lodash.map(lodash.cloneDeep(fieldFilter.includes), val =>
8077
8100
  highchartsRenderer.returnRawDataValue(fieldFilter.type, val, fieldFilter.format || '', null, null, true) + ""
8078
8101
  );
8079
8102
  } else {
@@ -8083,10 +8106,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8083
8106
  if (fieldFilter.allow_nulls && all_vals.length > 1) {
8084
8107
  all_vals = all_vals.filter(x => x !== '[null]')
8085
8108
  }
8086
- all_vals = all_vals.join(',');
8109
+ all_vals = all_vals.join(', ');
8087
8110
  tooltip = ' (' + all_vals + ')';
8088
- if (all_vals.length > highchartsRenderer.MAX_SELECTED_ITEMS_CHARECHTERS_IN_LABEL) {
8089
- all_vals = 'many';
8111
+ if (all_vals.split(',').length > highchartsRenderer.MAX_SELECTED_ITEMS_BEFORE_COLLAPSING && isGlobalFilter
8112
+ || all_vals.length > highchartsRenderer.MAX_SELECTED_ITEMS_CHARECHTERS_IN_LABEL && !isGlobalFilter) {
8113
+ all_vals = 'Many';
8090
8114
  }
8091
8115
  all_vals = ' (' + all_vals + ')';
8092
8116
  } else {
@@ -8096,7 +8120,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8096
8120
 
8097
8121
  all_vals = highchartsRenderer.decodeFunc(all_vals);
8098
8122
  tooltip = highchartsRenderer.decodeFunc(tooltip);
8099
-
8123
+ if (isGlobalFilter) {
8124
+ all_vals = highchartsRenderer.getGlobalFilterCounterString(all_vals);
8125
+ displayname = displayname + ': ';
8126
+ };
8100
8127
  return {
8101
8128
  label: displayname + all_vals,
8102
8129
  tooltip: displayname + tooltip
@@ -8123,20 +8150,24 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8123
8150
  if (fieldFilter.allow_nulls && all_vals.length > 1) {
8124
8151
  all_vals = all_vals.filter(x => x !== '[null]')
8125
8152
  }
8126
- all_vals = all_vals.join(',');
8153
+ all_vals = all_vals.join(', ');
8127
8154
  tooltip = ' (Exclusions: ' + all_vals + ')';
8128
- if (all_vals.length > highchartsRenderer.MAX_SELECTED_ITEMS_CHARECHTERS_IN_LABEL) {
8129
- all_vals = 'many';
8155
+ if (all_vals.split(',').length > highchartsRenderer.MAX_SELECTED_ITEMS_BEFORE_COLLAPSING && isGlobalFilter
8156
+ || all_vals.length > highchartsRenderer.MAX_SELECTED_ITEMS_CHARECHTERS_IN_LABEL && !isGlobalFilter) {
8157
+ all_vals = 'Many';
8130
8158
  }
8131
8159
  all_vals = ' (Exclusions: ' + all_vals + ')';
8132
8160
  } else {
8133
- tooltip = ' (All)';
8134
- all_vals = ' (All)';
8161
+ tooltip = isGlobalFilter ? ': All' : ' (All)';
8162
+ all_vals = 'All';
8135
8163
  }
8136
8164
 
8137
8165
  all_vals = highchartsRenderer.decodeFunc(all_vals);
8138
8166
  tooltip = highchartsRenderer.decodeFunc(tooltip);
8139
-
8167
+ if (isGlobalFilter) {
8168
+ all_vals = highchartsRenderer.getGlobalFilterCounterString(all_vals);
8169
+ displayname = displayname + ': ';
8170
+ };
8140
8171
  return {
8141
8172
  label: displayname + all_vals,
8142
8173
  tooltip: displayname + tooltip
@@ -8144,33 +8175,42 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8144
8175
  } else {
8145
8176
  if ((fieldFilter.includes && fieldFilter.includes.length == 0))
8146
8177
  return {
8147
- label: displayname + ' (none)',
8148
- tooltip: displayname + ' (none)'
8178
+ label: displayname + (isGlobalFilter ? ': None' : ' (None)'),
8179
+ tooltip: displayname + (isGlobalFilter ? ' None' : ' (None)'),
8149
8180
  };
8150
8181
  else if ((fieldFilter.excludes && fieldFilter.excludes.length == 0))
8151
8182
  return {
8152
- label: displayname + ' (All)',
8153
- tooltip: displayname + ' (All)'
8183
+ label: displayname + (isGlobalFilter ? ': All' : ' (All)'),
8184
+ tooltip: displayname + (isGlobalFilter ? ' All' : ' (All)'),
8154
8185
  };
8155
8186
  else if ((fieldFilter.includes))
8156
8187
  return {
8157
- label: displayname + ' (many)',
8188
+ label: displayname + (isGlobalFilter ? ': ' + highchartsRenderer.getGlobalFilterValueHighlighter('Many') : ' (Many)'),
8158
8189
  tooltip: displayname + ' (' +
8159
8190
  lodash.map(fieldFilter.includes, item => highchartsRenderer.returnRawDataValue(fieldFilter.type, item, fieldFilter.format)).join(', ') +
8160
8191
  ')'
8161
8192
  };
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
- };
8193
+ else {
8194
+ const label = displayname + (isGlobalFilter ? ': ' + highchartsRenderer.getGlobalFilterValueHighlighter('Exclusions: Many') : ' (Exclusions Many)');
8195
+ return {
8196
+ label,
8197
+ tooltip: displayname + ' (Exclusions: ' +
8198
+ lodash.map(fieldFilter.excludes, item => highchartsRenderer.returnRawDataValue(fieldFilter.type, item, fieldFilter.format)).join(', ') +
8199
+ ')'
8200
+ };
8201
+ }
8169
8202
  }
8170
8203
  } else {
8171
8204
  if (fieldFilter && fieldFilter.type && fieldFilter.type === 'Date' && fieldFilter.datetypevalues) {
8172
8205
  if (fieldFilter.datetypevalues.datetype === "frame") {
8173
- displayname += ` (${fieldFilter.datetypevalues.val.timeframe})`;
8206
+ const timeframeLabel = highchartsRenderer.DATE_FILTER_TIMEFRAME_LABELS[fieldFilter.datetypevalues.val.timeframe] || highchartsRenderer.getDateFilterCustomTimeframeLabel(fieldFilter.datetypevalues.val);
8207
+ if (isGlobalFilter) {
8208
+ return {
8209
+ label: displayname + ': ' + highchartsRenderer.getGlobalFilterValueHighlighter(timeframeLabel),
8210
+ tooltip: displayname + ': ' + timeframeLabel,
8211
+ }
8212
+ }
8213
+ displayname += ` (${ timeframeLabel })`;
8174
8214
  } else if (fieldFilter.datetypevalues.datetype === "range") {
8175
8215
  const dates = {
8176
8216
  from: { timestamp: fieldFilter.datetypevalues.val.fromdate, displayedValue: '' },
@@ -8189,16 +8229,29 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8189
8229
  .toLocaleDateString();
8190
8230
  }
8191
8231
  });
8232
+ if (isGlobalFilter) {
8233
+ displayname += `: ${ highchartsRenderer.getGlobalFilterValueHighlighter(dates.from.displayedValue + '-' + dates.to.displayedValue) }`;
8234
+ return {
8235
+ label: displayname,
8236
+ tooltip: dates.from.displayedValue + '-' + dates.to.displayedValue,
8237
+ }
8238
+ }
8192
8239
  displayname += ` (${ dates.from.displayedValue }-${ dates.to.displayedValue })`;
8193
8240
  } else {
8194
- displayname += ' (All)';
8241
+ displayname += isGlobalFilter ? ': All' : ' (All)';
8195
8242
  }
8196
8243
  } else if (fieldFilter &&
8197
8244
  ((fieldFilter.values && fieldFilter.values.type === 'advanced') || (fieldFilter.datetypevalues && fieldFilter.datetypevalues.type === 'advanced'))) {
8198
- displayname += ' (Advanced)';
8245
+ displayname += (isGlobalFilter ? ': ' + highchartsRenderer.getGlobalFilterValueHighlighter('Advanced') : ' (Advanced)');
8246
+ return {
8247
+ label: displayname,
8248
+ tooltip: isGlobalFilter ? 'Advanced' : displayname,
8249
+ };
8250
+
8199
8251
  } else {
8200
- displayname += ' (All)';
8252
+ displayname += isGlobalFilter ? ': All' : ' (All)';
8201
8253
  }
8254
+
8202
8255
  return {
8203
8256
  label: displayname,
8204
8257
  tooltip: displayname
@@ -8206,6 +8259,27 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8206
8259
  }
8207
8260
  };
8208
8261
 
8262
+ highchartsRenderer.getGlobalFilterValueHighlighter = function (value) {
8263
+ return `<span class="filters-values-label">${ value }</span>`;
8264
+ }
8265
+
8266
+ highchartsRenderer.getDateFilterCustomTimeframeLabel = function (value) {
8267
+ if (!value || !value.timeframe || !value.timeframe.startsWith('x')) return 'Custom';
8268
+
8269
+ const deltaDirectionLabel = value.delta_direction === 'next' ? 'Next' : 'Last';
8270
+ return `${ deltaDirectionLabel } ${ value.delta_absolute } ${ helpers.capitalize(value.timeframe.slice(1)) }${ value.delta_absolute > 1 ? 's' : '' }`
8271
+ }
8272
+
8273
+ highchartsRenderer.getGlobalFilterCounterString = function(all_vals) {
8274
+ const counterStartsAt = highchartsRenderer.MAX_SELECTED_ITEMS_BEFORE_SHOWING_COUNTER;
8275
+
8276
+ all_vals = all_vals.slice(0, -1).slice(counterStartsAt - 1, all_vals.length);
8277
+ all_vals = all_vals.split(',');
8278
+ if (all_vals.length > counterStartsAt) all_vals = all_vals.slice(0, counterStartsAt - 1) + ' + ' + (all_vals.length - (counterStartsAt - 1));
8279
+ all_vals = highchartsRenderer.getGlobalFilterValueHighlighter(all_vals);
8280
+ return all_vals;
8281
+ }
8282
+
8209
8283
  highchartsRenderer.getRelevantFilters = function (filtersList) {
8210
8284
  var dashboardsFilters = lodash.filter(filtersList, function (element) {
8211
8285
  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([]);