@provoly/dashboard 0.18.2 → 0.18.4

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 (96) hide show
  1. package/assets/svgs/clear_filter.svg +12 -0
  2. package/assets/svgs/refresh_data.svg +15 -0
  3. package/assets/svgs/refresh_filter.svg +13 -0
  4. package/assets/svgs/trash.svg +1 -0
  5. package/components/color-picker/color-picker.component.d.ts +58 -0
  6. package/components/color-picker/color-picker.module.d.ts +9 -0
  7. package/components/color-picker/index.d.ts +5 -0
  8. package/components/color-picker/public-api.d.ts +2 -0
  9. package/components/scheme-picker/index.d.ts +5 -0
  10. package/components/scheme-picker/public-api.d.ts +3 -0
  11. package/components/scheme-picker/scheme-picker.component.d.ts +34 -0
  12. package/components/scheme-picker/scheme-picker.module.d.ts +11 -0
  13. package/components/scheme-picker/scheme.service.d.ts +12 -0
  14. package/dataset/components/dataset-card/dataset-card.component.d.ts +11 -3
  15. package/dataset/i18n/en.translations.d.ts +1 -0
  16. package/dataset/i18n/fr.translations.d.ts +1 -0
  17. package/dataset/style/_o-pry-dataset-card.scss +16 -1
  18. package/dataset/style/_o-pry-dataset.scss +18 -3
  19. package/esm2022/admin/components/admin-dataset/shared/admin-form-dataset/admin-form-dataset.component.mjs +7 -5
  20. package/esm2022/components/color-picker/color-picker.component.mjs +314 -0
  21. package/esm2022/components/color-picker/color-picker.module.mjs +20 -0
  22. package/esm2022/components/color-picker/provoly-dashboard-components-color-picker.mjs +5 -0
  23. package/esm2022/components/color-picker/public-api.mjs +3 -0
  24. package/esm2022/components/scheme-picker/provoly-dashboard-components-scheme-picker.mjs +5 -0
  25. package/esm2022/components/scheme-picker/public-api.mjs +4 -0
  26. package/esm2022/components/scheme-picker/scheme-picker.component.mjs +104 -0
  27. package/esm2022/components/scheme-picker/scheme-picker.module.mjs +22 -0
  28. package/esm2022/components/scheme-picker/scheme.service.mjs +47 -0
  29. package/esm2022/dataset/components/dataset-card/dataset-card.component.mjs +26 -9
  30. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +3 -3
  31. package/esm2022/dataset/components/dataset.component.mjs +3 -3
  32. package/esm2022/dataset/i18n/en.translations.mjs +2 -1
  33. package/esm2022/dataset/i18n/fr.translations.mjs +2 -1
  34. package/esm2022/dataset/style/css.component.mjs +2 -2
  35. package/esm2022/lib/core/i18n/en.translations.mjs +6 -2
  36. package/esm2022/lib/core/i18n/fr.translations.mjs +6 -2
  37. package/esm2022/lib/core/model/widget-aggregated-chart-manifest.interface.mjs +1 -1
  38. package/esm2022/lib/core/model/widget-chart-manifest.interface.mjs +2 -1
  39. package/esm2022/lib/core/store/aggregation/backend-aggregation.service.mjs +4 -1
  40. package/esm2022/lib/core/store/data-source/data-source.model.mjs +1 -1
  41. package/esm2022/lib/core/store/search/search.actions.mjs +3 -2
  42. package/esm2022/lib/core/store/search/search.reducer.mjs +6 -1
  43. package/esm2022/lib/dashboard/components/dashboard.component.mjs +16 -11
  44. package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +3 -3
  45. package/esm2022/presentation/style/css.component.mjs +2 -2
  46. package/esm2022/restitution/components/restitution/restitution.component.mjs +11 -20
  47. package/esm2022/restitution/model/restitution.model.mjs +1 -1
  48. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +134 -26
  49. package/esm2022/widgets/widget-aggregated-chart/i18n/en.translations.mjs +19 -2
  50. package/esm2022/widgets/widget-aggregated-chart/i18n/fr.translations.mjs +19 -2
  51. package/esm2022/widgets/widget-aggregated-chart/widget-aggregated-chart.module.mjs +16 -5
  52. package/esm2022/widgets/widget-chart/i18n/en.translations.mjs +3 -2
  53. package/esm2022/widgets/widget-chart/i18n/fr.translations.mjs +3 -2
  54. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +2 -2
  55. package/fesm2022/provoly-dashboard-admin.mjs +6 -4
  56. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  57. package/fesm2022/provoly-dashboard-components-color-picker.mjs +337 -0
  58. package/fesm2022/provoly-dashboard-components-color-picker.mjs.map +1 -0
  59. package/fesm2022/provoly-dashboard-components-scheme-picker.mjs +171 -0
  60. package/fesm2022/provoly-dashboard-components-scheme-picker.mjs.map +1 -0
  61. package/fesm2022/provoly-dashboard-dataset.mjs +29 -14
  62. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  63. package/fesm2022/provoly-dashboard-presentation.mjs +4 -4
  64. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  65. package/fesm2022/provoly-dashboard-restitution.mjs +10 -19
  66. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  67. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +183 -30
  68. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  69. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +4 -2
  70. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
  71. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +1 -1
  72. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  73. package/fesm2022/provoly-dashboard.mjs +37 -13
  74. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  75. package/lib/core/i18n/en.translations.d.ts +4 -0
  76. package/lib/core/i18n/fr.translations.d.ts +4 -0
  77. package/lib/core/model/widget-aggregated-chart-manifest.interface.d.ts +7 -0
  78. package/lib/core/model/widget-chart-manifest.interface.d.ts +1 -0
  79. package/lib/core/store/data-source/data-source.model.d.ts +0 -2
  80. package/lib/core/store/search/search.actions.d.ts +7 -0
  81. package/lib/dashboard/components/dashboard.component.d.ts +2 -0
  82. package/package.json +19 -7
  83. package/presentation/style/_o-pry-new-presentation.scss +2 -1
  84. package/restitution/components/restitution/restitution.component.d.ts +0 -2
  85. package/restitution/model/restitution.model.d.ts +1 -1
  86. package/styles/components/_a-color-picker.scss +62 -0
  87. package/styles/components/_a-page-loader.scss +14 -0
  88. package/styles/components/_m-color-scheme.scss +20 -0
  89. package/styles/main.scss +3 -0
  90. package/styles-theme/components-theme/_o-pry-admin-classes-customize.theme.scss +4 -0
  91. package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +17 -5
  92. package/widgets/widget-aggregated-chart/i18n/en.translations.d.ts +17 -0
  93. package/widgets/widget-aggregated-chart/i18n/fr.translations.d.ts +17 -0
  94. package/widgets/widget-aggregated-chart/widget-aggregated-chart.module.d.ts +3 -1
  95. package/widgets/widget-chart/i18n/en.translations.d.ts +1 -0
  96. package/widgets/widget-chart/i18n/fr.translations.d.ts +1 -0
