@provoly/dashboard 1.2.0 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.d.ts +3 -3
  2. package/components/sinceDate/sinceDate.pipe.d.ts +2 -0
  3. package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +6 -6
  4. package/esm2022/components/sinceDate/sinceDate.pipe.mjs +27 -10
  5. package/esm2022/lib/core/components/share/group-share/group-share.component.mjs +28 -21
  6. package/esm2022/lib/core/components/share/legacy-share/share.component.mjs +25 -37
  7. package/esm2022/lib/core/components/share/share.model.mjs +2 -7
  8. package/esm2022/lib/core/i18n/en.translations.mjs +3 -2
  9. package/esm2022/lib/core/i18n/fr.translations.mjs +3 -2
  10. package/esm2022/lib/core/model/widget-analytic-manifest.interface.mjs +1 -1
  11. package/esm2022/lib/core/model/widget.interface.mjs +1 -1
  12. package/esm2022/lib/core/store/data-source/data-source.actions.mjs +1 -1
  13. package/esm2022/lib/core/store/data-source/data-source.model.mjs +7 -2
  14. package/esm2022/lib/core/toolbox/toolbox-menu.service.mjs +3 -6
  15. package/esm2022/restitution/components/restitution/restitution.component.mjs +8 -12
  16. package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +4 -5
  17. package/esm2022/restitution/components/restitution-list/restitution-list.component.mjs +2 -2
  18. package/esm2022/restitution/components/restitution-list-item/restitution-list-item.component.mjs +4 -5
  19. package/esm2022/search/components/save-query/save-query.component.mjs +2 -2
  20. package/esm2022/search/search-tools/search-tools.component.mjs +1 -1
  21. package/esm2022/widgets/widget-analytic/component/widget-analytic.component.mjs +88 -14
  22. package/esm2022/widgets/widget-analytic/i18n/en.translations.mjs +7 -2
  23. package/esm2022/widgets/widget-analytic/i18n/fr.translations.mjs +7 -2
  24. package/esm2022/widgets/widget-analytic/style/css.component.mjs +2 -2
  25. package/esm2022/widgets/widget-analytic/widget-analytic.module.mjs +12 -8
  26. package/fesm2022/provoly-dashboard-admin.mjs +5 -5
  27. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  28. package/fesm2022/provoly-dashboard-components-sinceDate.mjs +26 -9
  29. package/fesm2022/provoly-dashboard-components-sinceDate.mjs.map +1 -1
  30. package/fesm2022/provoly-dashboard-restitution.mjs +11 -17
  31. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  32. package/fesm2022/provoly-dashboard-search.mjs +2 -2
  33. package/fesm2022/provoly-dashboard-search.mjs.map +1 -1
  34. package/fesm2022/provoly-dashboard-widgets-widget-analytic.mjs +112 -24
  35. package/fesm2022/provoly-dashboard-widgets-widget-analytic.mjs.map +1 -1
  36. package/fesm2022/provoly-dashboard.mjs +105 -108
  37. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  38. package/lib/core/components/share/group-share/group-share.component.d.ts +15 -10
  39. package/lib/core/components/share/legacy-share/share.component.d.ts +8 -14
  40. package/lib/core/components/share/share.model.d.ts +0 -9
  41. package/lib/core/i18n/en.translations.d.ts +2 -1
  42. package/lib/core/i18n/fr.translations.d.ts +2 -1
  43. package/lib/core/model/widget-analytic-manifest.interface.d.ts +8 -1
  44. package/lib/core/model/widget.interface.d.ts +1 -2
  45. package/lib/core/store/data-source/data-source.actions.d.ts +9 -4
  46. package/lib/core/store/data-source/data-source.model.d.ts +9 -2
  47. package/lib/core/toolbox/toolbox-menu.service.d.ts +1 -3
  48. package/package.json +7 -7
  49. package/restitution/components/restitution/restitution.component.d.ts +2 -3
  50. package/restitution/components/restitution-catalog/restitution-catalog.component.d.ts +1 -2
  51. package/restitution/components/restitution-list-item/restitution-list-item.component.d.ts +1 -2
  52. package/search/components/save-query/save-query.component.d.ts +5 -2
  53. package/search/search-fulltext/store/search-fulltext.effects.d.ts +4 -1
  54. package/search/search-mono-class/store/search-mono-class.effects.d.ts +4 -1
  55. package/search/search-multi-class/store/search-multi-class.effects.d.ts +4 -1
  56. package/widgets/widget-analytic/component/widget-analytic.component.d.ts +18 -0
  57. package/widgets/widget-analytic/i18n/en.translations.d.ts +5 -0
  58. package/widgets/widget-analytic/i18n/fr.translations.d.ts +5 -0
  59. package/widgets/widget-analytic/style/_o-widget-analytic.scss +48 -0
  60. package/widgets/widget-analytic/widget-analytic.module.d.ts +3 -2
@@ -2,29 +2,49 @@ import * as i0 from '@angular/core';
2
2
  import { Component, ViewEncapsulation, NgModule } from '@angular/core';
3
3
  import * as i4 from '@provoly/dashboard';
4
4
  import { DataWidgetComponent, ClassSelectors, WIDGET_HEADER_HEIGHT, BaseWidgetModule, PryCoreModule, PryDashboardModule, PrySelectModule, PryIconModule, PryToggleModule, PryI18nModule } from '@provoly/dashboard';
5
- import { map, combineLatest } from 'rxjs';
5
+ import { map, combineLatest, startWith } from 'rxjs';
6
+ import { filter } from 'rxjs/operators';
6
7
  import * as i1 from '@ngrx/store';
7
8
  import * as i2 from '@angular/common';
8
9
  import { CommonModule, AsyncPipe } from '@angular/common';
9
10
  import * as i3 from '@angular/forms';
10
11
  import { FormsModule } from '@angular/forms';
11
- import { OverlayModule } from '@angular/cdk/overlay';
12
+ import * as i5 from '@provoly/dashboard/components/checkbox';
12
13
  import { PryCheckboxModule } from '@provoly/dashboard/components/checkbox';
13
- import { WidgetMapModule } from '@provoly/dashboard/widgets/widget-map';
14
+ import * as i6 from '@provoly/dashboard/components/color-picker';
15
+ import { PryColorPickerModule } from '@provoly/dashboard/components/color-picker';
16
+ import * as i7 from '@angular/cdk/drag-drop';
17
+ import { DragDropModule } from '@angular/cdk/drag-drop';
18
+ import { OverlayModule } from '@angular/cdk/overlay';
14
19
 
15
20
  class PryWidgetAnalyticCssComponent {
16
21
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryWidgetAnalyticCssComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
17
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: PryWidgetAnalyticCssComponent, selector: "pry-widget-analytic-css", ngImport: i0, template: '', isInline: true, styles: [".o-widget__analytic__table,.o-widget__analytic__table table{width:100%}.o-widget__analytic__table table th,.o-widget__analytic__table table td{text-align:center}.o-widget__analytic__table table th:first-child,.o-widget__analytic__table table td:first-child{text-align:left}.o-widget__analytic__table table .primary-header th:not(:first-child){background-color:#d7e7f7}.o-widget__analytic__table table .secondary-header th:not(:first-child){background-color:#f3f8fc}.o-widget__analytic__table table .partial-total th,.o-widget__analytic__table table .partial-total td{background-color:#f0f0f0}.o-widget__analytic__table table .grand-total th,.o-widget__analytic__table table .grand-total td{background-color:#bdb9da}\n"], encapsulation: i0.ViewEncapsulation.None }); }
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: PryWidgetAnalyticCssComponent, selector: "pry-widget-analytic-css", ngImport: i0, template: '', isInline: true, styles: [".o-widget__analytic__table,.o-widget__analytic__table table{width:100%}.o-widget__analytic__table table th,.o-widget__analytic__table table td{text-align:center}.o-widget__analytic__table table th:first-child,.o-widget__analytic__table table td:first-child{text-align:left}.o-widget__analytic__table table .primary-header th:not(:first-child){background-color:#d7e7f7}.o-widget__analytic__table table .secondary-header th:not(:first-child){background-color:#f3f8fc}.o-widget__analytic__table table .partial-total th,.o-widget__analytic__table table .partial-total td{background-color:#f0f0f0}.o-widget__analytic__table table .grand-total th,.o-widget__analytic__table table .grand-total td{background-color:#bdb9da}.o-widget__analytic__color-picker-container{margin-top:.625rem;gap:.9375rem;flex-wrap:wrap}.o-widget__analytic__color-picker{position:relative}.o-widget__analytic__color-picker-remove{position:absolute;right:-20px;top:-10px;z-index:2;color:#263340;padding:0}.o-widget__analytic__color-picker-add{padding:.75rem;border:1px solid #263340;border-radius:50%;width:20px}.cdk-drop-list-dragging .cdk-drag,.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drop-list-dragging .o-widget__analytic__color-picker:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;border-radius:50%;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}\n"], encapsulation: i0.ViewEncapsulation.None }); }
18
23
  }
