@datarailsshared/dr_renderer 1.2.363 → 1.2.365

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.
@@ -1,11 +1,3 @@
1
- const helpers = require('./dr-renderer-helpers');
2
-
3
- const mobileBrowserRegex = new RegExp([
4
- '(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)',
5
- '|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/',
6
- '|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino',
7
- ].join(''), 'i');
8
-
9
1
  const SERIES_CLASSNAMES = {
10
2
  WATERFALL_BREAKDOWN: 'waterfallBreakdown',
11
3
  WATERFALL_WALKTHROUGH: 'waterfallWalkthrough',
@@ -14,157 +6,27 @@ const SERIES_CLASSNAMES = {
14
6
  };
15
7
 
16
8
  const EMPTY_ROW_N_KEYS = [[]];
17
-
18
9
  const NULL_VALUE = '[null]';
19
10
 
20
- const CHART_COLORS = {
21
- BACKGROUND: '#fff',
22
- TEXT: '#151a41',
23
- LABEL: '#cfd7dd',
24
- LABEL_SECOND: '#85889c',
25
- DRILL_UP_FILL: '#eef3f6',
26
- DRILL_BUTTON_COLOR_FILL: 'white',
27
- DRILL_BUTTON_COLOR: '#333333',
28
- DRILL_BUTTON_COLOR_HOVER: '#6D6E6F',
29
- PLOT_BORDER: '#606063',
30
- MINOR_GRID_LINE: '#505053',
31
- TICK_COLOR: '#666',
32
- LABELS_OLD: '#D7D7D8',
33
- DATA_LABELS: '#B0B0B3',
34
- CONTRAST_TEXT: '#F0F0F3',
35
- LEGEND_BACKGROUND: 'rgba(0, 0, 0, 0.5)',
36
- MASK: 'rgba(255,255,255,0.3)',
37
- };
38
-
39
- const CHART_TYPES = {
40
- LINE_CHART: 'line-chart',
41
- LINE_CHART_SMOOTH: 'line-chart-smooth',
42
- COLUMN_CHART: 'column-chart',
43
- COLUMN_CHART_STACKED: 'column-chart-stacked',
44
- COMBO_CHART: 'combo-chart',
45
- COMBO_COLUMN_CHART: 'combo-column-chart',
46
- COMBO_STACKED_CHART: 'combo-stacked-chart',
47
- BAR_CHART: 'bar-chart',
48
- BAR_CHART_STACKED: 'bar-chart-stacked',
49
- SCATTER_CHART: 'scatter-chart',
50
- AREA_CHART: 'area-chart',
51
- AREA_CHART_SMOOTH: 'area-chart-smooth',
52
- TABLE_ONLY: 'table_only',
53
- POLYGON_CHART: 'polygon-chart',
54
- PIE_CHART: 'pie-chart',
55
- PIE_CHART_DRILLDOWN: 'pie-chart-drilldown',
56
- GAUGE_SOLID_CHART: 'gauge-solid-chart',
57
- GAUGE_CHART: 'gauge-chart',
58
- KPI_WIDGET: 'kpi-widget',
59
- TEXT_WIDGET: 'text-widget',
60
- WATERFALL_BREAKDOWN: 'waterfall-chart-breakdown',
61
- WATERFALL_WALKTHROUGH: 'waterfall-chart-walkthrough',
62
- PUBLISHED_ITEM: 'published_item',
63
- RICH_TEXT: 'rich_text',
64
- EXCEL_VIEWER: 'excel_viewer',
65
- }
66
-
67
- const HIGHCHARTS_CONSTANTS = {
68
- delimer: ' , ',
69
- DRILL_BUTTON_FONT_SIZE: '14px',
70
- MAX_ROWS_FOR_AUTO_REFRESH: 100000,
71
- MAX_ROWS_FOR_SHOW_RESULTS: 10000,
72
- DR_OTHERS_KEY: 'DR_Others',
73
- VIRTUAL_FIELDS: {
74
- WATERFALL_VARIANCE: 'DR_WATERFALL_BREAKDOWN_VARIANCE',
75
- },
76
- waterfallConstants: {
77
- [CHART_TYPES.WATERFALL_BREAKDOWN]: {
78
- minCategoriesCount: 2
79
- },
80
- [CHART_TYPES.WATERFALL_WALKTHROUGH]: {
81
- minCategoriesCount: 2,
82
- maxCategoriesCount: 10,
83
- }
84
- },
85
- CHART_TYPES: CHART_TYPES,
86
- MAX_SELECTED_ITEMS_IN_LABEL: 20,
87
- MAX_SELECTED_ITEMS_CHARECHTERS_IN_LABEL: 50,
88
- }
89
-
90
- const SUBOPTIONS_FONTS = [
91
- 'Arial',
92
- 'Arial Black',
93
- 'Comic Sans MS',
94
- 'Courier New',
95
- 'Helvetica',
96
- 'Impact',
97
- 'Nunito Sans',
98
- 'Tahoma',
99
- 'Times New Roman',
100
- 'Verdana',
101
- 'Poppins'
102
- ];
103
-
104
- const HIGHCHARTS_FONT_FAMILY = 'Poppins';
105
-
106
- const HIGHCHARTS_FONT_FAMILY_CSS = 'Poppins, sans-serif';
107
-
108
- const TOOLTIP_DEFAULT_SETTINGS = {
109
- FONT_COLOR: '#545a6b',
110
- FONT_SIZE: '12',
111
- FONT_FAMILY: HIGHCHARTS_FONT_FAMILY,
112
- };
113
-
114
- const TOOLTIP_DEFAULT_OPTIONS = {
115
- borderColor: CHART_COLORS.BACKGROUND,
116
- shadow: {
117
- color: '#9199b4',
118
- width: 10,
119
- opacity: 0.05
120
- },
121
- style: {
122
- fontSize: TOOLTIP_DEFAULT_SETTINGS.FONT_SIZE,
123
- fontFamily: TOOLTIP_DEFAULT_SETTINGS.FONT_FAMILY,
124
- color: TOOLTIP_DEFAULT_SETTINGS.FONT_COLOR,
125
- },
126
- enabled: true,
127
- };
128
-
129
- const LABEL_DEFAULT_SETTINGS = {
130
- FONT_COLOR: CHART_COLORS.TEXT,
131
- FONT_SIZE: '11',
132
- FONT_FAMILY: HIGHCHARTS_FONT_FAMILY,
133
- };
134
-
135
- const LABEL_DEFAULT_OPTIONS = {
136
- style: {
137
- fontSize: LABEL_DEFAULT_SETTINGS.FONT_SIZE,
138
- fontFamily: LABEL_DEFAULT_SETTINGS.FONT_FAMILY,
139
- fontWeight: 'normal',
140
- },
141
- color: LABEL_DEFAULT_SETTINGS.FONT_COLOR,
142
- };
143
-
144
- const CHART_AXIS_DEFAULT_LABEL = 'Axis (Category)';
145
-
146
- const CHART_LEGEND_DEFAULT_LABEL = 'Legend (Series)';
147
-
148
- const FEATURES = {
149
- ENABLE_NEW_WIDGET_VALUE_FORMATTING: 'enable_new_widget_value_formatting',
150
- ENABLE_SERVER_TOTALS_CALCULATION: 'enable_server_totals_calculation',
151
- FORMAT_AXIS: 'use_default_table_format_for_axis',
152
- FORMAT_DATES_AS_OTHER_AXIS_TYPES: 'format_dates_as_other_axis_types',
153
- MULTIPLE_DIMENSION_TAGS: 'multiple_dimension_tags',
154
- USE_NEW_SCENARIO_TAG: 'use_new_scenario_tag',
155
- ENABLE_SERVER_WIDGET_DATA_SORTING: 'enable_server_widget_data_sorting',
156
- }
157
-
158
- const TICKS_COUNT = 5;
159
-
160
11
  let getHighchartsRenderer = function ($, document, Highcharts, default_colors, highchartsRenderer,
161
12
  DataFormatter, lodash, moment_lib, isNewAngular) {
162
13
 
163
- /** Highcharts initial configuration section **/
164
14
  if(!lodash){
165
15
  lodash = _;
166
16
  }
167
17
 
18
+ // TODO: always true. remove
19
+ let useNewUx = true;
20
+ let useTotalsCalculation = false;
21
+ let disableAnimation = false;
22
+ if (document.ReportHippo && document.ReportHippo && document.ReportHippo.user) {
23
+ useTotalsCalculation = lodash.includes(document.ReportHippo.user.features, 'enable_server_totals_calculation');
24
+ disableAnimation = document.ReportHippo.user.organization && document.ReportHippo.user.organization.settings && document.ReportHippo.user.organization.settings.disable_animation
25
+ }
26
+ const textColor = "#151a41";
27
+ const chartLabelColor = "#cfd7dd";
28
+ const HIGHCHARTS_FONT_FAMILY = 'Poppins';
29
+
168
30
  if(!Highcharts){
169
31
  Highcharts = {
170
32
  opt: {},
@@ -174,59 +36,13 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
174
36
  }
175
37
  }
176
38
 
177
- // remove highcharts tooltip from the dom instead of hiding if option is passed
178
- Highcharts.wrap(Highcharts.Tooltip.prototype, 'hide', function(proceed, delay) {
179
- if (!this.options.destroyWhenHiding) {
180
- proceed.call(this, delay);
181
- } else {
182
- Highcharts.clearTimeout(this.hideTimer);
183
- delay = Highcharts.pick(delay, this.options.hideDelay);
184
- this.hideTimer = Highcharts.syncTimeout(() => {
185
- this.destroy();
186
- }, delay);
187
- }
188
- });
189
-
190
39
  if(!moment_lib){
191
40
  moment_lib = moment;
192
41
  }
193
42
 
194
- if (!highchartsRenderer) {
43
+ if(!highchartsRenderer){
195
44
  highchartsRenderer = {};
196
45
  }
197
- lodash.assign(highchartsRenderer, HIGHCHARTS_CONSTANTS);
198
-
199
- highchartsRenderer.useTotalsCalculation = false;
200
- highchartsRenderer.enabledNewWidgetValueFormatting = false;
201
- let disableAnimation = false;
202
-
203
- highchartsRenderer.hasFeature = function(featureFlagKey) {
204
- return lodash.includes(lodash.get(document, 'ReportHippo.user.features', []), featureFlagKey);
205
- }
206
-
207
- if (!!lodash.get(document, 'ReportHippo.user')) {
208
- highchartsRenderer.useTotalsCalculation = highchartsRenderer.hasFeature(FEATURES.ENABLE_SERVER_TOTALS_CALCULATION);
209
- disableAnimation = document.ReportHippo.user.organization && document.ReportHippo.user.organization.settings && document.ReportHippo.user.organization.settings.disable_animation
210
- highchartsRenderer.enabledNewWidgetValueFormatting = highchartsRenderer.hasFeature(FEATURES.ENABLE_NEW_WIDGET_VALUE_FORMATTING);
211
- highchartsRenderer.isSortingOnBackendEnabled = highchartsRenderer.hasFeature(FEATURES.ENABLE_SERVER_WIDGET_DATA_SORTING);
212
- }
213
-
214
- // fix issue of use tootip.stickOnContact with tooltip.outside , source: https://github.com/highcharts/highcharts/pull/15960
215
- // TODO: remove it after it is fixed in highcharts library new version
216
- if (lodash.get(Highcharts, 'Pointer')) {
217
- Highcharts.Pointer.prototype.onContainerMouseLeave = function (e) {
218
-
219
- const {charts, pick, Pointer} = Highcharts;
220
- const chart = charts[pick(Pointer.hoverChartIndex, -1)];
221
-
222
- e = this.normalize(e);
223
-
224
- if (chart && e.relatedTarget && !this.inClass(e.relatedTarget, 'highcharts-tooltip')) {
225
- chart.pointer.reset();
226
- chart.pointer.chartPosition = void 0;
227
- }
228
- }
229
- }
230
46
 
231
47
  // in lib it will not work
232
48
  highchartsRenderer.elem1 = document.createElement('textarea');
@@ -238,104 +54,133 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
238
54
  highchartsRenderer.variance_color = default_colors.variance_color;
239
55
  }
240
56
 
57
+ const mobileBrowserRegex = new RegExp([
58
+ '(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)',
59
+ '|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/',
60
+ '|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino',
61
+ ].join(''), 'i');
241
62
  highchartsRenderer.isMobile = mobileBrowserRegex.test(navigator.userAgent);
242
63
 
64
+ highchartsRenderer.CHART_TYPES = {
65
+ LINE_CHART: 'line-chart',
66
+ LINE_CHART_SMOOTH: 'line-chart-smooth',
67
+ COLUMN_CHART: 'column-chart',
68
+ COLUMN_CHART_STACKED: 'column-chart-stacked',
69
+ COMBO_CHART: 'combo-chart',
70
+ COMBO_COLUMN_CHART: 'combo-column-chart',
71
+ COMBO_STACKED_CHART: 'combo-stacked-chart',
72
+ BAR_CHART: 'bar-chart',
73
+ BAR_CHART_STACKED: 'bar-chart-stacked',
74
+ SCATTER_CHART: 'scatter-chart',
75
+ AREA_CHART: 'area-chart',
76
+ AREA_CHART_SMOOTH: 'area-chart-smooth',
77
+ TABLE_ONLY: 'table_only',
78
+ POLYGON_CHART: 'polygon-chart',
79
+ PIE_CHART: 'pie-chart',
80
+ PIE_CHART_DRILLDOWN: 'pie-chart-drilldown',
81
+ GAUGE_SOLID_CHART: 'gauge-solid-chart',
82
+ GAUGE_CHART: 'gauge-chart',
83
+ KPI_WIDGET: 'kpi-widget',
84
+ TEXT_WIDGET: 'text-widget',
85
+ WATERFALL_BREAKDOWN: 'waterfall-chart-breakdown',
86
+ WATERFALL_WALKTHROUGH: 'waterfall-chart-walkthrough',
87
+ PUBLISHED_ITEM: 'published_item',
88
+ RICH_TEXT: 'rich_text',
89
+ EXCEL_VIEWER: 'excel_viewer',
90
+ };
91
+
92
+ highchartsRenderer.VIRTUAL_FIELDS = {
93
+ WATERFALL_VARIANCE: 'DR_WATERFALL_BREAKDOWN_VARIANCE',
94
+ };
95
+
96
+ highchartsRenderer.DR_OTHERS_KEY = 'DR_Others';
97
+
243
98
  highchartsRenderer.highcharts_theme = {
244
- colors: highchartsRenderer.defaults_colors,
245
- chart: {
246
- backgroundColor: CHART_COLORS.BACKGROUND,
247
- plotBorderColor: CHART_COLORS.PLOT_BORDER,
248
- style: {
249
- fontFamily: HIGHCHARTS_FONT_FAMILY_CSS,
250
- color: CHART_COLORS.TEXT
99
+ "colors": highchartsRenderer.defaults_colors,
100
+ "chart": {
101
+ "backgroundColor": "#FFFFFF",
102
+ "plotBorderColor": "#606063",
103
+ "style": {
104
+ "fontFamily": "Poppins",
105
+ "color": "#3C3C3C"
251
106
  }
252
107
  },
253
- title: {
254
- align: 'left',
255
- style: {
256
- fontWeight: 'bold'
108
+ "title": {
109
+ "align": "left",
110
+ "style": {
111
+ "fontWeight": "bold"
257
112
  }
258
113
  },
259
- subtitle: {
260
- align: 'left'
114
+ "subtitle": {
115
+ "align": "left"
261
116
  },
262
- xAxis: {
263
- gridLineWidth: 1,
264
- gridLineColor: CHART_COLORS.LABEL ,
265
- labels: {
266
- style: {
267
- fontFamily: HIGHCHARTS_FONT_FAMILY_CSS,
268
- color: CHART_COLORS.TEXT,
269
- 'font-size': '10px',
270
- 'font-weight': "bold"
117
+ "xAxis": {
118
+ "gridLineWidth": 1,
119
+ "gridLineColor": "#D7D7D8" ,
120
+ "labels": {
121
+ "style": {
122
+ "fontFamily": "Unica One, sans-serif",
123
+ "color": "#3C3C3C"
271
124
  }
272
125
  },
273
- lineColor: CHART_COLORS.LABEL,
274
- minorGridLineColor: CHART_COLORS.MINOR_GRID_LINE,
275
- tickColor: CHART_COLORS.LABEL,
276
- tickWidth: 1,
277
- title: {
278
- style: {
279
- fontFamily: HIGHCHARTS_FONT_FAMILY_CSS,
280
- color: CHART_COLORS.LABEL_SECOND,
281
- 'font-size': '12px',
282
- 'font-weight': 'bold'
126
+ "lineColor": "#D7D7D8",
127
+ "minorGridLineColor": "#505053",
128
+ "tickColor": "#D7D7D8",
129
+ "tickWidth": 1,
130
+ "title": {
131
+ "style": {
132
+ "color": "#A0A0A3"
283
133
  }
284
134
  }
285
135
  },
286
- yAxis: {
287
- gridLineColor: CHART_COLORS.LABEL,
288
- labels: {
289
- style: {
290
- fontFamily: HIGHCHARTS_FONT_FAMILY_CSS,
291
- 'font-size': '10px',
292
- color: CHART_COLORS.LABEL_SECOND
136
+ "yAxis": {
137
+ "gridLineColor": "#D7D7D8",
138
+ "labels": {
139
+ "style": {
140
+ "fontFamily": "Unica One, sans-serif",
141
+ "color": "#3C3C3C"
293
142
  }
294
143
  },
295
- lineColor: CHART_COLORS.LABEL,
296
- minorGridLineColor: CHART_COLORS.MINOR_GRID_LINE,
297
- tickColor: CHART_COLORS.LABEL,
298
- tickWidth: 1,
299
- title: {
300
- style: {
301
- fontFamily: HIGHCHARTS_FONT_FAMILY_CSS,
302
- color: CHART_COLORS.LABEL_SECOND,
303
- 'font-size': '12px',
304
- 'font-weight': 'bold'
144
+ "lineColor": "#D7D7D8",
145
+ "minorGridLineColor": "#505053",
146
+ "tickColor": "#D7D7D8",
147
+ "tickWidth": 1,
148
+ "title": {
149
+ "style": {
150
+ "color": "#000000"
305
151
  }
306
152
  }
307
153
  },
308
- tooltip: {
309
- backgroundColor: CHART_COLORS.BACKGROUND,
310
- style: {
311
- color: CHART_COLORS.TEXT
154
+ "tooltip": {
155
+ "backgroundColor": "rgba(0, 0, 0, 0.85)",
156
+ "style": {
157
+ "color": "#F0F0F0"
312
158
  }
313
159
  },
314
- legend: {
315
- itemStyle: {
316
- color: CHART_COLORS.TEXT,
317
- fontWeight: 'normal'
160
+ "legend": {
161
+ "itemStyle": {
162
+ "color": "#3C3C3C"
318
163
  },
319
- itemHiddenStyle: {
320
- color: CHART_COLORS.PLOT_BORDER
164
+ "itemHiddenStyle": {
165
+ "color": "#606063"
321
166
  }
322
167
  },
323
- credits: {
324
- style: {
325
- color: CHART_COLORS.TICK_COLOR
168
+ "credits": {
169
+ "style": {
170
+ "color": "#666"
326
171
  }
327
172
  },
328
- labels: {
329
- style: {
330
- color: CHART_COLORS.LABELS_OLD
173
+ "labels": {
174
+ "style": {
175
+ "color": "#D7D7D8"
331
176
  }
332
177
  },
333
- legendBackgroundColor: CHART_COLORS.LEGEND_BACKGROUND,
334
- background2: CHART_COLORS.BACKGROUND,
335
- dataLabelsColor: CHART_COLORS.DATA_LABELS,
336
- textColor: CHART_COLORS.TEXT,
337
- contrastTextColor: CHART_COLORS.CONTRAST_TEXT,
338
- maskColor: CHART_COLORS.MASK,
178
+ "legendBackgroundColor": "rgba(0, 0, 0, 0.5)",
179
+ "background2": "white",
180
+ "dataLabelsColor": "#B0B0B3",
181
+ "textColor": "black",
182
+ "contrastTextColor": "#F0F0F3",
183
+ "maskColor": "rgba(255,255,255,0.3)",
339
184
  lang: {
340
185
  decimalPoint: '.',
341
186
  drillUpText: '< Back'
@@ -346,30 +191,70 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
346
191
  height: 20
347
192
  }
348
193
  },
349
- exporting: {
350
- enabled: false,
351
- sourceWidth: 900
352
- },
353
- drilldown: {
194
+ exporting: {enabled: false, sourceWidth: 900}
195
+ };
196
+
197
+ if (useNewUx) {
198
+ highchartsRenderer.highcharts_theme.chart.style.color = textColor;
199
+
200
+ highchartsRenderer.highcharts_theme.xAxis.gridLineColor = chartLabelColor;
201
+ highchartsRenderer.highcharts_theme.xAxis.lineColor = chartLabelColor;
202
+ highchartsRenderer.highcharts_theme.xAxis.tickColor = chartLabelColor;
203
+ highchartsRenderer.highcharts_theme.xAxis.labels.style = {
204
+ "fontFamily": "Poppins, sans-serif",
205
+ "color": textColor,
206
+ "font-size": "10px",
207
+ "font-weight": "bold"
208
+ };
209
+ highchartsRenderer.highcharts_theme.xAxis.title.style = {
210
+ "fontFamily": "Poppins, sans-serif",
211
+ "color": "#85889c",
212
+ "font-size": "12px",
213
+ "font-weight": "bold"
214
+ };
215
+
216
+ highchartsRenderer.highcharts_theme.yAxis.gridLineColor = chartLabelColor;
217
+ highchartsRenderer.highcharts_theme.yAxis.lineColor = chartLabelColor;
218
+ highchartsRenderer.highcharts_theme.yAxis.tickColor = chartLabelColor;
219
+ highchartsRenderer.highcharts_theme.yAxis.labels.style = {
220
+ "fontFamily": "Poppins, sans-serif",
221
+ "font-size": "10px",
222
+ "color": "#85889c"
223
+ };
224
+ highchartsRenderer.highcharts_theme.yAxis.title.style = {
225
+ "fontFamily": "Poppins, sans-serif",
226
+ "color": "#85889c",
227
+ "font-size": "12px",
228
+ "font-weight": "bold"
229
+ };
230
+
231
+ highchartsRenderer.highcharts_theme.tooltip.backgroundColor = "#fff";
232
+ highchartsRenderer.highcharts_theme.tooltip.style.color = textColor;
233
+ highchartsRenderer.highcharts_theme.legend.itemStyle.color = textColor;
234
+ highchartsRenderer.highcharts_theme.legend.itemStyle.fontWeight = 'normal';
235
+ highchartsRenderer.highcharts_theme.drilldown = {
354
236
  activeAxisLabelStyle: {
355
- color: CHART_COLORS.TEXT
237
+ color: textColor
356
238
  },
357
239
  activeDataLabelStyle: {
358
240
  textDecoration: 'none',
359
241
  }
360
242
  }
361
- };
243
+ }
362
244
 
363
245
  Highcharts.setOptions(highchartsRenderer.highcharts_theme);
364
246
 
365
- /** End of 'Highcharts initial configuration section' **/
366
-
367
247
  highchartsRenderer.filterFloat = function (value) {
368
248
  if (/^(\-|\+)?([0-9]+(\.[0-9]+)?|Infinity)$/.test(value))
369
249
  return Number(value);
370
250
  return null;
371
251
  };
372
252
 
253
+ highchartsRenderer.delimer = ' , ';
254
+
255
+ highchartsRenderer.MAX_ROWS_FOR_AUTO_REFRESH = 100000;
256
+ highchartsRenderer.MAX_ROWS_FOR_SHOW_RESULTS = 10000;
257
+
373
258
  highchartsRenderer.setColors = function (colors) {
374
259
  highchartsRenderer.highcharts_theme.colors = colors;
375
260
  Highcharts.setOptions(highchartsRenderer.highcharts_theme);
@@ -402,7 +287,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
402
287
  filtOb.is_excluded = false;
403
288
  } else if (value.excludes) {
404
289
  filtOb.is_excluded = true;
405
- filtOb.values = value.excludes;
290
+ filtOb.values = value.excludes || null;
406
291
  } else {
407
292
  filtOb.is_excluded = false;
408
293
  filtOb.values = value.includes || null;
@@ -417,6 +302,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
417
302
 
418
303
  highchartsRenderer.decodeFunc = function (str) {
419
304
  if (str && typeof (str) == 'string') {
305
+ if (!str || str == '')
306
+ return '';
420
307
  highchartsRenderer.elem1.innerHTML = str;
421
308
  return highchartsRenderer.elem1.value;
422
309
  }
@@ -438,8 +325,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
438
325
 
439
326
  highchartsRenderer.createDashboardFilterObject = function (value) {
440
327
  var filtOb = {};
441
- if (value.datetypevalues && value.datetypevalues.datetype !== 'list') {
442
- filtOb.values = value.datetypevalues;
328
+ if (value.datetypevalues && value.datetypevalues.datetype != 'list') {
329
+ filtOb.values = value.datetypevalues || value.values;
443
330
  filtOb.is_excluded = false;
444
331
  } else if (value.excludes) {
445
332
  filtOb.is_excluded = true;
@@ -482,8 +369,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
482
369
  if (chartElement.highcharts) {
483
370
  chart = chartElement.highcharts();
484
371
  } else {
485
- const graphIdString = graph_id.split('_')[1];
486
- const graphId = Number(graphIdString) || graphIdString;
372
+ const graphId = Number(graph_id.split('_')[1]);
487
373
  chart = lodash.find(Highcharts.charts, function(value) {
488
374
  return value.options.widgetId === graphId;
489
375
  });
@@ -491,8 +377,15 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
491
377
 
492
378
  if (!chart) return;
493
379
 
380
+ /*if(chart.title && chart.title.textStr){
381
+ png_name = chart.title.textStr
382
+ }else{
383
+ png_name = 'chart'
384
+ }*/
385
+
494
386
  if (type === 'png') {
495
387
  chart.exportChartLocal({
388
+ //type: 'application/png',
496
389
  filename: title
497
390
  });
498
391
  }
@@ -536,9 +429,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
536
429
  var topSlot = '';
537
430
  if (labelOpts.show_percentage_in_labels) {
538
431
  rightSlot = `(${(this.point.percentage).toFixed(2)}%)`;
539
- if (labelOpts.show_value_in_labels && value) {
540
- topSlot = `${value}<br>`;
541
- }
432
+ if (labelOpts.show_value_in_labels && value) topSlot = `${value}<br>`;
542
433
  } else if (labelOpts.show_value_in_labels && value) {
543
434
  rightSlot = value;
544
435
  }
@@ -576,12 +467,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
576
467
 
577
468
  const labelOptions = lodash.get(opts.chartOptions, 'label') || lodash.get(opts.chartOptions, 'label_pie');
578
469
  const othersName = opts.total_value_options ? highchartsRenderer.getOthersName(opts) : undefined;
579
- const drOthersInAxis = pivotData ? highchartsRenderer.getDrOthersInAxisState(pivotData, othersName) : {};
470
+ const drOthersInAxis = highchartsRenderer.getDrOthersInAxisState(pivotData, othersName);
580
471
 
581
472
  var func = function () {
582
473
  var value = parseFloat(this.y);
583
474
  if (pivotData) {
584
- let series_name = highchartsRenderer.getSeriesNameInFormatterContext(this, pivotData);
475
+ let series_name = (this.series.name || '') + "";
585
476
  var rows = series_name.split(highchartsRenderer.delimer);
586
477
 
587
478
  if (is_drill_down_pie && highchartsRenderer.selfStartsWith(series_name, "Series ")) {
@@ -594,7 +485,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
594
485
  rows = [];
595
486
  }
596
487
 
597
- var cols = highchartsRenderer.getColsInFormatterContext(this, pivotData);
488
+ var cols = lodash.get(this, 'point.options.colsForTotal') || this.key;
598
489
  if (typeof (cols) == 'object' && cols.name) {
599
490
  cols = cols.name;
600
491
  }
@@ -668,7 +559,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
668
559
  // do nothing
669
560
  }
670
561
  }
671
- return $.pivotUtilities.getFormattedNumber(value, null, opts).replace(/\u00A0/g, " ");
562
+ return $.pivotUtilities.getFormattedNumber(value, null, opts);
672
563
  };
673
564
  return func;
674
565
  };
@@ -710,32 +601,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
710
601
  return func;
711
602
  };
712
603
 
713
- highchartsRenderer.customFormatterTooltipInsights = function(pivotData, opts) {
714
- return {
715
- useHTML: true,
716
- outside: true,
717
- backgroundColor: 'transparent',
718
- borderWidth: 0,
719
- borderRadius: 0,
720
- shadow: false,
721
- shape: 'square',
722
- padding: 0,
723
- stickOnContact: true,
724
- hideDelay: 1500,
725
- destroyWhenHiding: true,
726
- formatter: function () {
727
- const rowKey = pivotData.rowAttrs.length ? lodash.get(this.point, 'series.name') || "" : "";
728
- const colKey = lodash.get(this.point, 'name') || this.x.name[0] || "";
729
- const insight = pivotData.getInsight(colKey, rowKey) || {};
730
- setTimeout(() => {
731
- var aggr = highchartsRenderer.defaultFormatterToTooltip(pivotData, opts);
732
- const formatted_value_to_return = aggr.bind(this)();
733
- opts.insightsTooltipFunc(lodash.merge(lodash.cloneDeep(this), { formatted_value_to_return }, insight));
734
- });
735
- }
736
- }
737
- }
738
-
739
604
  highchartsRenderer.defaultFormatterToTooltip = function (pivotData, opts, is_drill_down_pie) {
740
605
  var variant_name = null;
741
606
  var variant_name_default_name = null;
@@ -743,6 +608,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
743
608
  variant_name = opts.chartOptions.delta_column.name.replace('_', '');
744
609
  variant_name_default_name = opts.chartOptions.delta_column.name;
745
610
  }
611
+
746
612
  const tooltipOptions = lodash.get(opts, 'chartOptions.tooltips');
747
613
 
748
614
  let percentageLabels = {
@@ -754,7 +620,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
754
620
  }
755
621
 
756
622
  const othersName = opts.total_value_options ? highchartsRenderer.getOthersName(opts) : undefined;
757
- const drOthersInAxis = pivotData ? highchartsRenderer.getDrOthersInAxisState(pivotData, othersName) : {};
623
+ const drOthersInAxis = highchartsRenderer.getDrOthersInAxisState(pivotData, othersName);
758
624
 
759
625
  var func = function () {
760
626
  const isWaterfallBreakdown = this.series.options.className === SERIES_CLASSNAMES.WATERFALL_BREAKDOWN;
@@ -763,7 +629,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
763
629
 
764
630
  var y = parseFloat(this.y);
765
631
  if (pivotData) {
766
- let series_name = highchartsRenderer.getSeriesNameInFormatterContext(this, pivotData);
632
+ let series_name = (this.series.name || '') + "";
767
633
  var rows = series_name.split(highchartsRenderer.delimer);
768
634
  if (is_drill_down_pie && highchartsRenderer.selfStartsWith(series_name,"Series ")) {
769
635
  rows = [];
@@ -774,7 +640,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
774
640
  rows = [];
775
641
  }
776
642
 
777
- var cols = highchartsRenderer.getColsInFormatterContext(this, pivotData);
643
+ var cols = lodash.get(this, 'point.options.colsForTotal') || this.key;
778
644
  if (!cols && is_drill_down_pie) {
779
645
  cols = this.name;
780
646
  }
@@ -796,20 +662,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
796
662
  rows = temp;
797
663
  }
798
664
 
799
- const colNameToDisplay = lodash.cloneDeep(
800
- lodash.get(this, 'point.options.colsForTotal')
801
- ? isWaterfallWalkthrough
802
- ? this.key
803
- : cols[0]
804
- : highchartsRenderer.isFormattingAxisFeatureOn() && lodash.get(this, 'point.name') || cols
805
- );
806
-
807
665
  highchartsRenderer.replaceDrOthersKeys(cols, rows, drOthersInAxis, othersName);
808
666
 
809
667
  var category_text = `<span style="font-weight: bold;">
810
- ${ colNameToDisplay } ${ isWaterfallBreakdown ? ': ' : ' ' }
668
+ ${ lodash.get(this, 'point.options.colsForTotal') ? isWaterfallWalkthrough ? this.key : cols[0] : cols } ${ isWaterfallBreakdown ? ': ' : ' ' }
811
669
  </span>`;
812
-
813
670
  if (this.category) {
814
671
  category_text = '';
815
672
  }
@@ -1019,20 +876,20 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1019
876
  },
1020
877
  theme: {
1021
878
  fill: 'white',
1022
- color: CHART_COLORS.LABEL_SECOND,
879
+ color: '#85889c',
1023
880
  'stroke-width': 1,
1024
- stroke: CHART_COLORS.LABEL_SECOND,
881
+ stroke: '#85889c',
1025
882
  r: 3,
1026
883
  states: {
1027
884
  hover: {
1028
- fill: CHART_COLORS.DRILL_UP_FILL,
1029
- stroke: CHART_COLORS.LABEL_SECOND,
1030
- color: CHART_COLORS.LABEL_SECOND
885
+ fill: '#eef3f6',
886
+ stroke: '#85889c',
887
+ color: '#85889c'
1031
888
  },
1032
889
  select: {
1033
- stroke: CHART_COLORS.LABEL_SECOND,
1034
- fill: CHART_COLORS.DRILL_UP_FILL,
1035
- color: CHART_COLORS.LABEL_SECOND
890
+ stroke: '#85889c',
891
+ fill: '#eef3f6',
892
+ color: '#85889c'
1036
893
  }
1037
894
  }
1038
895
  },
@@ -1044,9 +901,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1044
901
  chartOptions.yAxis && chartOptions.yAxis.title && (chartOptions.yAxis.title.text || chartOptions.yAxis.title.autoylabel) ? -60 : -40;
1045
902
  const y = isPieChart ? 27 :
1046
903
  chartOptions.xAxis && chartOptions.xAxis.title && (chartOptions.xAxis.title.text || chartOptions.xAxis.title.autoxlabel) ? 65 : 43;
1047
- chartOptions.chart.spacingBottom = lodash.get(chartOptions, 'xAxis.title') ? 34 : 30;
1048
904
  chartOptions.drilldown.breadcrumbs = {
1049
- formatter: () => 'Back',
905
+ formatter: () => '< Back',
1050
906
  showFullPath: false,
1051
907
  position: {
1052
908
  align: 'left',
@@ -1055,21 +911,23 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1055
911
  y: y,
1056
912
  },
1057
913
  floating: true,
1058
- position: { align: 'left', x: 12, y: 6, verticalAlign: 'bottom' },
1059
- relativeTo: 'spacingBox',
1060
914
  buttonTheme: {
1061
- fill: CHART_COLORS.DRILL_BUTTON_COLOR_FILL,
1062
- style: {
1063
- fontSize: HIGHCHARTS_CONSTANTS.DRILL_BUTTON_FONT_SIZE,
1064
- color: CHART_COLORS.DRILL_BUTTON_COLOR,
1065
- },
915
+ fill: 'white',
916
+ color: '#85889c',
917
+ 'stroke-width': 1,
918
+ stroke: '#85889c',
919
+ r: 3,
920
+ padding: 3,
1066
921
  states: {
1067
922
  hover: {
1068
- fill: CHART_COLORS.DRILL_BUTTON_COLOR_FILL,
1069
- style: {
1070
- fontSize: HIGHCHARTS_CONSTANTS.DRILL_BUTTON_FONT_SIZE,
1071
- color: CHART_COLORS.DRILL_BUTTON_COLOR_HOVER,
1072
- }
923
+ fill: '#eef3f6',
924
+ stroke: '#85889c',
925
+ color: '#85889c'
926
+ },
927
+ select: {
928
+ stroke: '#85889c',
929
+ fill: '#eef3f6',
930
+ color: '#85889c'
1073
931
  }
1074
932
  }
1075
933
  },
@@ -1088,7 +946,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1088
946
  if (chartOptions.series) {
1089
947
  for (var i = 0; i < chartOptions.series.length; i++) {
1090
948
  seriesDataLength += chartOptions.series[i].data ? chartOptions.series[i].data.length : 0;
1091
- if (seriesDataLength > 1000) {
949
+ if (seriesDataLength > 2000) {
1092
950
  toMatch = true;
1093
951
  break;
1094
952
  }
@@ -1187,14 +1045,17 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1187
1045
  let squareXSum = 0;
1188
1046
  ob.data = [];
1189
1047
  if (row_n_value && row_n_value.length > 0) {
1190
- ob.initialName = row_n_value.join(highchartsRenderer.delimer)
1048
+ ob.name = row_n_value.join(highchartsRenderer.delimer)
1191
1049
  .replace(highchartsRenderer.DR_OTHERS_KEY, othersName);
1192
- ob.name = highchartsRenderer.getFormattedRowKey(ob.initialName, pivotData);
1193
1050
  }
1194
1051
  lodash.forEach(col_n_keys, function (col_n_value, index) {
1195
1052
  var agg = pivotData.getAggregator(row_n_value, col_n_value);
1196
1053
  var val = agg.value();
1197
1054
 
1055
+ if (col_n_value[0] === highchartsRenderer.DR_OTHERS_KEY) {
1056
+ col_n_value[0] = othersName;
1057
+ }
1058
+
1198
1059
  if (isUniqueVals && agg.uniq)
1199
1060
  val = agg.uniq.join('<br>');
1200
1061
 
@@ -1217,28 +1078,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1217
1078
  xySum += Number(val) * (index + 1);
1218
1079
  ySum += Number(val);
1219
1080
  squareXSum += (index + 1) * (index + 1);
1220
-
1221
- let key = col_n_value;
1222
- if (lodash.isArray(col_n_value)) {
1223
- key = lodash.replace(
1224
- lodash.join(
1225
- lodash.filter(col_n_value, value => !!value),
1226
- highchartsRenderer.delimer
1227
- ),
1228
- highchartsRenderer.DR_OTHERS_KEY,
1229
- othersName
1230
- );
1231
- }
1232
-
1233
- ob.data.push(
1234
- key
1235
- ? {
1236
- y: val,
1237
- initialName: lodash.unescape(key),
1238
- name: highchartsRenderer.getFormattedColKey(lodash.unescape(key), pivotData),
1239
- }
1240
- : val
1241
- );
1081
+ ob.data.push(val);
1242
1082
  });
1243
1083
 
1244
1084
  if (colors && colors[i]) {
@@ -1272,18 +1112,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1272
1112
 
1273
1113
  i++;
1274
1114
  });
1275
-
1276
- if (lodash.get(chartOptions, 'xAxis.categories')) {
1277
- lodash.forEach(chartOptions.xAxis.categories, (col_n_value, index) => {
1278
- if (lodash.isArray(col_n_value)) {
1279
- chartOptions.xAxis.categories[index] = lodash.map(
1280
- lodash.filter(col_n_value, value => !!value),
1281
- value => lodash.replace(value, highchartsRenderer.DR_OTHERS_KEY, othersName)
1282
- );
1283
- }
1284
- });
1285
- }
1286
-
1287
1115
  const ethalonSeries = chart_series[chart_series.length - 1];
1288
1116
 
1289
1117
  if (has_delta && additionOptions && additionOptions.delta_column.only_variant) {
@@ -1370,9 +1198,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1370
1198
  var ob = {};
1371
1199
  ob.data = [];
1372
1200
  if (row_n_value && row_n_value.length > 0) {
1373
- ob.initialName = lodash.unescape(row_n_value.join(highchartsRenderer.delimer)
1201
+ ob.name = lodash.unescape(row_n_value.join(highchartsRenderer.delimer)
1374
1202
  .replace(highchartsRenderer.DR_OTHERS_KEY, othersName));
1375
- ob.name = highchartsRenderer.getFormattedRowKey(ob.initialName, pivotData);
1376
1203
  }
1377
1204
 
1378
1205
  ob.dataLabels = {
@@ -1409,17 +1236,15 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1409
1236
  if (lodash.isArray(col_n_value)) {
1410
1237
  key = col_n_value[0];
1411
1238
  }
1412
- tmoobj.initialName = lodash.unescape(key);
1239
+ tmoobj.name = lodash.unescape(key);
1413
1240
 
1414
- if (tmoobj.initialName) {
1415
- tmoobj.initialName = tmoobj.initialName.replace(highchartsRenderer.DR_OTHERS_KEY, othersName);
1241
+ if (tmoobj.name) {
1242
+ tmoobj.name = tmoobj.name.replace(highchartsRenderer.DR_OTHERS_KEY, othersName);
1416
1243
  }
1417
1244
 
1418
- if (lodash.isEmpty(String(tmoobj.initialName))) {
1419
- tmoobj.initialName = "[blank]";
1245
+ if (lodash.isEmpty(String(tmoobj.name))) {
1246
+ tmoobj.name = "[blank]";
1420
1247
  }
1421
- tmoobj.name = highchartsRenderer.getFormattedColKey(tmoobj.initialName, pivotData);
1422
-
1423
1248
  tmoobj.y = val;
1424
1249
  if (!isNotDrilldown)
1425
1250
  tmoobj.drilldown = true;
@@ -1514,7 +1339,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1514
1339
  totalSeries.color = colors[i];
1515
1340
  }
1516
1341
 
1517
-
1518
1342
  col_n_keys.forEach(columnKey => {
1519
1343
  let key = columnKey;
1520
1344
  let totalKey = columnKey;
@@ -1545,7 +1369,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1545
1369
  const chart_series = [];
1546
1370
  const row_n_keys = pivotData.getRowKeys();
1547
1371
  const col_n_keys = pivotData.getColKeys();
1548
- const rows_by_cols = pivotData.rowKeysByCols;
1549
1372
 
1550
1373
  let resultObject = {
1551
1374
  data: [],
@@ -1564,20 +1387,17 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1564
1387
  lodash.forEach(col_n_keys, function(col_n_value, col_index) {
1565
1388
 
1566
1389
  const totalColumnValue = pivotData.getAggregator([], col_n_value).value();
1567
- const totalName = lodash.unescape(col_n_value).replace(highchartsRenderer.DR_OTHERS_KEY, highchartsRenderer.getOthersName(opts));
1568
1390
  resultObject.data.push({
1569
1391
  y: totalColumnValue,
1570
- name: highchartsRenderer.getFormattedColKey(totalName, pivotData),
1571
- initialName: totalName,
1392
+ name: lodash.unescape(col_n_value)
1393
+ .replace(highchartsRenderer.DR_OTHERS_KEY, highchartsRenderer.getOthersName(opts)),
1572
1394
  isSum: !!col_index,
1573
1395
  isTotal: true,
1574
1396
  color: colorOptions.total,
1575
1397
  });
1576
1398
 
1577
1399
  if (col_index !== col_n_keys.length - 1) {
1578
-
1579
- const rowKeys = rows_by_cols ? rows_by_cols[col_index] : row_n_keys;
1580
- lodash.forEach(rowKeys, function (row_n_value) {
1400
+ lodash.forEach(row_n_keys, function (row_n_value) {
1581
1401
  const agg = pivotData.getAggregator(row_n_value, col_n_value);
1582
1402
  let val = agg.value();
1583
1403
 
@@ -1585,19 +1405,18 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1585
1405
  if (val) {
1586
1406
  const tmoobj = {};
1587
1407
  const key = lodash.isArray(row_n_value) ? row_n_value[0] : row_n_value;
1588
- tmoobj.initialName = lodash.unescape(key);
1408
+ tmoobj.name = lodash.unescape(key);
1589
1409
 
1590
- if (tmoobj.initialName) {
1591
- tmoobj.initialName = tmoobj.initialName
1410
+ if (tmoobj.name) {
1411
+ tmoobj.name = tmoobj.name
1592
1412
  .replace(highchartsRenderer.DR_OTHERS_KEY, highchartsRenderer.getOthersName(opts));
1593
1413
  }
1594
1414
 
1595
- if (lodash.isEmpty(String(tmoobj.initialName))) {
1596
- tmoobj.initialName = lodash.unescape(col_n_value);
1415
+ if (lodash.isEmpty(String(tmoobj.name))) {
1416
+ tmoobj.name = lodash.unescape(col_n_value);
1597
1417
  tmoobj.visible = false;
1598
1418
  }
1599
1419
 
1600
- tmoobj.name = highchartsRenderer.getFormattedRowKey(tmoobj.initialName, pivotData);
1601
1420
  tmoobj.y = val;
1602
1421
  tmoobj.colKeys = [lodash.unescape(col_n_value), lodash.unescape(col_n_keys[col_index + 1])];
1603
1422
  resultObject.data.push(tmoobj);
@@ -1651,10 +1470,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1651
1470
  lodash.forEach(waterfallOptions.values.walkthrough, function(value, index) {
1652
1471
 
1653
1472
  let keys = [];
1654
- if (value.trend === 'total' || highchartsRenderer.isFormattingDatesAsOtherAxisTypes()) {
1473
+ if (value.trend === 'total') {
1655
1474
  keys = value.key;
1656
1475
  } else {
1657
- lodash.forEach(value.key, (item) => {
1476
+ _.forEach(value.key, (item) => {
1658
1477
  const findKeyByValue = lodash.find(
1659
1478
  Object.keys(pivotData.dateValuesDictionary || {}),
1660
1479
  key => pivotData.dateValuesDictionary[key] === item
@@ -1684,12 +1503,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1684
1503
  increase: '#20A452',
1685
1504
  };
1686
1505
 
1687
- let initialName = value.trend === 'total' ? value.formattedKey || value.key[0] : keys.join(highchartsRenderer.delimer);
1688
- initialName = lodash.replace(
1689
- lodash.unescape(initialName), highchartsRenderer.DR_OTHERS_KEY, highchartsRenderer.getOthersName(opts)
1690
- )
1691
- let name = value.trend === 'total' ? initialName : highchartsRenderer.getFormattedColKey(initialName, pivotData);
1692
-
1506
+ const name = value.trend === 'total' ? value.formattedKey || value.key[0] : keys.join(highchartsRenderer.delimer);
1693
1507
  let color = '';
1694
1508
 
1695
1509
  if (!lodash.get(waterfallOptions, 'colors', {}) && value.color) {
@@ -1701,18 +1515,18 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1701
1515
  ? lodash.get(waterfallOptions, 'colors', {}).increase || baseColor.increase
1702
1516
  : lodash.get(waterfallOptions, 'colors', {}).decrease || baseColor.decrease;
1703
1517
  }
1704
- if (val !== 0) {
1705
- resultObject.data.push({
1706
- y: val,
1707
- name,
1708
- initialName,
1709
- totalIndex: value.trend === 'total' ? index : undefined,
1710
- isSum: value.trend === 'total',
1711
- isTotal: value.trend === 'total',
1712
- color,
1713
- colsForTotal: value.trend === 'total' ? keys : null,
1714
- });
1715
- }
1518
+
1519
+ resultObject.data.push({
1520
+ y: val,
1521
+ name: lodash.replace(
1522
+ lodash.unescape(name), highchartsRenderer.DR_OTHERS_KEY, highchartsRenderer.getOthersName(opts)
1523
+ ),
1524
+ totalIndex: value.trend === 'total' ? index : undefined,
1525
+ isSum: value.trend === 'total',
1526
+ isTotal: value.trend === 'total',
1527
+ color,
1528
+ colsForTotal: value.trend === 'total' ? keys : null,
1529
+ });
1716
1530
  });
1717
1531
  chart_series.push(resultObject);
1718
1532
  chart_series.push(
@@ -1751,7 +1565,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1751
1565
  highchartsRenderer.getVariantSeries = function (series, delta_column_options) {
1752
1566
  const varianceColor = delta_column_options.color || highchartsRenderer.variance_color || Highcharts.getOptions().colors[7];
1753
1567
  series.name = delta_column_options.name.replace('_', '');
1754
- series.initialName = series.name;
1755
1568
  series.color = varianceColor;
1756
1569
 
1757
1570
  if (delta_column_options.point_click_event) {
@@ -1793,11 +1606,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1793
1606
  series.dataLabels = {y: -8};
1794
1607
  }
1795
1608
  series.marker = {
1796
- lineWidth: 0,
1609
+ lineWidth: 6,
1797
1610
  enabled: true,
1798
- radius: 8,
1611
+ radius: 6,
1799
1612
  lineColor: varianceColor,
1800
- fillColor: varianceColor,
1613
+ fillColor: 'white',
1801
1614
  symbol: 'circle',
1802
1615
  states: {
1803
1616
  select: {
@@ -1805,14 +1618,25 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1805
1618
  fillColor: '#00FF2D',
1806
1619
  lineColor: '#008816',
1807
1620
  lineWidth: 5,
1808
- },
1809
- hover: {
1810
- enabled: false,
1811
- lineWidthPlus: 0
1812
1621
  }
1813
1622
  }
1814
1623
  };
1815
- } else if (delta_column_options.chart == 'area') {
1624
+ if (useNewUx) {
1625
+ series.marker.lineWidth = 0;
1626
+ series.marker.radius = 8;
1627
+ series.marker.fillColor = varianceColor;
1628
+ series.marker.states.hover = {
1629
+ enabled: false
1630
+ };
1631
+ }
1632
+
1633
+ series.states = {
1634
+ hover: {
1635
+ lineWidthPlus: 0
1636
+ }
1637
+ };
1638
+ }
1639
+ else if (delta_column_options.chart == 'area') {
1816
1640
  series.color = varianceColor;
1817
1641
  series.type = 'area'
1818
1642
  } else if (delta_column_options.chart == 'areaspline') {
@@ -1849,17 +1673,15 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1849
1673
 
1850
1674
  var ob = {};
1851
1675
  // check string contains hebrew
1852
- ob.initialName = (/[\u0590-\u05FF]/).test(key) ? ('\u200E' + key) : key;
1676
+ ob.name = (/[\u0590-\u05FF]/).test(key) ? ('\u200E' + key) : key;
1853
1677
  if (lodash.isEmpty(String(ob.name))) {
1854
- ob.initialName = "[blank]";
1678
+ ob.name = "[blank]";
1855
1679
  }
1856
1680
 
1857
- if (ob.initialName === highchartsRenderer.DR_OTHERS_KEY) {
1858
- ob.initialName = othersName;
1681
+ if (ob.name === highchartsRenderer.DR_OTHERS_KEY) {
1682
+ ob.name = othersName;
1859
1683
  }
1860
1684
 
1861
- ob.name = highchartsRenderer.getFormattedColKey(ob.initialName, pivotData);
1862
-
1863
1685
  ob.y = val;
1864
1686
  if (!isNaN(key))
1865
1687
  key = Number(key)
@@ -1891,8 +1713,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1891
1713
  var col_n = col_n_value[0];
1892
1714
  if (col_n != undefined) {
1893
1715
  col_ob.id = !isNaN(col_n) ? Number(col_n) : col_n;
1894
- col_ob.initialName = col_n === highchartsRenderer.DR_OTHERS_KEY ? othersName : col_n;
1895
- col_ob.name = highchartsRenderer.getFormattedColKey(col_ob.initialName, pivotData);
1716
+ col_ob.name = col_n === highchartsRenderer.DR_OTHERS_KEY ? othersName : col_n;
1896
1717
  col_ob.data = [];
1897
1718
  lodash.forEach(row_n_keys, function (row_n_value) {
1898
1719
  var agg = pivotData.getAggregator(row_n_value, col_n_value);
@@ -1907,13 +1728,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1907
1728
  // }
1908
1729
  }
1909
1730
 
1910
- const row_initial_name = row_n_value[0] === highchartsRenderer.DR_OTHERS_KEY ? othersName : row_n_value[0];
1911
- const row_name = highchartsRenderer.getFormattedRowKey(row_initial_name, pivotData);
1912
- col_ob.data.push({
1913
- name: row_name,
1914
- initialName: row_initial_name,
1915
- y: val
1916
- });
1731
+ const row_name = row_n_value[0] === highchartsRenderer.DR_OTHERS_KEY ? othersName : row_n_value[0];
1732
+ col_ob.data.push([row_name, val]);
1917
1733
  }
1918
1734
  });
1919
1735
  if (col_ob.data.length) {
@@ -1988,32 +1804,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
1988
1804
  color: varianceColor
1989
1805
  }
1990
1806
  },
1991
- opposite: true,
1992
- tickPositioner: function () {
1993
- const primaryAxisTicksCount = this.chart.yAxis[0].tickPositions.length;
1994
- const minFromSettings = parseInt(lodash.get(opts, 'comboOptions.secondaryAxisSettings.min'));
1995
- const maxFromSettings = parseInt(lodash.get(opts, 'comboOptions.secondaryAxisSettings.max'));
1996
- let secondaryAxisMin = !isNaN(minFromSettings) ? minFromSettings : this.tickPositions[0];
1997
- let secondaryAxisMax = !isNaN(maxFromSettings) ? maxFromSettings : this.tickPositions[this.tickPositions.length - 1];
1998
-
1999
- if (secondaryAxisMin >= secondaryAxisMax) {
2000
- if (isNaN(minFromSettings)) {
2001
- secondaryAxisMin = secondaryAxisMax - Math.pow(10, secondaryAxisMax.toString().length - 1);
2002
- }
2003
- if (isNaN(maxFromSettings)) {
2004
- secondaryAxisMax = secondaryAxisMin + Math.pow(10, secondaryAxisMin.toString().length - 1);
2005
- }
2006
- }
2007
-
2008
- const step = (secondaryAxisMax - secondaryAxisMin) / (primaryAxisTicksCount - 1);
2009
- const tickPositions = [secondaryAxisMin, secondaryAxisMax];
2010
- for (let i = 1; i < primaryAxisTicksCount - 1; i++) {
2011
- tickPositions.splice(i, 0, parseFloat((secondaryAxisMin + step * i).toFixed(2)));
2012
- }
2013
- return tickPositions;
2014
- },
2015
- gridLineWidth: 0,
2016
- tickWidth: 0,
1807
+ opposite: true
2017
1808
  }
2018
1809
  highchartsRenderer.setYAxisMinMax(chartOptions.yAxis[1], opts.comboOptions.secondaryAxisSettings);
2019
1810
  };
@@ -2077,9 +1868,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2077
1868
 
2078
1869
  lodash.forEach(col_n_keys, function (key) {
2079
1870
  var ob = {};
2080
- ob.initialName = key;
2081
- if (lodash.isEmpty(String(ob.initialName))) {
2082
- ob.initialName = "[blank]";
1871
+ ob.name = key;
1872
+ if (lodash.isEmpty(String(ob.name))) {
1873
+ ob.name = "[blank]";
2083
1874
  }
2084
1875
  if (row_n_keys && row_n_keys.length > 0) {
2085
1876
  agg = pivotData.getAggregator(row_n_keys[0], key); // tale first row
@@ -2087,7 +1878,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2087
1878
  agg = pivotData.getAggregator([], key);
2088
1879
  }
2089
1880
  ob.y = agg.value();
2090
- ob.name = highchartsRenderer.getFormattedColKey(ob.initialName, pivotData);
2091
1881
  pie_series.push(ob);
2092
1882
  });
2093
1883
 
@@ -2192,9 +1982,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2192
1982
  }
2193
1983
  };
2194
1984
 
2195
- chartOptions.xAxis = {
2196
- categories: highchartsRenderer.getFormattedColKeys(pivotData, null),
2197
- };
1985
+ chartOptions.xAxis = {categories: pivotData.getColKeys()};
2198
1986
  chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, true, null, null, opts, chartOptions);
2199
1987
 
2200
1988
  var total = [];
@@ -2309,7 +2097,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2309
2097
  backgroundColor: {
2310
2098
  linearGradient: {x1: 0, y1: 0, x2: 0, y2: 1},
2311
2099
  stops: [
2312
- [0, CHART_COLORS.BACKGROUND],
2100
+ [0, '#FFF'],
2313
2101
  [1, '#333']
2314
2102
  ]
2315
2103
  },
@@ -2320,7 +2108,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2320
2108
  linearGradient: {x1: 0, y1: 0, x2: 0, y2: 1},
2321
2109
  stops: [
2322
2110
  [0, '#333'],
2323
- [1, CHART_COLORS.BACKGROUND]
2111
+ [1, '#FFF']
2324
2112
  ]
2325
2113
  },
2326
2114
  borderWidth: 1,
@@ -2336,9 +2124,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2336
2124
  };
2337
2125
 
2338
2126
 
2339
- chartOptions.xAxis = {
2340
- categories: highchartsRenderer.getFormattedColKeys(pivotData, null),
2341
- };
2127
+ chartOptions.xAxis = {categories: pivotData.getColKeys()};
2342
2128
  chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, true, null, null, opts, chartOptions);
2343
2129
 
2344
2130
  var total = [];
@@ -2374,12 +2160,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2374
2160
  minorTickWidth: 1,
2375
2161
  minorTickLength: 10,
2376
2162
  minorTickPosition: 'inside',
2377
- minorTickColor: CHART_COLORS.TICK_COLOR,
2163
+ minorTickColor: '#666',
2378
2164
  tickPixelInterval: 30,
2379
2165
  tickWidth: 2,
2380
2166
  tickPosition: 'inside',
2381
2167
  tickLength: 10,
2382
- tickColor: CHART_COLORS.TICK_COLOR,
2168
+ tickColor: '#666',
2383
2169
  labels: {
2384
2170
  step: 2,
2385
2171
  rotation: 'auto'
@@ -2604,7 +2390,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2604
2390
  highchartsRenderer.ptRenderBasicLine = function (pivotData, opts) {
2605
2391
  var chartOptions = {};
2606
2392
  var rowAttrs = pivotData.rowAttrs;
2607
- var colAttrs = pivotData.colAttrs;
2608
2393
 
2609
2394
  var additionOptions = opts.chartOptions ? opts.chartOptions : highchartsRenderer.getDefaultValueForChart('line-chart');
2610
2395
 
@@ -2665,23 +2450,16 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2665
2450
  };
2666
2451
  }
2667
2452
 
2668
- if (lodash.get(chartOptions, 'plotOptions.series.point.events')) {
2669
- chartOptions.plotOptions.series.point.events.mouseOver = opts.trackUserInsightsTooltipFunc;
2670
- chartOptions.plotOptions.series.point.events.mouseOut = opts.trackUserInsightsTooltipFunc;
2671
- }
2672
-
2673
- chartOptions.tooltip = opts.insightsTooltipFunc
2674
- ? highchartsRenderer.customFormatterTooltipInsights(pivotData, opts)
2675
- : {
2676
- formatter: highchartsRenderer.defaultFormatterToTooltip(pivotData, opts),
2677
- valueDecimals: 2,
2678
- };
2453
+ chartOptions.tooltip = {
2454
+ formatter: highchartsRenderer.defaultFormatterToTooltip(pivotData, opts),
2455
+ valueDecimals: 2,
2456
+ };
2679
2457
 
2680
2458
  chartOptions.xAxis = {
2681
- categories: highchartsRenderer.getFormattedColKeys(pivotData, null),
2459
+ categories: pivotData.getColKeys(),
2682
2460
  title: {
2683
2461
  text: additionOptions && additionOptions.axisX ? additionOptions.axisX.name : '',
2684
- },
2462
+ }
2685
2463
  };
2686
2464
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
2687
2465
  chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, additionOptions, opts, chartOptions);
@@ -2751,18 +2529,13 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2751
2529
  };
2752
2530
  }
2753
2531
 
2754
- if (lodash.get(chartOptions, 'plotOptions.series.point.events')) {
2755
- chartOptions.plotOptions.series.point.events.mouseOver = opts.trackUserInsightsTooltipFunc;
2756
- chartOptions.plotOptions.series.point.events.mouseOut = opts.trackUserInsightsTooltipFunc;
2757
- }
2758
-
2759
2532
  chartOptions.tooltip = {
2760
2533
  formatter: highchartsRenderer.defaultFormatterToTooltip(pivotData, opts),
2761
2534
  valueDecimals: 2,
2762
2535
  };
2763
2536
 
2764
2537
  chartOptions.xAxis = {
2765
- categories: highchartsRenderer.getFormattedColKeys(pivotData, null),
2538
+ categories: pivotData.getColKeys(),
2766
2539
  title: {
2767
2540
  text: additionOptions && additionOptions.axisX ? additionOptions.axisX.name : '',
2768
2541
  }
@@ -2848,11 +2621,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2848
2621
  };
2849
2622
  }
2850
2623
 
2851
- if (lodash.get(chartOptions, 'plotOptions.series.point.events')) {
2852
- chartOptions.plotOptions.series.point.events.mouseOver = opts.trackUserInsightsTooltipFunc;
2853
- chartOptions.plotOptions.series.point.events.mouseOut = opts.trackUserInsightsTooltipFunc;
2854
- }
2855
-
2856
2624
  chartOptions.tooltip = {
2857
2625
  formatter: highchartsRenderer.defaultFormatterToTooltip(pivotData, opts),
2858
2626
  valueDecimals: 2,
@@ -2863,7 +2631,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2863
2631
  }
2864
2632
 
2865
2633
  chartOptions.xAxis = {
2866
- categories: highchartsRenderer.getFormattedColKeys(pivotData, null),
2634
+ categories: pivotData.getColKeys(),
2867
2635
  title: {
2868
2636
  text: additionOptions && additionOptions.axisX ? additionOptions.axisX.name : '',
2869
2637
  }
@@ -2911,7 +2679,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2911
2679
  }
2912
2680
 
2913
2681
  chartOptions.xAxis = {
2914
- categories: highchartsRenderer.getFormattedColKeys(pivotData, null),
2682
+ categories: pivotData.getColKeys(),
2915
2683
  tickmarkPlacement: 'on',
2916
2684
  title: {
2917
2685
  text: additionOptions && additionOptions.axisX ? additionOptions.axisX.name : '',
@@ -2925,11 +2693,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
2925
2693
  chartOptions.plotOptions = {
2926
2694
  [type === 'area-chart' ? 'area' : 'areaspline']: {
2927
2695
  stacking: 'normal',
2928
- lineColor: CHART_COLORS.TICK_COLOR,
2696
+ lineColor: '#666666',
2929
2697
  lineWidth: 1,
2930
2698
  marker: {
2931
2699
  lineWidth: 1,
2932
- lineColor: CHART_COLORS.TICK_COLOR
2700
+ lineColor: '#666666'
2933
2701
  }
2934
2702
  },
2935
2703
  series: {
@@ -3012,7 +2780,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3012
2780
  }
3013
2781
 
3014
2782
  chartOptions.xAxis = {
3015
- categories: highchartsRenderer.getFormattedColKeys(pivotData, null),
2783
+ categories: pivotData.getColKeys(),
3016
2784
  tickmarkPlacement: 'on',
3017
2785
  title: {
3018
2786
  text: additionOptions && additionOptions.axisX ? additionOptions.axisX.name : '',
@@ -3037,7 +2805,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3037
2805
  zoomType: additionOptions && additionOptions.chart && additionOptions.chart.zoom_type ? additionOptions.chart.zoom_type : 'None',
3038
2806
  events: {
3039
2807
  'drilldown': function (e) {
3040
- highchartsRenderer.modifyEventPointForDrilldown(e, pivotData);
3041
2808
  if (drilldownFunc)
3042
2809
  drilldownFunc(e, this, "drilldown");
3043
2810
 
@@ -3088,13 +2855,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3088
2855
  highchartsRenderer.setYAxisMinMax(chartOptions.yAxis, additionOptions.axisY);
3089
2856
  }
3090
2857
 
3091
-
3092
- chartOptions.tooltip = opts.insightsTooltipFunc
3093
- ? highchartsRenderer.customFormatterTooltipInsights(pivotData, opts)
3094
- : {
3095
- formatter: highchartsRenderer.defaultFormatterToTooltip(pivotData, opts),
3096
- valueDecimals: 2,
3097
- };
2858
+ chartOptions.tooltip = {
2859
+ formatter: highchartsRenderer.defaultFormatterToTooltip(pivotData, opts),
2860
+ valueDecimals: 2,
2861
+ };
3098
2862
 
3099
2863
  highchartsRenderer.handleGridLines(additionOptions, chartOptions);
3100
2864
 
@@ -3134,11 +2898,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3134
2898
  };
3135
2899
  }
3136
2900
 
3137
- if (lodash.get(chartOptions, 'plotOptions.series.point.events')) {
3138
- chartOptions.plotOptions.series.point.events.mouseOver = opts.trackUserInsightsTooltipFunc;
3139
- chartOptions.plotOptions.series.point.events.mouseOut = opts.trackUserInsightsTooltipFunc;
3140
- }
3141
-
3142
2901
  chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, false);
3143
2902
 
3144
2903
  chartOptions.drilldown = highchartsRenderer.getDataLabelsStylesForDrillDown(additionOptions);
@@ -3156,7 +2915,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3156
2915
  zoomType: 'x',
3157
2916
  events: {
3158
2917
  'drilldown': function (e) {
3159
- highchartsRenderer.modifyEventPointForDrilldown(e, pivotData);
3160
2918
  if (drilldownFunc)
3161
2919
  drilldownFunc(e, this, "drilldown");
3162
2920
 
@@ -3232,12 +2990,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3232
2990
 
3233
2991
  chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, false);
3234
2992
 
3235
- chartOptions.tooltip = opts.insightsTooltipFunc
3236
- ? highchartsRenderer.customFormatterTooltipInsights(pivotData, opts)
3237
- : {
3238
- formatter: highchartsRenderer.defaultFormatterToTooltip(pivotData, opts),
3239
- valueDecimals: 2,
3240
- };
2993
+ chartOptions.tooltip = {
2994
+ formatter: highchartsRenderer.defaultFormatterToTooltip(pivotData, opts),
2995
+ };
3241
2996
 
3242
2997
  if (additionOptions && additionOptions.chart) {
3243
2998
  chartOptions.colors = highchartsRenderer.getColorsWithOffset(additionOptions.chart.colors_offset);
@@ -3275,12 +3030,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3275
3030
  }
3276
3031
  };
3277
3032
  }
3278
-
3279
- if (lodash.get(chartOptions, 'plotOptions.series.point.events')) {
3280
- chartOptions.plotOptions.series.point.events.mouseOver = opts.trackUserInsightsTooltipFunc;
3281
- chartOptions.plotOptions.series.point.events.mouseOut = opts.trackUserInsightsTooltipFunc;
3282
- }
3283
-
3284
3033
  chartOptions.xAxis = {
3285
3034
  type: 'category',
3286
3035
  crosshair: true,
@@ -3314,7 +3063,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3314
3063
  type: 'column',
3315
3064
  events: {
3316
3065
  'drilldown': function (e) {
3317
- highchartsRenderer.modifyEventPointForDrilldown(e, pivotData);
3318
3066
  if (drilldownFunc)
3319
3067
  drilldownFunc(e, this, "drilldown");
3320
3068
 
@@ -3377,9 +3125,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3377
3125
  },
3378
3126
  };
3379
3127
 
3380
- chartOptions.xAxis = {
3381
- type: 'category',
3382
- };
3128
+ chartOptions.xAxis = {type: 'category'};
3383
3129
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
3384
3130
  chartOptions.series = highchartsRenderer.ptCreateSeriesToDrillDownChart(pivotData, chartOptions, additionOptions, opts);
3385
3131
  //if (drilldownFunc)
@@ -3417,22 +3163,20 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3417
3163
  if (additionOptions) {
3418
3164
  highchartsRenderer.setYAxisMinMax(chartOptions.yAxis, additionOptions.axisY);
3419
3165
  }
3420
- chartOptions.tooltip = opts.insightsTooltipFunc
3421
- ? highchartsRenderer.customFormatterTooltipInsights(pivotData, opts)
3422
- : {
3423
- formatter: highchartsRenderer.defaultFormatterToTooltip(pivotData, opts),
3424
- valueDecimals: 2,
3425
- };
3166
+ chartOptions.tooltip = {
3167
+ formatter: highchartsRenderer.defaultFormatterToTooltip(pivotData, opts),
3168
+ valueDecimals: 2,
3169
+ };
3426
3170
 
3427
3171
  if (additionOptions && additionOptions.chart) {
3428
3172
  chartOptions.colors = highchartsRenderer.getColorsWithOffset(additionOptions.chart.colors_offset);
3429
3173
  }
3430
3174
  chartOptions.xAxis = {
3431
- categories: highchartsRenderer.getFormattedColKeys(pivotData, null),
3175
+ categories: pivotData.getColKeys(),
3432
3176
  crosshair: true,
3433
3177
  title: {
3434
3178
  text: additionOptions && additionOptions.axisX ? additionOptions.axisX.name : ''
3435
- },
3179
+ }
3436
3180
  };
3437
3181
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
3438
3182
  chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, null, opts, chartOptions);
@@ -3467,12 +3211,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3467
3211
  }
3468
3212
  };
3469
3213
  }
3470
-
3471
- if (lodash.get(chartOptions, 'plotOptions.series.point.events')) {
3472
- chartOptions.plotOptions.series.point.events.mouseOver = opts.trackUserInsightsTooltipFunc;
3473
- chartOptions.plotOptions.series.point.events.mouseOut = opts.trackUserInsightsTooltipFunc;
3474
- }
3475
-
3476
3214
  chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, false);
3477
3215
 
3478
3216
  return highchartsRenderer.ptCreateElementAndDraw(chartOptions, opts);
@@ -3511,14 +3249,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3511
3249
  }
3512
3250
  return "";
3513
3251
  },
3514
- style: lodash.merge(
3515
- LABEL_DEFAULT_OPTIONS.style,
3516
- {
3517
- color: lodash.get(additionOptions, `${ highchartsRenderer.getLabelOptionKey(additionOptions) }.font_color`)
3518
- || LABEL_DEFAULT_OPTIONS.color,
3519
- },
3520
- highchartsRenderer.getDataLabelsStyle(additionOptions)
3521
- ),
3252
+ style: {
3253
+ fontWeight: 'normal',
3254
+ color: (highchartsRenderer.highcharts_theme && highchartsRenderer.highcharts_theme.textColor) || 'gray'
3255
+ }
3522
3256
  },
3523
3257
  labels: {
3524
3258
  formatter: highchartsRenderer.defaultValueLabelsFormatter(pivotData, opts)
@@ -3528,14 +3262,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3528
3262
  highchartsRenderer.setYAxisMinMax(chartOptions.yAxis, additionOptions.axisY);
3529
3263
  }
3530
3264
 
3531
- chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, false);
3532
- chartOptions.legend.reversed = true;
3265
+ chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, rowAttrs.length, false);
3266
+ chartOptions.legend.reversed = true;
3533
3267
 
3534
- chartOptions.tooltip = opts.insightsTooltipFunc
3535
- ? highchartsRenderer.customFormatterTooltipInsights(pivotData, opts)
3536
- : {
3537
- formatter: highchartsRenderer.defaultFormatterToTooltip(pivotData, opts)
3538
- };
3268
+ chartOptions.tooltip = {
3269
+ formatter: highchartsRenderer.defaultFormatterToTooltip(pivotData, opts),
3270
+ };
3539
3271
 
3540
3272
  if (additionOptions && additionOptions.chart) {
3541
3273
  chartOptions.colors = highchartsRenderer.getColorsWithOffset(additionOptions.chart.colors_offset);
@@ -3557,16 +3289,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3557
3289
  };
3558
3290
  }
3559
3291
 
3560
- if (lodash.get(chartOptions, 'plotOptions.series.point.events')) {
3561
- chartOptions.plotOptions.series.point.events.mouseOver = opts.trackUserInsightsTooltipFunc;
3562
- chartOptions.plotOptions.series.point.events.mouseOut = opts.trackUserInsightsTooltipFunc;
3563
- }
3564
-
3565
3292
  chartOptions.xAxis = {
3566
- categories: highchartsRenderer.getFormattedColKeys(pivotData, null),
3293
+ categories: pivotData.getColKeys(),
3567
3294
  title: {
3568
3295
  text: additionOptions && additionOptions.axisX ? additionOptions.axisX.name : ''
3569
- },
3296
+ }
3570
3297
  };
3571
3298
  chartOptions = highchartsRenderer.prepareAxisX(chartOptions, additionOptions, pivotData.getColKeys());
3572
3299
  chartOptions.series = highchartsRenderer.ptCreateBasicLineSeries(pivotData, null, null, null, null, opts, chartOptions);
@@ -3671,16 +3398,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3671
3398
  };
3672
3399
  }
3673
3400
 
3674
- if (lodash.get(chartOptions, 'plotOptions.series.point.events')) {
3675
- chartOptions.plotOptions.series.point.events.mouseOver = opts.trackUserInsightsTooltipFunc;
3676
- chartOptions.plotOptions.series.point.events.mouseOut = opts.trackUserInsightsTooltipFunc;
3677
- }
3678
-
3679
3401
  chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, 3, false);
3680
3402
  chartOptions.legend.useHTML = true;
3681
3403
  chartOptions.legend.labelFormatter = function() {
3682
3404
  const name = this.name;
3683
- const findTotal = lodash.find(this.options.data, {isTotal: true});
3405
+ const findTotal = _.find(this.options.data, {isTotal: true});
3684
3406
  const color = lodash.get(findTotal, 'color') ? findTotal.color : this.color;
3685
3407
  return `<span style="margin: 5px; vertical-align: middle; display:inline-block; background-color: ${color};
3686
3408
  width: 12px; height: 12px; border-radius: 50%"></span>
@@ -3791,18 +3513,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3791
3513
  }
3792
3514
  };
3793
3515
  }
3794
-
3795
- if (lodash.get(chartOptions, 'plotOptions.series.point.events')) {
3796
- chartOptions.plotOptions.series.point.events.mouseOver = opts.trackUserInsightsTooltipFunc;
3797
- chartOptions.plotOptions.series.point.events.mouseOut = opts.trackUserInsightsTooltipFunc;
3798
- }
3799
-
3800
3516
  if (waterfallOptions.colors) {
3801
3517
  chartOptions.legend = highchartsRenderer.getOptionsForLegends(additionOptions, 3, false);
3802
3518
  chartOptions.legend.useHTML = true;
3803
3519
  chartOptions.legend.labelFormatter = function() {
3804
3520
  const name = this.options.className ? 'Total': this.name;
3805
- const findTotal = lodash.find(this.options.data, {isTotal: true});
3521
+ const findTotal = _.find(this.options.data, {isTotal: true});
3806
3522
  const color = lodash.get(findTotal, 'color') ? findTotal.color : this.color;
3807
3523
  return '<span style="margin: 5px; vertical-align: middle; display:inline-block; background-color: '+ color + '; width: 12px; height: 12px; border-radius: 50%"></span><span style="color: #000; display: inline-block; margin: 5px; vertical-align: middle;">' + name + '</span>';
3808
3524
  }
@@ -3968,10 +3684,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3968
3684
  calculated_formats: calculated_info.formats,
3969
3685
  isChangeable: false,
3970
3686
  push: function (record) {
3971
- if (highchartsRenderer.enabledNewWidgetValueFormatting) {
3972
- record.formats = highchartsRenderer.getRecordFormats(render_options, record['DR_Values']);
3973
- }
3974
-
3975
3687
  if (record.hasOwnProperty('data_types') && $.isArray(record['data_types'])) {
3976
3688
  this.data_types = this.data_types.concat(record['data_types']);
3977
3689
  this.data_types = lodash.uniq(this.data_types);
@@ -3990,7 +3702,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
3990
3702
  this.ignoreValue = true;
3991
3703
  }
3992
3704
 
3993
- if (highchartsRenderer.useTotalsCalculation && !isNaN(parseFloat(record[attr]))) {
3705
+ if (useTotalsCalculation && !isNaN(parseFloat(record[attr]))) {
3994
3706
  return this.sum = parseFloat(record[attr]);
3995
3707
  } else if (!isNaN(parseFloat(record[attr]))) {
3996
3708
  return this.sum += parseFloat(record[attr]);
@@ -4016,7 +3728,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4016
3728
  number_format = 'General';
4017
3729
  }
4018
3730
 
4019
- if (this.widget_values_format && highchartsRenderer.isUsingWidgetValuesFormat(data, render_options, widget_values_format)) {
3731
+ if (this.widget_values_format) {
4020
3732
  number_format = this.widget_values_format;
4021
3733
  }
4022
3734
 
@@ -4124,11 +3836,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4124
3836
  }
4125
3837
  }
4126
3838
  var val = parseFloat(record[attr]);
4127
-
4128
3839
  if (!isNaN(val)) {
4129
- if (highchartsRenderer.enabledNewWidgetValueFormatting) {
4130
- record.formats = highchartsRenderer.getRecordFormats(render_options, record['DR_Values']);
4131
- }
4132
3840
 
4133
3841
  if (record.hasOwnProperty('data_types') && $.isArray(record['data_types'])) {
4134
3842
  this.data_types = this.data_types.concat(record['data_types']);
@@ -4148,7 +3856,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4148
3856
  this.ignoreValue = true;
4149
3857
  }
4150
3858
 
4151
- if (highchartsRenderer.useTotalsCalculation) {
3859
+ if (useTotalsCalculation) {
4152
3860
  return this.sum = val;
4153
3861
  } else {
4154
3862
  return this.sum += val;
@@ -4175,13 +3883,13 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4175
3883
  number_format = 'General';
4176
3884
  }
4177
3885
 
4178
- if (this.widget_values_format && highchartsRenderer.isUsingWidgetValuesFormat(data, render_options, widget_values_format)) {
3886
+ if (this.widget_values_format) {
4179
3887
  number_format = this.widget_values_format;
4180
3888
  }
4181
3889
 
4182
3890
  number_format = highchartsRenderer.getCalculatedValueFormat(this.calculated_formats, rowKey, colKey) || number_format;
4183
- var formated_value = highchartsRenderer.formatValue('n', number_format, x)
4184
3891
 
3892
+ var formated_value = highchartsRenderer.formatValue('n', number_format, x)
4185
3893
  if (formated_value && formated_value.hasOwnProperty('value') && formated_value.value != null) {
4186
3894
  return formated_value.value;
4187
3895
  } else {
@@ -4219,10 +3927,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4219
3927
  var ref, x;
4220
3928
  x = parseFloat(record[attr]);
4221
3929
  if (!isNaN(x)) {
4222
- if (highchartsRenderer.enabledNewWidgetValueFormatting) {
4223
- record.formats = highchartsRenderer.getRecordFormats(render_options, record['DR_Values']);
4224
- }
4225
-
4226
3930
  if (record.hasOwnProperty('data_types') && $.isArray(record['data_types'])) {
4227
3931
  this.data_types = this.data_types.concat(record['data_types']);
4228
3932
  this.data_types = lodash.uniq(this.data_types);
@@ -4240,7 +3944,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4240
3944
  if (highchartsRenderer.ignoreIfCalculatedValue(data, rowKey, colKey, record, calculated_info.associated_fields, render_options, is_graph)) {
4241
3945
  this.ignoreValue = true;
4242
3946
  }
4243
- if (highchartsRenderer.useTotalsCalculation) {
3947
+ if (useTotalsCalculation) {
4244
3948
  return this.val = x;
4245
3949
  } else {
4246
3950
  return this.val = Math.min(x, (ref = this.val) != null ? ref : x);
@@ -4265,7 +3969,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4265
3969
  number_format = 'General';
4266
3970
  }
4267
3971
 
4268
- if (this.widget_values_format && highchartsRenderer.isUsingWidgetValuesFormat(data, render_options, widget_values_format)) {
3972
+ if (this.widget_values_format) {
4269
3973
  number_format = this.widget_values_format;
4270
3974
  }
4271
3975
 
@@ -4309,10 +4013,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4309
4013
  var ref, x;
4310
4014
  x = parseFloat(record[attr]);
4311
4015
  if (!isNaN(x)) {
4312
- if (highchartsRenderer.enabledNewWidgetValueFormatting) {
4313
- record.formats = highchartsRenderer.getRecordFormats(render_options, record['DR_Values']);
4314
- }
4315
-
4316
4016
  if (record.hasOwnProperty('data_types') && $.isArray(record['data_types'])) {
4317
4017
  this.data_types = this.data_types.concat(record['data_types']);
4318
4018
  this.data_types = lodash.uniq(this.data_types);
@@ -4331,12 +4031,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4331
4031
  this.ignoreValue = true;
4332
4032
  }
4333
4033
 
4334
- if (highchartsRenderer.useTotalsCalculation) {
4034
+ if (useTotalsCalculation) {
4335
4035
  return this.val = x;
4336
4036
  } else {
4337
- return this.val = Math.max(x, (ref = this.val) != null ? ref : x);
4338
- }
4339
- }
4037
+ return this.val = Math.min(x, (ref = this.val) != null ? ref : x);
4038
+ } }
4340
4039
  },
4341
4040
  value: function () {
4342
4041
  if (this.ignoreValue) {
@@ -4356,7 +4055,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4356
4055
  number_format = 'General';
4357
4056
  }
4358
4057
 
4359
- if (this.widget_values_format && highchartsRenderer.isUsingWidgetValuesFormat(data, render_options, widget_values_format)) {
4058
+ if (this.widget_values_format) {
4360
4059
  number_format = this.widget_values_format;
4361
4060
  }
4362
4061
 
@@ -4401,10 +4100,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4401
4100
  var ref, x;
4402
4101
  x = parseFloat(record[attr]);
4403
4102
  if (!isNaN(x)) {
4404
- if (highchartsRenderer.enabledNewWidgetValueFormatting) {
4405
- record.formats = highchartsRenderer.getRecordFormats(render_options, record['DR_Values']);
4406
- }
4407
-
4408
4103
  if (record.hasOwnProperty('data_types') && $.isArray(record['data_types'])) {
4409
4104
  this.data_types = this.data_types.concat(record['data_types']);
4410
4105
  this.data_types = lodash.uniq(this.data_types);
@@ -4424,7 +4119,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4424
4119
  }
4425
4120
 
4426
4121
 
4427
- if (highchartsRenderer.useTotalsCalculation) {
4122
+ if (useTotalsCalculation) {
4428
4123
  this.sum = parseFloat(x);
4429
4124
  } else {
4430
4125
  this.sum += parseFloat(x);
@@ -4437,7 +4132,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4437
4132
  if (this.ignoreValue) {
4438
4133
  return null;
4439
4134
  }
4440
- if (highchartsRenderer.useTotalsCalculation) {
4135
+ if (useTotalsCalculation) {
4441
4136
  return this.sum;
4442
4137
  }
4443
4138
  return this.sum / this.len;
@@ -4454,7 +4149,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4454
4149
  number_format = 'General';
4455
4150
  }
4456
4151
 
4457
- if (this.widget_values_format && highchartsRenderer.isUsingWidgetValuesFormat(data, render_options, widget_values_format)) {
4152
+ if (this.widget_values_format) {
4458
4153
  number_format = this.widget_values_format;
4459
4154
  }
4460
4155
 
@@ -4473,84 +4168,300 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4473
4168
  };
4474
4169
  };
4475
4170
 
4476
- highchartsRenderer.getAxis = function (axis, opts, farceIsTable = false) {
4477
- let is_transpose = lodash.get(opts, 'rendererOptions.chartOptions.table_options.transpose_table', false);
4478
- let is_table = opts.isTable;
4479
- if (is_transpose && (is_table || farceIsTable)) {
4480
- if (axis == 'col_total') {
4481
- return 'row_total';
4482
- } else {
4483
- return 'col_total';
4484
- }
4485
- }
4486
- return axis;
4487
- };
4171
+ highchartsRenderer.createTotalColFiltersArr = function (colKeys, colTotals, totalFilters, pivotData) {
4172
+ var colIndexesToFilter = []
4173
+ if (!totalFilters || !totalFilters.type)
4174
+ return colIndexesToFilter
4488
4175
 
4489
- highchartsRenderer.sanitizeOptions = function (opts) {
4490
- if (opts && opts.rendererOptions) {
4491
- if (opts.rendererOptions.chart_title) {
4492
- opts.rendererOptions.chart_title = highchartsRenderer.decodeFunc(opts.rendererOptions.chart_title);
4493
- }
4176
+ var colTotalsWithoutSubTotals = {};
4177
+ var i, flatKey;
4178
+ for (i in colKeys) {
4179
+ flatKey = colKeys[i].join($.pivotUtilities.delim);
4180
+ if (colTotals[flatKey])
4181
+ colTotalsWithoutSubTotals[flatKey] = colTotals[flatKey];
4494
4182
  }
4495
4183
 
4496
- if (opts && opts.chartOptions && opts.chartOptions.subtitle) {
4497
- opts.chartOptions.subtitle.subtitle = highchartsRenderer.decodeFunc(opts.chartOptions.subtitle.subtitle);
4184
+ var filterFunc = highchartsRenderer.getTotalsFilter(totalFilters.type, totalFilters.value, totalFilters.is_absolute, colTotalsWithoutSubTotals)
4185
+ for (var j in colKeys) {
4186
+ var totalVal = pivotData.getAggregator([], colKeys[j]).value();
4187
+ if (filterFunc(totalVal)) {
4188
+ colIndexesToFilter.push(j)
4189
+ }
4498
4190
  }
4499
4191
 
4500
- if (opts && opts.rendererOptions && opts.rendererOptions.chartOptions && opts.rendererOptions.chartOptions.subtitle) {
4501
- opts.rendererOptions.chartOptions.subtitle.subtitle = highchartsRenderer.decodeFunc(opts.rendererOptions.chartOptions.subtitle.subtitle);
4192
+ let keyAttListToFilter = [];
4193
+ for (var attr in pivotData.colAttrs) {
4194
+ for (var key in pivotData.colKeys) {
4195
+ if ($.inArray(key, colIndexesToFilter) >= 0) {
4196
+ keyAttListToFilter.push(pivotData.colKeys[key])
4197
+ }
4198
+ }
4502
4199
  }
4503
-
4200
+ return keyAttListToFilter;
4504
4201
  };
4505
4202
 
4506
- highchartsRenderer.getIconsForTotalOptions = function (options, axis) {
4507
- let tr_axis = axis;
4203
+ highchartsRenderer.createTotalRowFiltersArr = function (rowKeys, rowTotals, totalFilters, pivotData) {
4204
+ var rowIndexesToFilter = [];
4205
+ if (!totalFilters || !totalFilters.type)
4206
+ return rowIndexesToFilter;
4508
4207
 
4509
- let ret_str = '';
4510
- if (options && options.total_value_options && options.total_value_options.filter_options && options.total_value_options.filter_options.axis == tr_axis) {
4511
- //TODO add tooltip with description of filter
4512
- ret_str += '<i class="fa fa-filter"></i>';
4208
+ var rowTotalsWithoutSubTotals = {};
4209
+ var i, flatKey;
4210
+ for (i in rowKeys) {
4211
+ flatKey = rowKeys[i].join($.pivotUtilities.delim);
4212
+ if (rowTotals[flatKey])
4213
+ rowTotalsWithoutSubTotals[flatKey] = rowTotals[flatKey];
4513
4214
  }
4514
4215
 
4515
- return ret_str;
4216
+ var filterFunc = highchartsRenderer.getTotalsFilter(totalFilters.type, totalFilters.value, totalFilters.is_absolute, rowTotalsWithoutSubTotals)
4217
+ for (var j in rowKeys) {
4218
+ var totalVal = pivotData.getAggregator(rowKeys[j], []).value();
4219
+ if (filterFunc(totalVal)) {
4220
+ rowIndexesToFilter.push(j)
4221
+ }
4222
+ }
4223
+
4224
+ let keyAttListToFilter = [];
4225
+ for (var attr in pivotData.rowAttrs) {
4226
+ for (var key in pivotData.rowKeys) {
4227
+ if ($.inArray(key, rowIndexesToFilter) >= 0) {
4228
+ keyAttListToFilter.push(pivotData.rowKeys[key])
4229
+ }
4230
+ }
4231
+ }
4232
+ return keyAttListToFilter;
4516
4233
  };
4517
4234
 
4518
- highchartsRenderer.getSortingByValueOrderList = function (pivotData, sortingOptions, keysArray, attrs, fieldIndex, widget) {
4519
- let values_names_arr = [];
4520
- lodash.forEach(keysArray, function (val) {
4521
- const firstArray = [];
4522
- const secondArray = val.slice(0, fieldIndex + 1);
4523
-
4524
- let valueForComparison;
4525
- if (sortingOptions.sort_by === 'variance') {
4526
- const varianceConfig = widget.options.chartOptions.delta_column;
4527
- const data = pivotData.input;
4528
- const varianceField = varianceConfig.field === 'category' ? widget.cols[0] : widget.rows[0];
4529
- const varianceRowsForCurrentKey = lodash.filter(data, row =>
4530
- row[varianceField.name] === varianceConfig.name
4531
- && lodash.every(secondArray, (item, index) => row[attrs[index]] === item)
4532
- );
4235
+ highchartsRenderer.getTotalsFilter = function (type, vals, is_absolute, totals) {
4236
+ var filter = (a) => false;
4237
+ switch (type) {
4238
+ case "filter_above":
4239
+ if (is_absolute)
4240
+ filter = (a) => Math.abs(a) <= vals[0];
4241
+ else
4242
+ filter = (a) => a <= vals[0];
4243
+ break;
4244
+ case "filter_below":
4245
+ if (is_absolute)
4246
+ filter = (a) => Math.abs(a) >= vals[0];
4247
+ else
4248
+ filter = (a) => a >= vals[0];
4249
+ break;
4250
+ case "filter_between":
4251
+ if (is_absolute)
4252
+ filter = (a) => Math.abs(a) <= vals[0] || Math.abs(a) >= vals[1];
4253
+ else
4254
+ filter = (a) => a <= vals[0] || a >= vals[1];
4255
+ break;
4256
+ case "filter_out_of_range":
4257
+ if (is_absolute)
4258
+ filter = (a) => Math.abs(a) >= vals[0] && Math.abs(a) <= vals[1];
4259
+ else
4260
+ filter = (a) => a >= vals[0] && a <= vals[1];
4261
+ break;
4262
+ case "filter_top_x":
4263
+ var topx;
4264
+ if (is_absolute)
4265
+ topx = lodash.map(totals, (x) => Math.abs(x.value())).filter((v, i, a) => a.indexOf(v) === i).sort((a, b) => b - a).slice(0, vals[0]).pop();
4266
+ else
4267
+ topx = lodash.map(totals, (x) => x.value()).filter((v, i, a) => a.indexOf(v) === i).sort((a, b) => b - a).slice(0, vals[0]).pop();
4533
4268
 
4534
- valueForComparison = lodash.reduce(varianceRowsForCurrentKey, (a, d) => a + d[widget.vals[0].name], 0);
4269
+ if (topx != undefined) {
4270
+ if (is_absolute)
4271
+ filter = (a) => Math.abs(a) < topx;
4272
+ else
4273
+ filter = (a) => a < topx;
4274
+ }
4275
+ break;
4276
+ case "filter_bottom_x":
4277
+ var bottomx;
4278
+ if (is_absolute)
4279
+ bottomx = lodash.map(totals, (x) => Math.abs(x.value())).filter((v, i, a) => a.indexOf(v) === i).sort((a, b) => a - b).slice(0, vals[0]).pop();
4280
+ else
4281
+ bottomx = lodash.map(totals, (x) => x.value()).filter((v, i, a) => a.indexOf(v) === i).sort((a, b) => a - b).slice(0, vals[0]).pop();
4282
+
4283
+ if (bottomx != undefined) {
4284
+ if (is_absolute)
4285
+ filter = (a) => Math.abs(a) > bottomx;
4286
+ else
4287
+ filter = (a) => a > bottomx;
4288
+ }
4289
+ break;
4290
+ case "filter_smallest":
4291
+ const smallest_sumOfFields = lodash.reduce(totals, (acc, curr) => acc += curr.sum, 0);
4292
+ const smallest = Math.floor((smallest_sumOfFields * vals[0])/100);
4293
+
4294
+ if (is_absolute)
4295
+ filter = (a) => Math.abs(a) > smallest;
4296
+ else
4297
+ filter = (a) => a > smallest;
4298
+ break;
4299
+ case "filter_largest":
4300
+ const largest_sumOfFields = lodash.reduce(totals, (acc, curr) => acc += curr.sum, 0);
4301
+ const largest = Math.floor((largest_sumOfFields * vals[0])/100);
4302
+
4303
+ if (is_absolute)
4304
+ filter = (a) => Math.abs(a) < largest;
4305
+ else
4306
+ filter = (a) => a < largest;
4307
+ break;
4308
+ case "filter_out_zero":
4309
+ if (is_absolute)
4310
+ filter = (a) => Math.abs(a) == 0;
4311
+ else
4312
+ filter = (a) => a == 0;
4313
+ break;
4314
+ default:
4315
+
4316
+ }
4317
+ return filter;
4318
+ };
4319
+
4320
+ highchartsRenderer.getAxis = function (axis, opts, farceIsTable = false) {
4321
+ let is_transpose = lodash.get(opts, 'rendererOptions.chartOptions.table_options.transpose_table', false);
4322
+ let is_table = opts.isTable;
4323
+ if (is_transpose && (is_table || farceIsTable)) {
4324
+ if (axis == 'col_total') {
4325
+ return 'row_total';
4535
4326
  } else {
4536
- let getAggregatorParams = [firstArray, secondArray];
4327
+ return 'col_total';
4328
+ }
4329
+ }
4330
+ return axis;
4331
+ };
4332
+
4333
+ highchartsRenderer.generateFilteredResult = function (totalFilters, optsFiltered, rowData, opts, pivotData) {
4334
+ let keyAttListToFilter;
4335
+ let axis = highchartsRenderer.getAxis(totalFilters.filter_options.axis, opts);
4537
4336
 
4538
- if (lodash.includes(pivotData.rowAttrs, attrs[fieldIndex])) {
4539
- getAggregatorParams = lodash.reverse(getAggregatorParams);
4337
+ if (axis == 'col_total') {
4338
+ keyAttListToFilter = highchartsRenderer.createTotalColFiltersArr(pivotData.colKeys, pivotData.colTotals, totalFilters.filter_options, pivotData);
4339
+ return highchartsRenderer.generateFilteredResultForRowAndCol(keyAttListToFilter, optsFiltered, pivotData.colAttrs, rowData, opts, pivotData);
4340
+ } else if (axis == 'row_total') {
4341
+ keyAttListToFilter = highchartsRenderer.createTotalRowFiltersArr(pivotData.rowKeys, pivotData.rowTotals, totalFilters.filter_options, pivotData);
4342
+ return highchartsRenderer.generateFilteredResultForRowAndCol(keyAttListToFilter, optsFiltered, pivotData.rowAttrs, rowData, opts, pivotData);
4343
+ } else {
4344
+ return opts.renderer(pivotData, opts.rendererOptions);
4345
+ }
4346
+ };
4347
+
4348
+ highchartsRenderer.generateFilteredResultForRowAndCol = function (keyAttListToFilter, optsFiltered, attrs, rowData, opts, pivotData) {
4349
+ let pivotDataFiltered = pivotData;
4350
+ if (!lodash.isEmpty(keyAttListToFilter)) {
4351
+ var myfilter = function (rec) {
4352
+ for (var i in keyAttListToFilter) {
4353
+ var allsame = true;
4354
+ var find_one = lodash.find(attrs, function (val, j) {
4355
+ return ((rec[val] != keyAttListToFilter[i][j]) && !(!rec[val] && keyAttListToFilter[i][j] == "null"))
4356
+ });
4357
+ if (find_one == undefined) {
4358
+ return false;
4359
+ }
4540
4360
  }
4361
+ return true;
4362
+ }
4363
+ optsFiltered.filter = myfilter;
4541
4364
 
4542
- let aggregator_subtotal = pivotData.getAggregator(...getAggregatorParams);
4365
+ pivotDataFiltered = $.pivotUtilities.getPivotDataModel(rowData, optsFiltered);
4366
+ }
4367
+ return opts.renderer(pivotDataFiltered, opts.rendererOptions);
4368
+ };
4369
+
4370
+ highchartsRenderer.sanitizeOptions = function (opts) {
4371
+ if (opts && opts.rendererOptions) {
4372
+ if (opts.rendererOptions.chart_title) {
4373
+ opts.rendererOptions.chart_title = highchartsRenderer.decodeFunc(opts.rendererOptions.chart_title);
4374
+ }
4375
+ }
4376
+
4377
+ if (opts && opts.chartOptions && opts.chartOptions.subtitle) {
4378
+ opts.chartOptions.subtitle.subtitle = highchartsRenderer.decodeFunc(opts.chartOptions.subtitle.subtitle);
4379
+ }
4380
+
4381
+ if (opts && opts.rendererOptions && opts.rendererOptions.chartOptions && opts.rendererOptions.chartOptions.subtitle) {
4382
+ opts.rendererOptions.chartOptions.subtitle.subtitle = highchartsRenderer.decodeFunc(opts.rendererOptions.chartOptions.subtitle.subtitle);
4383
+ }
4384
+
4385
+ };
4386
+
4387
+ highchartsRenderer.getIconsForTotalOptions = function (options, axis) {
4388
+ let tr_axis = axis;
4389
+
4390
+ let ret_str = '';
4391
+ if (options && options.total_value_options && options.total_value_options.filter_options && options.total_value_options.filter_options.axis == tr_axis) {
4392
+ //TODO add tooltip with description of filter
4393
+ ret_str += '<i class="fa fa-filter"></i>';
4394
+ }
4395
+
4396
+ return ret_str;
4397
+ };
4398
+
4399
+ highchartsRenderer.getNewAttrSortingForCol = function (pivotData, sortingOptions) {
4400
+ let rowAttrs, rowKeys, colKeys, colAttrs;
4401
+ rowAttrs = pivotData.rowAttrs;
4402
+ rowKeys = pivotData.rowKeys;
4403
+ colKeys = pivotData.colKeys;
4404
+ colAttrs = pivotData.colAttrs;
4405
+
4406
+
4407
+ if (!colAttrs || colAttrs.length == 0) {
4408
+ return null;
4409
+ }
4410
+
4411
+ let values_names_arr = [];
4412
+ let keysArray = sortingOptions.field ? rowKeys : colKeys;
4413
+
4414
+ lodash.forEach(keysArray, function (val) {
4415
+ let firstArray = sortingOptions.field ? [val[0]] : [];
4416
+ let secondArray = sortingOptions.field ? sortingOptions.field.split(highchartsRenderer.delimer) : [val[0]];
4417
+ let aggregator_subtotal = pivotData.getAggregator(firstArray, secondArray);
4543
4418
 
4544
- if (aggregator_subtotal) {
4545
- valueForComparison = aggregator_subtotal.value();
4419
+ if (aggregator_subtotal) {
4420
+ let value_subtotal = aggregator_subtotal.value();
4421
+ if (sortingOptions && sortingOptions.is_absolute && !isNaN(parseFloat(value_subtotal))) {
4422
+ value_subtotal = Math.abs(value_subtotal);
4546
4423
  }
4424
+ values_names_arr.push({name: val[0], value: value_subtotal});
4547
4425
  }
4426
+ });
4548
4427
 
4549
- if (!lodash.isNil(valueForComparison)) {
4550
- if (sortingOptions && sortingOptions.is_absolute && !isNaN(parseFloat(valueForComparison))) {
4551
- valueForComparison = Math.abs(valueForComparison);
4428
+ // ORDERING
4429
+ let sorting_vector = ['asc'];
4430
+ if (sortingOptions && sortingOptions.type == 'largestToSmallest') {
4431
+ sorting_vector = ['desc'];
4432
+ }
4433
+ values_names_arr = lodash.orderBy(values_names_arr, ['value'], sorting_vector);
4434
+
4435
+ // map only names
4436
+ let attr_sorted_values = lodash.map(values_names_arr, 'name');
4437
+ return {name: sortingOptions.field ? rowAttrs[0] : colAttrs[0], values: attr_sorted_values};
4438
+ };
4439
+
4440
+ highchartsRenderer.getNewAttrSortingForRow = function (pivotData, sortingOptions) {
4441
+ let rowAttrs, rowKeys, colKeys, colAttrs;
4442
+ rowAttrs = pivotData.rowAttrs;
4443
+ rowKeys = pivotData.rowKeys;
4444
+ colKeys = pivotData.colKeys;
4445
+ colAttrs = pivotData.colAttrs;
4446
+
4447
+ if (!rowAttrs || rowAttrs.length == 0) {
4448
+ return null;
4449
+ }
4450
+
4451
+ let values_names_arr = [];
4452
+ let keysArray = sortingOptions.field ? colKeys : rowKeys;
4453
+
4454
+ lodash.forEach(keysArray, function (val) {
4455
+ let firstArray = sortingOptions.field ? sortingOptions.field.split(highchartsRenderer.delimer) : [val[0]];
4456
+ let secondArray = sortingOptions.field ? [val[0]] : [];
4457
+ let aggregator_subtotal = pivotData.getAggregator(firstArray, secondArray);
4458
+
4459
+ if (aggregator_subtotal) {
4460
+ let value_subtotal = aggregator_subtotal.value();
4461
+ if (sortingOptions && sortingOptions.is_absolute && !isNaN(parseFloat(value_subtotal))) {
4462
+ value_subtotal = Math.abs(value_subtotal);
4552
4463
  }
4553
- values_names_arr.push({name: secondArray.join(','), value: valueForComparison});
4464
+ values_names_arr.push({name: val[0], value: value_subtotal});
4554
4465
  }
4555
4466
  });
4556
4467
 
@@ -4562,33 +4473,36 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4562
4473
  values_names_arr = lodash.orderBy(values_names_arr, ['value'], sorting_vector);
4563
4474
 
4564
4475
  // map only names
4565
- return lodash.map(values_names_arr, 'name');
4476
+ let attr_sorted_values = lodash.map(values_names_arr, 'name');
4477
+ return {name: sortingOptions.field ? colAttrs[0] : rowAttrs[0], values: attr_sorted_values};
4566
4478
  };
4567
4479
 
4568
- highchartsRenderer.generateSortingFunctionByValues = function (sortByValueSettings, pivotData, opts, widget) {
4480
+ highchartsRenderer.generateSortingFunctionByValues = function (sortingOptions, pivotData, opts) {
4481
+ let new_map;
4482
+ let axis = highchartsRenderer.getAxis(sortingOptions.axis, opts);
4483
+ if (axis == 'col_total') {
4484
+ new_map = highchartsRenderer.getNewAttrSortingForCol(pivotData, sortingOptions);
4485
+ } else if (axis == 'row_total') {
4486
+ new_map = highchartsRenderer.getNewAttrSortingForRow(pivotData, sortingOptions);
4487
+ }
4488
+
4569
4489
  let old_sorters_function = opts.sorters;
4570
4490
  if (!old_sorters_function) {
4571
4491
  old_sorters_function = function () {
4572
4492
  };
4573
4493
  }
4574
- return function (attr) {
4575
- const sortingOptions = lodash.find(sortByValueSettings, fieldSorting => fieldSorting.name === attr);
4576
- if (sortingOptions) {
4577
- const axis = highchartsRenderer.getAxis(_.includes(pivotData.colAttrs, attr) ? 'col_total' : 'row_total', opts);
4578
- const isColumnSort = axis === 'col_total';
4579
- const fieldIndex = lodash.findIndex(isColumnSort ? pivotData.colAttrs : pivotData.rowAttrs, name => name === attr);
4580
- const orderedNamesList = highchartsRenderer.getSortingByValueOrderList(
4581
- pivotData,
4582
- sortingOptions.sorting,
4583
- pivotData[isColumnSort ? 'colKeys' : 'rowKeys'],
4584
- pivotData[isColumnSort ? 'colAttrs' : 'rowAttrs'],
4585
- fieldIndex,
4586
- widget
4587
- );
4588
- return $.pivotUtilities.sortAs(orderedNamesList);
4589
- } else {
4590
- return old_sorters_function(attr);
4494
+ if (new_map) {
4495
+ var sortAs = $.pivotUtilities.sortAs;
4496
+ let new_sorters_function = function (attr) {
4497
+ if (new_map.name == attr) {
4498
+ return $.pivotUtilities.sortAs(new_map.values);
4499
+ } else {
4500
+ return old_sorters_function(attr);
4501
+ }
4591
4502
  }
4503
+ return new_sorters_function;
4504
+ } else {
4505
+ return old_sorters_function;
4592
4506
  }
4593
4507
  };
4594
4508
 
@@ -4690,6 +4604,17 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4690
4604
  }
4691
4605
  };
4692
4606
 
4607
+ highchartsRenderer.waterfallConstants = {
4608
+ [highchartsRenderer.CHART_TYPES.WATERFALL_BREAKDOWN]: {
4609
+ minCategoriesCount: 2,
4610
+ maxCategoriesCount: 5,
4611
+ },
4612
+ [highchartsRenderer.CHART_TYPES.WATERFALL_WALKTHROUGH]: {
4613
+ minCategoriesCount: 2,
4614
+ maxCategoriesCount: 10,
4615
+ }
4616
+ };
4617
+
4693
4618
  highchartsRenderer.rhPivotView = function (rowData, options, isTable = false, widget = null) {
4694
4619
  if (!rowData || !rowData) {
4695
4620
  if (options.onlyOptions) {
@@ -4720,20 +4645,15 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4720
4645
  (category) => category.trend !== 'total'
4721
4646
  );
4722
4647
  }
4723
- if (uniqueCategories && ((maxCategories && uniqueCategories.length > maxCategories)
4724
- || (minCategories && uniqueCategories.length < minCategories))) {
4725
- options.error_has_occurred = true;
4726
- const breakdownText = `Please adjust your dashboard's reference date or filter selections as \
4727
- the quantity of data doesn't match the limit of at least ${ minCategories } values.`;
4728
- const walkthroughText = `Please adjust your dashboard's reference date and filter selections as \
4729
- the quantity of data doesn't match the chart's ${ minCategories }-${ maxCategories } value limit.`;
4730
4648
 
4649
+ if (uniqueCategories && (uniqueCategories.length > maxCategories || uniqueCategories.length < minCategories )) {
4650
+ options.error_has_occurred = true;
4731
4651
  options.error_params = {
4732
4652
  title: 'Data Conflict',
4733
- text: isBreakdown ? breakdownText : walkthroughText,
4653
+ text: `Please adjust your dashboard's reference date and filter selections as \
4654
+ the quantity of data doesn't match the chart's ${ minCategories }-${ maxCategories } value limit.`,
4734
4655
  class: uniqueCategories.length < minCategories ? 'waterfall-nodata' : 'waterfall-too-much-data',
4735
4656
  }
4736
-
4737
4657
  return highchartsRenderer.getNoDataResult(options.rendererOptions, true);
4738
4658
  }
4739
4659
  }
@@ -4791,12 +4711,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4791
4711
  optsFiltered = $.extend(defaults, opts);
4792
4712
  result = null;
4793
4713
  try {
4794
- const isTranspose = lodash.get(opts, 'rendererOptions.chartOptions.table_options.transpose_table', false);
4795
- opts.getFormattedColKeys = isTranspose ? highchartsRenderer.getFormattedRowKeys : highchartsRenderer.getFormattedColKeys;
4796
- opts.getFormattedRowKeys = isTranspose ? highchartsRenderer.getFormattedColKeys : highchartsRenderer.getFormattedRowKeys;
4797
-
4798
4714
  pivotData = $.pivotUtilities.getPivotDataModel(rowData, opts);
4799
- pivotData.sortByValueAttrs = [];
4800
4715
  try {
4801
4716
  if (options && options.onlyOptions) {
4802
4717
  if (!opts.rendererOptions) {
@@ -4804,24 +4719,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4804
4719
  }
4805
4720
  opts.rendererOptions.onlyOptions = true;
4806
4721
  }
4807
-
4808
- if (!highchartsRenderer.sortHasBeenDoneOnBE(lodash.get(widget, 'pivot.keysObject'))) {
4809
- const sortByValueSettings = lodash.filter(
4810
- lodash.get(widget, 'options.sortingFields', []),
4811
- sortingField => lodash.includes(['field_values', 'variance'], lodash.get(sortingField, 'sorting.sort_by'))
4812
- );
4813
-
4814
- if (sortByValueSettings.length) {
4815
- pivotData.sortByValueAttrs = lodash.map(sortByValueSettings, fieldSorting => fieldSorting.name);
4816
- let new_sorting_function = highchartsRenderer.generateSortingFunctionByValues(sortByValueSettings, pivotData, opts, widget);
4817
- opts.sorters = new_sorting_function;
4818
- optsFiltered.sorters = new_sorting_function;
4819
- pivotData.sorters = new_sorting_function;
4820
-
4821
- if (lodash.isObject(lodash.get(widget, 'pivot'))) {
4822
- widget.pivot.sorters = new_sorting_function;
4823
- }
4824
- }
4722
+ var totalFilters = lodash.get(opts, 'rendererOptions.total_value_options', null);
4723
+ if (totalFilters && totalFilters.sorting_options) {
4724
+ let new_sorting_function = highchartsRenderer.generateSortingFunctionByValues(totalFilters.sorting_options, pivotData, opts);
4725
+ opts.sorters = new_sorting_function;
4726
+ optsFiltered.sorters = new_sorting_function;
4727
+ pivotData.sorters = new_sorting_function;
4825
4728
  }
4826
4729
 
4827
4730
  result = opts.renderer(pivotData, opts.rendererOptions);
@@ -4835,10 +4738,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4835
4738
  result = {};
4836
4739
  }
4837
4740
  }
4838
-
4839
- if (lodash.isObject(lodash.get(widget, 'pivot'))) {
4840
- widget.pivot.sortByValueAttrs = pivotData.sortByValueAttrs;
4841
- }
4842
4741
  } catch (_error) {
4843
4742
  e = _error;
4844
4743
  if (typeof console !== "undefined" && console !== null) {
@@ -4849,7 +4748,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4849
4748
  result = {};
4850
4749
  }
4851
4750
  }
4852
-
4853
4751
  return result;
4854
4752
  };
4855
4753
 
@@ -4874,17 +4772,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4874
4772
  if (!pivotOptions) {
4875
4773
  return;
4876
4774
  }
4877
-
4878
4775
  var subopts = {
4879
4776
  sorters: pivotOptions ? pivotOptions.sorters : null,
4880
- sortByValueAttrs: pivotOptions ? pivotOptions.sortByValueAttrs : null,
4881
4777
  cols: lodash.map(pivotOptions.axisArray, 'name'),
4882
4778
  rows: lodash.map(pivotOptions.legendArray, 'name'),
4883
- colFormats: highchartsRenderer.getTableFormatInfosForWidgetFields(widget, pivotOptions, widget.cols),
4884
- rowFormats: highchartsRenderer.getTableFormatInfosForWidgetFields(widget, pivotOptions, widget.rows),
4885
4779
  rendererOptions: widget.options,
4886
4780
  dateValuesDictionary: pivotOptions ? pivotOptions.dateValuesDictionary : null,
4887
- keysObject: pivotOptions ? pivotOptions.keysObject : null,
4888
4781
  };
4889
4782
 
4890
4783
  if (!subopts.rendererOptions) {
@@ -4967,7 +4860,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4967
4860
  return 'Q' + q + " " + dateObj.getFullYear();
4968
4861
  };
4969
4862
 
4970
- highchartsRenderer.returnRawDataWeekValue = function (d) {
4863
+ highchartsRenderer.getWeekNumber = function (d) {
4971
4864
  // Copy date so don't modify original
4972
4865
  d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
4973
4866
  // get Thursday of the year and get year of week
@@ -4999,6 +4892,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
4999
4892
  return "W" + weekNo;
5000
4893
  }
5001
4894
 
4895
+ highchartsRenderer.returnRawDataWeekValue = function (dateObj) {
4896
+ return highchartsRenderer.getWeekNumber(dateObj);
4897
+ };
4898
+
5002
4899
  highchartsRenderer.check_values_not_for_convert = function (currentgraph, field_name) {
5003
4900
  let vals_not_convert = [];
5004
4901
  if (lodash.has(currentgraph, "options.chartOptions.delta_column") && currentgraph.options.chartOptions.delta_column) {
@@ -5037,7 +4934,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5037
4934
  })
5038
4935
  };
5039
4936
 
5040
- highchartsRenderer.returnRawDataValue = function (type, value, format, field_name, vals_not_for_convert, isFormattingNumbers) {
4937
+ highchartsRenderer.returnRawDataValue = function (type, value, format, field_name, vals_not_for_convert) {
5041
4938
  if (vals_not_for_convert && vals_not_for_convert.length && lodash.includes(vals_not_for_convert, value)) {
5042
4939
  return value;
5043
4940
  }
@@ -5058,7 +4955,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5058
4955
  }
5059
4956
 
5060
4957
  if (typeof (value) != 'number') {
5061
- const drAdditionalField = lodash.find($.pivotUtilities.additionalFieldsList, {key: value});
4958
+ const drAdditionalField = _.find($.pivotUtilities.additionalFieldsList, {key: value});
5062
4959
  if (drAdditionalField && drAdditionalField.key)
5063
4960
  return drAdditionalField.key;
5064
4961
 
@@ -5088,25 +4985,13 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5088
4985
  format = format.replace('yyyy', 'YYYY');
5089
4986
  format = format.replace('yy', 'YY');
5090
4987
  format = lodash.replace(format, /h/g, 'H');
5091
-
5092
- const timeframe = highchartsRenderer.getTimeframeByFormat(format);
5093
- const fiscalYearMonthsModifier = highchartsRenderer.getFiscalYearMonthModifier();
5094
-
5095
- let date = moment_lib(tryParse).utcOffset(0);
5096
- if (lodash.includes(['quarter', 'year'], timeframe)) {
5097
- date = date.subtract(fiscalYearMonthsModifier, 'M');
5098
- }
5099
-
5100
- return date.format(format) + "";
4988
+ return moment_lib(tryParse).utcOffset(0).format(format) + "";
5101
4989
  } else {
5102
4990
  return 'Wrong date format';
5103
4991
  }
5104
4992
  } else {
5105
- const isFormatting = highchartsRenderer.isFormattingAxisFeatureOn() && isFormattingNumbers && format && !isNaN(value);
5106
4993
  if (value === null || value === '[null]') {
5107
4994
  return '[null]';
5108
- } else if (isFormatting) {
5109
- return highchartsRenderer.formatValue('n', format, value).value;
5110
4995
  }
5111
4996
  }
5112
4997
 
@@ -5146,18 +5031,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5146
5031
  };
5147
5032
 
5148
5033
  highchartsRenderer.isSystemField = function (field) {
5149
- const dynamicSystemFields = [];
5150
-
5151
- const areMultipleAndScenarioTags = highchartsRenderer.hasFeature(FEATURES.MULTIPLE_DIMENSION_TAGS)
5152
- && highchartsRenderer.hasFeature(FEATURES.USE_NEW_SCENARIO_TAG);
5153
-
5154
- if (areMultipleAndScenarioTags) {
5155
- dynamicSystemFields.push('Scenario', 'Budget Cycle');
5156
- }
5157
-
5158
- const regexDelimer = '|';
5159
- const dynamicSystemFieldsRegex = dynamicSystemFields.length ? dynamicSystemFields.join(regexDelimer) + regexDelimer : '';
5160
- var regex = new RegExp(`^(${dynamicSystemFieldsRegex}Calc_Model_Name|Calc_Model_ID|Parent_Name|Parent_Id|FileBox_ID|FileBox_Name|DataMapper_Name|Doc_ID|Doc_version|Label|Submission_Date|User|table_id|Latest_In_Dim|Tab_name|CP_Name|DT_.+|VT_.+|System_.+)$`, "m");
5034
+ var regex = new RegExp("^(Calc_Model_Name|Calc_Model_ID|Parent_Name|Parent_Id|FileBox_ID|FileBox_Name|DataMapper_Name|Doc_ID|Doc_version|Label|Submission_Date|User|table_id|Latest_In_Dim|Tab_name|CP_Name|DT_.+|VT_.+|System_.+)$", "m");
5161
5035
 
5162
5036
  return (field.category && field.category.includes("")) || regex.test(field.name)
5163
5037
  };
@@ -5342,7 +5216,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5342
5216
  options.chartOptions = lodash.merge(defaultOptions, options.chartOptions);
5343
5217
  };
5344
5218
 
5345
- highchartsRenderer.addPivotOptions = function (selectedTemplateWOData, widgetOptions, drilldownFunction, drillDownListFunction, insightsTooltipFunction, trackUserInsightsTooltipFunction) {
5219
+ highchartsRenderer.addPivotOptions = function (selectedTemplateWOData, widgetOptions, drilldownFunction, drillDownListFunction) {
5346
5220
  // Check if not rendered data, than it will render
5347
5221
 
5348
5222
  var fields = highchartsRenderer.objectCopyJsonMethod(selectedTemplateWOData.fields);
@@ -5352,8 +5226,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5352
5226
  var valuesFields = [];
5353
5227
  var drilldownFunc = drilldownFunction;
5354
5228
  var drillDownListFunc = drillDownListFunction;
5355
- var insightsTooltipFunc = insightsTooltipFunction;
5356
- var trackUserInsightsTooltipFunc = trackUserInsightsTooltipFunction;
5357
5229
 
5358
5230
  // fill value fields
5359
5231
  lodash.forEach(widgetOptions.vals, function (valObj) {
@@ -5408,7 +5280,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5408
5280
  widgetOptions.pivot.valuesArray = valuesFields;
5409
5281
  widgetOptions.pivot.chartType = widgetOptions.chart_type;
5410
5282
  widgetOptions.pivot.chartOptions = widgetOptions.options;
5411
- widgetOptions.pivot.chartRender = highchartsRenderer.getChartRendererFunction(widgetOptions.pivot.chartType, drilldownFunc, drillDownListFunc, insightsTooltipFunc, trackUserInsightsTooltipFunc);
5283
+ widgetOptions.pivot.chartRender = highchartsRenderer.getChartRendererFunction(widgetOptions.pivot.chartType, drilldownFunc, drillDownListFunc);
5412
5284
 
5413
5285
  // TODO: remove this logic after BE sort is implemented
5414
5286
  // it is required to do sort by totals for comparative analysis - we need to change deltas if columns swaped vice versa
@@ -5417,7 +5289,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5417
5289
 
5418
5290
  if (isTwoColumnComparisonWidget) {
5419
5291
  const totalsField = xaxisFields[0];
5420
- const isScenarioInTotals = /scenario/i.test(totalsField.name);
5292
+ const isScenarioInTotals = /scenario/i.test(totalsField.name) || /scenario/i.test(totalsField.alias);
5421
5293
 
5422
5294
  if (isScenarioInTotals) {
5423
5295
  const breakdownField = legendFields[0];
@@ -5552,7 +5424,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5552
5424
  dynamicRangeOptions.pivot.calculatedValues = highchartsRenderer.objectCopyJsonMethod(dynamicRangeOptions.calculated_values || []);
5553
5425
  }
5554
5426
 
5555
- highchartsRenderer.addTemplateDataToCalcModel = function (selectedTemplate, calcModelOptions, calcModelPredefinedField, isInputStep) {
5427
+ highchartsRenderer.addTemplateDataToCalcModel = function (selectedTemplate, calcModelOptions, calcModelPredefinedField) {
5556
5428
  highchartsRenderer.setWidgetFieldsToTemplate(selectedTemplate);
5557
5429
  const fields = highchartsRenderer.objectCopyJsonMethod(selectedTemplate.fields);
5558
5430
  const predefinedField = lodash.cloneDeep(calcModelPredefinedField);
@@ -5632,12 +5504,18 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5632
5504
  const fieldOb = lodash.find(fields, { id: filterObj.id });
5633
5505
  if (!fieldOb) return;
5634
5506
 
5635
- if (filterObj.is_exclude) {
5636
- filterObj.excludes = filterObj.values && lodash.map(filterObj.values, highchartsRenderer.decodeFunc);
5637
- fieldOb.excludes = filterObj.excludes;
5638
- } else {
5639
- filterObj.includes = filterObj.values && lodash.map(filterObj.values, highchartsRenderer.decodeFunc);
5640
- fieldOb.includes = filterObj.includes;
5507
+ filterObj.values = filterObj.values && lodash.map(filterObj.values, highchartsRenderer.decodeFunc);
5508
+ filterObj.includes = filterObj.includes && lodash.map(filterObj.includes, highchartsRenderer.decodeFunc);
5509
+
5510
+ if (lodash.get(filterObj, 'values.datetype') === 'list') {
5511
+ filterObj.values = lodash.map(filterObj.values.val, highchartsRenderer.decodeFunc);
5512
+ }
5513
+
5514
+ fieldOb.includes = filterObj.includes;
5515
+ fieldOb.values = filterObj.values;
5516
+
5517
+ if (filterObj.allow_nulls && fieldOb) {
5518
+ fieldOb.allow_nulls = filterObj.allow_nulls;
5641
5519
  }
5642
5520
  });
5643
5521
 
@@ -5662,18 +5540,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5662
5540
  /**
5663
5541
  * We can have several common fields, so we should ignore deleting during fillData
5664
5542
  * */
5665
- const commonFieldsId = isInputStep
5666
- ? [scenarioField && scenarioField.id]
5667
- : [scenarioField && scenarioField.id, reportingMonthField && reportingMonthField.id, lodash.get(storedDataTypeFields, '[0].id', undefined)];
5668
-
5669
- // for Input step
5670
- const filterFields = isInputStep ? fillData(filters, commonFieldsId) : [];
5671
- const valueFields = isInputStep ? fillData(storedAggFields, commonFieldsId) : [];
5672
-
5673
- // for Output step
5674
- const dateFields = !isInputStep ? fillData(storedDateFields, commonFieldsId) : [];
5675
- const dataTypeFields = !isInputStep ? fillData(storedDataTypeFields, commonFieldsId) : [];
5676
- const dataSeriesFields = !isInputStep ? fillData(storedGroupByFields, commonFieldsId) : [];
5543
+ const commonFieldsId = [scenarioField && scenarioField.id];
5544
+ const filterFields = fillData(filters, commonFieldsId);
5545
+ const valueFields = fillData(storedAggFields, commonFieldsId);
5546
+ const dateFields = fillData(storedDateFields, commonFieldsId);
5547
+ const dataTypeFields = fillData(storedDataTypeFields, commonFieldsId);
5548
+ const dataSeriesFields = fillData(storedGroupByFields, commonFieldsId);
5677
5549
 
5678
5550
  lodash.remove(fields, _field => lodash.includes(commonFieldsId, _field.id));
5679
5551
 
@@ -5700,20 +5572,21 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5700
5572
 
5701
5573
  lodash.forEach(functionOptions.filters, function (filterObj) {
5702
5574
  fieldOb = lodash.find(fields, {id: filterObj.field});
5703
- if (fieldOb && filterObj.values && filterObj.values.datetype && filterObj.values.datetype === 'list') {
5575
+ if (fieldOb && filterObj.values && filterObj.values.datetype && filterObj.values.datetype == 'list') {
5704
5576
  filterObj.values = filterObj.values.val
5705
- } else if (fieldOb && filterObj.values && filterObj.values.datetype && filterObj.values.datetype !== 'list') {
5577
+ } else if (fieldOb && filterObj.values && filterObj.values.datetype && filterObj.values.datetype != 'list') {
5706
5578
  fieldOb.values = filterObj.values;
5707
5579
  } else if (fieldOb && filterObj.values && filterObj.values.type === 'advanced') {
5708
5580
  fieldOb.values = filterObj.values;
5709
5581
  }
5710
5582
 
5711
5583
  if (fieldOb && filterObj.values && filterObj.values instanceof Array) {
5712
- if (filterObj.is_excluded) {
5584
+ if (filterObj.is_excluded == true) {
5713
5585
  fieldOb.excludes = filterObj.values;
5714
5586
  } else {
5715
5587
  fieldOb.includes = filterObj.values;
5716
5588
  }
5589
+ //includes[fieldOb.name] = highchartsRenderer.getOnlyIncludedOfField(fieldOb);
5717
5590
  }
5718
5591
  if (filterObj.show_in_graph && fieldOb) {
5719
5592
  fieldOb.show_in_graph = filterObj.show_in_graph
@@ -5879,6 +5752,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5879
5752
  widgetOptions.pivot.legendArray = legendFields;
5880
5753
  widgetOptions.pivot.valuesArray = valuesFields;
5881
5754
  widgetOptions.pivot.filtersArray = filterFields;
5755
+ //widgetOptions.pivot.filter = filterFn;
5882
5756
  widgetOptions.pivot.filterIncludes = includes;
5883
5757
  widgetOptions.pivot.chartType = widgetOptions.chart_type;
5884
5758
  widgetOptions.pivot.chartOptions = widgetOptions.options;
@@ -5936,7 +5810,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5936
5810
  return toReturn;
5937
5811
  };
5938
5812
 
5939
- highchartsRenderer.getChartRendererFunction = function (newChartType, drilldownFunc, drillDownListFunc, insightsTooltipFunc, trackUserInsightsTooltipFunc) {
5813
+ highchartsRenderer.getChartRendererFunction = function (newChartType, drilldownFunc, drillDownListFunc) {
5940
5814
  var fnToReturn = null;
5941
5815
 
5942
5816
  if (newChartType == highchartsRenderer.richTextSubType.type) {
@@ -5963,12 +5837,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
5963
5837
  if (!opt) {
5964
5838
  opt = {};
5965
5839
  }
5966
- opt.drillDownListFunc = (e) => {
5967
- highchartsRenderer.modifyEventPointForDrilldown(e, pivotData);
5968
- drillDownListFunc(e);
5969
- };
5970
- opt.insightsTooltipFunc = insightsTooltipFunc;
5971
- opt.trackUserInsightsTooltipFunc = trackUserInsightsTooltipFunc;
5840
+ opt.drillDownListFunc = drillDownListFunc;
5972
5841
  } else {
5973
5842
  opt.drillDownListFunc = null;
5974
5843
  }
@@ -6110,6 +5979,63 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6110
5979
  return key
6111
5980
  };
6112
5981
 
5982
+ const fontSizeValues = lodash.map(new Array(19), (item, index) => {
5983
+ const fontValue = index + 6;
5984
+ return {label: fontValue, value: fontValue}
5985
+ })
5986
+ const fonts = [
5987
+ 'Arial',
5988
+ 'Arial Black',
5989
+ 'Comic Sans MS',
5990
+ 'Courier New',
5991
+ 'Helvetica',
5992
+ 'Impact',
5993
+ 'Nunito Sans',
5994
+ 'Tahoma',
5995
+ 'Times New Roman',
5996
+ 'Verdana',
5997
+ 'Poppins'
5998
+ ];
5999
+
6000
+ const TOOLTIP_DEFAULT_SETTINGS = {
6001
+ FONT_COLOR: '#545a6b',
6002
+ FONT_SIZE: '12',
6003
+ FONT_FAMILY: HIGHCHARTS_FONT_FAMILY,
6004
+ };
6005
+
6006
+ const TOOLTIP_DEFAULT_OPTIONS = {
6007
+ borderColor: '#fff',
6008
+ shadow: {
6009
+ color: '#9199b4',
6010
+ width: 10,
6011
+ opacity: 0.05
6012
+ },
6013
+ style: {
6014
+ fontSize: TOOLTIP_DEFAULT_SETTINGS.FONT_SIZE,
6015
+ fontFamily: TOOLTIP_DEFAULT_SETTINGS.FONT_FAMILY,
6016
+ color: TOOLTIP_DEFAULT_SETTINGS.FONT_COLOR,
6017
+ },
6018
+ enabled: true,
6019
+ };
6020
+
6021
+ const LABEL_DEFAULT_SETTINGS = {
6022
+ FONT_COLOR: textColor,
6023
+ FONT_SIZE: '11',
6024
+ FONT_FAMILY: HIGHCHARTS_FONT_FAMILY,
6025
+ };
6026
+
6027
+ const LABEL_DEFAULT_OPTIONS = {
6028
+ style: {
6029
+ fontSize: LABEL_DEFAULT_SETTINGS.FONT_SIZE,
6030
+ fontFamily: LABEL_DEFAULT_SETTINGS.FONT_FAMILY,
6031
+ fontWeight: 'normal',
6032
+ },
6033
+ color: LABEL_DEFAULT_SETTINGS.FONT_COLOR,
6034
+ };
6035
+
6036
+ const CHART_AXIS_DEFAULT_LABEL = 'Axis (Category)';
6037
+ const CHART_LEGEND_DEFAULT_LABEL = 'Legend (Series)';
6038
+
6113
6039
  highchartsRenderer.getDefaultValueForSubOptions = function (type, existing_options) {
6114
6040
  var valToReturn = {};
6115
6041
  var option = highchartsRenderer.suboptions[type] || lodash.find(highchartsRenderer.suboptions, suboption => suboption.category_type === type);
@@ -6130,6 +6056,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6130
6056
  return valToReturn;
6131
6057
  };
6132
6058
 
6059
+
6133
6060
  highchartsRenderer.getChartAxisLabel = function(type) {
6134
6061
  return highchartsRenderer.chartsTypesInfo[type] ? highchartsRenderer.chartsTypesInfo[type].axisName : CHART_AXIS_DEFAULT_LABEL;
6135
6062
  };
@@ -6140,11 +6067,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6140
6067
 
6141
6068
  highchartsRenderer.widgetPlaceholders = lodash.assign({}, $.pivotUtilities.errorHandling.placeholders);
6142
6069
 
6143
- const suboptionsFontSizeValues = (lodash.map(lodash.fill(new Array(19), null), function (item, index) {
6144
- const fontValue = index + 6;
6145
- return { label: fontValue, value: fontValue }
6146
- }));
6147
-
6148
6070
  highchartsRenderer.suboptions = {
6149
6071
  'widget_library': {
6150
6072
  is_hidden: true,
@@ -6299,14 +6221,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6299
6221
  element_type: 'select',
6300
6222
  value_name: 'columns_font_style',
6301
6223
  element_label: 'Font style',
6302
- element_options: SUBOPTIONS_FONTS,
6224
+ element_options: fonts,
6303
6225
  default_value: 'Poppins'
6304
6226
  },
6305
6227
  {
6306
6228
  element_type: 'select',
6307
6229
  value_name: 'columns_font_size',
6308
6230
  element_label: 'Font size',
6309
- element_options: suboptionsFontSizeValues,
6231
+ element_options: fontSizeValues,
6310
6232
  default_value: '10'
6311
6233
  },
6312
6234
  {
@@ -6328,14 +6250,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6328
6250
  element_type: 'select',
6329
6251
  value_name: 'rows_font_style',
6330
6252
  element_label: 'Font style',
6331
- element_options: SUBOPTIONS_FONTS,
6253
+ element_options: fonts,
6332
6254
  default_value: 'Poppins'
6333
6255
  },
6334
6256
  {
6335
6257
  element_type: 'select',
6336
6258
  value_name: 'rows_font_size',
6337
6259
  element_label: 'Font size',
6338
- element_options: suboptionsFontSizeValues,
6260
+ element_options: fontSizeValues,
6339
6261
  default_value: '10'
6340
6262
  },
6341
6263
  {
@@ -6357,14 +6279,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6357
6279
  element_type: 'select',
6358
6280
  value_name: 'values_font_style',
6359
6281
  element_label: 'Font style',
6360
- element_options: SUBOPTIONS_FONTS,
6282
+ element_options: fonts,
6361
6283
  default_value: 'Poppins'
6362
6284
  },
6363
6285
  {
6364
6286
  element_type: 'select',
6365
6287
  value_name: 'values_font_size',
6366
6288
  element_label: 'Font size',
6367
- element_options: suboptionsFontSizeValues,
6289
+ element_options: fontSizeValues,
6368
6290
  default_value: '10'
6369
6291
  },
6370
6292
  {
@@ -6386,14 +6308,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6386
6308
  element_type: 'select',
6387
6309
  value_name: 'totals_font_style',
6388
6310
  element_label: 'Font style',
6389
- element_options: SUBOPTIONS_FONTS,
6311
+ element_options: fonts,
6390
6312
  default_value: 'Poppins'
6391
6313
  },
6392
6314
  {
6393
6315
  element_type: 'select',
6394
6316
  value_name: 'totals_font_size',
6395
6317
  element_label: 'Font size',
6396
- element_options: suboptionsFontSizeValues,
6318
+ element_options: fontSizeValues,
6397
6319
  default_value: '10'
6398
6320
  },
6399
6321
  {
@@ -6510,14 +6432,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6510
6432
  value_name: 'eliminate_calc_totals',
6511
6433
  default_value: false
6512
6434
  },
6513
- {
6514
- element_type: 'checkbox',
6515
- element_label: 'Show data in dashboard if more than 1000 rows',
6516
- value_name: 'show_more_than_thousand_rows',
6517
- default_value: false,
6518
- showFn: chartType => chartType === highchartsRenderer.CHART_TYPES.TABLE_ONLY,
6519
- disabled_fn: (value) => !!value.use_handsOnTable
6520
- },
6521
6435
  ]
6522
6436
  },
6523
6437
  'value': {
@@ -6670,14 +6584,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6670
6584
  element_type: 'select',
6671
6585
  value_name: 'font_style',
6672
6586
  element_label: 'Font style',
6673
- element_options: SUBOPTIONS_FONTS,
6587
+ element_options: fonts,
6674
6588
  default_value: LABEL_DEFAULT_SETTINGS.FONT_FAMILY,
6675
6589
  },
6676
6590
  {
6677
6591
  element_type: 'select',
6678
6592
  value_name: 'font_size',
6679
6593
  element_label: 'Font size',
6680
- element_options: suboptionsFontSizeValues,
6594
+ element_options: fontSizeValues,
6681
6595
  default_value: LABEL_DEFAULT_SETTINGS.FONT_SIZE,
6682
6596
  },
6683
6597
  {
@@ -6748,14 +6662,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6748
6662
  element_type: 'select',
6749
6663
  value_name: 'font_style',
6750
6664
  element_label: 'Font style',
6751
- element_options: SUBOPTIONS_FONTS,
6665
+ element_options: fonts,
6752
6666
  default_value: LABEL_DEFAULT_SETTINGS.FONT_FAMILY,
6753
6667
  },
6754
6668
  {
6755
6669
  element_type: 'select',
6756
6670
  value_name: 'font_size',
6757
6671
  element_label: 'Font size',
6758
- element_options: suboptionsFontSizeValues,
6672
+ element_options: fontSizeValues,
6759
6673
  default_value: LABEL_DEFAULT_SETTINGS.FONT_SIZE,
6760
6674
  },
6761
6675
  {
@@ -6825,14 +6739,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6825
6739
  element_type: 'select',
6826
6740
  value_name: 'font_style',
6827
6741
  element_label: 'Font style',
6828
- element_options: SUBOPTIONS_FONTS,
6742
+ element_options: fonts,
6829
6743
  default_value: LABEL_DEFAULT_SETTINGS.FONT_FAMILY,
6830
6744
  },
6831
6745
  {
6832
6746
  element_type: 'select',
6833
6747
  value_name: 'font_size',
6834
6748
  element_label: 'Font size',
6835
- element_options: suboptionsFontSizeValues,
6749
+ element_options: fontSizeValues,
6836
6750
  default_value: LABEL_DEFAULT_SETTINGS.FONT_SIZE,
6837
6751
  },
6838
6752
  {
@@ -6994,14 +6908,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
6994
6908
  element_type: 'select',
6995
6909
  value_name: 'font_style',
6996
6910
  element_label: 'Font style',
6997
- element_options: SUBOPTIONS_FONTS,
6911
+ element_options: fonts,
6998
6912
  default_value: TOOLTIP_DEFAULT_SETTINGS.FONT_FAMILY,
6999
6913
  },
7000
6914
  {
7001
6915
  element_type: 'select',
7002
6916
  value_name: 'font_size',
7003
6917
  element_label: 'Font size',
7004
- element_options: suboptionsFontSizeValues,
6918
+ element_options: fontSizeValues,
7005
6919
  default_value: TOOLTIP_DEFAULT_SETTINGS.FONT_SIZE,
7006
6920
  },
7007
6921
  {
@@ -7084,14 +6998,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7084
6998
  element_type: 'select',
7085
6999
  value_name: 'font_style',
7086
7000
  element_label: 'Font style',
7087
- element_options: SUBOPTIONS_FONTS,
7001
+ element_options: fonts,
7088
7002
  default_value: TOOLTIP_DEFAULT_SETTINGS.FONT_FAMILY,
7089
7003
  },
7090
7004
  {
7091
7005
  element_type: 'select',
7092
7006
  value_name: 'font_size',
7093
7007
  element_label: 'Font size',
7094
- element_options: suboptionsFontSizeValues,
7008
+ element_options: fontSizeValues,
7095
7009
  default_value: TOOLTIP_DEFAULT_SETTINGS.FONT_SIZE,
7096
7010
  },
7097
7011
  {
@@ -7196,6 +7110,18 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7196
7110
  value_name: 'is_percentage',
7197
7111
  default_value: false,
7198
7112
  hidden: true,
7113
+ }, {
7114
+ element_type: 'checkbox',
7115
+ element_label: 'Sort by variance',
7116
+ value_name: 'sort_by_variance',
7117
+ default_value: false,
7118
+ hidden: true
7119
+ }, {
7120
+ element_type: 'checkbox',
7121
+ element_label: 'Sort by absolute variance',
7122
+ value_name: 'sort_by_absolute_variance',
7123
+ default_value: false,
7124
+ hidden: true
7199
7125
  }]
7200
7126
  },
7201
7127
  'delta_column_for_drill_down': {
@@ -7262,6 +7188,18 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7262
7188
  value_name: 'is_percentage',
7263
7189
  default_value: false,
7264
7190
  hidden: true,
7191
+ }, {
7192
+ element_type: 'checkbox',
7193
+ element_label: 'Sort by variance',
7194
+ value_name: 'sort_by_variance',
7195
+ default_value: false,
7196
+ hidden: true
7197
+ }, {
7198
+ element_type: 'checkbox',
7199
+ element_label: 'Sort by absolute variance',
7200
+ value_name: 'sort_by_absolute_variance',
7201
+ default_value: false,
7202
+ hidden: true
7265
7203
  }, {
7266
7204
  element_type: 'checkbox',
7267
7205
  element_label: 'Filter zero values',
@@ -7556,7 +7494,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
7556
7494
  },
7557
7495
  };
7558
7496
 
7559
- highchartsRenderer.chartsData = [
7497
+ highchartsRenderer.chartsData =
7498
+ [
7560
7499
  {
7561
7500
  type: 'line',
7562
7501
  name: 'Line',
@@ -8040,7 +7979,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8040
7979
  suboptions: []
8041
7980
  };
8042
7981
 
8043
- highchartsRenderer.getFilterLabel = function (fieldFilter, showTemplateName, isFormattingNumbers) {
7982
+ highchartsRenderer.MAX_SELECTED_ITEMS_IN_LABEL = 20;
7983
+ highchartsRenderer.MAX_SELECTED_ITEMS_CHARECHTERS_IN_LABEL = 50;
7984
+
7985
+ highchartsRenderer.getFilterLabel = function (fieldFilter, showTemplateName) {
8044
7986
  var displayname;
8045
7987
  if (fieldFilter.new_name)
8046
7988
  displayname = fieldFilter.new_name.replace('RH_DIM_', '');
@@ -8063,6 +8005,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8063
8005
  var tooltip = '';
8064
8006
  var all_vals = [];
8065
8007
  if (fieldFilter.type == 'Date') {
8008
+ all_vals = [];
8066
8009
  var invertValueFormatMap = lodash.invert(fieldFilter.valueFormatMap);
8067
8010
  lodash.forEach(fieldFilter.includes, function (val) {
8068
8011
  if (invertValueFormatMap && invertValueFormatMap[val]) {
@@ -8072,10 +8015,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8072
8015
  }
8073
8016
  all_vals.push(val);
8074
8017
  });
8075
- } else if (isFormattingNumbers && highchartsRenderer.isFormattingAxisFeatureOn()) {
8076
- all_vals = lodash.map(lodash.cloneDeep(fieldFilter.includes), val =>
8077
- highchartsRenderer.returnRawDataValue(fieldFilter.type, val, fieldFilter.format || '', null, null, true) + ""
8078
- );
8079
8018
  } else {
8080
8019
  all_vals = lodash.clone(fieldFilter.includes);
8081
8020
  }
@@ -8168,7 +8107,8 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8168
8107
  };
8169
8108
  }
8170
8109
  } else {
8171
- if (fieldFilter && fieldFilter.type && fieldFilter.type === 'Date' && fieldFilter.datetypevalues) {
8110
+ if (fieldFilter && fieldFilter.type && fieldFilter.type === 'Date'
8111
+ && fieldFilter.datetypevalues && fieldFilter.datetypevalues) {
8172
8112
  if (fieldFilter.datetypevalues.datetype === "frame") {
8173
8113
  displayname += ` (${fieldFilter.datetypevalues.val.timeframe})`;
8174
8114
  } else if (fieldFilter.datetypevalues.datetype === "range") {
@@ -8180,7 +8120,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8180
8120
  // range timestamps currently are set presupposing that user selects UTC dates,
8181
8121
  // that is why for consistency we also should show in filters values which user selected
8182
8122
  // and not local dates, that can differ
8183
- lodash.forEach(Object.keys(dates), key => {
8123
+ _.forEach(Object.keys(dates), key => {
8184
8124
  const dateConfiguration = dates[key];
8185
8125
  const timestamp = dateConfiguration.timestamp;
8186
8126
  if (timestamp) {
@@ -8246,7 +8186,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8246
8186
  highchartsRenderer.getDashboardOverrideValues = function (data_model, graph, local_current_dashboard) {
8247
8187
  let overrideValues = [];
8248
8188
 
8249
- if (!local_current_dashboard) {
8189
+ if (!local_current_dashboard == undefined) {
8250
8190
  local_current_dashboard = data_model.current_dashboard;
8251
8191
  }
8252
8192
 
@@ -8322,11 +8262,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8322
8262
  local_current_dashboard = data_model.current_dashboard;
8323
8263
  }
8324
8264
 
8325
- if (local_current_dashboard.date_tags && local_current_dashboard.date_tags.length > 0) {
8265
+ if (local_current_dashboard.date_tags.length > 0) {
8326
8266
  return 'date_tags';
8327
8267
  }
8328
8268
 
8329
- if (local_current_dashboard.plan_tags && local_current_dashboard.plan_tags.length > 0) {
8269
+ if (local_current_dashboard.plan_tags.length > 0) {
8330
8270
  return 'plan_tags';
8331
8271
  }
8332
8272
  };
@@ -8352,7 +8292,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8352
8292
  };
8353
8293
 
8354
8294
  highchartsRenderer.getDashboardApplyScenarios = function (data_model, graph, local_current_dashboard) {
8355
- if (local_current_dashboard == undefined) {
8295
+ if (!local_current_dashboard == undefined) {
8356
8296
  local_current_dashboard = data_model.current_dashboard;
8357
8297
  }
8358
8298
 
@@ -8378,7 +8318,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8378
8318
  };
8379
8319
 
8380
8320
  highchartsRenderer.isDate = function (date) {
8381
- return new Date(date) !== "Invalid Date" && !isNaN(new Date(date));
8321
+ return ((new Date(date) !== "Invalid Date" && !isNaN(new Date(date))));
8382
8322
  };
8383
8323
 
8384
8324
  highchartsRenderer.isDateFormat = function (datestr, format) {
@@ -8386,12 +8326,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8386
8326
  };
8387
8327
 
8388
8328
  highchartsRenderer.containsIgnoreCase = function (str, it) {
8389
- return str.toLowerCase().indexOf(it.toLowerCase()) != -1;
8329
+ return str.toLowerCase().indexOf(it) != -1;
8390
8330
  };
8391
8331
 
8392
8332
  highchartsRenderer.createDateTypeFromValue = function (fieldnametoFilter, format, colName) {
8393
-
8394
- const fiscalYearMonthsModifier = highchartsRenderer.getFiscalYearMonthModifier();
8333
+ const initialDateString = fieldnametoFilter;
8395
8334
 
8396
8335
  if (format) {
8397
8336
  format = format.replace(/y/g, 'Y');
@@ -8400,86 +8339,83 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8400
8339
  format = 'MMM YYYY';
8401
8340
  }
8402
8341
 
8403
- const range = { datetype: "range", val: { todate: 0, fromdate: 0 } };
8404
- const timeframe = highchartsRenderer.getTimeframeByFormat(format);
8342
+ var range = {datetype: "range", val: {todate: 0, fromdate: 0}}
8405
8343
 
8406
- const isFormattedDate = format && highchartsRenderer.isDateFormat(fieldnametoFilter, format);
8407
- if (isFormattedDate || highchartsRenderer.isDate(fieldnametoFilter)) {
8408
- const initialDateString = fieldnametoFilter;
8409
- if (isFormattedDate) {
8344
+ if (format) {
8345
+ if (!highchartsRenderer.isDateFormat(fieldnametoFilter, format)) {
8346
+ return {};
8347
+ } else {
8410
8348
  fieldnametoFilter = moment_lib(fieldnametoFilter, format, true).toISOString();
8411
8349
  }
8412
- const dt = new Date(fieldnametoFilter);
8413
- switch (timeframe) {
8414
- case 'day':
8415
- range.val.fromdate = Math.round(Date.UTC(
8350
+ } else if (!highchartsRenderer.isDate(fieldnametoFilter))
8351
+ return {};
8352
+
8353
+ var dt = new Date(fieldnametoFilter);
8354
+ var timeframe = 'day';
8355
+ if (format && highchartsRenderer.containsIgnoreCase(format, 'q'))
8356
+ timeframe = 'quarter';
8357
+ else if (format && !highchartsRenderer.containsIgnoreCase(format, 'dd') && !highchartsRenderer.containsIgnoreCase(format, 'mm') && highchartsRenderer.containsIgnoreCase(format, 'yy'))
8358
+ timeframe = 'year';
8359
+ else if (format && !highchartsRenderer.containsIgnoreCase(format, 'dd') && highchartsRenderer.containsIgnoreCase(format, 'mm') && highchartsRenderer.containsIgnoreCase(format, 'yy'))
8360
+ timeframe = 'month';
8361
+ switch (timeframe) {
8362
+ case 'day':
8363
+ range.val.fromdate = Math.round(Date.UTC(
8364
+ dt.getFullYear(),
8365
+ dt.getMonth(),
8366
+ dt.getDate(),
8367
+ 0,
8368
+ 0,
8369
+ 0
8370
+ ) / 1000);
8371
+ range.val.todate = range.val.fromdate + 60 * 60 * 24 - 1;
8372
+ return range;
8373
+ break;
8374
+ case 'month':
8375
+ range.val.fromdate = Math.round(
8376
+ Date.UTC(
8416
8377
  dt.getFullYear(),
8417
8378
  dt.getMonth(),
8418
- dt.getDate(),
8419
- 0,
8420
- 0,
8421
- 0
8422
- ) / 1000);
8423
- range.val.todate = range.val.fromdate + 60 * 60 * 24 - 1;
8424
- return range;
8425
- case 'month':
8426
- range.val.fromdate = Math.round(
8427
- Date.UTC(
8428
- dt.getFullYear(),
8429
- dt.getMonth(),
8430
- 1,
8431
- 0, 0, 0, 0
8432
- ) / 1000)
8433
- let lastDay = new Date(dt.getFullYear(), dt.getMonth() + 1, 0);
8434
- range.val.todate = Math.round(
8435
- Date.UTC(
8436
- lastDay.getFullYear(),
8437
- lastDay.getMonth(),
8438
- lastDay.getDate(),
8439
- 23,
8440
- 59,
8441
- 59) / 1000)
8442
- return range;
8443
- case 'year':
8444
- range.val.fromdate = Math.round(Date.UTC(
8445
- dt.getFullYear(),
8446
- fiscalYearMonthsModifier || dt.getMonth(),
8447
8379
  1,
8448
8380
  0, 0, 0, 0
8449
- ) / 1000);
8450
-
8451
- let lastDay2 = new Date(dt.getFullYear() + 1, fiscalYearMonthsModifier || 0, 0);
8452
- range.val.todate = Math.round(Date.UTC(
8453
- lastDay2.getFullYear(),
8454
- lastDay2.getMonth(),
8455
- lastDay2.getDate(),
8456
- 23, 59, 59
8457
8381
  ) / 1000)
8458
- return range;
8459
- case 'quarter':
8460
- const utcDate = moment_lib.utc(initialDateString, format, true);
8461
- range.val.fromdate = lodash.cloneDeep(utcDate).startOf(timeframe).add(fiscalYearMonthsModifier, 'M').unix();
8462
- range.val.todate = lodash.cloneDeep(utcDate).endOf(timeframe).add(fiscalYearMonthsModifier, 'M').endOf('M').unix();
8463
- return range;
8464
- default:
8465
- return "";
8466
- }
8467
- } else if (!lodash.isNaN(fieldnametoFilter)) {
8468
- const utcDate = moment_lib.unix(fieldnametoFilter).utc();
8469
- const fromDateMoment = lodash.cloneDeep(utcDate).startOf(timeframe);
8470
- const toDateMoment = lodash.cloneDeep(utcDate).endOf(timeframe);
8471
-
8472
- if (lodash.includes(['year', 'quarter'], timeframe)) {
8473
- fromDateMoment.add(fiscalYearMonthsModifier, 'M');
8474
- toDateMoment.add(fiscalYearMonthsModifier, 'M').endOf('M');
8475
- }
8476
-
8477
- range.val.fromdate = fromDateMoment.unix();
8478
- range.val.todate = toDateMoment.unix();
8479
- return range;
8382
+ let lastDay = new Date(dt.getFullYear(), dt.getMonth() + 1, 0);
8383
+ range.val.todate = Math.round(
8384
+ Date.UTC(
8385
+ lastDay.getFullYear(),
8386
+ lastDay.getMonth(),
8387
+ lastDay.getDate(),
8388
+ 23,
8389
+ 59,
8390
+ 59) / 1000)
8391
+ return range;
8392
+ break;
8393
+ case 'year':
8394
+ range.val.fromdate = Math.round(Date.UTC(
8395
+ dt.getFullYear(),
8396
+ dt.getMonth(),
8397
+ 1,
8398
+ 0, 0, 0, 0
8399
+ ) / 1000);
8400
+
8401
+ let lastDay2 = new Date(dt.getFullYear() + 1, 0, 0);
8402
+ range.val.todate = Math.round(Date.UTC(
8403
+ lastDay2.getFullYear(),
8404
+ lastDay2.getMonth(),
8405
+ lastDay2.getDate(),
8406
+ 23, 59, 59
8407
+ ) / 1000)
8408
+ return range;
8409
+ break;
8410
+ case 'quarter':
8411
+ const utcDate = moment_lib.utc(initialDateString, format, true);
8412
+ range.val.fromdate = utcDate.startOf(timeframe).unix();
8413
+ range.val.todate = utcDate.endOf(timeframe).unix();
8414
+ return range;
8415
+ default:
8416
+ return "";
8480
8417
  }
8481
8418
 
8482
- return {};
8483
8419
  };
8484
8420
 
8485
8421
  highchartsRenderer.createDateFromString = function (dateString, format) {
@@ -8493,7 +8429,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8493
8429
  }
8494
8430
 
8495
8431
  highchartsRenderer.prepareDrillDownFilters = function (r_keys, c_keys, widget) {
8496
- const isFormattingDatesAsOtherAxisTypes = highchartsRenderer.isFormattingDatesAsOtherAxisTypes();
8497
8432
  let row_key = r_keys;
8498
8433
  let col_key = c_keys;
8499
8434
  if (widget.options &&
@@ -8511,18 +8446,16 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8511
8446
  const labels = [];
8512
8447
  colFilter.values = [];
8513
8448
  lodash.forEach(col_key, function (col_value) {
8514
- let label = col_value;
8515
8449
  if (widget.cols[0].type === 'Date' && col_value !== NULL_VALUE) {
8516
- const format = highchartsRenderer.getDateFieldFormat(widget, widget.cols[0]);
8517
- let date = isFormattingDatesAsOtherAxisTypes ? +col_value : highchartsRenderer.createDateFromString(col_value, format);
8450
+ let date = highchartsRenderer.createDateFromString(
8451
+ col_value,
8452
+ highchartsRenderer.getDateFieldFormat(widget, widget.cols[0])
8453
+ );
8518
8454
  colFilter.values.push(date);
8519
- label = isFormattingDatesAsOtherAxisTypes
8520
- ? highchartsRenderer.returnRawDataValue(widget.cols[0].type, +col_value, format, widget.cols[0].name)
8521
- : col_value;
8522
8455
  } else {
8523
8456
  colFilter.values.push(col_value);
8524
8457
  }
8525
- labels.push(label);
8458
+ labels.push(col_value);
8526
8459
  });
8527
8460
  colFilter.value_to_show = labels.join(', ');
8528
8461
  filters.push(colFilter);
@@ -8540,16 +8473,16 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8540
8473
  if (widget && widget.cols[index]) {
8541
8474
  let temp = highchartsRenderer.createFilterObject(widget.cols[index]);
8542
8475
  if (widget.cols[index].type === 'Date' && col_value !== NULL_VALUE) {
8543
- const format = highchartsRenderer.getDateFieldFormat(widget, widget.cols[index]);
8544
- let datetrange = highchartsRenderer.createDateTypeFromValue(col_value, format);
8476
+ let datetrange = highchartsRenderer.createDateTypeFromValue(
8477
+ col_value,
8478
+ highchartsRenderer.getDateFieldFormat(widget, widget.cols[index])
8479
+ );
8545
8480
 
8546
8481
  if ($.isEmptyObject(datetrange)) {
8547
8482
  return;
8548
8483
  }
8549
8484
  temp.values = datetrange;
8550
- temp.values.label = isFormattingDatesAsOtherAxisTypes
8551
- ? highchartsRenderer.returnRawDataValue(widget.cols[index].type, +col_value, format, widget.cols[index].name)
8552
- : col_value;
8485
+ temp.values.label = col_value;
8553
8486
  } else {
8554
8487
  temp.values = [col_value];
8555
8488
  }
@@ -8572,9 +8505,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8572
8505
  return;
8573
8506
  }
8574
8507
  temp.values = datetrange;
8575
- temp.values.label = isFormattingDatesAsOtherAxisTypes
8576
- ? highchartsRenderer.returnRawDataValue(widget.rows[index].type, +row_value, format, widget.rows[index].name)
8577
- : row_value;
8508
+ temp.values.label = row_value;
8578
8509
  } else {
8579
8510
  temp.values = [row_value];
8580
8511
  }
@@ -8624,7 +8555,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8624
8555
  };
8625
8556
 
8626
8557
  highchartsRenderer.prepareDrillDownGraphFilters = function (r_key, c_key, widget) {
8627
- const isFormattingDatesAsOtherAxisTypes = highchartsRenderer.isFormattingDatesAsOtherAxisTypes();
8628
8558
  let rowKey = r_key;
8629
8559
  let colKey = c_key;
8630
8560
  let widgetOptions = typeof widget.options === 'string' ? JSON.parse(widget.options) : widget.options;
@@ -8638,19 +8568,16 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8638
8568
  let filter = lodash.find(filters, {name: widget.rows[i].name});
8639
8569
  if (filter) {
8640
8570
  filter.is_excluded = false;
8641
- filter.values = widget.rows[i].type === 'Date' && rowKey[i] !== NULL_VALUE
8642
- ? highchartsRenderer.createDateTypeFromValue(
8643
- rowKey[i],
8644
- highchartsRenderer.getDateFieldFormat(widget, widget.rows[i])
8645
- )
8646
- : [rowKey[i]];
8571
+ filter.values = widget.rows[i].type === 'Date' && rowKey[i] !== NULL_VALUE ?
8572
+ highchartsRenderer.createDateTypeFromValue(rowKey[i], highchartsRenderer.getDateFieldFormat(widget, widget.rows[i])) :
8573
+ [rowKey[i]];
8647
8574
  } else {
8648
8575
  filters.push(highchartsRenderer.createDrillDownFilterObject(widget, widget.rows[i], rowKey[i]))
8649
8576
  }
8650
8577
  }
8651
8578
 
8652
8579
  if (widget.chart_type === highchartsRenderer.CHART_TYPES.WATERFALL_BREAKDOWN) {
8653
- let filter = lodash.find(filters, (f) => f.name === widget.cols[0].name || f.field === widget.cols[0].id);
8580
+ let filter = lodash.find(filters, {name: widget.cols[0].name});
8654
8581
  if (filter) {
8655
8582
  filter.is_excluded = false;
8656
8583
  } else {
@@ -8660,12 +8587,12 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8660
8587
  filter.values = [];
8661
8588
  for (let i = 0; i < colKey.length; i++) {
8662
8589
  filter.values.push(
8663
- widget.cols[0].type === 'Date' && colKey[i] !== NULL_VALUE && !isFormattingDatesAsOtherAxisTypes
8590
+ widget.cols[0].type === 'Date' && colKey[i] !== NULL_VALUE
8664
8591
  ? highchartsRenderer.createDateFromString(
8665
8592
  colKey[i],
8666
8593
  highchartsRenderer.getDateFieldFormat(widget, widget.cols[0])
8667
8594
  )
8668
- : +colKey[i]
8595
+ : colKey[i]
8669
8596
  );
8670
8597
  }
8671
8598
  } else if (widget.chart_type === highchartsRenderer.CHART_TYPES.WATERFALL_WALKTHROUGH) {
@@ -8688,12 +8615,9 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8688
8615
  let filter = lodash.find(filters, {name: widget.cols[i].name});
8689
8616
  if (filter) {
8690
8617
  filter.is_excluded = false;
8691
- filter.values = widget.cols[i].type === 'Date' && colKey[i] !== NULL_VALUE
8692
- ? highchartsRenderer.createDateTypeFromValue(
8693
- colKey[i],
8694
- highchartsRenderer.getDateFieldFormat(widget, widget.cols[i])
8695
- )
8696
- : [colKey[i]];
8618
+ filter.values = widget.cols[i].type === 'Date' && colKey[i] !== NULL_VALUE ?
8619
+ highchartsRenderer.createDateTypeFromValue(colKey[i], highchartsRenderer.getDateFieldFormat(widget, widget.cols[i])) :
8620
+ [colKey[i]];
8697
8621
  } else {
8698
8622
  filters.push(highchartsRenderer.createDrillDownFilterObject(widget, widget.cols[i], colKey[i]))
8699
8623
  }
@@ -8713,10 +8637,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8713
8637
  filtOb.field = field.id;
8714
8638
  filtOb.name = highchartsRenderer.decodeFunc(field.name);
8715
8639
  if (field.type === 'Date' && value !== NULL_VALUE) {
8716
- filtOb.values = highchartsRenderer.createDateTypeFromValue(
8717
- value,
8718
- highchartsRenderer.getDateFieldFormat(widget, field)
8719
- );
8640
+ filtOb.values = highchartsRenderer.createDateTypeFromValue(value, highchartsRenderer.getDateFieldFormat(widget, field));
8720
8641
  }
8721
8642
 
8722
8643
  return filtOb;
@@ -8726,6 +8647,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8726
8647
  return $.pivotUtilities.getPivotTableFormula(rowData, opts, func, axisFields, legendFields, aggregationDefaults, utils);
8727
8648
  };
8728
8649
 
8650
+
8729
8651
  // widget Renderer
8730
8652
  highchartsRenderer.updateSelectedOverrideValues = function (widget, override_values, res) {
8731
8653
  if (override_values && override_values.length > 0) {
@@ -8773,7 +8695,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8773
8695
  };
8774
8696
 
8775
8697
  highchartsRenderer.setNewFieldNames = function (res) {
8776
- if (highchartsRenderer.useTotalsCalculation) {
8698
+ if (useTotalsCalculation) {
8777
8699
  return res;
8778
8700
  }
8779
8701
 
@@ -8787,9 +8709,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8787
8709
  };
8788
8710
 
8789
8711
  highchartsRenderer.getWidgetDataSorters = function (res, widget, defaultDateFormat) {
8790
- const isFormattingDatesAsOtherAxisTypes = highchartsRenderer.isFormattingDatesAsOtherAxisTypes();
8791
- let sorters;
8792
-
8793
8712
  if ($.pivotUtilities && !$.pivotUtilities.additionalFieldsList) {
8794
8713
  $.pivotUtilities.additionalFieldsList = [
8795
8714
  {key: 'DR_Average', name: 'DR_Average'},
@@ -8797,202 +8716,212 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
8797
8716
  ];
8798
8717
  }
8799
8718
 
8800
- let datesFields = [];
8719
+ var datesFields = [];
8801
8720
  datesFields = lodash.filter(widget.rows, element => element.type == 'Date');
8802
8721
  datesFields = datesFields.concat(lodash.filter(widget.cols, element => element.type == 'Date'));
8803
8722
 
8804
8723
  const isCustomSorting = widget.options.sortingFields && Array.isArray(widget.options.sortingFields) && widget.options.sortingFields.length > 0;
8805
8724
  if (isCustomSorting) {
8806
8725
  lodash.forEach(datesFields, function (field) {
8807
- const fieldToSort = lodash.find(
8808
- widget.options.sortingFields, element => element.id === field.id && lodash.get(element, 'sorting.sort_by') === 'field_items'
8809
- );
8726
+ const fieldToSort = lodash.find(widget.options.sortingFields, element => element.id === field.id);
8810
8727
  field.sorting = fieldToSort ? fieldToSort.sorting : field.sorting;
8811
8728
  });
8812
8729
  }
8813
8730
 
8814
8731
  datesFields = lodash.map(datesFields, function (row) {
8815
- return {
8816
- "format": isFormattingDatesAsOtherAxisTypes ? null : highchartsRenderer.getDateFieldFormat(widget, row),
8817
- "name": row.name,
8818
- "type": row.type,
8819
- "values": [],
8820
- "sorting": row.sorting
8821
- } //'MMM - yyyy' format
8732
+ return { "format": highchartsRenderer.getDateFieldFormat(widget, row), "name": row.name, "type": row.type, "values": [], "sorting": row.sorting } //'MMM - yyyy' format
8733
+ });
8734
+
8735
+ var data = res;
8736
+
8737
+ lodash.forEach(datesFields, function (row) {
8738
+ row.val_not_convert = highchartsRenderer.check_values_not_for_convert(widget, row.name);
8822
8739
  });
8823
8740
 
8824
- if (!isFormattingDatesAsOtherAxisTypes) {
8825
- lodash.forEach(datesFields, function (row) {
8826
- row.val_not_convert = highchartsRenderer.check_values_not_for_convert(widget, row.name);
8827
- });
8828
- }
8829
-
8830
8741
  if (datesFields.length > 0) {
8831
- const invertedDateStringMap = {};
8832
- lodash.forEach(res, function (element) {
8742
+ lodash.forEach(data, function (element) {
8833
8743
  for (var i in datesFields) {
8834
8744
  if (element.hasOwnProperty(datesFields[i].name)) {
8835
8745
  datesFields[i].values.push(element[datesFields[i].name]);
8836
-
8837
- if (!isFormattingDatesAsOtherAxisTypes) {
8838
- const dateStringValue = highchartsRenderer.returnRawDataValue(
8839
- datesFields[i].type, element[datesFields[i].name],
8840
- defaultDateFormat ? defaultDateFormat : datesFields[i].format,
8841
- datesFields[i].name, datesFields[i].val_not_convert);
8842
- if (widget.pivot) {
8843
- if (!widget.pivot.dateValuesDictionary) {
8844
- widget.pivot.dateValuesDictionary = {}
8845
- }
8846
- widget.pivot.dateValuesDictionary[dateStringValue] = element[datesFields[i].name];
8847
- invertedDateStringMap[element[datesFields[i].name]] = dateStringValue;
8746
+ const dateStringValue = highchartsRenderer.returnRawDataValue(
8747
+ datesFields[i].type, element[datesFields[i].name],
8748
+ defaultDateFormat ? defaultDateFormat : datesFields[i].format,
8749
+ datesFields[i].name, datesFields[i].val_not_convert);
8750
+ if (widget.pivot) {
8751
+ if (!widget.pivot.dateValuesDictionary) {
8752
+ widget.pivot.dateValuesDictionary = {}
8848
8753
  }
8849
- element[datesFields[i].name] = dateStringValue;
8754
+ widget.pivot.dateValuesDictionary[dateStringValue] = element[datesFields[i].name];
8850
8755
  }
8756
+ element[datesFields[i].name] = dateStringValue;
8851
8757
  }
8852
8758
  }
8853
8759
  });
8854
-
8855
- if (highchartsRenderer.sortHasBeenDoneOnBE(lodash.get(widget, 'pivot.keysObject')) && !isFormattingDatesAsOtherAxisTypes) {
8856
- lodash.forEach(['col_keys', 'row_keys'], (keysListName, index) => {
8857
- const widgetFields = index ? widget.rows : widget.cols;
8858
- const uniqueFormattedKeysList = [];
8859
- lodash.forEach(widget.pivot.keysObject[keysListName], subKeysList => {
8860
- lodash.forEach(subKeysList, (key, index) => {
8861
- if (widgetFields[index].type === 'Date') {
8862
- subKeysList[index] = invertedDateStringMap[key] || key;
8863
- }
8864
- });
8865
- if (!lodash.find(uniqueFormattedKeysList, formattedSubKeys => lodash.isEqual(formattedSubKeys, subKeysList))) {
8866
- uniqueFormattedKeysList.push(subKeysList);
8867
- }
8868
- });
8869
- widget.pivot.keysObject[keysListName] = uniqueFormattedKeysList;
8870
- });
8871
- }
8872
8760
  }
8761
+ lodash.forEach(datesFields, function (row) {
8762
+ row.values = lodash.uniq(row.values);
8873
8763
 
8874
- if (!highchartsRenderer.sortHasBeenDoneOnBE(lodash.get(widget, 'pivot.keysObject'))) {
8875
-
8876
- lodash.forEach(datesFields, function (row) {
8877
- row.values = lodash.uniq(row.values);
8878
-
8879
- const isTimestampDateField = row.type === 'Date' && lodash.some(row.values, value => typeof value ==='number');
8880
- if (isTimestampDateField) {
8881
- const nullValueIndex = row.values.indexOf(NULL_VALUE);
8882
- if (~nullValueIndex) {
8883
- row.values.splice(nullValueIndex, 1);
8884
- }
8885
- row.values = row.values.sort((a, b) => a - b);
8886
- if (~nullValueIndex) {
8887
- row.values.push(NULL_VALUE);
8888
- }
8889
- } else {
8890
- row.values = row.values.sort();
8764
+ const isTimestampDateField = row.type === 'Date' && lodash.some(row.values, value => typeof value ==='number');
8765
+ if (isTimestampDateField) {
8766
+ const nullValueIndex = row.values.indexOf(NULL_VALUE);
8767
+ if (~nullValueIndex) {
8768
+ row.values.splice(nullValueIndex, 1);
8891
8769
  }
8892
-
8893
- if (row.sorting && row.sorting.type == "largestToSmallest") {
8894
- row.values = lodash.reverse(row.values);
8770
+ row.values = row.values.sort((a, b) => a - b);
8771
+ if (~nullValueIndex) {
8772
+ row.values.push(NULL_VALUE);
8895
8773
  }
8896
- delete row.sorting;
8897
-
8898
- if (!isFormattingDatesAsOtherAxisTypes) {
8899
- row.values = lodash.map(row.values, function (val) {
8900
- return highchartsRenderer.returnRawDataValue(row.type, val, row.format, row.name, row.val_not_convert) + "";
8901
- });
8902
- }
8903
- });
8774
+ } else {
8775
+ row.values = row.values.sort();
8776
+ }
8904
8777
 
8905
- /* date string */
8906
- var rowsAndCols = [];
8907
- rowsAndCols = widget.rows.concat(widget.cols);
8908
-
8909
- if (widget.chart_type === highchartsRenderer.CHART_TYPES.WATERFALL_BREAKDOWN) {
8910
-
8911
- // if it is breakdown widget - redefine sorting according to breakdown_options
8912
- // TODO: remove this when BE sort will be implemented (FE subtickets for story DR-18469)
8913
- const isTwoColumnComparisonWidget = lodash.get(widget, 'options.breakdown_options.values.totals', []).length === 2;
8914
- lodash.forEach(rowsAndCols, function (field) {
8915
- const waterfallFieldType = field.id === widget.cols[0].id ? 'totals' : 'breakdown';
8916
- if (waterfallFieldType !== 'totals' || isTwoColumnComparisonWidget) {
8917
- field.sorting = {
8918
- type: 'CustomOrder',
8919
- values: lodash.map(
8920
- widget.options.breakdown_options.values[waterfallFieldType],
8921
- value => value.key
8922
- ),
8923
- };
8924
- } else {
8925
- field.sorting = null;
8926
- }
8927
- });
8928
- } else if (isCustomSorting) {
8929
- lodash.forEach(rowsAndCols, function (field) {
8930
- const fieldToSort = lodash.find(
8931
- widget.options.sortingFields, element => element.id === field.id && lodash.get(element, 'sorting.sort_by') === 'field_items'
8932
- );
8933
- field.sorting = fieldToSort ? fieldToSort.sorting : field.sorting;
8934
- });
8778
+ if (row.sorting && row.sorting.type == "largestToSmallest") {
8779
+ row.values = lodash.reverse(row.values);
8935
8780
  }
8781
+ delete row.sorting;
8782
+ row.values = lodash.map(row.values, function (val) {
8783
+ return highchartsRenderer.returnRawDataValue(row.type, val, row.format, row.name, row.val_not_convert) + "";
8784
+ })
8936
8785
 
8786
+ });
8787
+
8788
+ /* date string */
8789
+ var rowsAndCols = [];
8790
+ rowsAndCols = widget.rows.concat(widget.cols);
8791
+
8792
+ if (widget.chart_type === highchartsRenderer.CHART_TYPES.WATERFALL_BREAKDOWN) {
8793
+
8794
+ // if it is breakdown widget - redefine sorting according to breakdown_options
8795
+ // TODO: remove this when BE sort will be implemented
8937
8796
  lodash.forEach(rowsAndCols, function (field) {
8938
- if (field.sorting && (field.sorting.type == "DateString" || field.sorting.type == "largestToSmallest")) {
8939
- var find_field = lodash.find(datesFields, {name: field.name});
8940
- if (find_field) {
8941
- if (find_field.type != 'Date')
8942
- find_field.sorting = field.sorting;
8943
- } else {
8944
- datesFields.push({
8945
- "format": field.format,
8946
- "name": field.name,
8947
- "type": field.type,
8948
- "values": [],
8949
- "sorting": field.sorting,
8950
- });
8951
- }
8952
- } else if (field.sorting && field.sorting.type == "CustomOrder" && field.sorting.values) {
8797
+ const waterfallFieldType = field.id === widget.cols[0].id ? 'totals' : 'breakdown';
8798
+ field.sorting = {
8799
+ type: 'CustomOrder',
8800
+ values: lodash.map(
8801
+ widget.options.breakdown_options.values[waterfallFieldType],
8802
+ value => value.key
8803
+ ),
8804
+ };
8805
+ });
8806
+ } else if (isCustomSorting) {
8807
+ lodash.forEach(rowsAndCols, function (field) {
8808
+ const fieldToSort = lodash.find(widget.options.sortingFields, element => element.id === field.id);
8809
+ field.sorting = fieldToSort ? fieldToSort.sorting : field.sorting;
8810
+ });
8811
+ }
8812
+
8813
+ lodash.forEach(rowsAndCols, function (field) {
8814
+ if (field.sorting && (field.sorting.type == "DateString" || field.sorting.type == "largestToSmallest")) {
8815
+ var find_field = lodash.find(datesFields, {name: field.name});
8816
+ if (find_field) {
8817
+ if (find_field.type != 'Date')
8818
+ find_field.sorting = field.sorting;
8819
+ } else {
8953
8820
  datesFields.push({
8954
8821
  "format": field.format,
8955
8822
  "name": field.name,
8956
8823
  "type": field.type,
8957
- "values": field.sorting.values
8824
+ "values": [],
8825
+ "sorting": field.sorting,
8958
8826
  });
8959
8827
  }
8828
+ } else if (field.sorting && field.sorting.type == "CustomOrder" && field.sorting.values) {
8829
+ datesFields.push({
8830
+ "format": field.format,
8831
+ "name": field.name,
8832
+ "type": field.type,
8833
+ "values": field.sorting.values
8834
+ });
8835
+ }
8836
+ });
8837
+
8838
+ if (widget.vals && widget.vals.length > 1) {
8839
+ datesFields.push({name: "DR_Values", values: lodash.map(widget.vals, 'name')});
8840
+ }
8841
+
8842
+ /****** END *******/
8843
+
8844
+ if (lodash.has(widget, "options.chartOptions.delta_column") &&
8845
+ widget.options.chartOptions.delta_column.field != '' &&
8846
+ (widget.options.chartOptions.delta_column.sort_by_variance ||
8847
+ widget.options.chartOptions.delta_column.sort_by_absolute_variance) &&
8848
+ widget.rows.length > 0 &&
8849
+ widget.cols.length > 0 &&
8850
+ widget.vals.length
8851
+ ) {
8852
+ let variance_config = widget.options.chartOptions.delta_column;
8853
+ let val_field = widget.vals[0];
8854
+ let field_for_sorting = null;
8855
+ let field_with_variant = null;
8856
+ if (variance_config.field == "series") {
8857
+ field_for_sorting = widget.cols[0];
8858
+ field_with_variant = widget.rows[0];
8859
+ } else if (variance_config.field == "category") {
8860
+ field_for_sorting = widget.rows[0];
8861
+ field_with_variant = widget.cols[0];
8862
+ }
8863
+
8864
+ let data_sorted = lodash.filter(data, function (data_row) {
8865
+ return data_row[field_with_variant.name] == variance_config.name && data_row[field_for_sorting.name] != undefined;
8960
8866
  });
8961
8867
 
8962
- if (widget.vals && widget.vals.length > 1) {
8963
- datesFields.push({name: "DR_Values", values: lodash.map(widget.vals, 'name')});
8868
+ const sorting_variance = widget.options.total_value_options && widget.options.total_value_options.sorting_variance === '' ? 'asc' : 'desc';
8869
+
8870
+ if (widget.options.chartOptions.delta_column.sort_by_absolute_variance) {
8871
+ data_sorted = lodash.sortBy(data_sorted, function (o) {
8872
+ if (sorting_variance === 'desc') {
8873
+ return Math.abs(o[val_field.name]) * -1;
8874
+ }
8875
+
8876
+ return Math.abs(o[val_field.name]) * 1;
8877
+ });
8878
+ } else {
8879
+ data_sorted = lodash.orderBy(data_sorted, [val_field.name], [sorting_variance]);
8964
8880
  }
8965
-
8966
- /****** END *******/
8967
8881
 
8968
- // TODO: Remove. sortingValues looks like lagacy which is not in use neither in webclient nor in renderer
8969
- if (widget.options && widget.options.sortingValues) {
8970
- var field = lodash.find(datesFields, {name: widget.options.sortingValues.field});
8882
+ let values_for_sort = lodash.map(data_sorted, function (data_row) {
8883
+ return data_row[field_for_sorting.name];
8884
+ });
8885
+
8886
+ values_for_sort = lodash.uniq(values_for_sort);
8887
+
8888
+ if (values_for_sort.length > 0) {
8889
+ let field = lodash.find(datesFields, {name: field_for_sorting.name});
8971
8890
  if (field) {
8972
- field.values = widget.options.sortingValues.values;
8891
+ field.values = values_for_sort;
8973
8892
  field.sorting = null;
8974
8893
  } else {
8975
- datesFields.push({
8976
- name: widget.options.sortingValues.field,
8977
- values: widget.options.sortingValues.values
8978
- });
8894
+ datesFields.push({name: field_for_sorting.name, values: values_for_sort});
8979
8895
  }
8980
8896
  }
8981
- sorters = function (attr) {
8982
- var field = lodash.find(datesFields, {name: attr});
8983
- if (field)
8984
- if (field.sorting && field.sorting.type == "DateString") {
8985
- return $.pivotUtilities.sortDateStrings(field.sorting.month_order);
8986
- } else if (field.sorting && field.sorting.type == "largestToSmallest") {
8987
- if (field.sorting.is_absolute)
8988
- return $.pivotUtilities.largeToSmallSortByAbsolute;
8989
- return $.pivotUtilities.largeToSmallSort;
8990
- } else {
8991
- return $.pivotUtilities.sortAs(field.values);
8992
- }
8993
- };
8897
+ } else if (widget.options && widget.options.sortingValues) {
8898
+ var field = lodash.find(datesFields, {name: widget.options.sortingValues.field});
8899
+ if (field) {
8900
+ field.values = widget.options.sortingValues.values;
8901
+ field.sorting = null;
8902
+ } else {
8903
+ datesFields.push({
8904
+ name: widget.options.sortingValues.field,
8905
+ values: widget.options.sortingValues.values
8906
+ });
8907
+ }
8994
8908
  }
8995
8909
 
8910
+ let sorters = function (attr) {
8911
+ var field = lodash.find(datesFields, {name: attr});
8912
+ if (field)
8913
+ if (field.sorting && field.sorting.type == "DateString") {
8914
+ return $.pivotUtilities.sortDateStrings(field.sorting.month_order);
8915
+ } else if (field.sorting && field.sorting.type == "largestToSmallest") {
8916
+ if (field.sorting.is_absolute)
8917
+ return $.pivotUtilities.largeToSmallSortByAbsolute;
8918
+
8919
+ return $.pivotUtilities.largeToSmallSort;
8920
+ } else {
8921
+ return $.pivotUtilities.sortAs(field.values);
8922
+ }
8923
+ };
8924
+
8996
8925
  return sorters;
8997
8926
  };
8998
8927
 
@@ -9011,12 +8940,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
9011
8940
 
9012
8941
  //highchartsRenderer.getGraphOptions(scope.data, override_values, res, scope.dataModel.templatesWithOutData, scope.openDrillDownList, drillDownFunction)
9013
8942
  highchartsRenderer.getGraphOptions = function (widget_obj, override_values, row_data, templates, openDrillDownListFunction, drillDownFunction) {
9014
-
9015
- let keysObject;
9016
- if (highchartsRenderer.isSortingOnBackendEnabled) {
9017
- keysObject = row_data.pop();
9018
- }
9019
-
9020
8943
  let res = highchartsRenderer.updateSelectedOverrideValues(widget_obj, override_values, row_data);
9021
8944
  res = highchartsRenderer.convertUniqueDateValues(widget_obj, templates, res);
9022
8945
 
@@ -9026,21 +8949,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
9026
8949
  res = highchartsRenderer.addTotalsToWalkthroughRowData(widget_obj, res);
9027
8950
  }
9028
8951
 
9029
- res = highchartsRenderer.fixIncompatibleCalculatedValuesTotals(widget_obj, res);
9030
-
9031
8952
  let pivot = {};
9032
8953
 
9033
- if (highchartsRenderer.sortHasBeenDoneOnBE(keysObject)) {
9034
- pivot.keysObject = keysObject;
9035
- }
9036
-
9037
8954
  let templateNoData = lodash.find(templates, {id: widget_obj.template_id});
9038
8955
  if (templateNoData) {
9039
8956
 
9040
- lodash.forEach(templateNoData.fields, field => {
9041
- field.name = highchartsRenderer.decodeFunc(field.name);
9042
- });
9043
-
9044
8957
  // we need to assign this before calling getWidgetDataSorters method
9045
8958
  // other way we won't get dateValuesDictionary
9046
8959
  // preserved condition templateNoData == true - not to interfere with further logic
@@ -9074,8 +8987,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
9074
8987
  subopts.onlyOptions = true;
9075
8988
  }
9076
8989
 
9077
- subopts.keysObject = keysObject;
9078
-
9079
8990
  let hc_options = highchartsRenderer.rhPivotView(res, subopts, is_table, widget_obj);
9080
8991
 
9081
8992
  return hc_options;
@@ -9174,7 +9085,7 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
9174
9085
  }
9175
9086
 
9176
9087
  highchartsRenderer.getOptionsForLegends = function (additionOptions, rowAttrsLength, isLine, isPie) {
9177
- const topPosition = {
9088
+ const topPosition = useNewUx ? {
9178
9089
  enabled: rowAttrsLength > 0,
9179
9090
  align: 'left',
9180
9091
  verticalAlign: 'top',
@@ -9185,14 +9096,27 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
9185
9096
  x: -3,
9186
9097
  y: isNewAngular ? -10 : -26,
9187
9098
  layout: "horizontal"
9099
+ } : {
9100
+ enabled: rowAttrsLength > 0,
9101
+ align: 'left',
9102
+ verticalAlign: 'top',
9103
+ itemMarginTop: 4,
9104
+ maxHeight: 37,
9105
+ layout: "horizontal",
9106
+ padding: 0
9188
9107
  };
9189
- const bottomPosition = {
9108
+ const bottomPosition = useNewUx ? {
9109
+ enabled: rowAttrsLength > 0,
9110
+ maxHeight: 37,
9111
+ itemMarginTop: 2,
9112
+ padding: 0
9113
+ } : {
9190
9114
  enabled: rowAttrsLength > 0,
9191
9115
  maxHeight: 37,
9192
9116
  itemMarginTop: 2,
9193
9117
  padding: 0
9194
9118
  };
9195
- const rightPosition = {
9119
+ const rightPosition = useNewUx ? {
9196
9120
  enabled: rowAttrsLength > 0,
9197
9121
  layout: 'vertical',
9198
9122
  align: 'right',
@@ -9200,8 +9124,15 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
9200
9124
  borderWidth: 0,
9201
9125
  itemMarginTop: 10,
9202
9126
  y: additionOptions.hideChartHeader ? -25 : (additionOptions.subtitle && additionOptions.subtitle.subtitle ? 30 : 13)
9127
+ } : {
9128
+ layout: 'vertical',
9129
+ align: 'right',
9130
+ verticalAlign: 'middle',
9131
+ borderWidth: 0,
9132
+ itemMarginTop: 2,
9133
+ enabled: rowAttrsLength > 0
9203
9134
  };
9204
- const leftPosition = {
9135
+ const leftPosition = useNewUx ? {
9205
9136
  enabled: rowAttrsLength > 0,
9206
9137
  layout: 'vertical',
9207
9138
  align: 'left',
@@ -9209,6 +9140,13 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
9209
9140
  borderWidth: 0,
9210
9141
  itemMarginTop: 10,
9211
9142
  y: additionOptions.hideChartHeader ? -25 : (additionOptions.subtitle && additionOptions.subtitle.subtitle ? 30 : 13)
9143
+ } : {
9144
+ enabled: rowAttrsLength > 0,
9145
+ layout: 'vertical',
9146
+ align: 'left',
9147
+ verticalAlign: 'middle',
9148
+ borderWidth: 0,
9149
+ itemMarginTop: 2,
9212
9150
  };
9213
9151
  const none = {
9214
9152
  enabled: false,
@@ -9232,16 +9170,14 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
9232
9170
  return none;
9233
9171
  }
9234
9172
  } else if (isLine) {
9235
- return leftPosition;
9173
+ return useNewUx ? leftPosition : rightPosition;
9236
9174
  } else if (isPie) {
9237
- return rightPosition;
9175
+ return useNewUx ? rightPosition : topPosition;
9238
9176
  }
9239
9177
 
9240
- return topPosition;
9241
- }
9242
- highchartsRenderer.setStaticTicksAmount = function (yAxis) {
9243
- yAxis.tickAmount = TICKS_COUNT;
9178
+ return useNewUx ? topPosition : bottomPosition;
9244
9179
  }
9180
+
9245
9181
  highchartsRenderer.setYAxisMinMax = function (yAxis, axisYOptions) {
9246
9182
  if (!axisYOptions) {
9247
9183
  return;
@@ -9251,14 +9187,11 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
9251
9187
  const maxNumber = parseInt(axisYOptions.max);
9252
9188
  yAxis.min = !isNaN(minNumber) ? minNumber : null;
9253
9189
  yAxis.max = !isNaN(maxNumber) ? maxNumber : null;
9254
- if (minNumber || maxNumber) {
9255
- highchartsRenderer.setStaticTicksAmount(yAxis);
9256
- }
9257
9190
  }
9258
9191
 
9259
9192
  highchartsRenderer.getDateFieldFormat = function(widget, dateField) {
9260
9193
  const aggregationConfig = widget.options && widget.options.date_aggregation_configs
9261
- ? lodash.find(widget.options.date_aggregation_configs, { field_id: dateField.id })
9194
+ ? _.find(widget.options.date_aggregation_configs, { field_id: dateField.id })
9262
9195
  : null;
9263
9196
 
9264
9197
  if (aggregationConfig && aggregationConfig.aggregate_by && aggregationConfig.is_formatting_by_aggregation_method) {
@@ -9323,19 +9256,17 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
9323
9256
 
9324
9257
  // if it is not total value - then add it as rowData data row and sum it up
9325
9258
  // else - add total with calculated sum as new rowData data row (totals do not initially exist in BE response)
9326
- if (value && value.trend !== 'total') {
9259
+ if (value.trend !== 'total') {
9327
9260
  const rowIndex = lodash.findIndex(rowData, (responseRow) =>
9328
9261
  lodash.every(categoryFields, (field, fieldKey) => responseRow[field.name] === value.key[fieldKey])
9329
9262
  );
9330
- if (rowIndex >= 0) {
9331
- modifiedRowData.push(rowData[rowIndex]);
9332
- sum += rowData[rowIndex][valueField.name];
9333
- rowData.splice(rowIndex, 1);
9334
- }
9263
+ modifiedRowData.push(rowData[rowIndex]);
9264
+ sum += rowData[rowIndex][valueField.name];
9265
+ rowData.splice(rowIndex, 1);
9335
9266
  } else {
9336
9267
  const totalRow = {};
9337
- lodash.forEach(categoryFields, (field, fieldKey) => {
9338
- totalRow[field.name] = value && value.key && value.key[fieldKey];
9268
+ _.forEach(categoryFields, (field, fieldKey) => {
9269
+ totalRow[field.name] = value.key[fieldKey];
9339
9270
  });
9340
9271
  totalRow[valueField.name] = sum;
9341
9272
  modifiedRowData.push(totalRow);
@@ -9356,13 +9287,10 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
9356
9287
  filter.values.push(colValue);
9357
9288
  });
9358
9289
  } else {
9359
- const format = highchartsRenderer.getDateFieldFormat(widget, field);
9360
9290
  filter.values = field.type === 'Date' && colKey !== NULL_VALUE
9361
- ? highchartsRenderer.createDateTypeFromValue(colKey, format)
9291
+ ? highchartsRenderer.createDateTypeFromValue(colKey, highchartsRenderer.getDateFieldFormat(widget, field))
9362
9292
  : [colKey];
9363
- filter.value_to_show = field.type === 'Date' && highchartsRenderer.isFormattingDatesAsOtherAxisTypes()
9364
- ? highchartsRenderer.returnRawDataValue(field.type, +colKey, format, field.name)
9365
- : colKey;
9293
+ filter.value_to_show = colKey;
9366
9294
  }
9367
9295
  }
9368
9296
 
@@ -9395,225 +9323,6 @@ let getHighchartsRenderer = function ($, document, Highcharts, default_colors, h
9395
9323
  });
9396
9324
  }
9397
9325
 
9398
- highchartsRenderer.getFiscalYearMonthModifier = function() {
9399
- return lodash.get(document, 'ReportHippo.user.organization.fiscal_year_starts_from', 1) - 1;
9400
- }
9401
-
9402
- highchartsRenderer.getTimeframeByFormat = function(format) {
9403
- if (format && highchartsRenderer.containsIgnoreCase(format, 'q'))
9404
- return 'quarter';
9405
- else if (format && !highchartsRenderer.containsIgnoreCase(format, 'dd') && !highchartsRenderer.containsIgnoreCase(format, 'mm') && highchartsRenderer.containsIgnoreCase(format, 'yy'))
9406
- return 'year';
9407
- else if (format && !highchartsRenderer.containsIgnoreCase(format, 'dd') && highchartsRenderer.containsIgnoreCase(format, 'mm') && highchartsRenderer.containsIgnoreCase(format, 'yy'))
9408
- return 'month';
9409
- else {
9410
- return 'day';
9411
- }
9412
- }
9413
-
9414
- // Check if chart has multiple values
9415
- highchartsRenderer.isChartWithMultiValues = function(pivotData) {
9416
- return lodash.get(pivotData, 'rowAttrs[0]') === 'DR_Values';
9417
- }
9418
-
9419
- highchartsRenderer.checkFormats = function(render_options, widget_values_format) {
9420
- let isSecondaryAxis = false;
9421
- let formats = [];
9422
- if (render_options && render_options.comboOptions && render_options.comboOptions.seriesOptions) {
9423
- isSecondaryAxis = lodash.some(render_options.comboOptions.seriesOptions, series => series.secondaryAxis);
9424
- formats = lodash.map(render_options.comboOptions.seriesOptions, series => series.format);
9425
- }
9426
- const isCustomFormat = !lodash.includes(formats, widget_values_format);
9427
-
9428
- return { isSecondaryAxis, isCustomFormat }
9429
- }
9430
-
9431
- highchartsRenderer.getRecordFormats = function(render_options, recordName) {
9432
- let formats = [];
9433
- if (render_options && render_options.comboOptions && render_options.comboOptions.seriesOptions) {
9434
- formats = render_options.comboOptions.seriesOptions
9435
- .filter(series => series.series === recordName)
9436
- .map(series => series.format);
9437
- }
9438
- return formats;
9439
- }
9440
-
9441
- // Will be FALSE when all 4 conditions true: 1. User applies SecondaryAxis 2. Format on 'format editor panel' is same as any Value field table format
9442
- // 3. Chart has more than one value fields in Values block 4. enable_new_widget_value_formatting is turned ON
9443
- // In that case we apply for both value fields their format from the table
9444
- // In all other cases we are applying format from editor panel to both of them (specification: DR-20955)
9445
- highchartsRenderer.isUsingWidgetValuesFormat = function (pivotData, render_options, widget_values_format) {
9446
- const { isSecondaryAxis, isCustomFormat } = highchartsRenderer.checkFormats(render_options, widget_values_format);
9447
- return !highchartsRenderer.enabledNewWidgetValueFormatting || !highchartsRenderer.isChartWithMultiValues(pivotData) || !isSecondaryAxis || isCustomFormat;
9448
- }
9449
-
9450
- highchartsRenderer.isFormattingNumberAxis = function (pivotData) {
9451
- return highchartsRenderer.isFormattingAxisFeatureOn() && pivotData.isFormattingAxisLabels;
9452
- }
9453
-
9454
- highchartsRenderer.isFormattingDatesAsOtherAxisTypes = function () {
9455
- return highchartsRenderer.isFormattingAxisFeatureOn() && highchartsRenderer.hasFeature(FEATURES.FORMAT_DATES_AS_OTHER_AXIS_TYPES);
9456
- }
9457
-
9458
- highchartsRenderer.isFormattingAxisFeatureOn = function () {
9459
- return highchartsRenderer.hasFeature(FEATURES.FORMAT_AXIS);
9460
- }
9461
-
9462
- highchartsRenderer.sortHasBeenDoneOnBE = function (keysObject) {
9463
- return highchartsRenderer.isSortingOnBackendEnabled && helpers.backendSortingKeysAreNotEmpty(keysObject);
9464
- }
9465
-
9466
- // Method for getting formatted kyes for Axis (cols, rows)
9467
- highchartsRenderer.getFormattedKey = function (initialKey, pivotData, type) {
9468
- const isFlatKey = lodash.isString(initialKey) || lodash.isNumber(initialKey);
9469
- if (isFlatKey || lodash.isArray(initialKey)) {
9470
- let values = isFlatKey ? initialKey.toString().split(highchartsRenderer.delimer) : lodash.cloneDeep(initialKey);
9471
- if (values) {
9472
- lodash.forEach(values, (value, key) => {
9473
- const formatInfo = pivotData[type][key] || {};
9474
- const valueToFloat = parseFloat(value);
9475
- const isDate = formatInfo.type === 'Date';
9476
- const isDateFormatting = isDate && highchartsRenderer.isFormattingDatesAsOtherAxisTypes();
9477
- const isNumberFormatting = !isDate && formatInfo.format && highchartsRenderer.isFormattingNumberAxis(pivotData);
9478
- const isApplyingFormat = !isNaN(valueToFloat) && (isNumberFormatting || isDateFormatting);
9479
- if (isApplyingFormat) {
9480
- values[key] = highchartsRenderer.returnRawDataValue(
9481
- formatInfo.type,
9482
- valueToFloat,
9483
- formatInfo.format,
9484
- formatInfo.name,
9485
- formatInfo.val_not_convert,
9486
- true
9487
- );
9488
- }
9489
- });
9490
- return isFlatKey ? values.join(highchartsRenderer.delimer) : values;
9491
- }
9492
- }
9493
- return initialKey;
9494
- }
9495
-
9496
- highchartsRenderer.getFormattedColKey = function (initialValue, pivotData) {
9497
- return highchartsRenderer.getFormattedKey(initialValue, pivotData, 'colFormats')
9498
- }
9499
-
9500
- highchartsRenderer.getFormattedRowKey = function (initialValue, pivotData) {
9501
- return highchartsRenderer.getFormattedKey(initialValue, pivotData, 'rowFormats')
9502
- }
9503
-
9504
- highchartsRenderer.getFormattedKeys = function(pivotData, isCols, keys) {
9505
- keys = keys || (isCols ? pivotData.getColKeys() : pivotData.getRowKeys());
9506
- return highchartsRenderer.isFormattingAxisFeatureOn()
9507
- ? lodash.map(keys, key => highchartsRenderer.getFormattedKey(key, pivotData, isCols ? 'colFormats' : 'rowFormats'))
9508
- : keys;
9509
- }
9510
-
9511
- highchartsRenderer.getFormattedColKeys = function(pivotData, keys) {
9512
- return highchartsRenderer.getFormattedKeys(pivotData, true, keys);
9513
- }
9514
-
9515
- highchartsRenderer.getFormattedRowKeys = function(pivotData, keys) {
9516
- return highchartsRenderer.getFormattedKeys(pivotData, false, keys);
9517
- }
9518
-
9519
- highchartsRenderer.modifyEventPointForDrilldown = function(e, pivotData) {
9520
- if (!highchartsRenderer.isFormattingAxisFeatureOn()) {
9521
- return;
9522
- }
9523
- e.point = lodash.cloneDeep(e.point);
9524
- e.point.name = e.point.initialName;
9525
- e.point.series.name = lodash.get(e.point.series, 'userOptions.initialName', e.point.series.name);
9526
- lodash.set(e, 'point.category.userOptions', e.point.initialName.toString().split(highchartsRenderer.delimer));
9527
- }
9528
-
9529
- highchartsRenderer.getSeriesNameInFormatterContext = function(context, pivotData) {
9530
- return ((highchartsRenderer.isFormattingAxisFeatureOn() && lodash.get(context, 'series.userOptions.initialName')) || context.series.name || '') + "";
9531
- }
9532
-
9533
- highchartsRenderer.getColsInFormatterContext = function(context, pivotData) {
9534
- return lodash.get(context, 'point.options.colsForTotal')
9535
- || highchartsRenderer.isFormattingAxisFeatureOn() && (lodash.get(context, 'point.initialName') || lodash.get(context, 'options.initialName'))
9536
- || context.key;
9537
- }
9538
-
9539
- highchartsRenderer.getTableFormatInfosForWidgetFields = function(widget, pivotOptions, fields) {
9540
- return lodash.map(fields, field => ({
9541
- type: field.type,
9542
- name: field.name,
9543
- format: field.type === 'Date'
9544
- ? highchartsRenderer.getDateFieldFormat(widget, field) || pivotOptions.defaultDateFormat
9545
- : highchartsRenderer.decodeFunc(field.format),
9546
- val_not_convert: highchartsRenderer.check_values_not_for_convert(widget, field.name),
9547
- }));
9548
- }
9549
-
9550
- // We are receiving not correct format for subtotals from BE for now - so we modyfing the response
9551
- // in order to transform it to acceptable one. It is complex to fix currently on BE side.
9552
- // TODO: remove it when fixed on BE side
9553
- highchartsRenderer.fixIncompatibleCalculatedValuesTotals = function(widget, res) {
9554
-
9555
- // if it is FE side calculation or empty response - just return unmodified
9556
- if (!highchartsRenderer.useTotalsCalculation || !lodash.get(res, 'length')) return res;
9557
-
9558
- const calculatedValuesInValsCount = lodash.filter(
9559
- widget.calculated_values, calcVal => lodash.some(widget.vals, { field: calcVal.field })
9560
- ).length;
9561
-
9562
- // do transformations only if widget has calculated in values
9563
- if (calculatedValuesInValsCount) {
9564
- const fieldWithDrValuesNames = lodash.reduce(
9565
- widget.calculated_values,
9566
- (fieldNames, calcVal) => {
9567
- const fieldName = lodash.get(lodash.find(widget.vals, { field: calcVal.field }), 'name');
9568
- return fieldName ? lodash.concat(fieldNames, [fieldName]) : fieldNames;
9569
- },
9570
- []
9571
- );
9572
-
9573
- const existingRecords = [];
9574
- lodash.forEach(res, (record) => {
9575
-
9576
- // example: replace record { Type: "Discount", City: "Brest", DR_Values: "Normal 1", Amount: 52585.14 }
9577
- // with { Type: "Discount", City: "Brest", DR_Values: "Normal 1", value: 52585.14 }
9578
- if (widget.vals.length > 1 && !widget.rows.length) {
9579
- const valueFieldNameFound = lodash.find(fieldWithDrValuesNames, name => record[name]);
9580
- if (valueFieldNameFound) {
9581
- record.value = record[valueFieldNameFound];
9582
- delete record[valueFieldNameFound];
9583
- }
9584
- }
9585
-
9586
- // in response from BE we have currently improper column subtotals:
9587
- // they returned with 'DR_Values' not empty - same as for regular cell values
9588
- // so we have two records with same column values and can't define which is subtotal
9589
- const isSameColValuesWasBefore = lodash.some(existingRecords, existingRecord =>
9590
- lodash.every(
9591
- lodash.concat(['DR_Values'], lodash.map(widget.cols, 'name')), fieldName => existingRecord[fieldName] === record[fieldName]
9592
- )
9593
- );
9594
- const isNoRowValues = lodash.every(widget.rows, field => typeof record[field.name] === 'undefined');
9595
- const isSubtotal = isSameColValuesWasBefore && isNoRowValues;
9596
-
9597
- // we need to remove DR_Values for response records which suppose to be subtotals
9598
- if (isSubtotal) {
9599
- delete record.DR_Values;
9600
- }
9601
-
9602
- existingRecords.push(record);
9603
- });
9604
-
9605
- // Another BE issue - it is not returning correct subtotals for case we have more than one calculated values
9606
- // It is just not counting sum there. So we remove it in order not to show improper values
9607
- if ((calculatedValuesInValsCount > 1 || calculatedValuesInValsCount && widget.vals.length > 1) && !widget.rows.length) {
9608
- res = lodash.filter(res, record => {
9609
- const isColsTotal = typeof record['DR_Values'] === 'undefined';
9610
- return !isColsTotal;
9611
- })
9612
- }
9613
- }
9614
- return res;
9615
- }
9616
-
9617
9326
  return highchartsRenderer;
9618
9327
  };
9619
9328