@@ -1,19 +1,23 @@
1
1
  import { OverlayModule } from '@angular/cdk/overlay';
2
- import * as i3 from '@angular/common';
2
+ import * as i4 from '@angular/common';
3
3
  import { CommonModule } from '@angular/common';
4
4
  import * as i0 from '@angular/core';
5
5
  import { Component, ViewEncapsulation, ViewChild, NgModule } from '@angular/core';
6
- import * as i4 from '@angular/forms';
7
- import { FormsModule } from '@angular/forms';
6
+ import * as i5 from '@angular/forms';
7
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
8
8
  import * as i2 from '@provoly/dashboard';
9
- import { DataWidgetComponent, WIDGET_HEADER_HEIGHT, GraphType, Operation, VegaColorType, FieldSelectors, ClassSelectors, FieldType, NamedQueryTypes, VegaType, BaseWidgetModule, PryCoreModule, PryDashboardModule, PrySelectModule, PryIconModule, PryToggleModule, PryEditInputModule, PryI18nModule, PryRangeModule, PrySortModule, PryAggregationService } from '@provoly/dashboard';
10
- import * as i5 from '@provoly/dashboard/components/checkbox';
9
+ import { DataWidgetComponent, WIDGET_HEADER_HEIGHT, GraphType, Operation, FieldSelectors, ClassSelectors, FieldType, NamedQueryTypes, VegaType, SearchActions, BaseWidgetModule, PryCoreModule, PryDashboardModule, PrySelectModule, PryIconModule, PryToggleModule, PryEditInputModule, PryI18nModule, PryRangeModule, PrySortModule, PryAggregationService } from '@provoly/dashboard';
10
+ import * as i6 from '@provoly/dashboard/components/checkbox';
11
11
  import { PryCheckboxModule } from '@provoly/dashboard/components/checkbox';
12
- import { BehaviorSubject, Subject, map, filter, combineLatest, fromEvent, startWith, debounceTime, switchMap, withLatestFrom, share } from 'rxjs';
12
+ import { BehaviorSubject, Subject, map, filter, combineLatest, fromEvent, startWith, debounceTime, tap, switchMap, withLatestFrom, share } from 'rxjs';
13
13
  import embed, { vega } from 'vega-embed';
14
14
  import { mergeDeep } from 'vega-lite';
15
15
  import { fontConfig } from 'vega-lite/build/src/config';
16
16
  import * as i1 from '@ngrx/store';
17
+ import * as i3 from '@provoly/dashboard/components/scheme-picker';
18
+ import { PrySchemePickerModule } from '@provoly/dashboard/components/scheme-picker';
19
+ import * as i7 from '@provoly/dashboard/components/color-picker';
20
+ import { PryColorPickerModule } from '@provoly/dashboard/components/color-picker';
17
21
 
18
22
  class PryWidgetAggregatedChartCssComponent {
19
23
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryWidgetAggregatedChartCssComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
@@ -24,12 +28,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
24
28
  args: [{ selector: 'pry-widget-aggregated-chart-css', template: '', encapsulation: ViewEncapsulation.None, styles: [".o-widget--chart-color-thumb{display:flex;flex-direction:row;margin-bottom:20px}.o-widget--chart-color-thumb-item{flex:1 1 20px;height:20px;border-radius:4px}.o-widget--chart div.vega-embed{display:block}.o-widget--chart div.vega-embed.has-actions{display:block;height:100%;padding-right:0}.o-widget--chart div.vega-embed.has-actions>div.chart-wrapper.fit-y.fit-x{height:100%;overflow:hidden}.o-widget--chart div.vega-embed.has-actions>details>summary{right:25px}.o-widget--chart div.vega-embed.has-actions>details .vega-actions{right:16px}\n"] }]
25
29
  }] });
26
30
 