19
24
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryWidgetAnalyticCssComponent, decorators: [{
20
25
  type: Component,
21
- args: [{ selector: 'pry-widget-analytic-css', template: '', encapsulation: ViewEncapsulation.None, styles: [".o-widget__analytic__table,.o-widget__analytic__table table{width:100%}.o-widget__analytic__table table th,.o-widget__analytic__table table td{text-align:center}.o-widget__analytic__table table th:first-child,.o-widget__analytic__table table td:first-child{text-align:left}.o-widget__analytic__table table .primary-header th:not(:first-child){background-color:#d7e7f7}.o-widget__analytic__table table .secondary-header th:not(:first-child){background-color:#f3f8fc}.o-widget__analytic__table table .partial-total th,.o-widget__analytic__table table .partial-total td{background-color:#f0f0f0}.o-widget__analytic__table table .grand-total th,.o-widget__analytic__table table .grand-total td{background-color:#bdb9da}\n"] }]
26
+ args: [{ selector: 'pry-widget-analytic-css', template: '', encapsulation: ViewEncapsulation.None, styles: [".o-widget__analytic__table,.o-widget__analytic__table table{width:100%}.o-widget__analytic__table table th,.o-widget__analytic__table table td{text-align:center}.o-widget__analytic__table table th:first-child,.o-widget__analytic__table table td:first-child{text-align:left}.o-widget__analytic__table table .primary-header th:not(:first-child){background-color:#d7e7f7}.o-widget__analytic__table table .secondary-header th:not(:first-child){background-color:#f3f8fc}.o-widget__analytic__table table .partial-total th,.o-widget__analytic__table table .partial-total td{background-color:#f0f0f0}.o-widget__analytic__table table .grand-total th,.o-widget__analytic__table table .grand-total td{background-color:#bdb9da}.o-widget__analytic__color-picker-container{margin-top:.625rem;gap:.9375rem;flex-wrap:wrap}.o-widget__analytic__color-picker{position:relative}.o-widget__analytic__color-picker-remove{position:absolute;right:-20px;top:-10px;z-index:2;color:#263340;padding:0}.o-widget__analytic__color-picker-add{padding:.75rem;border:1px solid #263340;border-radius:50%;width:20px}.cdk-drop-list-dragging .cdk-drag,.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drop-list-dragging .o-widget__analytic__color-picker:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drag-preview{box-sizing:border-box;border-radius:50%;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}\n"] }]
22
27
  }] });
23
28
 
24
29
  class WidgetAnalyticComponent extends DataWidgetComponent {
25
30
  change($event, prop) {
26
31
  this.optionsCopy[prop] = $event;
27
32
  }
33
+ changeColorConfig($event, prop) {
34
+ switch (prop) {
35
+ case 'prop': {
36
+ this.optionsCopy.colorConfig.prop = $event;
37
+ break;
38
+ }
39
+ case 'colors': {
40
+ this.optionsCopy.colorConfig.colors = $event;
41
+ break;
42
+ }
43
+ }
44
+ }
45
+ changeFormat($event, prop = 'suffix') {
46
+ this.optionsCopy.format.suffix = $event;
47
+ }
28
48
  constructor(store, el) {
29
49
  super(store, el);
30
50
  this.optionsCopy = { primaryProp: '', secondaryProp: '', verticalProp: '', valueProp: '' };
@@ -34,16 +54,16 @@ class WidgetAnalyticComponent extends DataWidgetComponent {
34
54
  this.subscriptions.add(this.options$.subscribe((options) => {
35
55
  this.optionsCopy = JSON.parse(JSON.stringify(options));
36
56
  }));
37
- this.primaryProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.primaryProp)));
38
- this.secondaryProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.secondaryProp, 1)));
39
- this.verticalProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.verticalProp, 1)));
57
+ this.primaryProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(filter(([options]) => !!options.primaryProp), map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.primaryProp)));
58
+ this.secondaryProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(filter(([options]) => !!options.secondaryProp), map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.secondaryProp, 1)));
59
+ this.verticalProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(filter(([options]) => !!options.verticalProp), map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.verticalProp, 1)));
40
60
  this.totalProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.verticalProp, 2)));
41
61
  this.grandTotalProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.verticalProp, 3)));
42
62
  this.lines$ = combineLatest([
43
63
  this.options$,
44
- this.primaryProperty$,
45
- this.secondaryProperty$,
46
- this.verticalProperty$,
64
+ this.primaryProperty$.pipe(startWith([])),
65
+ this.secondaryProperty$.pipe(startWith(undefined)),
66
+ this.verticalProperty$.pipe(startWith([])),
47
67
  this.resultSet$
48
68
  ]).pipe(map(([options, primaryProps, secondaryProps, verticalProps, rs]) => this.createValueMap(verticalProps, primaryProps, secondaryProps, rs, options, 1)));
49
69
  this.totals$ = combineLatest([
@@ -59,6 +79,12 @@ class WidgetAnalyticComponent extends DataWidgetComponent {
59
79
  this.grandTotalProperty$,
60
80
  this.resultSet$
61
81
  ]).pipe(map(([options, primaryProps, verticalProps, rs]) => this.createValueMap(verticalProps, primaryProps, undefined, rs, options, 3)));
82
+ this.colorMap$ = combineLatest([
83
+ this.options$,
84
+ this.resultSet$,
85
+ this.verticalProperty$,
86
+ this.primaryProperty$
87
+ ]).pipe(filter(([options]) => !!options.colorConfig), map(([options, rs, vertical, primary]) => this.createColorMap(vertical, primary, rs, options)));
62
88
  this.availableProperties$ = combineLatest([this.classes$, this.resultSet$]).pipe(map(([classes, rs]) => {
63
89
  const presentClassesId = Object.keys(rs.items);
64
90
  const presentClasses = presentClassesId
@@ -68,7 +94,7 @@ class WidgetAnalyticComponent extends DataWidgetComponent {
68
94
  }));
69
95
  }
70
96
  matchAttributeValue(item, prop, comparisonValue) {
71
- return comparisonValue ? item.attributes[prop].value == comparisonValue : true;
97
+ return comparisonValue && prop ? item.attributes[prop].value == comparisonValue : true;
72
98
  }
73
99
  createValueMap(verticalProps, primaryProps, secondaryProps, rs, options, level) {
74
100
  return verticalProps.map((vertical) => {
@@ -87,7 +113,7 @@ class WidgetAnalyticComponent extends DataWidgetComponent {
87
113
  value[primary][secondary] = matchingItem.attributes[options.valueProp].value;
88
114
  }
89
115
  else {
90
- value[primary] = matchingItem.attributes[options.valueProp].value;
116
+ value[primary] = matchingItem.attributes[options.valueProp]?.value;
91
117
  }
92
118
  }
93
119
  });
@@ -98,7 +124,7 @@ class WidgetAnalyticComponent extends DataWidgetComponent {
98
124
  getPropertyLabelsForLevel(rs, property, level) {
99
125
  const values = Object.values(rs.items)
100
126
  .map((items) => items
101
- .filter((item) => level
127
+ .filter((item) => level && 'level' in item.attributes
102
128
  ? [level, '' + level].includes(item.attributes['level'].value)
103
129
  : true)
104
130
  .map((item) => item.attributes[property].value + ''))
@@ -106,6 +132,55 @@ class WidgetAnalyticComponent extends DataWidgetComponent {
106
132
  .flat();
107
133
  return [...new Set(values)];
108
134
  }
135
+ createColorMap(verticalProps, primaryProps, rs, options) {
136
+ return options.colorConfig
137
+ ? Object.fromEntries(verticalProps.map((vertical) => [
138
+ vertical,
139
+ Object.fromEntries(primaryProps.map((primary) => {
140
+ const matchingItem = (rs.items[Object.keys(rs.items)[0]] ?? []).find((item) => this.matchAttributeValue(item, options.primaryProp, primary) &&
141
+ this.matchAttributeValue(item, options.verticalProp, vertical));
142
+ return [
143
+ primary,
144
+ matchingItem && matchingItem.attributes[options.valueProp].value !== 0
145
+ ? options.colorConfig?.colors[matchingItem.attributes[options.colorConfig.prop].value -
146
+ 1]
147
+ : '#FFFFFF'
148
+ ];
149
+ }))
150
+ ]))
151
+ : {};
152
+ }
153
+ toggleColorConfig($event) {
154
+ if ($event !== !!this.optionsCopy.colorConfig) {
155
+ if (!this.optionsCopy.colorConfig) {
156
+ this.optionsCopy.colorConfig = { prop: '', colors: [] };
157
+ }
158
+ else {
159
+ this.optionsCopy.colorConfig = undefined;
160
+ }
161
+ }
162
+ }
163
+ toggleFormat($event) {
164
+ if ($event !== !!this.optionsCopy.format) {
165
+ if (!this.optionsCopy.format) {
166
+ this.optionsCopy.format = { suffix: '' };
167
+ }
168
+ else {
169
+ this.optionsCopy.format = undefined;
170
+ }
171
+ }
172
+ }
173
+ modifyColorScheme($event, index) {
174
+ $event && index !== undefined
175
+ ? (this.optionsCopy.colorConfig.colors[index] = $event)
176
+ : this.optionsCopy.colorConfig.colors.push('#FFFFFF');
177
+ }
178
+ removeColor(index) {
179
+ this.optionsCopy.colorConfig.colors.splice(index, 1);
180
+ }
181
+ drop(event) {
182
+ this.optionsCopy.colorConfig.colors.splice(event.currentIndex, 0, this.optionsCopy.colorConfig.colors.splice(event.previousIndex, 1)[0]);
183
+ }
109
184
  emitManifest() {
110
185
  this.manifestModified.emit({
111
186
  widgetIndex: this.widgetIndex,
@@ -113,11 +188,11 @@ class WidgetAnalyticComponent extends DataWidgetComponent {
113
188
  });
114
189
  }
115
190
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WidgetAnalyticComponent, deps: [{ token: i1.Store }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
116
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: WidgetAnalyticComponent, selector: "pry-widget-analytic", usesInheritance: true, ngImport: i0, template: "<pry-widget-analytic-css></pry-widget-analytic-css>\n<div class=\"o-widget o-widget__analytic\">\n <pry-widget-header\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__fields\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"primaryProp\">{{ '@pry.widget.analytic.primaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'primaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.primaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"primaryProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"secondaryProp\">{{ '@pry.widget.analytic.secondaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'secondaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.secondaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"secondaryProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"verticalProp\">{{ '@pry.widget.analytic.verticalProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'verticalProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.verticalProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"verticalProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"valueProp\">{{ '@pry.widget.analytic.valueProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'valueProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.valueProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"valueProp\"\n ></pry-select>\n </div>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"o-widget__analytic__table\">\n <table [style.height.px]=\"height$ | async\">\n <thead>\n <tr class=\"primary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n <th [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ primary }}\n </th>\n }\n </tr>\n <tr class=\"secondary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <th>{{ secondary }}</th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (line of lines$ | async; track line.name) {\n <tr>\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td>\n {{ line.value[primary][secondary] }}\n </td>\n }\n }\n </tr>\n }\n </tbody>\n <tfoot>\n @for (line of totals$ | async; track line.name) {\n <tr class=\"partial-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td>\n {{ line.value[primary][secondary] }}\n </td>\n }\n }\n </tr>\n }\n @for (line of grandTotals$ | async; track line.name) {\n <tr class=\"grand-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n <td [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ line.value[primary] }}\n </td>\n }\n </tr>\n }\n </tfoot>\n </table>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["triggerClick", "saveTriggered", "changeTitle"] }, { kind: "component", type: i4.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i4.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: PryWidgetAnalyticCssComponent, selector: "pry-widget-analytic-css" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }] }); }
191
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: WidgetAnalyticComponent, selector: "pry-widget-analytic", usesInheritance: true, ngImport: i0, template: "<pry-widget-analytic-css></pry-widget-analytic-css>\n<div class=\"o-widget o-widget__analytic\">\n <pry-widget-header\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__fields\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"primaryProp\">{{ '@pry.widget.analytic.primaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'primaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.primaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"primaryProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"secondaryProp\">{{ '@pry.widget.analytic.secondaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'secondaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.secondaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"secondaryProp\"\n [clearable]=\"true\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"verticalProp\">{{ '@pry.widget.analytic.verticalProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'verticalProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.verticalProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"verticalProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"valueProp\">{{ '@pry.widget.analytic.valueProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'valueProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.valueProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"valueProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleColorConfig($event)\" [ngModel]=\"!!optionsCopy.colorConfig\">\n {{ '@pry.widget.analytic.colorConfig' | i18n }}\n </pry-checkbox>\n @if (optionsCopy.colorConfig) {\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"colorProp\">{{ '@pry.widget.analytic.colorProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorConfig($event, 'prop')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.colorConfig.prop\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"colorProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"colorProp\">{{ '@pry.widget.analytic.colors' | i18n }}</label>\n <div\n class=\"o-widget__analytic__color-picker-container u-display-flex -align-center\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n cdkDropListOrientation=\"horizontal\"\n >\n @for (color of optionsCopy.colorConfig.colors; track color; let i = $index) {\n <div class=\"o-widget__analytic__color-picker\" cdkDrag>\n <pry-color-picker\n [ngModel]=\"color\"\n (ngModelChange)=\"modifyColorScheme($event, i)\"\n ></pry-color-picker>\n <button (click)=\"removeColor(i)\" class=\"o-widget__analytic__color-picker-remove\">\n <pry-icon iconSvg=\"close\" [height]=\"15\" [width]=\"15\"></pry-icon>\n </button>\n <div *cdkDragPreview>\n <pry-color-picker [ngModel]=\"color\"></pry-color-picker>\n </div>\n </div>\n }\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only o-widget__analytic__color-picker-add\"\n (click)=\"modifyColorScheme()\"\n >\n <pry-icon iconSvg=\"add\" [height]=\"20\" [width]=\"20\"></pry-icon>\n </button>\n </div>\n </div>\n }\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleFormat($event)\" [ngModel]=\"!!optionsCopy.format\">\n {{ '@pry.widget.analytic.format' | i18n }}\n </pry-checkbox>\n @if (optionsCopy.format) {\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"format\">{{ '@pry.widget.analytic.suffix' | i18n }}</label>\n <input\n type=\"text\"\n class=\"a-form-field\"\n id=\"format\"\n [ngModel]=\"optionsCopy.format.suffix\"\n (ngModelChange)=\"changeFormat($event)\"\n />\n </div>\n }\n </div>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"o-widget__analytic__table\">\n <table [style.height.px]=\"height$ | async\">\n <thead>\n <tr class=\"primary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n <th [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ primary }}\n </th>\n }\n </tr>\n @if (optionsCopy.secondaryProp) {\n <tr class=\"secondary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <th>{{ secondary }}</th>\n }\n }\n </tr>\n }\n </thead>\n <tbody>\n @for (line of lines$ | async; track line.name) {\n <tr>\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @if (optionsCopy.secondaryProp) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td\n [ngStyle]=\"\n optionsCopy.colorConfig ? { 'background-color': (colorMap$ | async)?.[line.name]?.[primary] } : {}\n \"\n >\n {{ line.value[primary][secondary]\n }}{{ optionsCopy.format?.suffix ? ' ' + optionsCopy.format?.suffix : '' }}\n </td>\n }\n } @else {\n <td\n [ngStyle]=\"\n optionsCopy.colorConfig ? { 'background-color': (colorMap$ | async)?.[line.name]?.[primary] } : {}\n \"\n >\n {{ line.value[primary] }}{{ optionsCopy.format?.suffix ? ' ' + optionsCopy.format?.suffix : '' }}\n </td>\n }\n }\n </tr>\n }\n </tbody>\n <tfoot>\n @for (line of totals$ | async; track line.name) {\n <tr class=\"partial-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td>\n {{ line.value[primary][secondary] }}\n </td>\n }\n }\n </tr>\n }\n @for (line of grandTotals$ | async; track line.name) {\n <tr class=\"grand-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n <td [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ line.value[primary] }}\n </td>\n }\n </tr>\n }\n </tfoot>\n </table>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["triggerClick", "saveTriggered", "changeTitle"] }, { kind: "component", type: i4.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i4.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i6.PryColorPickerComponent, selector: "pry-color-picker" }, { kind: "directive", type: i7.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "component", type: PryWidgetAnalyticCssComponent, selector: "pry-widget-analytic-css" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.I18nPipe, name: "i18n" }] }); }
117
192
  }
118
193
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WidgetAnalyticComponent, decorators: [{
119
194
  type: Component,
120
- args: [{ selector: 'pry-widget-analytic', template: "<pry-widget-analytic-css></pry-widget-analytic-css>\n<div class=\"o-widget o-widget__analytic\">\n <pry-widget-header\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__fields\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"primaryProp\">{{ '@pry.widget.analytic.primaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'primaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.primaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"primaryProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"secondaryProp\">{{ '@pry.widget.analytic.secondaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'secondaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.secondaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"secondaryProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"verticalProp\">{{ '@pry.widget.analytic.verticalProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'verticalProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.verticalProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"verticalProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"valueProp\">{{ '@pry.widget.analytic.valueProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'valueProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.valueProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"valueProp\"\n ></pry-select>\n </div>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"o-widget__analytic__table\">\n <table [style.height.px]=\"height$ | async\">\n <thead>\n <tr class=\"primary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n <th [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ primary }}\n </th>\n }\n </tr>\n <tr class=\"secondary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <th>{{ secondary }}</th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (line of lines$ | async; track line.name) {\n <tr>\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td>\n {{ line.value[primary][secondary] }}\n </td>\n }\n }\n </tr>\n }\n </tbody>\n <tfoot>\n @for (line of totals$ | async; track line.name) {\n <tr class=\"partial-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td>\n {{ line.value[primary][secondary] }}\n </td>\n }\n }\n </tr>\n }\n @for (line of grandTotals$ | async; track line.name) {\n <tr class=\"grand-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n <td [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ line.value[primary] }}\n </td>\n }\n </tr>\n }\n </tfoot>\n </table>\n </div>\n</div>\n" }]
195
+ args: [{ selector: 'pry-widget-analytic', template: "<pry-widget-analytic-css></pry-widget-analytic-css>\n<div class=\"o-widget o-widget__analytic\">\n <pry-widget-header\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__fields\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"primaryProp\">{{ '@pry.widget.analytic.primaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'primaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.primaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"primaryProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"secondaryProp\">{{ '@pry.widget.analytic.secondaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'secondaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.secondaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"secondaryProp\"\n [clearable]=\"true\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"verticalProp\">{{ '@pry.widget.analytic.verticalProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'verticalProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.verticalProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"verticalProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"valueProp\">{{ '@pry.widget.analytic.valueProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'valueProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.valueProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"valueProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleColorConfig($event)\" [ngModel]=\"!!optionsCopy.colorConfig\">\n {{ '@pry.widget.analytic.colorConfig' | i18n }}\n </pry-checkbox>\n @if (optionsCopy.colorConfig) {\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"colorProp\">{{ '@pry.widget.analytic.colorProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorConfig($event, 'prop')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.colorConfig.prop\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"colorProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"colorProp\">{{ '@pry.widget.analytic.colors' | i18n }}</label>\n <div\n class=\"o-widget__analytic__color-picker-container u-display-flex -align-center\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n cdkDropListOrientation=\"horizontal\"\n >\n @for (color of optionsCopy.colorConfig.colors; track color; let i = $index) {\n <div class=\"o-widget__analytic__color-picker\" cdkDrag>\n <pry-color-picker\n [ngModel]=\"color\"\n (ngModelChange)=\"modifyColorScheme($event, i)\"\n ></pry-color-picker>\n <button (click)=\"removeColor(i)\" class=\"o-widget__analytic__color-picker-remove\">\n <pry-icon iconSvg=\"close\" [height]=\"15\" [width]=\"15\"></pry-icon>\n </button>\n <div *cdkDragPreview>\n <pry-color-picker [ngModel]=\"color\"></pry-color-picker>\n </div>\n </div>\n }\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only o-widget__analytic__color-picker-add\"\n (click)=\"modifyColorScheme()\"\n >\n <pry-icon iconSvg=\"add\" [height]=\"20\" [width]=\"20\"></pry-icon>\n </button>\n </div>\n </div>\n }\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleFormat($event)\" [ngModel]=\"!!optionsCopy.format\">\n {{ '@pry.widget.analytic.format' | i18n }}\n </pry-checkbox>\n @if (optionsCopy.format) {\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"format\">{{ '@pry.widget.analytic.suffix' | i18n }}</label>\n <input\n type=\"text\"\n class=\"a-form-field\"\n id=\"format\"\n [ngModel]=\"optionsCopy.format.suffix\"\n (ngModelChange)=\"changeFormat($event)\"\n />\n </div>\n }\n </div>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"o-widget__analytic__table\">\n <table [style.height.px]=\"height$ | async\">\n <thead>\n <tr class=\"primary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n <th [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ primary }}\n </th>\n }\n </tr>\n @if (optionsCopy.secondaryProp) {\n <tr class=\"secondary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <th>{{ secondary }}</th>\n }\n }\n </tr>\n }\n </thead>\n <tbody>\n @for (line of lines$ | async; track line.name) {\n <tr>\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @if (optionsCopy.secondaryProp) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td\n [ngStyle]=\"\n optionsCopy.colorConfig ? { 'background-color': (colorMap$ | async)?.[line.name]?.[primary] } : {}\n \"\n >\n {{ line.value[primary][secondary]\n }}{{ optionsCopy.format?.suffix ? ' ' + optionsCopy.format?.suffix : '' }}\n </td>\n }\n } @else {\n <td\n [ngStyle]=\"\n optionsCopy.colorConfig ? { 'background-color': (colorMap$ | async)?.[line.name]?.[primary] } : {}\n \"\n >\n {{ line.value[primary] }}{{ optionsCopy.format?.suffix ? ' ' + optionsCopy.format?.suffix : '' }}\n </td>\n }\n }\n </tr>\n }\n </tbody>\n <tfoot>\n @for (line of totals$ | async; track line.name) {\n <tr class=\"partial-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td>\n {{ line.value[primary][secondary] }}\n </td>\n }\n }\n </tr>\n }\n @for (line of grandTotals$ | async; track line.name) {\n <tr class=\"grand-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n <td [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ line.value[primary] }}\n </td>\n }\n </tr>\n }\n </tfoot>\n </table>\n </div>\n</div>\n" }]
121
196
  }], ctorParameters: () => [{ type: i1.Store }, { type: i0.ElementRef }] });
122
197
 
123
198
  const enTranslations = {
@@ -127,7 +202,12 @@ const enTranslations = {
127
202
  primaryProp: 'Attribute that contains the horizontal primary field',
128
203
  secondaryProp: 'Attribute that contains the horizontal secondary field',
129
204
  verticalProp: 'Attribute that contains the vertical attribute',
130
- valueProp: 'Attribute that contains the value'
205
+ valueProp: 'Attribute that contains the value',
206
+ colorConfig: 'Cell color configuration',
207
+ colorProp: 'Color attribute',
208
+ colors: 'Colors',
209
+ format: 'Value formatting',
210
+ suffix: 'Suffix'
131
211
  }
132
212
  }
133
213
  }
@@ -140,7 +220,12 @@ const frTranslations = {
140
220
  primaryProp: 'Attribut horizontal primaire',
141
221
  secondaryProp: 'Attribut horizontal secondaire',
142
222
  verticalProp: 'Attribut vertical',
143
- valueProp: 'Attribut contenant la valeur'
223
+ valueProp: 'Attribut contenant la valeur',
224
+ colorConfig: 'Configuration des couleurs de cellules',
225
+ colorProp: 'Attribut de la couleur',
226
+ colors: 'Couleurs',
227
+ format: 'Formattage des valeurs',
228
+ suffix: 'Suffixe'
144
229
  }
145
230
  }
146
231
  }