27
- vega.scheme('KO/W/OK', ['#C04D3F', '#FD9843', '#9ABE29']);
28
31
  class WidgetAggregatedChartComponent extends DataWidgetComponent {
29
- constructor(store, translateService, el, aggregationService) {
32
+ constructor(store, translateService, el, aggregationService, schemeService) {
30
33
  super(store, el);
31
34
  this.translateService = translateService;
32
35
  this.aggregationService = aggregationService;
36
+ this.schemeService = schemeService;
33
37
  this.optionsCopy$ = new BehaviorSubject(null);
34
38
  this.trigger$ = new Subject();
35
39
  this.WIDGET_HEADER_HEIGHT = WIDGET_HEADER_HEIGHT;
@@ -39,10 +43,13 @@ class WidgetAggregatedChartComponent extends DataWidgetComponent {
39
43
  this.classes = [];
40
44
  this.fields = [];
41
45
  this.triggerOrdinateAttributes$ = new Subject();
42
- this.schemes = [];
43
46
  this.sortActive = 'name';
44
47
  this.sortDirection = 'asc';
45
- this.schemes = Object.values(VegaColorType).map((id) => ({ id }));
48
+ this.sortDirections = [
49
+ { value: 'asc', label: '' },
50
+ { value: 'desc', label: '' }
51
+ ];
52
+ this.colors = vega.scheme('Provoly');
46
53
  this.typeOptions = Object.values(GraphType)
47
54
  .map((v) => ({
48
55
  id: v,
@@ -141,7 +148,7 @@ class WidgetAggregatedChartComponent extends DataWidgetComponent {
141
148
  ? ordinateAttrs.map((attr) => attr.id).includes(options.ordinate.attribute)
142
149
  : true));
143
150
  }));
144
- this.attributeTypes$ = combineLatest([this.options$, this.fields$, this.classes$]).pipe(filter(([options, fields, classes]) => !!options.abscissa && !!options.ordinate), map(([options, fields, classes]) => {
151
+ this.attributeTypes$ = combineLatest([this.optionsCopy$, this.fields$, this.classes$]).pipe(filter(([options, fields, classes]) => !!options && !!options.abscissa && !!options.ordinate), map(([options, fields, classes]) => {
145
152
  const abscissa = classes
146
153
  .map((clazz) => clazz.attributes.find((attr) => attr.id === options.abscissa.attribute))
147
154
  .find((attr) => !!attr);
@@ -149,7 +156,7 @@ class WidgetAggregatedChartComponent extends DataWidgetComponent {
149
156
  .map((clazz) => clazz.attributes.find((attr) => attr.id === options.ordinate.attribute))
150
157
  .find((attr) => !!attr);
151
158
  const groupBy = classes
152
- .map((clazz) => clazz.attributes.find((attr) => attr.id === options.groupBy?.attribute))
159
+ .map((clazz) => clazz.attributes.find((attr) => attr.id === options?.groupBy?.attribute))
153
160
  .find((attr) => !!attr);
154
161
  const abscissaFieldType = fields.find((field) => field.id === abscissa?.field)?.type ?? FieldType.STRING;
155
162
  const ordinateFieldType = fields.find((field) => field.id === ordinate?.field)?.type ?? FieldType.STRING;
@@ -178,7 +185,9 @@ class WidgetAggregatedChartComponent extends DataWidgetComponent {
178
185
  this.datasourceIds$,
179
186
  this.options$,
180
187
  combineLatest([fromEvent(window, 'datasourceRefresh'), this.datasourceIds$]).pipe(filter(([event, datasources]) => datasources.includes(event.detail)), startWith(undefined))
181
- ]).pipe(debounceTime(100), switchMap(([datasources, options]) => this.aggregationService.aggregate(datasources, options)), withLatestFrom(this.options$), map(([aggregate, options]) => {
188
+ ]).pipe(debounceTime(100), tap(([datasources]) => this.store.dispatch(SearchActions.setSearchLoading({ datasources, start: true }))), switchMap(([datasources, options]) => this.aggregationService
189
+ .aggregate(datasources, options)
190
+ .pipe(tap(() => this.store.dispatch(SearchActions.setSearchLoading({ datasources, start: false }))))), withLatestFrom(this.options$), map(([aggregate, options]) => {
182
191
  // @ts-ignore
183
192
  if (aggregate.values.length > 0 && !aggregate.values[0].groupBy) {
184
193
  return {
@@ -207,6 +216,9 @@ class WidgetAggregatedChartComponent extends DataWidgetComponent {
207
216
  const isCircular = [GraphType.CIRCULAR, GraphType.DONUT].includes(options.graph.type);
208
217
  const stacked = options.graph.type.startsWith('bar') ? !options.graph.stacked : options.graph.stacked;
209
218
  const legendTitle = this.translateService.instant(options.groupBy ? types.groupBy.name ?? '' : '@pry.widget.chart.legendLabel');
219
+ [options.groupBy?.color, options.circleColorScheme].filter((scheme) => !!scheme).forEach((scheme) => {
220
+ this.schemeService.assertScheme(scheme);
221
+ });
210
222
  return mergeDeep({
211
223
  $schema: 'https://vega.github.io/schema/vega-lite/v5.json',
212
224
  title: this.getTitle(options),
@@ -268,9 +280,16 @@ class WidgetAggregatedChartComponent extends DataWidgetComponent {
268
280
  theta: isCircular ? { field: 'value', type: types.ordinate.vegaType } : undefined,
269
281
  color: {
270
282
  title: legendTitle,
271
- field: !isCircular ? 'series' : 'key',
283
+ field: !isCircular ? (!options.groupBy ? undefined : 'series') : 'key',
272
284
  legend: options.graph.legend,
273
- scale: options.graph.legend ? { scheme: options.groupBy?.color ?? this.schemes[0].id } : undefined
285
+ scale: !isCircular
286
+ ? options.groupBy
287
+ ? { scheme: options.groupBy?.color ?? this.schemeService.getDefaultScheme() }
288
+ : undefined
289
+ : { scheme: options.circleColorScheme ?? this.schemeService.getDefaultScheme() },
290
+ value: !isCircular && !options.groupBy
291
+ ? options.baseColor ?? this.schemeService.getSchemeColors(this.schemeService.getDefaultScheme())
292
+ : undefined
274
293
  },
275
294
  xOffset: stacked && options.groupBy ? { field: 'series' } : undefined,
276
295
  tooltip: options.graph.tooltip
@@ -305,12 +324,48 @@ class WidgetAggregatedChartComponent extends DataWidgetComponent {
305
324
  config: fontConfig('Ubuntu, sans-serif')
306
325
  }, options.additionalSpec);
307
326
  }));
327
+ this.sortAttributes$ = this.optionsCopy$.pipe(map((options) => {
328
+ return [
329
+ { id: options?.abscissa.attribute, label: options?.abscissa.label },
330
+ { id: options?.ordinate.attribute, label: options?.ordinate.label }
331
+ ].filter((attribute) => !!attribute.id);
332
+ }));
333
+ this.subscriptions.add(this.sortAttributes$.subscribe((attributes) => {
334
+ if (this.optionsCopy$.value?.graph.sort &&
335
+ !attributes.map((attribute) => attribute.id).includes(this.optionsCopy$.value?.graph.sort?.attribute)) {
336
+ this.optionsCopy$.next({
337
+ ...this.optionsCopy$.value,
338
+ graph: {
339
+ ...this.optionsCopy$.value?.graph,
340
+ sort: {
341
+ ...this.optionsCopy$.value?.graph.sort,
342
+ attribute: attributes[0].id ?? ''
343
+ }
344
+ }
345
+ });
346
+ }
347
+ }));
348
+ this.subscriptions.add(combineLatest([this.optionsCopy$, this.attributeTypes$, this.classes$]).subscribe(([options, attrTypes, classes]) => {
349
+ this.sortDirections = this.sortDirections
350
+ .map((sort) => {
351
+ let attribute = classes
352
+ .map((clazz) => clazz.attributes.find((attr) => attr.id === options?.graph.sort?.attribute))
353
+ .find((attr) => !!attr);
354
+ return {
355
+ value: sort.value,
356
+ label: this.translateService.instant(`@pry.widget.chart.sort.${sort.value}.${attrTypes.abscissa.name === attribute?.name
357
+ ? attrTypes.abscissa.vegaType
358
+ : attrTypes.ordinate.vegaType}`)
359
+ };
360
+ })
361
+ .sort((a, b) => a.label.localeCompare(b.label));
362
+ }));
308
363
  }
309
364
  ngAfterViewInit() {
310
365
  this.subscriptions.add(combineLatest([this.vegaLiteSpec$, this.trigger$]).subscribe(([spec, _]) => {
311
366
  if (this.vega) {
312
367
  this.view?.finalize();
313
- //console.log(spec);
368
+ //console.log(JSON.stringify(spec));
314
369
  embed(this.vega.nativeElement, JSON.parse(JSON.stringify(spec)), {
315
370
  actions: false,
316
371
  renderer: 'canvas',
@@ -393,7 +448,8 @@ class WidgetAggregatedChartComponent extends DataWidgetComponent {
393
448
  if ([GraphType.CIRCULAR, GraphType.DONUT].includes($event)) {
394
449
  this.optionsCopy$.next({
395
450
  ...this.optionsCopy$.value,
396
- groupBy: undefined
451
+ groupBy: undefined,
452
+ circleColorScheme: this.optionsCopy$.value?.circleColorScheme ?? 'Provoly'
397
453
  });
398
454
  }
399
455
  if ([GraphType.HISTOGRAM].includes($event)) {
@@ -614,7 +670,10 @@ class WidgetAggregatedChartComponent extends DataWidgetComponent {
614
670
  if ($event) {
615
671
  this.optionsCopy$.next({
616
672
  ...this.optionsCopy$.value,
617
- groupBy: { attribute: this.optionsCopy$.value?.groupBy?.attribute ?? '', color: this.schemes[0].id }
673
+ groupBy: {
674
+ attribute: this.optionsCopy$.value?.groupBy?.attribute ?? '',
675
+ color: this.schemeService.getDefaultScheme()
676
+ }
618
677
  });
619
678
  }
620
679
  else {
@@ -652,9 +711,6 @@ class WidgetAggregatedChartComponent extends DataWidgetComponent {
652
711
  ? { tickCount: Math.max(...data.map((val) => val.value)) }
653
712
  : {};
654
713
  }
655
- scheme() {
656
- return vega.scheme(this.optionsCopy$.value?.groupBy?.color ?? '');
657
- }
658
714
  toggleStacked($event) {
659
715
  if (this.optionsCopy$.value) {
660
716
  this.optionsCopy$.next({
@@ -666,18 +722,72 @@ class WidgetAggregatedChartComponent extends DataWidgetComponent {
666
722
  });
667
723
  }
668
724
  }
725
+ toggleSort($event) {
726
+ if (this.optionsCopy$.value) {
727
+ this.optionsCopy$.next({
728
+ ...this.optionsCopy$.value,
729
+ graph: {
730
+ ...this.optionsCopy$.value.graph,
731
+ sort: $event
732
+ ? this.optionsCopy$.value.graph.sort ?? {
733
+ attribute: this.optionsCopy$.value.abscissa.attribute,
734
+ direction: 'asc'
735
+ }
736
+ : undefined
737
+ }
738
+ });
739
+ }
740
+ }
741
+ changeSortAttribute($event) {
742
+ if (this.optionsCopy$.value) {
743
+ this.optionsCopy$.next({
744
+ ...this.optionsCopy$.value,
745
+ graph: {
746
+ ...this.optionsCopy$.value.graph,
747
+ sort: { ...this.optionsCopy$.value.graph.sort, attribute: $event }
748
+ }
749
+ });
750
+ }
751
+ }
752
+ changeSortDirection($event) {
753
+ if (this.optionsCopy$.value) {
754
+ this.optionsCopy$.next({
755
+ ...this.optionsCopy$.value,
756
+ graph: {
757
+ ...this.optionsCopy$.value?.graph,
758
+ sort: { ...this.optionsCopy$.value?.graph.sort, direction: $event }
759
+ }
760
+ });
761
+ }
762
+ }
669
763
  toImage() {
670
764
  return new Promise((resolve, reject) => {
671
765
  resolve(this.vega.nativeElement.querySelectorAll('canvas')[0].toDataURL('image/png'));
672
766
  });
673
767
  }
674
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetAggregatedChartComponent, deps: [{ token: i1.Store }, { token: i2.PryI18nService }, { token: i0.ElementRef }, { token: i2.PryAggregationService }], target: i0.ɵɵFactoryTarget.Component }); }
675
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetAggregatedChartComponent, selector: "pry-widget-aggregated-chart", viewQueries: [{ propertyName: "vega", first: true, predicate: ["vega"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-widget-aggregated-chart-css></pry-widget-aggregated-chart-css>\n<div class=\"o-widget o-widget--chart\" *ngIf=\"optionsCopy$ | async as optionsCopy\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n [openData$]=\"openData$\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.graph.title\"\n ></pry-edit-input>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.graph.type\"\n class=\"a-pry-select\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.graph.donutSize\"\n (ngModelChange)=\"changeDonutSize($event)\"\n labelTranslate=\"@pry.widget.chart.donutSize\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n {{ '@pry.widget.chart.legend' | i18n }}\n </pry-checkbox>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleTooltip($event)\" [ngModel]=\"!!optionsCopy.graph.tooltip\"\n >{{ '@pry.widget.chart.tooltip' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.graph.type\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abscissa\">{{ '@pry.widget.chart.abscissa' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAbscissa($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.abscissa.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"abscissa\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeAbscissaLabel($event)\"\n [ngModel]=\"optionsCopy.abscissa.label\"\n ></pry-edit-input>\n\n <div\n *ngIf=\"\n ['quantitative', 'temporal'].includes(translateToVegaType(copyAbscissaField?.type)) &&\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR\n \"\n class=\"m-form-label-field\"\n >\n <pry-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n\n <pry-checkbox\n (ngModelChange)=\"limitElements($event)\"\n [ngModel]=\"!!optionsCopy.abscissa.limit\"\n [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n >{{ '@pry.widget.chart.limit' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit\">\n <ng-container *ngIf=\"optionsCopy.abscissa.limit.isTimeLimit === false\">\n <pry-range\n [ngModel]=\"optionsCopy.abscissa.limit.at\"\n (ngModelChange)=\"changeLimit($event)\"\n labelTranslate=\"@pry.widget.chart.limit\"\n min=\"1\"\n max=\"10\"\n ></pry-range>\n\n <ng-container *ngIf=\"optionsCopy.graph.type !== GraphType.HISTOGRAM\">\n <pry-checkbox\n (ngModelChange)=\"changeLimitOthers($event)\"\n [ngModel]=\"optionsCopy.abscissa.limit.others\"\n >{{ '@pry.widget.chart.others' | i18n }}\n </pry-checkbox>\n\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.order' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLimitOrder($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[{ id: 'asc' }, { id: 'desc' }]\"\n [ngModel]=\"optionsCopy.abscissa.limit.order\"\n [baseTranslate]=\"'@pry.widget.chart.'\"\n [labelTranslate]=\"true\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"other_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit.isTimeLimit\">\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.timeInterval' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeLimit($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[\n { id: 'second' },\n { id: 'minute' },\n { id: 'hour' },\n { id: 'day' },\n { id: 'week' },\n { id: 'month' },\n { id: 'quarter' },\n { id: 'year' }\n ]\"\n [ngModel]=\"optionsCopy.abscissa.limit.interval\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.time.\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"date_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"operations\">{{ '@pry.widget.chart.operation.title' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"operations$ | async\"\n [ngModel]=\"optionsCopy.ordinate.operation\"\n bindLabel=\"label\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"operations\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.ordinate.operation !== Operation.COUNT\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"ordinate\">{{ '@pry.widget.chart.ordinate' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOrdinate($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"ordinateAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.ordinate.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"ordinate\"\n ></pry-select>\n </div>\n </ng-container>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeOrdinateLabel($event)\"\n [ngModel]=\"optionsCopy.ordinate.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type !== GraphType.DONUT && optionsCopy.graph.type !== GraphType.CIRCULAR\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n >{{ '@pry.widget.chart.groupBy' | i18n }}\n </pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.groupBy\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.groupAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeGroupBy($event)\"\n [ngModel]=\"optionsCopy.groupBy.attribute\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesScheme\">{{ '@pry.widget.chart.colorScheme' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"optionsCopy.groupBy.color\"\n [itemsAsOption]=\"true\"\n [items]=\"schemes\"\n id=\"chart_seriesScheme\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.scheme.\"\n bindValue=\"id\"\n bindLabel=\"id\"\n ></pry-select>\n </div>\n\n <div class=\"o-widget--chart-color-thumb\">\n <div\n *ngFor=\"let schemeColor of scheme()\"\n class=\"o-widget--chart-color-thumb-item\"\n [title]=\"schemeColor\"\n [style.background-color]=\"schemeColor\"\n ></div>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n {{ '@pry.widget.chart.stacked' | i18n }}\n </pry-checkbox>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </pry-settings>\n </pry-widget-header>\n\n <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async) && !(noAggregationData$ | async)\">\n <div #vega></div>\n </ng-container>\n\n <ng-container *ngIf=\"noData$ | async\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.noData' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.noData' | i18n }}</span>\n <button type=\"button\" (click)=\"openData()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && (noAggregationData$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.aggNoResult' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.aggNoResult' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && !(noAggregationData$ | async) && !(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.chooseParameters' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.chooseParameters' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["triggerClick", "saveTriggered", "changeTitle"] }, { kind: "component", type: i2.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i2.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: i2.PryEditInputComponent, selector: "pry-edit-input", inputs: ["label"] }, { kind: "component", type: i2.PryRangeComponent, selector: "pry-range", inputs: ["min", "max", "step", "disabled", "labelTranslate"] }, { kind: "component", type: PryWidgetAggregatedChartCssComponent, selector: "pry-widget-aggregated-chart-css" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }, { kind: "pipe", type: i2.PrySortDataPipe, name: "prySortData" }] }); }
768
+ changeCircleColorScheme($event) {
769
+ if (this.optionsCopy$.value) {
770
+ this.optionsCopy$.next({
771
+ ...this.optionsCopy$.value,
772
+ circleColorScheme: $event
773
+ });
774
+ }
775
+ }
776
+ changeBaseColor($event) {
777
+ if (this.optionsCopy$.value) {
778
+ this.optionsCopy$.next({
779
+ ...this.optionsCopy$.value,
780
+ baseColor: $event
781
+ });
782
+ }
783
+ }
784
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetAggregatedChartComponent, deps: [{ token: i1.Store }, { token: i2.PryI18nService }, { token: i0.ElementRef }, { token: i2.PryAggregationService }, { token: i3.PrySchemeService }], target: i0.ɵɵFactoryTarget.Component }); }
785
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetAggregatedChartComponent, selector: "pry-widget-aggregated-chart", viewQueries: [{ propertyName: "vega", first: true, predicate: ["vega"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-widget-aggregated-chart-css></pry-widget-aggregated-chart-css>\n<div class=\"o-widget o-widget--chart\" *ngIf=\"optionsCopy$ | async as optionsCopy\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n [openData$]=\"openData$\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.graph.title\"\n ></pry-edit-input>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.graph.type\"\n class=\"a-pry-select\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.graph.donutSize\"\n (ngModelChange)=\"changeDonutSize($event)\"\n labelTranslate=\"@pry.widget.chart.donutSize\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n {{ '@pry.widget.chart.legend' | i18n }}\n </pry-checkbox>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleTooltip($event)\" [ngModel]=\"!!optionsCopy.graph.tooltip\"\n >{{ '@pry.widget.chart.tooltip' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.graph.type\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abscissa\">{{ '@pry.widget.chart.abscissa' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAbscissa($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.abscissa.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"abscissa\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeAbscissaLabel($event)\"\n [ngModel]=\"optionsCopy.abscissa.label\"\n ></pry-edit-input>\n\n <div\n *ngIf=\"\n ['quantitative', 'temporal'].includes(translateToVegaType(copyAbscissaField?.type)) &&\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR\n \"\n class=\"m-form-label-field\"\n >\n <pry-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n\n <pry-checkbox\n (ngModelChange)=\"limitElements($event)\"\n [ngModel]=\"!!optionsCopy.abscissa.limit\"\n [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n >{{ '@pry.widget.chart.limit' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit\">\n <ng-container *ngIf=\"optionsCopy.abscissa.limit.isTimeLimit === false\">\n <pry-range\n [ngModel]=\"optionsCopy.abscissa.limit.at\"\n (ngModelChange)=\"changeLimit($event)\"\n labelTranslate=\"@pry.widget.chart.limit\"\n min=\"1\"\n max=\"10\"\n ></pry-range>\n\n <ng-container *ngIf=\"optionsCopy.graph.type !== GraphType.HISTOGRAM\">\n <pry-checkbox\n (ngModelChange)=\"changeLimitOthers($event)\"\n [ngModel]=\"optionsCopy.abscissa.limit.others\"\n >{{ '@pry.widget.chart.others' | i18n }}\n </pry-checkbox>\n\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.order' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLimitOrder($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[{ id: 'asc' }, { id: 'desc' }]\"\n [ngModel]=\"optionsCopy.abscissa.limit.order\"\n [baseTranslate]=\"'@pry.widget.chart.'\"\n [labelTranslate]=\"true\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"other_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit.isTimeLimit\">\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.timeInterval' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeLimit($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[\n { id: 'second' },\n { id: 'minute' },\n { id: 'hour' },\n { id: 'day' },\n { id: 'week' },\n { id: 'month' },\n { id: 'quarter' },\n { id: 'year' }\n ]\"\n [ngModel]=\"optionsCopy.abscissa.limit.interval\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.time.\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"date_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"operations\">{{ '@pry.widget.chart.operation.title' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"operations$ | async\"\n [ngModel]=\"optionsCopy.ordinate.operation\"\n bindLabel=\"label\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"operations\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.ordinate.operation !== Operation.COUNT\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"ordinate\">{{ '@pry.widget.chart.ordinate' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOrdinate($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"ordinateAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.ordinate.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"ordinate\"\n ></pry-select>\n </div>\n </ng-container>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeOrdinateLabel($event)\"\n [ngModel]=\"optionsCopy.ordinate.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type !== GraphType.DONUT && optionsCopy.graph.type !== GraphType.CIRCULAR\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n >{{ '@pry.widget.chart.groupBy' | i18n }}\n </pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.groupBy\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.groupAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeGroupBy($event)\"\n [ngModel]=\"optionsCopy.groupBy.attribute\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-scheme-picker\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"optionsCopy.groupBy.color\"\n ></pry-scheme-picker>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n {{ '@pry.widget.chart.stacked' | i18n }}\n </pry-checkbox>\n </div>\n </ng-container>\n </div>\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleSort($event)\" [ngModel]=\"!!optionsCopy.graph.sort\"\n >{{ '@pry.widget.chart.sort.title' | i18n }}\n </pry-checkbox>\n </div>\n <ng-container *ngIf=\"!!optionsCopy.graph.sort\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">Attribute</label>\n <pry-select\n (ngModelChange)=\"changeSortAttribute($event)\"\n [ngModel]=\"optionsCopy.graph.sort.attribute\"\n [items]=\"sortAttributes$ | async\"\n bindValue=\"id\"\n bindLabel=\"label\"\n class=\"a-pry-select\"\n id=\"chart_sortAttr\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">Sort</label>\n <pry-select\n (ngModelChange)=\"changeSortDirection($event)\"\n [ngModel]=\"optionsCopy.graph.sort.direction\"\n [items]=\"sortDirections\"\n bindValue=\"value\"\n bindLabel=\"label\"\n class=\"a-pry-select\"\n id=\"chart_sortDirection\"\n ></pry-select>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type === GraphType.DONUT || optionsCopy.graph.type === GraphType.CIRCULAR\"\n >\n <pry-scheme-picker\n (ngModelChange)=\"changeCircleColorScheme($event)\"\n [ngModel]=\"optionsCopy.circleColorScheme\"\n ></pry-scheme-picker>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR &&\n !optionsCopy.groupBy\n \"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_baseColor\">{{ '@pry.widget.chart.color' | i18n }}</label>\n <pry-color-picker\n (ngModelChange)=\"changeBaseColor($event)\"\n [ngModel]=\"optionsCopy.baseColor\"\n id=\"chart_baseColor\"\n class=\"a-pry-select\"\n ></pry-color-picker>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"aligned-option\">\n <div class=\"a-chips -md\" [style.background-color]=\"item\">{{ item }}</div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </pry-settings>\n </pry-widget-header>\n\n <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async) && !(noAggregationData$ | async)\">\n <div #vega></div>\n </ng-container>\n\n <ng-container *ngIf=\"noData$ | async\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.noData' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.noData' | i18n }}</span>\n <button type=\"button\" (click)=\"openData()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && (noAggregationData$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.aggNoResult' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.aggNoResult' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && !(noAggregationData$ | async) && !(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.chooseParameters' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.chooseParameters' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["triggerClick", "saveTriggered", "changeTitle"] }, { kind: "component", type: i2.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "openData$", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i6.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "component", type: i2.PryEditInputComponent, selector: "pry-edit-input", inputs: ["label"] }, { kind: "component", type: i2.PryRangeComponent, selector: "pry-range", inputs: ["min", "max", "step", "disabled", "labelTranslate"] }, { kind: "component", type: i7.PryColorPickerComponent, selector: "pry-color-picker" }, { kind: "component", type: i3.PrySchemePickerComponent, selector: "pry-scheme-picker" }, { kind: "component", type: PryWidgetAggregatedChartCssComponent, selector: "pry-widget-aggregated-chart-css" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }, { kind: "pipe", type: i2.PrySortDataPipe, name: "prySortData" }] }); }
676
786
  }
677
787
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetAggregatedChartComponent, decorators: [{
678
788
  type: Component,
679
- args: [{ selector: 'pry-widget-aggregated-chart', template: "<pry-widget-aggregated-chart-css></pry-widget-aggregated-chart-css>\n<div class=\"o-widget o-widget--chart\" *ngIf=\"optionsCopy$ | async as optionsCopy\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n [openData$]=\"openData$\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.graph.title\"\n ></pry-edit-input>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.graph.type\"\n class=\"a-pry-select\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.graph.donutSize\"\n (ngModelChange)=\"changeDonutSize($event)\"\n labelTranslate=\"@pry.widget.chart.donutSize\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n {{ '@pry.widget.chart.legend' | i18n }}\n </pry-checkbox>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleTooltip($event)\" [ngModel]=\"!!optionsCopy.graph.tooltip\"\n >{{ '@pry.widget.chart.tooltip' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.graph.type\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abscissa\">{{ '@pry.widget.chart.abscissa' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAbscissa($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.abscissa.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"abscissa\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeAbscissaLabel($event)\"\n [ngModel]=\"optionsCopy.abscissa.label\"\n ></pry-edit-input>\n\n <div\n *ngIf=\"\n ['quantitative', 'temporal'].includes(translateToVegaType(copyAbscissaField?.type)) &&\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR\n \"\n class=\"m-form-label-field\"\n >\n <pry-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n\n <pry-checkbox\n (ngModelChange)=\"limitElements($event)\"\n [ngModel]=\"!!optionsCopy.abscissa.limit\"\n [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n >{{ '@pry.widget.chart.limit' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit\">\n <ng-container *ngIf=\"optionsCopy.abscissa.limit.isTimeLimit === false\">\n <pry-range\n [ngModel]=\"optionsCopy.abscissa.limit.at\"\n (ngModelChange)=\"changeLimit($event)\"\n labelTranslate=\"@pry.widget.chart.limit\"\n min=\"1\"\n max=\"10\"\n ></pry-range>\n\n <ng-container *ngIf=\"optionsCopy.graph.type !== GraphType.HISTOGRAM\">\n <pry-checkbox\n (ngModelChange)=\"changeLimitOthers($event)\"\n [ngModel]=\"optionsCopy.abscissa.limit.others\"\n >{{ '@pry.widget.chart.others' | i18n }}\n </pry-checkbox>\n\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.order' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLimitOrder($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[{ id: 'asc' }, { id: 'desc' }]\"\n [ngModel]=\"optionsCopy.abscissa.limit.order\"\n [baseTranslate]=\"'@pry.widget.chart.'\"\n [labelTranslate]=\"true\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"other_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit.isTimeLimit\">\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.timeInterval' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeLimit($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[\n { id: 'second' },\n { id: 'minute' },\n { id: 'hour' },\n { id: 'day' },\n { id: 'week' },\n { id: 'month' },\n { id: 'quarter' },\n { id: 'year' }\n ]\"\n [ngModel]=\"optionsCopy.abscissa.limit.interval\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.time.\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"date_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"operations\">{{ '@pry.widget.chart.operation.title' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"operations$ | async\"\n [ngModel]=\"optionsCopy.ordinate.operation\"\n bindLabel=\"label\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"operations\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.ordinate.operation !== Operation.COUNT\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"ordinate\">{{ '@pry.widget.chart.ordinate' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOrdinate($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"ordinateAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.ordinate.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"ordinate\"\n ></pry-select>\n </div>\n </ng-container>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeOrdinateLabel($event)\"\n [ngModel]=\"optionsCopy.ordinate.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type !== GraphType.DONUT && optionsCopy.graph.type !== GraphType.CIRCULAR\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n >{{ '@pry.widget.chart.groupBy' | i18n }}\n </pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.groupBy\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.groupAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeGroupBy($event)\"\n [ngModel]=\"optionsCopy.groupBy.attribute\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesScheme\">{{ '@pry.widget.chart.colorScheme' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"optionsCopy.groupBy.color\"\n [itemsAsOption]=\"true\"\n [items]=\"schemes\"\n id=\"chart_seriesScheme\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.scheme.\"\n bindValue=\"id\"\n bindLabel=\"id\"\n ></pry-select>\n </div>\n\n <div class=\"o-widget--chart-color-thumb\">\n <div\n *ngFor=\"let schemeColor of scheme()\"\n class=\"o-widget--chart-color-thumb-item\"\n [title]=\"schemeColor\"\n [style.background-color]=\"schemeColor\"\n ></div>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n {{ '@pry.widget.chart.stacked' | i18n }}\n </pry-checkbox>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </pry-settings>\n </pry-widget-header>\n\n <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async) && !(noAggregationData$ | async)\">\n <div #vega></div>\n </ng-container>\n\n <ng-container *ngIf=\"noData$ | async\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.noData' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.noData' | i18n }}</span>\n <button type=\"button\" (click)=\"openData()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && (noAggregationData$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.aggNoResult' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.aggNoResult' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && !(noAggregationData$ | async) && !(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.chooseParameters' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.chooseParameters' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n" }]
680
- }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.PryI18nService }, { type: i0.ElementRef }, { type: i2.PryAggregationService }]; }, propDecorators: { vega: [{
789
+ args: [{ selector: 'pry-widget-aggregated-chart', template: "<pry-widget-aggregated-chart-css></pry-widget-aggregated-chart-css>\n<div class=\"o-widget o-widget--chart\" *ngIf=\"optionsCopy$ | async as optionsCopy\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n [displayCount]=\"false\"\n [openData$]=\"openData$\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [open$]=\"open$\"\n [header]=\"header\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <pry-edit-input\n label=\"@pry.widget.chart.title\"\n (ngModelChange)=\"changeChartTitle($event)\"\n [ngModel]=\"optionsCopy.graph.title\"\n ></pry-edit-input>\n\n <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_type\">{{ '@pry.widget.chart.type' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeType($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"typeOptions\"\n [ngModel]=\"optionsCopy.graph.type\"\n class=\"a-pry-select\"\n bindLabel=\"label\"\n bindValue=\"id\"\n id=\"chart_type\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n <pry-range\n [ngModel]=\"optionsCopy.graph.donutSize\"\n (ngModelChange)=\"changeDonutSize($event)\"\n labelTranslate=\"@pry.widget.chart.donutSize\"\n min=\"1\"\n max=\"500\"\n ></pry-range>\n </ng-container>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n {{ '@pry.widget.chart.legend' | i18n }}\n </pry-checkbox>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleTooltip($event)\" [ngModel]=\"!!optionsCopy.graph.tooltip\"\n >{{ '@pry.widget.chart.tooltip' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.graph.type\">\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"abscissa\">{{ '@pry.widget.chart.abscissa' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeAbscissa($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.abscissa.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"abscissa\"\n ></pry-select>\n </div>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeAbscissaLabel($event)\"\n [ngModel]=\"optionsCopy.abscissa.label\"\n ></pry-edit-input>\n\n <div\n *ngIf=\"\n ['quantitative', 'temporal'].includes(translateToVegaType(copyAbscissaField?.type)) &&\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR\n \"\n class=\"m-form-label-field\"\n >\n <pry-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n\n <pry-checkbox\n (ngModelChange)=\"limitElements($event)\"\n [ngModel]=\"!!optionsCopy.abscissa.limit\"\n [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n >{{ '@pry.widget.chart.limit' | i18n }}\n </pry-checkbox>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit\">\n <ng-container *ngIf=\"optionsCopy.abscissa.limit.isTimeLimit === false\">\n <pry-range\n [ngModel]=\"optionsCopy.abscissa.limit.at\"\n (ngModelChange)=\"changeLimit($event)\"\n labelTranslate=\"@pry.widget.chart.limit\"\n min=\"1\"\n max=\"10\"\n ></pry-range>\n\n <ng-container *ngIf=\"optionsCopy.graph.type !== GraphType.HISTOGRAM\">\n <pry-checkbox\n (ngModelChange)=\"changeLimitOthers($event)\"\n [ngModel]=\"optionsCopy.abscissa.limit.others\"\n >{{ '@pry.widget.chart.others' | i18n }}\n </pry-checkbox>\n\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.order' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLimitOrder($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[{ id: 'asc' }, { id: 'desc' }]\"\n [ngModel]=\"optionsCopy.abscissa.limit.order\"\n [baseTranslate]=\"'@pry.widget.chart.'\"\n [labelTranslate]=\"true\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"other_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!!optionsCopy.abscissa.limit.isTimeLimit\">\n <label class=\"a-label\" for=\"date_limit\">{{ '@pry.widget.chart.timeInterval' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeTimeLimit($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"[\n { id: 'second' },\n { id: 'minute' },\n { id: 'hour' },\n { id: 'day' },\n { id: 'week' },\n { id: 'month' },\n { id: 'quarter' },\n { id: 'year' }\n ]\"\n [ngModel]=\"optionsCopy.abscissa.limit.interval\"\n [labelTranslate]=\"true\"\n baseTranslate=\"@pry.widget.chart.time.\"\n bindLabel=\"id\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"date_limit\"\n ></pry-select>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"operations\">{{ '@pry.widget.chart.operation.title' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOperation($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"operations$ | async\"\n [ngModel]=\"optionsCopy.ordinate.operation\"\n bindLabel=\"label\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"operations\"\n ></pry-select>\n </div>\n\n <ng-container *ngIf=\"optionsCopy.ordinate.operation !== Operation.COUNT\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"ordinate\">{{ '@pry.widget.chart.ordinate' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeOrdinate($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"ordinateAttributes$ | async | prySortData : sortActive : sortDirection\"\n [ngModel]=\"optionsCopy.ordinate.attribute\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"ordinate\"\n ></pry-select>\n </div>\n </ng-container>\n\n <pry-edit-input\n label=\"@pry.widget.chart.dataLabel\"\n (ngModelChange)=\"changeOrdinateLabel($event)\"\n [ngModel]=\"optionsCopy.ordinate.label\"\n ></pry-edit-input>\n\n <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n >{{ '@pry.widget.chart.origin' | i18n }}\n </pry-checkbox>\n </div>\n </div>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type !== GraphType.DONUT && optionsCopy.graph.type !== GraphType.CIRCULAR\"\n >\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n >{{ '@pry.widget.chart.groupBy' | i18n }}\n </pry-checkbox>\n </div>\n\n <ng-container *ngIf=\"!!optionsCopy.groupBy\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">{{ '@pry.widget.chart.groupAttr' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeGroupBy($event)\"\n [ngModel]=\"optionsCopy.groupBy.attribute\"\n [items]=\"abscissaAttributes$ | async | prySortData : sortActive : sortDirection\"\n bindLabel=\"name\"\n bindValue=\"id\"\n class=\"a-pry-select\"\n id=\"chart_seriesAttr\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-scheme-picker\n (ngModelChange)=\"changeColorScheme($event)\"\n [ngModel]=\"optionsCopy.groupBy.color\"\n ></pry-scheme-picker>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n {{ '@pry.widget.chart.stacked' | i18n }}\n </pry-checkbox>\n </div>\n </ng-container>\n </div>\n <div class=\"o-settings__popup__content__fields -condensed\">\n <div class=\"m-form-label-field\">\n <pry-checkbox (ngModelChange)=\"toggleSort($event)\" [ngModel]=\"!!optionsCopy.graph.sort\"\n >{{ '@pry.widget.chart.sort.title' | i18n }}\n </pry-checkbox>\n </div>\n <ng-container *ngIf=\"!!optionsCopy.graph.sort\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">Attribute</label>\n <pry-select\n (ngModelChange)=\"changeSortAttribute($event)\"\n [ngModel]=\"optionsCopy.graph.sort.attribute\"\n [items]=\"sortAttributes$ | async\"\n bindValue=\"id\"\n bindLabel=\"label\"\n class=\"a-pry-select\"\n id=\"chart_sortAttr\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_seriesAttr\">Sort</label>\n <pry-select\n (ngModelChange)=\"changeSortDirection($event)\"\n [ngModel]=\"optionsCopy.graph.sort.direction\"\n [items]=\"sortDirections\"\n bindValue=\"value\"\n bindLabel=\"label\"\n class=\"a-pry-select\"\n id=\"chart_sortDirection\"\n ></pry-select>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <ng-container\n *ngIf=\"optionsCopy.graph.type === GraphType.DONUT || optionsCopy.graph.type === GraphType.CIRCULAR\"\n >\n <pry-scheme-picker\n (ngModelChange)=\"changeCircleColorScheme($event)\"\n [ngModel]=\"optionsCopy.circleColorScheme\"\n ></pry-scheme-picker>\n </ng-container>\n\n <ng-container\n *ngIf=\"\n optionsCopy.graph.type !== GraphType.DONUT &&\n optionsCopy.graph.type !== GraphType.CIRCULAR &&\n !optionsCopy.groupBy\n \"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"chart_baseColor\">{{ '@pry.widget.chart.color' | i18n }}</label>\n <pry-color-picker\n (ngModelChange)=\"changeBaseColor($event)\"\n [ngModel]=\"optionsCopy.baseColor\"\n id=\"chart_baseColor\"\n class=\"a-pry-select\"\n ></pry-color-picker>\n <ng-template #templateOption let-item=\"item\">\n <div class=\"aligned-option\">\n <div class=\"a-chips -md\" [style.background-color]=\"item\">{{ item }}</div>\n </div>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </pry-settings>\n </pry-widget-header>\n\n <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async) && !(noAggregationData$ | async)\">\n <div #vega></div>\n </ng-container>\n\n <ng-container *ngIf=\"noData$ | async\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.noData' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.noData' | i18n }}</span>\n <button type=\"button\" (click)=\"openData()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && (noAggregationData$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.aggNoResult' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.aggNoResult' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(noData$ | async) && !(noAggregationData$ | async) && !(isChartValid$ | async)\">\n <div class=\"o-widget__choose-parameters\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.chart.chooseParameters' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.chart.chooseParameters' | i18n }}</span>\n <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n <pry-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></pry-icon>\n <span>{{ '@pry.widget.settings.title' | i18n }}</span>\n </button>\n </div>\n </ng-container>\n</div>\n" }]
790
+ }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.PryI18nService }, { type: i0.ElementRef }, { type: i2.PryAggregationService }, { type: i3.PrySchemeService }]; }, propDecorators: { vega: [{
681
791
  type: ViewChild,
682
792
  args: ['vega']
683
793
  }] } });
@@ -766,7 +876,8 @@ const enTranslations = {
766
876
  category20: '20 colors with 2 shades',
767
877
  category20b: '20 colors with 4 shades n°1',
768
878
  category20c: '20 colors with 4 shades n°2',
769
- 'KO/W/OK': 'Traffic light'
879
+ 'KO/W/OK': 'Traffic light',
880
+ Provoly: 'Provoly'
770
881
  },
771
882
  time: {
772
883
  second: 'Second',
@@ -777,6 +888,22 @@ const enTranslations = {
777
888
  month: 'Month',
778
889
  quarter: 'Quarter',
779
890
  year: 'Year'
891
+ },
892
+ color: 'Color',
893
+ sort: {
894
+ title: 'Sort',
895
+ asc: {
896
+ quantitative: 'Low to high',
897
+ nominal: 'Alphabetical',
898
+ ordinal: 'Alphabetical',
899
+ temporal: 'Chronological'
900
+ },
901
+ desc: {
902
+ quantitative: 'High to low',
903
+ nominal: 'Reverse alphabetical',
904
+ ordinal: 'Reverse alphabetical',
905
+ temporal: 'Antichronological'
906
+ }
780
907
  }
781
908
  }
782
909
  },
@@ -870,7 +997,8 @@ const frTranslations = {
870
997
  category20: '20 couleurs avec 2 nuances',
871
998
  category20b: '20 couleurs avec 4 nuances n°1',
872
999
  category20c: '20 couleurs avec 4 nuances n°2',
873
- 'KO/W/OK': 'Feu de signalisation'
1000
+ 'KO/W/OK': 'Feu de signalisation',
1001
+ Provoly: 'Provoly'
874
1002
  },
875
1003
  time: {
876
1004
  second: 'Seconde',
@@ -881,6 +1009,22 @@ const frTranslations = {
881
1009
  month: 'Mois',
882
1010
  quarter: 'Trimestre',
883
1011
  year: 'Année'
1012
+ },
1013
+ color: 'Couleur',
1014
+ sort: {
1015
+ title: 'Tri',
1016
+ asc: {
1017
+ quantitative: 'Croissant',
1018
+ ordinal: 'Alphabétique',
1019
+ nominal: 'Alphabétique',
1020
+ temporal: 'Chronologique'
1021
+ },
1022
+ desc: {
1023
+ quantitative: 'Décroissant',
1024
+ ordinal: 'Anti-alphabétique',
1025
+ nominal: 'Anti-alphabétique',
1026
+ temporal: 'Antéchronologique'
1027
+ }
884
1028
  }
885
1029
  }
886
1030
  },
@@ -914,7 +1058,10 @@ class WidgetAggregatedChartModule extends BaseWidgetModule {
914
1058
  PryEditInputModule,
915
1059
  PryI18nModule,
916
1060
  PryRangeModule,
917
- PrySortModule], exports: [WidgetAggregatedChartComponent] }); }
1061
+ PrySortModule,
1062
+ ReactiveFormsModule,
1063
+ PryColorPickerModule,
1064
+ PrySchemePickerModule], exports: [WidgetAggregatedChartComponent] }); }
918
1065
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetAggregatedChartModule, providers: [PryAggregationService], imports: [CommonModule,
919
1066
  FormsModule,
920
1067
  OverlayModule,
@@ -927,7 +1074,10 @@ class WidgetAggregatedChartModule extends BaseWidgetModule {
927
1074
  PryEditInputModule,
928
1075
  PryI18nModule,
929
1076
  PryRangeModule,
930
- PrySortModule] }); }
1077
+ PrySortModule,
1078
+ ReactiveFormsModule,
1079
+ PryColorPickerModule,
1080
+ PrySchemePickerModule] }); }
931
1081
  }
932
1082
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetAggregatedChartModule, decorators: [{
933
1083
  type: NgModule,
@@ -946,7 +1096,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
946
1096
  PryEditInputModule,
947
1097
  PryI18nModule,
948
1098
  PryRangeModule,
949
- PrySortModule
1099
+ PrySortModule,
1100
+ ReactiveFormsModule,
1101
+ PryColorPickerModule,
1102
+ PrySchemePickerModule
950
1103
  ],
951
1104
  exports: [WidgetAggregatedChartComponent],
952
1105
  providers: [PryAggregationService]