@@ -166,9 +251,10 @@ class WidgetAnalyticModule extends BaseWidgetModule {
166
251
  PryIconModule,
167
252
  PryCheckboxModule,
168
253
  PryToggleModule,
169
- WidgetMapModule,
170
254
  PryI18nModule,
171
- AsyncPipe], exports: [WidgetAnalyticComponent] }); }
255
+ AsyncPipe,
256
+ PryColorPickerModule,
257
+ DragDropModule], exports: [WidgetAnalyticComponent] }); }
172
258
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WidgetAnalyticModule, imports: [CommonModule,
173
259
  FormsModule,
174
260
  OverlayModule,
@@ -178,8 +264,9 @@ class WidgetAnalyticModule extends BaseWidgetModule {
178
264
  PryIconModule,
179
265
  PryCheckboxModule,
180
266
  PryToggleModule,
181
- WidgetMapModule,
182
- PryI18nModule] }); }
267
+ PryI18nModule,
268
+ PryColorPickerModule,
269
+ DragDropModule] }); }
183
270
  }
184
271
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: WidgetAnalyticModule, decorators: [{
185
272
  type: NgModule,
@@ -195,9 +282,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
195
282
  PryIconModule,
196
283
  PryCheckboxModule,
197
284
  PryToggleModule,
198
- WidgetMapModule,
199
285
  PryI18nModule,
200
- AsyncPipe
286
+ AsyncPipe,
287
+ PryColorPickerModule,
288
+ DragDropModule
201
289
  ],
202
290
  exports: [WidgetAnalyticComponent]
203
291
  }]
@@ -1 +1 @@
1
- {"version":3,"file":"provoly-dashboard-widgets-widget-analytic.mjs","sources":["../../../../projects/provoly/dashboard/widgets/widget-analytic/style/css.component.ts","../../../../projects/provoly/dashboard/widgets/widget-analytic/component/widget-analytic.component.ts","../../../../projects/provoly/dashboard/widgets/widget-analytic/component/widget-analytic.component.html","../../../../projects/provoly/dashboard/widgets/widget-analytic/i18n/en.translations.ts","../../../../projects/provoly/dashboard/widgets/widget-analytic/i18n/fr.translations.ts","../../../../projects/provoly/dashboard/widgets/widget-analytic/widget-analytic.module.ts","../../../../projects/provoly/dashboard/widgets/widget-analytic/provoly-dashboard-widgets-widget-analytic.ts"],"sourcesContent":["import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'pry-widget-analytic-css',\n template: '',\n styleUrls: ['./_o-widget-analytic.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class PryWidgetAnalyticCssComponent {}\n","import { Component, ElementRef } from '@angular/core';\nimport {\n AnalyticWidgetOptions,\n Attribute,\n AttributeSimpleValue,\n Class,\n ClassSelectors,\n DataWidgetComponent,\n Item,\n ResultSet,\n WIDGET_HEADER_HEIGHT\n} from '@provoly/dashboard';\nimport { combineLatest, map, Observable } from 'rxjs';\nimport { Store } from '@ngrx/store';\n\n@Component({\n selector: 'pry-widget-analytic',\n templateUrl: './widget-analytic.component.html'\n})\nexport class WidgetAnalyticComponent extends DataWidgetComponent {\n optionsCopy: AnalyticWidgetOptions = { primaryProp: '', secondaryProp: '', verticalProp: '', valueProp: '' };\n options$: Observable<AnalyticWidgetOptions>;\n\n primaryProperty$: Observable<string[]>;\n secondaryProperty$: Observable<string[]>;\n verticalProperty$: Observable<string[]>;\n totalProperty$: Observable<string[]>;\n grandTotalProperty$: Observable<string[]>;\n lines$: Observable<{ name: string; value: { [key: string]: { [key: string]: any } } }[]>;\n totals$: Observable<{ name: string; value: { [key: string]: { [key: string]: any } } }[]>;\n grandTotals$: Observable<{ name: any; value: { [p: string]: any } }[]>;\n height$: Observable<number>;\n classes$: Observable<Class[]>;\n availableProperties$: Observable<Attribute[]>;\n\n change($event: string, prop: 'primaryProp' | 'secondaryProp' | 'valueProp' | 'verticalProp') {\n this.optionsCopy[prop] = $event;\n }\n\n constructor(store: Store<any>, el: ElementRef) {\n super(store, el);\n this.options$ = this.manifest$.pipe(map((manifest) => (manifest.options ?? {}) as AnalyticWidgetOptions));\n this.classes$ = this.store.select(ClassSelectors.classes);\n this.height$ = combineLatest([this.widgetSize$, this.displayHeader$]).pipe(\n map(([size, header]) => size.height - (header ? WIDGET_HEADER_HEIGHT.value : 0))\n );\n this.subscriptions.add(\n this.options$.subscribe((options) => {\n this.optionsCopy = JSON.parse(JSON.stringify(options));\n })\n );\n this.primaryProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(\n map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.primaryProp))\n );\n this.secondaryProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(\n map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.secondaryProp, 1))\n );\n this.verticalProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(\n map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.verticalProp, 1))\n );\n this.totalProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(\n map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.verticalProp, 2))\n );\n this.grandTotalProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(\n map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.verticalProp, 3))\n );\n\n this.lines$ = combineLatest([\n this.options$,\n this.primaryProperty$,\n this.secondaryProperty$,\n this.verticalProperty$,\n this.resultSet$\n ]).pipe(\n map(([options, primaryProps, secondaryProps, verticalProps, rs]) =>\n this.createValueMap(verticalProps, primaryProps, secondaryProps, rs, options, 1)\n )\n );\n\n this.totals$ = combineLatest([\n this.options$,\n this.primaryProperty$,\n this.secondaryProperty$,\n this.totalProperty$,\n this.resultSet$\n ]).pipe(\n map(([options, primaryProps, secondaryProps, verticalProps, rs]) =>\n this.createValueMap(verticalProps, primaryProps, secondaryProps, rs, options, 2)\n )\n );\n\n this.grandTotals$ = combineLatest([\n this.options$,\n this.primaryProperty$,\n this.grandTotalProperty$,\n this.resultSet$\n ]).pipe(\n map(([options, primaryProps, verticalProps, rs]) =>\n this.createValueMap(verticalProps, primaryProps, undefined, rs, options, 3)\n )\n );\n\n this.availableProperties$ = combineLatest([this.classes$, this.resultSet$]).pipe(\n map(([classes, rs]) => {\n const presentClassesId = Object.keys(rs.items);\n const presentClasses = presentClassesId\n .map((classId) => classes.find((cl) => cl.id === classId))\n .filter((cl) => !!cl) as Class[];\n return presentClasses.map((cl) => cl.attributes).flat();\n })\n );\n }\n\n private matchAttributeValue(item: Item, prop: string, comparisonValue: string | undefined) {\n return comparisonValue ? (item.attributes[prop] as AttributeSimpleValue).value == comparisonValue : true;\n }\n\n private createValueMap(\n verticalProps: string[],\n primaryProps: string[],\n secondaryProps: string[] | undefined,\n rs: ResultSet,\n options: AnalyticWidgetOptions,\n level?: number\n ) {\n return verticalProps.map((vertical) => {\n const value = {} as { [key: string]: { [key: string]: any } | any };\n primaryProps.forEach((primary) => {\n (secondaryProps ?? [undefined]).forEach((secondary) => {\n const matchingItem = (rs.items[Object.keys(rs.items)[0]] ?? []).find(\n (item) =>\n this.matchAttributeValue(item, options.primaryProp, primary) &&\n this.matchAttributeValue(item, options.secondaryProp, secondary) &&\n this.matchAttributeValue(item, options.verticalProp, vertical) &&\n this.matchAttributeValue(item, 'level', level + '')\n );\n if (!!matchingItem) {\n if (!!secondary) {\n if (!value[primary]) {\n value[primary] = {};\n }\n value[primary][secondary] = (matchingItem!.attributes[options.valueProp] as AttributeSimpleValue).value;\n } else {\n value[primary] = (matchingItem!.attributes[options.valueProp] as AttributeSimpleValue).value;\n }\n }\n });\n });\n return { name: vertical, value };\n });\n }\n\n getPropertyLabelsForLevel(rs: ResultSet, property: string, level?: number) {\n const values = Object.values(rs.items)\n .map((items) =>\n items\n .filter((item) =>\n level\n ? [level, '' + level].includes(\n (item.attributes['level'] as AttributeSimpleValue).value as string | number\n )\n : true\n )\n .map((item) => (item.attributes[property] as AttributeSimpleValue).value + '')\n )\n .flat()\n .flat();\n return [...new Set(values)];\n }\n\n emitManifest() {\n this.manifestModified.emit({\n widgetIndex: this.widgetIndex,\n manifest: { ...this.manifest, options: this.optionsCopy }\n });\n }\n}\n","<pry-widget-analytic-css></pry-widget-analytic-css>\n<div class=\"o-widget o-widget__analytic\">\n <pry-widget-header\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__fields\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"primaryProp\">{{ '@pry.widget.analytic.primaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'primaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.primaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"primaryProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"secondaryProp\">{{ '@pry.widget.analytic.secondaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'secondaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.secondaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"secondaryProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"verticalProp\">{{ '@pry.widget.analytic.verticalProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'verticalProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.verticalProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"verticalProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"valueProp\">{{ '@pry.widget.analytic.valueProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'valueProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.valueProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"valueProp\"\n ></pry-select>\n </div>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"o-widget__analytic__table\">\n <table [style.height.px]=\"height$ | async\">\n <thead>\n <tr class=\"primary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n <th [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ primary }}\n </th>\n }\n </tr>\n <tr class=\"secondary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <th>{{ secondary }}</th>\n }\n }\n </tr>\n </thead>\n <tbody>\n @for (line of lines$ | async; track line.name) {\n <tr>\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td>\n {{ line.value[primary][secondary] }}\n </td>\n }\n }\n </tr>\n }\n </tbody>\n <tfoot>\n @for (line of totals$ | async; track line.name) {\n <tr class=\"partial-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td>\n {{ line.value[primary][secondary] }}\n </td>\n }\n }\n </tr>\n }\n @for (line of grandTotals$ | async; track line.name) {\n <tr class=\"grand-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n <td [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ line.value[primary] }}\n </td>\n }\n </tr>\n }\n </tfoot>\n </table>\n </div>\n</div>\n","export const enTranslations = {\n '@pry': {\n widget: {\n analytic: {\n primaryProp: 'Attribute that contains the horizontal primary field',\n secondaryProp: 'Attribute that contains the horizontal secondary field',\n verticalProp: 'Attribute that contains the vertical attribute',\n valueProp: 'Attribute that contains the value'\n }\n }\n }\n};\n","export const frTranslations = {\n '@pry': {\n widget: {\n analytic: {\n primaryProp: 'Attribut horizontal primaire',\n secondaryProp: 'Attribut horizontal secondaire',\n verticalProp: 'Attribut vertical',\n valueProp: 'Attribut contenant la valeur'\n }\n }\n }\n};\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n BaseWidgetComponent,\n BaseWidgetModule,\n PryCoreModule,\n PryDashboardModule,\n PryI18nModule,\n PryI18nService,\n PryIconModule,\n PrySelectModule,\n PryToggleModule\n} from '@provoly/dashboard';\nimport { PryCheckboxModule } from '@provoly/dashboard/components/checkbox';\nimport { WidgetMapModule } from '@provoly/dashboard/widgets/widget-map';\nimport { WidgetAnalyticComponent } from './component/widget-analytic.component';\nimport { enTranslations } from './i18n/en.translations';\nimport { frTranslations } from './i18n/fr.translations';\nimport { PryWidgetAnalyticCssComponent } from './style/css.component';\n\n@NgModule({\n declarations: [WidgetAnalyticComponent, PryWidgetAnalyticCssComponent],\n imports: [\n CommonModule,\n FormsModule,\n OverlayModule,\n PryCoreModule,\n PryDashboardModule,\n PrySelectModule,\n PryIconModule,\n PryCheckboxModule,\n PryToggleModule,\n WidgetMapModule,\n PryI18nModule,\n AsyncPipe\n ],\n exports: [WidgetAnalyticComponent]\n})\nexport class WidgetAnalyticModule extends BaseWidgetModule {\n constructor(private pryTranslateService: PryI18nService) {\n super();\n this.pryTranslateService.addLangObject('fr', 'widget-vega', frTranslations);\n this.pryTranslateService.addLangObject('en', 'widget-vega', enTranslations);\n }\n\n override getComponent() {\n return WidgetAnalyticComponent as Type<BaseWidgetComponent>;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i5.PryWidgetAnalyticCssComponent","i1"],"mappings":"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"}
1
+ {"version":3,"file":"provoly-dashboard-widgets-widget-analytic.mjs","sources":["../../../../projects/provoly/dashboard/widgets/widget-analytic/style/css.component.ts","../../../../projects/provoly/dashboard/widgets/widget-analytic/component/widget-analytic.component.ts","../../../../projects/provoly/dashboard/widgets/widget-analytic/component/widget-analytic.component.html","../../../../projects/provoly/dashboard/widgets/widget-analytic/i18n/en.translations.ts","../../../../projects/provoly/dashboard/widgets/widget-analytic/i18n/fr.translations.ts","../../../../projects/provoly/dashboard/widgets/widget-analytic/widget-analytic.module.ts","../../../../projects/provoly/dashboard/widgets/widget-analytic/provoly-dashboard-widgets-widget-analytic.ts"],"sourcesContent":["import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'pry-widget-analytic-css',\n template: '',\n styleUrls: ['./_o-widget-analytic.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class PryWidgetAnalyticCssComponent {}\n","import { Component, ElementRef } from '@angular/core';\nimport {\n AnalyticWidgetOptions,\n Attribute,\n AttributeSimpleValue,\n Class,\n ClassSelectors,\n DataWidgetComponent,\n Item,\n ResultSet,\n WIDGET_HEADER_HEIGHT\n} from '@provoly/dashboard';\nimport { combineLatest, map, Observable, startWith } from 'rxjs';\nimport { Store } from '@ngrx/store';\nimport { filter } from 'rxjs/operators';\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\n\n@Component({\n selector: 'pry-widget-analytic',\n templateUrl: './widget-analytic.component.html'\n})\nexport class WidgetAnalyticComponent extends DataWidgetComponent {\n optionsCopy: AnalyticWidgetOptions = { primaryProp: '', secondaryProp: '', verticalProp: '', valueProp: '' };\n options$: Observable<AnalyticWidgetOptions>;\n\n primaryProperty$: Observable<string[]>;\n secondaryProperty$: Observable<string[]>;\n verticalProperty$: Observable<string[]>;\n totalProperty$: Observable<string[]>;\n grandTotalProperty$: Observable<string[]>;\n lines$: Observable<{ name: string; value: { [key: string]: { [key: string]: any } } }[]>;\n totals$: Observable<{ name: string; value: { [key: string]: { [key: string]: any } } }[]>;\n grandTotals$: Observable<{ name: any; value: { [p: string]: any } }[]>;\n colorMap$: Observable<{ [vertical: string]: { [primary: string]: string | undefined } }>;\n height$: Observable<number>;\n classes$: Observable<Class[]>;\n availableProperties$: Observable<Attribute[]>;\n\n change($event: string, prop: 'primaryProp' | 'secondaryProp' | 'valueProp' | 'verticalProp') {\n this.optionsCopy[prop] = $event;\n }\n\n changeColorConfig($event: string | string[], prop: 'prop' | 'colors') {\n switch (prop) {\n case 'prop': {\n this.optionsCopy.colorConfig!.prop = $event as string;\n break;\n }\n case 'colors': {\n this.optionsCopy.colorConfig!.colors = $event as string[];\n break;\n }\n }\n }\n\n changeFormat($event: string, prop = 'suffix') {\n this.optionsCopy.format!.suffix = $event;\n }\n\n constructor(store: Store<any>, el: ElementRef) {\n super(store, el);\n this.options$ = this.manifest$.pipe(map((manifest) => (manifest.options ?? {}) as AnalyticWidgetOptions));\n this.classes$ = this.store.select(ClassSelectors.classes);\n this.height$ = combineLatest([this.widgetSize$, this.displayHeader$]).pipe(\n map(([size, header]) => size.height - (header ? WIDGET_HEADER_HEIGHT.value : 0))\n );\n this.subscriptions.add(\n this.options$.subscribe((options) => {\n this.optionsCopy = JSON.parse(JSON.stringify(options));\n })\n );\n this.primaryProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(\n filter(([options]) => !!options.primaryProp),\n map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.primaryProp))\n );\n this.secondaryProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(\n filter(([options]) => !!options.secondaryProp),\n map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.secondaryProp!, 1))\n );\n this.verticalProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(\n filter(([options]) => !!options.verticalProp),\n map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.verticalProp, 1))\n );\n this.totalProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(\n map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.verticalProp, 2))\n );\n this.grandTotalProperty$ = combineLatest([this.options$, this.resultSet$]).pipe(\n map(([options, rs]) => this.getPropertyLabelsForLevel(rs, options.verticalProp, 3))\n );\n\n this.lines$ = combineLatest([\n this.options$,\n this.primaryProperty$.pipe(startWith([])),\n this.secondaryProperty$.pipe(startWith(undefined)),\n this.verticalProperty$.pipe(startWith([])),\n this.resultSet$\n ]).pipe(\n map(([options, primaryProps, secondaryProps, verticalProps, rs]) =>\n this.createValueMap(verticalProps, primaryProps, secondaryProps, rs, options, 1)\n )\n );\n\n this.totals$ = combineLatest([\n this.options$,\n this.primaryProperty$,\n this.secondaryProperty$,\n this.totalProperty$,\n this.resultSet$\n ]).pipe(\n map(([options, primaryProps, secondaryProps, verticalProps, rs]) =>\n this.createValueMap(verticalProps, primaryProps, secondaryProps, rs, options, 2)\n )\n );\n\n this.grandTotals$ = combineLatest([\n this.options$,\n this.primaryProperty$,\n this.grandTotalProperty$,\n this.resultSet$\n ]).pipe(\n map(([options, primaryProps, verticalProps, rs]) =>\n this.createValueMap(verticalProps, primaryProps, undefined, rs, options, 3)\n )\n );\n\n this.colorMap$ = combineLatest([\n this.options$,\n this.resultSet$,\n this.verticalProperty$,\n this.primaryProperty$\n ]).pipe(\n filter(([options]) => !!options.colorConfig),\n map(([options, rs, vertical, primary]) => this.createColorMap(vertical, primary, rs, options))\n );\n\n this.availableProperties$ = combineLatest([this.classes$, this.resultSet$]).pipe(\n map(([classes, rs]) => {\n const presentClassesId = Object.keys(rs.items);\n const presentClasses = presentClassesId\n .map((classId) => classes.find((cl) => cl.id === classId))\n .filter((cl) => !!cl) as Class[];\n return presentClasses.map((cl) => cl.attributes).flat();\n })\n );\n }\n\n private matchAttributeValue(item: Item, prop?: string, comparisonValue?: string) {\n return comparisonValue && prop ? (item.attributes[prop] as AttributeSimpleValue).value == comparisonValue : true;\n }\n\n private createValueMap(\n verticalProps: string[],\n primaryProps: string[],\n secondaryProps: string[] | undefined,\n rs: ResultSet,\n options: AnalyticWidgetOptions,\n level?: number\n ) {\n return verticalProps.map((vertical) => {\n const value = {} as { [key: string]: { [key: string]: any } | any };\n primaryProps.forEach((primary) => {\n (secondaryProps ?? [undefined]).forEach((secondary) => {\n const matchingItem = (rs.items[Object.keys(rs.items)[0]] ?? []).find(\n (item) =>\n this.matchAttributeValue(item, options.primaryProp, primary) &&\n this.matchAttributeValue(item, options.secondaryProp, secondary) &&\n this.matchAttributeValue(item, options.verticalProp, vertical) &&\n this.matchAttributeValue(item, 'level', level + '')\n );\n if (!!matchingItem) {\n if (!!secondary) {\n if (!value[primary]) {\n value[primary] = {};\n }\n value[primary][secondary] = (matchingItem!.attributes[options.valueProp] as AttributeSimpleValue).value;\n } else {\n value[primary] = (matchingItem!.attributes[options.valueProp] as AttributeSimpleValue)?.value;\n }\n }\n });\n });\n return { name: vertical, value };\n });\n }\n\n getPropertyLabelsForLevel(rs: ResultSet, property: string, level?: number) {\n const values = Object.values(rs.items)\n .map((items) =>\n items\n .filter((item) =>\n level && 'level' in item.attributes\n ? [level, '' + level].includes(\n (item.attributes['level'] as AttributeSimpleValue).value as string | number\n )\n : true\n )\n .map((item) => (item.attributes[property] as AttributeSimpleValue).value + '')\n )\n .flat()\n .flat();\n return [...new Set(values)];\n }\n\n createColorMap(verticalProps: string[], primaryProps: string[], rs: ResultSet, options: AnalyticWidgetOptions) {\n return options.colorConfig\n ? Object.fromEntries(\n verticalProps.map((vertical) => [\n vertical,\n Object.fromEntries(\n primaryProps.map((primary) => {\n const matchingItem = (rs.items[Object.keys(rs.items)[0]] ?? []).find(\n (item) =>\n this.matchAttributeValue(item, options.primaryProp, primary) &&\n this.matchAttributeValue(item, options.verticalProp, vertical)\n );\n\n return [\n primary,\n matchingItem && (matchingItem.attributes[options.valueProp] as AttributeSimpleValue).value !== 0\n ? options.colorConfig?.colors[\n ((matchingItem.attributes[options.colorConfig!.prop] as AttributeSimpleValue).value as number) -\n 1\n ]\n : '#FFFFFF'\n ];\n })\n )\n ])\n )\n : {};\n }\n\n toggleColorConfig($event: boolean) {\n if ($event !== !!this.optionsCopy.colorConfig) {\n if (!this.optionsCopy.colorConfig) {\n this.optionsCopy.colorConfig = { prop: '', colors: [] };\n } else {\n this.optionsCopy.colorConfig = undefined;\n }\n }\n }\n\n toggleFormat($event: boolean) {\n if ($event !== !!this.optionsCopy.format) {\n if (!this.optionsCopy.format) {\n this.optionsCopy.format = { suffix: '' };\n } else {\n this.optionsCopy.format = undefined;\n }\n }\n }\n\n modifyColorScheme($event?: string, index?: number) {\n $event && index !== undefined\n ? (this.optionsCopy.colorConfig!.colors[index] = $event)\n : this.optionsCopy.colorConfig!.colors.push('#FFFFFF');\n }\n\n removeColor(index: number) {\n this.optionsCopy.colorConfig!.colors.splice(index, 1);\n }\n\n drop(event: CdkDragDrop<string[]>) {\n this.optionsCopy.colorConfig!.colors.splice(\n event.currentIndex,\n 0,\n this.optionsCopy.colorConfig!.colors.splice(event.previousIndex, 1)[0]\n );\n }\n\n emitManifest() {\n this.manifestModified.emit({\n widgetIndex: this.widgetIndex,\n manifest: { ...this.manifest, options: this.optionsCopy }\n });\n }\n}\n","<pry-widget-analytic-css></pry-widget-analytic-css>\n<div class=\"o-widget o-widget__analytic\">\n <pry-widget-header\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__fields\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"primaryProp\">{{ '@pry.widget.analytic.primaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'primaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.primaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"primaryProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"secondaryProp\">{{ '@pry.widget.analytic.secondaryProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'secondaryProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.secondaryProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"secondaryProp\"\n [clearable]=\"true\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"verticalProp\">{{ '@pry.widget.analytic.verticalProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'verticalProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.verticalProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"verticalProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"valueProp\">{{ '@pry.widget.analytic.valueProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"change($event, 'valueProp')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.valueProp\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"valueProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleColorConfig($event)\" [ngModel]=\"!!optionsCopy.colorConfig\">\n {{ '@pry.widget.analytic.colorConfig' | i18n }}\n </pry-checkbox>\n @if (optionsCopy.colorConfig) {\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"colorProp\">{{ '@pry.widget.analytic.colorProp' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorConfig($event, 'prop')\"\n [items]=\"availableProperties$ | async\"\n [ngModel]=\"optionsCopy.colorConfig.prop\"\n bindLabel=\"name\"\n bindValue=\"name\"\n id=\"colorProp\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"colorProp\">{{ '@pry.widget.analytic.colors' | i18n }}</label>\n <div\n class=\"o-widget__analytic__color-picker-container u-display-flex -align-center\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n cdkDropListOrientation=\"horizontal\"\n >\n @for (color of optionsCopy.colorConfig.colors; track color; let i = $index) {\n <div class=\"o-widget__analytic__color-picker\" cdkDrag>\n <pry-color-picker\n [ngModel]=\"color\"\n (ngModelChange)=\"modifyColorScheme($event, i)\"\n ></pry-color-picker>\n <button (click)=\"removeColor(i)\" class=\"o-widget__analytic__color-picker-remove\">\n <pry-icon iconSvg=\"close\" [height]=\"15\" [width]=\"15\"></pry-icon>\n </button>\n <div *cdkDragPreview>\n <pry-color-picker [ngModel]=\"color\"></pry-color-picker>\n </div>\n </div>\n }\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only o-widget__analytic__color-picker-add\"\n (click)=\"modifyColorScheme()\"\n >\n <pry-icon iconSvg=\"add\" [height]=\"20\" [width]=\"20\"></pry-icon>\n </button>\n </div>\n </div>\n }\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleFormat($event)\" [ngModel]=\"!!optionsCopy.format\">\n {{ '@pry.widget.analytic.format' | i18n }}\n </pry-checkbox>\n @if (optionsCopy.format) {\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"format\">{{ '@pry.widget.analytic.suffix' | i18n }}</label>\n <input\n type=\"text\"\n class=\"a-form-field\"\n id=\"format\"\n [ngModel]=\"optionsCopy.format.suffix\"\n (ngModelChange)=\"changeFormat($event)\"\n />\n </div>\n }\n </div>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"o-widget__analytic__table\">\n <table [style.height.px]=\"height$ | async\">\n <thead>\n <tr class=\"primary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n <th [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ primary }}\n </th>\n }\n </tr>\n @if (optionsCopy.secondaryProp) {\n <tr class=\"secondary-header\">\n <th></th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <th>{{ secondary }}</th>\n }\n }\n </tr>\n }\n </thead>\n <tbody>\n @for (line of lines$ | async; track line.name) {\n <tr>\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @if (optionsCopy.secondaryProp) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td\n [ngStyle]=\"\n optionsCopy.colorConfig ? { 'background-color': (colorMap$ | async)?.[line.name]?.[primary] } : {}\n \"\n >\n {{ line.value[primary][secondary]\n }}{{ optionsCopy.format?.suffix ? ' ' + optionsCopy.format?.suffix : '' }}\n </td>\n }\n } @else {\n <td\n [ngStyle]=\"\n optionsCopy.colorConfig ? { 'background-color': (colorMap$ | async)?.[line.name]?.[primary] } : {}\n \"\n >\n {{ line.value[primary] }}{{ optionsCopy.format?.suffix ? ' ' + optionsCopy.format?.suffix : '' }}\n </td>\n }\n }\n </tr>\n }\n </tbody>\n <tfoot>\n @for (line of totals$ | async; track line.name) {\n <tr class=\"partial-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n @for (secondary of secondaryProperty$ | async; track secondary) {\n <td>\n {{ line.value[primary][secondary] }}\n </td>\n }\n }\n </tr>\n }\n @for (line of grandTotals$ | async; track line.name) {\n <tr class=\"grand-total\">\n <th>{{ line.name }}</th>\n @for (primary of primaryProperty$ | async; track primary) {\n <td [colSpan]=\"(secondaryProperty$ | async)?.length ?? 1\">\n {{ line.value[primary] }}\n </td>\n }\n </tr>\n }\n </tfoot>\n </table>\n </div>\n</div>\n","export const enTranslations = {\n '@pry': {\n widget: {\n analytic: {\n primaryProp: 'Attribute that contains the horizontal primary field',\n secondaryProp: 'Attribute that contains the horizontal secondary field',\n verticalProp: 'Attribute that contains the vertical attribute',\n valueProp: 'Attribute that contains the value',\n colorConfig: 'Cell color configuration',\n colorProp: 'Color attribute',\n colors: 'Colors',\n format: 'Value formatting',\n suffix: 'Suffix'\n }\n }\n }\n};\n","export const frTranslations = {\n '@pry': {\n widget: {\n analytic: {\n primaryProp: 'Attribut horizontal primaire',\n secondaryProp: 'Attribut horizontal secondaire',\n verticalProp: 'Attribut vertical',\n valueProp: 'Attribut contenant la valeur',\n colorConfig: 'Configuration des couleurs de cellules',\n colorProp: 'Attribut de la couleur',\n colors: 'Couleurs',\n format: 'Formattage des valeurs',\n suffix: 'Suffixe'\n }\n }\n }\n};\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n BaseWidgetComponent,\n BaseWidgetModule,\n PryCoreModule,\n PryDashboardModule,\n PryI18nModule,\n PryI18nService,\n PryIconModule,\n PrySelectModule,\n PryToggleModule\n} from '@provoly/dashboard';\nimport { PryCheckboxModule } from '@provoly/dashboard/components/checkbox';\nimport { WidgetAnalyticComponent } from './component/widget-analytic.component';\nimport { enTranslations } from './i18n/en.translations';\nimport { frTranslations } from './i18n/fr.translations';\nimport { PryWidgetAnalyticCssComponent } from './style/css.component';\nimport { PryColorPickerModule } from '@provoly/dashboard/components/color-picker';\nimport { CdkDrag, CdkDropList, DragDropModule } from '@angular/cdk/drag-drop';\n\n@NgModule({\n declarations: [WidgetAnalyticComponent, PryWidgetAnalyticCssComponent],\n imports: [\n CommonModule,\n FormsModule,\n OverlayModule,\n PryCoreModule,\n PryDashboardModule,\n PrySelectModule,\n PryIconModule,\n PryCheckboxModule,\n PryToggleModule,\n PryI18nModule,\n AsyncPipe,\n PryColorPickerModule,\n DragDropModule\n ],\n exports: [WidgetAnalyticComponent]\n})\nexport class WidgetAnalyticModule extends BaseWidgetModule {\n constructor(private pryTranslateService: PryI18nService) {\n super();\n this.pryTranslateService.addLangObject('fr', 'widget-vega', frTranslations);\n this.pryTranslateService.addLangObject('en', 'widget-vega', enTranslations);\n }\n\n override getComponent() {\n return WidgetAnalyticComponent as Type<BaseWidgetComponent>;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i8.PryWidgetAnalyticCssComponent","i1"],"mappings":"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"}