{"version":3,"file":"onepoint-yap-dashboard-widgets-widget-aggregated-chart.mjs","sources":["../../../../projects/onepoint-yap/dashboard/widgets/widget-aggregated-chart/service/base-aggregation.service.ts","../../../../projects/onepoint-yap/dashboard/widgets/widget-aggregated-chart/style/css.component.ts","../../../../projects/onepoint-yap/dashboard/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.ts","../../../../projects/onepoint-yap/dashboard/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.html","../../../../projects/onepoint-yap/dashboard/widgets/widget-aggregated-chart/i18n/en.translations.ts","../../../../projects/onepoint-yap/dashboard/widgets/widget-aggregated-chart/i18n/fr.translations.ts","../../../../projects/onepoint-yap/dashboard/widgets/widget-aggregated-chart/widget-aggregated-chart.module.ts","../../../../projects/onepoint-yap/dashboard/widgets/widget-aggregated-chart/service/frontend-aggregation.service.ts","../../../../projects/onepoint-yap/dashboard/widgets/widget-aggregated-chart/service/backend-aggregation.service.ts","../../../../projects/onepoint-yap/dashboard/widgets/widget-aggregated-chart/onepoint-yap-dashboard-widgets-widget-aggregated-chart.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { ChartAggregatedWidgetOptions, Operation, ValueType } from '@onepoint-yap/dashboard';\nimport { Observable } from 'rxjs';\n\nexport interface AggregationResult {\n  operation: Operation;\n  values: (\n    | {\n        key: ValueType;\n        value: ValueType;\n      }\n    | {\n        key: ValueType;\n        groupBy: {\n          key: ValueType;\n          value: ValueType;\n        }[];\n      }\n  )[];\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class YapAggregationService {\n  aggregate(datasource: string[], options: ChartAggregatedWidgetOptions): Observable<AggregationResult> {\n    throw new Error(\n      'You must declare the use of an aggregation service. Add YapBackendAggregationService, YapFrontendAggregationService or a custom service'\n    );\n  }\n}\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'yap-widget-aggregated-chart-css',\n  template: '',\n  styleUrls: ['./_o-widget-chart.scss'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class YapWidgetAggregatedChartCssComponent {}\n","import { AfterViewInit, Component, ElementRef, ViewChild } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport {\n  Attribute,\n  ChartAggregatedWidgetOptions,\n  Class,\n  ClassSelectors,\n  DataWidgetComponent,\n  Field,\n  FieldSelectors,\n  FieldType,\n  GraphType,\n  Operation,\n  ValueType,\n  VegaColorType,\n  VegaType,\n  WIDGET_HEADER_HEIGHT,\n  YapI18nService\n} from '@onepoint-yap/dashboard';\nimport { BehaviorSubject, combineLatest, Observable, Subject, switchMap, withLatestFrom } from 'rxjs';\nimport { debounceTime, filter, map } from 'rxjs/operators';\nimport { View } from 'vega';\nimport embed, { vega } from 'vega-embed';\nimport { mergeDeep, TopLevelSpec } from 'vega-lite';\nimport { fontConfig } from 'vega-lite/build/src/config';\nimport { YapAggregationService } from '../service/base-aggregation.service';\n\nexport type RadarValue = {\n  category: number;\n  key: string;\n  value: number;\n};\n\nvega.scheme('KO/W/OK', ['#C04D3F', '#FD9843', '#9ABE29']);\n\n@Component({\n  selector: 'yap-widget-aggregated-chart',\n  templateUrl: './widget-aggregated-chart.component.html'\n})\nexport class WidgetAggregatedChartComponent extends DataWidgetComponent implements AfterViewInit {\n  @ViewChild('vega') vega!: ElementRef;\n  options$: Observable<ChartAggregatedWidgetOptions>;\n  optionsCopy$ = new BehaviorSubject<ChartAggregatedWidgetOptions | null>(null);\n  view?: View;\n  trigger$ = new Subject<void>();\n  vegaLiteSpec$: Observable<TopLevelSpec>;\n  fields$: Observable<Field[]>;\n  classes$: Observable<Class[]>;\n  attributeTypes$: Observable<{\n    ordinate: { vegaType: VegaType; fieldType: any };\n    abscissa: { vegaType: VegaType; fieldType: any };\n  }>;\n  aggregatedValues$: Observable<{ data: any; operation: any }>;\n  WIDGET_HEADER_HEIGHT = WIDGET_HEADER_HEIGHT;\n  GraphType = GraphType;\n  Operation = Operation;\n  isChartValid$: Observable<boolean>;\n  typeOptions: { id: string; label: string }[] = [];\n  operations$: Observable<{ id: string; label: string }[]>;\n  abscissaAttributes$: Observable<Attribute[]>;\n  classes: Class[] = [];\n  fields: Field[] = [];\n  ordinateAttributes$: Observable<Attribute[]>;\n  triggerOrdinateAttributes$ = new Subject<void>();\n  copyAbscissaField?: Field;\n  copyOrdinateField?: Field;\n  schemes: { id: string }[] = [];\n  noData$: Observable<boolean>;\n\n  constructor(\n    store: Store<any>,\n    private translateService: YapI18nService,\n    el: ElementRef,\n    private aggregationService: YapAggregationService\n  ) {\n    super(store, el);\n    this.schemes = Object.values(VegaColorType).map((id) => ({ id }));\n    this.typeOptions = Object.values(GraphType)\n      .map((v) => ({\n        id: v,\n        label: this.translateService.instant('@yap.widget.chart.graphType.' + v)\n      }))\n      .sort((a, b) => a.label.localeCompare(b.label));\n\n    this.options$ = this.manifest$.pipe(\n      map(\n        (manifest) =>\n          mergeDeep(\n            {\n              graph: { type: GraphType.BAR, tooltip: true, legend: false },\n              abscissa: { keep0: true },\n              ordinate: { keep0: true }\n            } as ChartAggregatedWidgetOptions,\n            (manifest.options ?? {}) as ChartAggregatedWidgetOptions\n          ) as ChartAggregatedWidgetOptions\n      )\n    );\n    this.options$.pipe(filter((opt) => !!opt)).subscribe((options) => {\n      this.optionsCopy$.next(JSON.parse(JSON.stringify(options)));\n    });\n    this.fields$ = this.store.select(FieldSelectors.fields);\n    this.classes$ = this.store.select(ClassSelectors.classes);\n\n    this.operations$ = combineLatest([this.resultSet$, this.classes$, this.fields$]).pipe(\n      map(([rs, classes, fields]) =>\n        classes\n          .filter((clazz) => Object.keys(rs.items).includes(clazz.id))\n          .map((clazz) => clazz.attributes)\n          .map((attrs) =>\n            attrs.filter((attr) => {\n              const field = fields.find((field) => {\n                return field.id === attr.field;\n              });\n              return !!field && [FieldType.INTEGER, FieldType.DECIMAL, FieldType.LONG].includes(field.type);\n            })\n          )\n          .reduce((a, b) => [...a, ...b], [])\n          .filter((attr) => !!attr)\n      ),\n      map((attributes) =>\n        (attributes.length > 0 ? Object.values(Operation) : [Operation.COUNT, Operation.DISTINCT, Operation.NONE])\n          .map((v) => ({\n            id: v,\n            label: this.translateService.instant('@yap.widget.chart.operation.' + v)\n          }))\n          .sort((a, b) => a.label.localeCompare(b.label))\n      )\n    );\n\n    this.subscriptions.add(this.fields$.subscribe((fields) => (this.fields = fields)));\n    this.subscriptions.add(this.classes$.subscribe((classes) => (this.classes = classes)));\n\n    this.abscissaAttributes$ = combineLatest([this.classes$, this.fields$, this.resultSet$, this.optionsCopy$]).pipe(\n      map(([classes, fields, rs, optionCopy]) =>\n        classes\n          .filter((clazz) => Object.keys(rs.items).includes(clazz.id))\n          .map((clazz) => clazz.attributes)\n          .map((attrs) =>\n            attrs.filter((attr) => {\n              const field = fields.find((field) => {\n                return field.id === attr.field;\n              });\n              return (\n                !!field &&\n                field.type !== FieldType.RAW &&\n                field.type !== FieldType.STRING &&\n                (optionCopy?.graph.type !== GraphType.HISTOGRAM || field.type !== FieldType.KEYWORD)\n              );\n            })\n          )\n          .reduce((a, b) => [...a, ...b], [])\n      )\n    );\n\n    this.ordinateAttributes$ = combineLatest([\n      this.classes$,\n      this.fields$,\n      this.resultSet$,\n      this.triggerOrdinateAttributes$\n    ]).pipe(\n      map(([classes, fields, rs]) =>\n        classes\n          .filter((clazz) => Object.keys(rs.items).includes(clazz.id))\n          .map((clazz) => clazz.attributes)\n          .map((attrs) =>\n            attrs.filter((attr) => {\n              const field = fields.find((field) => {\n                return field.id === attr.field;\n              });\n              if (\n                this.optionsCopy$.value &&\n                [\n                  Operation.MAX,\n                  Operation.MIN,\n                  Operation.SUM,\n                  Operation.Q1,\n                  Operation.Q3,\n                  Operation.AVERAGE,\n                  Operation.MEDIAN,\n                  Operation.NONE\n                ].includes(this.optionsCopy$.value.ordinate.operation)\n              ) {\n                return (\n                  !!field &&\n                  [FieldType.INTEGER, FieldType.INSTANT, FieldType.LONG, FieldType.DECIMAL].includes(field.type)\n                );\n              }\n              return !!field && field.type !== FieldType.RAW && field.type !== FieldType.STRING;\n            })\n          )\n          .reduce((a, b) => [...a, ...b], [])\n      )\n    );\n\n    this.isChartValid$ = combineLatest([this.options$, this.abscissaAttributes$, this.ordinateAttributes$]).pipe(\n      map(([options, abscissaAttrs, ordinateAttrs]) => {\n        return (\n          !!options.abscissa.attribute &&\n          abscissaAttrs.map((attr) => attr.id).includes(options.abscissa.attribute) &&\n          (options.ordinate.attribute\n            ? ordinateAttrs.map((attr) => attr.id).includes(options.ordinate.attribute)\n            : true)\n        );\n      })\n    );\n\n    this.attributeTypes$ = combineLatest([this.options$, this.fields$, this.classes$]).pipe(\n      filter(([options, fields, classes]) => !!options.abscissa && !!options.ordinate),\n      map(([options, fields, classes]) => {\n        const abscissa = classes\n          .map((clazz) => clazz.attributes.find((attr) => attr.id === options.abscissa.attribute))\n          .find((attr) => !!attr);\n        const ordinate = classes\n          .map((clazz) => clazz.attributes.find((attr) => attr.id === options.ordinate.attribute))\n          .find((attr) => !!attr);\n        const abscissaFieldType = fields.find((field) => field.id === abscissa?.field)?.type ?? FieldType.STRING;\n        const ordinateFieldType = fields.find((field) => field.id === ordinate?.field)?.type ?? FieldType.STRING;\n        return {\n          abscissa: {\n            fieldType: abscissaFieldType,\n            vegaType: this.translateToVegaType(abscissaFieldType, abscissa?.name ?? '')\n          },\n          ordinate: {\n            fieldType: ordinateFieldType,\n            vegaType:\n              options.ordinate.operation === Operation.COUNT || options.ordinate.operation === Operation.DISTINCT\n                ? VegaType.QUANTITATIVE\n                : this.translateToVegaType(ordinateFieldType, ordinate?.name ?? '')\n          }\n        };\n      })\n    );\n\n    this.aggregatedValues$ = combineLatest([this.datasourceIds$, this.options$, this.resultSet$]).pipe(\n      switchMap(([datasources, options]) => this.aggregationService.aggregate(datasources, options)),\n      debounceTime(100),\n      withLatestFrom(this.options$),\n      map(([aggregate, options]) => {\n        // @ts-ignore\n        if (aggregate.values.length > 0 && !aggregate.values[0].groupBy) {\n          return {\n            operation: aggregate.operation,\n            data: aggregate.values.map((value) => ({ ...value, series: options.ordinate.label }))\n          };\n        }\n        const flattened = (\n          aggregate.values as {\n            key: ValueType;\n            groupBy: {\n              key: ValueType;\n              value: ValueType;\n            }[];\n          }[]\n        )\n          .map((value) =>\n            value.groupBy.map((groupBy) => ({\n              key: value.key,\n              series: groupBy.key,\n              value: groupBy.value\n            }))\n          )\n          .reduce((a, b) => [...a, ...b], []);\n        return { operation: aggregate.operation, data: flattened };\n      })\n    );\n\n    this.noData$ = this.aggregatedValues$.pipe(map(({ operation, data }) => data.length === 0));\n\n    this.vegaLiteSpec$ = combineLatest([\n      this.options$,\n      this.attributeTypes$,\n      this.aggregatedValues$,\n      this.widgetSize$.pipe(debounceTime(100)),\n      this.displayHeader$\n    ]).pipe(\n      map(([options, types, values, size, display]) => {\n        const isCircular = [GraphType.CIRCULAR, GraphType.DONUT].includes(options.graph.type);\n        return mergeDeep(\n          {\n            $schema: 'https://vega.github.io/schema/vega-lite/v5.json',\n            title: this.getTitle(options),\n            width: 'container',\n            height: (size.height ?? 100) - (display ? WIDGET_HEADER_HEIGHT : 0),\n            padding: 10,\n            autosize: { type: 'fit', contains: 'padding' },\n            data: { values: JSON.parse(JSON.stringify(values.data)) },\n            layer: [\n              {\n                mark: {\n                  type: options.graph.type.split('-')[0] as 'arc' | 'line' | 'point' | 'bar' | 'area',\n                  point: options.graph.type.indexOf('point') >= 0,\n                  line: options.graph.type.indexOf('line') >= 0,\n                  innerRadius: options.graph.donutSize ?? 30\n                },\n                encoding: {\n                  x: !isCircular\n                    ? {\n                        field: 'key',\n                        title: options.abscissa.label,\n                        type: types.abscissa.vegaType,\n                        timeUnit:\n                          types.abscissa.vegaType === VegaType.TEMPORAL && options.abscissa.limit?.isTimeLimit\n                            ? options.abscissa.limit.interval\n                            : undefined,\n                        bin: options.graph.type.indexOf('histogram') >= 0,\n                        axis: {\n                          //format: types.abscissa.vegaType === VegaType.TEMPORAL ? '%Y-%B-%dT%H:%M:%S' : undefined,\n                          grid: false,\n                          ...WidgetAggregatedChartComponent.minTick(types.abscissa.fieldType),\n                          labelExpr: `height < 300 ? ${\n                            types.abscissa.vegaType === VegaType.TEMPORAL\n                              ? \"timeFormat(datum.value, '%Y-%B-%dT%H:%M:%S')\"\n                              : 'truncate(datum.value, 10)'\n                          } : ${\n                            types.abscissa.vegaType === VegaType.TEMPORAL\n                              ? \"timeFormat(datum.value, '%Y-%B-%dT%H:%M:%S')\"\n                              : 'datum.value'\n                          }`\n                        },\n                        scale: {\n                          // Force a false value here so that vega understands properly\n                          zero: !!options.abscissa.keep0\n                          //type: WidgetChartComponent.isTimeUnitUTC(variables[0]) ? 'utc' : undefined\n                        }\n                      }\n                    : undefined,\n                  y: !isCircular\n                    ? {\n                        field: 'value',\n                        title: options.ordinate.label,\n                        type: types.ordinate.vegaType,\n                        axis: {\n                          ...WidgetAggregatedChartComponent.minTick(types.ordinate.fieldType),\n                          ...this.setTickCount(values.data)\n                        },\n                        scale: {\n                          zero: options.ordinate.keep0\n                        },\n                        ...(options.graph.stacked ? { stack: true } : {})\n                      }\n                    : undefined,\n                  theta: isCircular ? { field: 'value', type: types.ordinate.vegaType } : undefined,\n                  color: {\n                    title: this.translateService.instant(\n                      options.groupBy ? '@yap.widget.chart.series' : '@yap.widget.chart.legendLabel'\n                    ),\n                    field: !isCircular ? 'series' : 'key',\n                    legend: options.graph.legend,\n                    scale: options.graph.legend ? { scheme: options.groupBy?.color ?? this.schemes[0].id } : undefined\n                  },\n                  xOffset: options.graph.stacked && options.groupBy ? { field: 'series' } : undefined,\n                  tooltip: options.graph.tooltip\n                    ? options.groupBy\n                      ? [\n                          {\n                            field: 'key',\n                            type: types.abscissa.vegaType,\n                            title: options.abscissa.label,\n                            ...(types.abscissa.vegaType === 'temporal' ? { format: '%Y-%B-%dT%H:%M:%S' } : {})\n                          },\n                          { field: 'value', type: types.ordinate.vegaType, title: options.ordinate.label },\n                          {\n                            field: 'series',\n                            title: this.translateService.instant('@yap.widget.chart.series'),\n                            type: 'nominal'\n                          }\n                        ]\n                      : [\n                          {\n                            field: 'key',\n                            type: types.abscissa.vegaType,\n                            title: options.abscissa.label,\n                            ...(types.abscissa.vegaType === 'temporal' ? { format: '%Y-%B-%dT%H:%M:%S' } : {})\n                          },\n                          { field: 'value', type: types.ordinate.vegaType, title: options.ordinate.label }\n                        ]\n                    : undefined\n                }\n              }\n            ],\n            config: fontConfig('Ubuntu, sans-serif')\n          } as any,\n          options.additionalSpec\n        );\n      })\n    );\n  }\n\n  ngAfterViewInit() {\n    this.subscriptions.add(\n      combineLatest([this.vegaLiteSpec$, this.trigger$]).subscribe(([spec, _]) => {\n        if (this.vega) {\n          this.view?.finalize();\n          console.log(spec);\n          embed(this.vega.nativeElement, JSON.parse(JSON.stringify(spec)), {\n            actions: false,\n            renderer: 'canvas',\n            formatLocale: this.translateService.instantObject('@yap.widget.chart.numberLocale') as any,\n            timeFormatLocale: this.translateService.instantObject('@yap.widget.chart.timeFormatLocale') as any\n          }).then((result) => (this.view = result.view));\n        } else {\n          setTimeout(() => this.trigger$.next(), 100);\n        }\n      })\n    );\n    this.trigger$.next();\n  }\n\n  translateToVegaType(type?: FieldType, name?: string): VegaType {\n    let idRegex = new RegExp(/_id|id_|_ID|ID_|_Id|Id_/, 'g');\n    if (idRegex.test(name ?? '-------')) {\n      return VegaType.ORDINAL;\n    }\n\n    switch (type) {\n      case FieldType.DECIMAL:\n      case FieldType.INTEGER:\n      case FieldType.LONG:\n        return VegaType.QUANTITATIVE;\n      case FieldType.INSTANT:\n        return VegaType.TEMPORAL;\n      case FieldType.KEYWORD:\n      case FieldType.STRING:\n        return VegaType.NOMINAL;\n      default:\n        return VegaType.NOMINAL;\n    }\n  }\n\n  static minTick(type: FieldType): { tickMinStep: number } | {} {\n    switch (type) {\n      case FieldType.INTEGER:\n      case FieldType.LONG:\n        return { tickMinStep: 1 };\n      case FieldType.DECIMAL:\n      case FieldType.INSTANT:\n      case FieldType.KEYWORD:\n      case FieldType.STRING:\n      default:\n        return {};\n    }\n  }\n\n  emitManifest() {\n    this.manifestModified.emit({\n      widgetIndex: this.widgetIndex,\n      manifest: {\n        ...this.manifest,\n        options: { ...this.optionsCopy$.getValue() }\n      }\n    });\n  }\n\n  openSettings() {\n    (this.open$ as Subject<void>).next(undefined);\n  }\n\n  private getTitle(options: ChartAggregatedWidgetOptions) {\n    return options.graph?.title ?? (options.abscissa.label ?? 'key') + ' / ' + (options.ordinate.label ?? 'value');\n  }\n\n  changeChartTitle($event: string) {\n    if (this.optionsCopy$.value) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        graph: { ...this.optionsCopy$.value?.graph, title: $event }\n      });\n    }\n  }\n\n  changeType($event: GraphType) {\n    if (this.optionsCopy$.value) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        graph: { ...this.optionsCopy$.value?.graph, type: $event }\n      });\n      if ([GraphType.CIRCULAR, GraphType.DONUT].includes($event)) {\n        this.optionsCopy$.next({\n          ...this.optionsCopy$.value,\n          groupBy: undefined\n        });\n      }\n      if ([GraphType.HISTOGRAM].includes($event)) {\n        this.limitElements(true);\n      }\n    }\n  }\n\n  changeDonutSize($event: number) {\n    if (this.optionsCopy$.value) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        graph: { ...this.optionsCopy$.value?.graph, donutSize: $event }\n      });\n    }\n  }\n\n  changeOperation($event: Operation) {\n    if (this.optionsCopy$.value) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        ordinate: { ...this.optionsCopy$.value?.ordinate, operation: $event }\n      });\n      if ($event === Operation.COUNT || $event === Operation.DISTINCT) {\n        this.optionsCopy$.next({\n          ...this.optionsCopy$.value,\n          ordinate: {\n            ...this.optionsCopy$.value?.ordinate,\n            label: this.translateService.instant('@yap.widget.chart.operation.' + $event),\n            attribute: undefined\n          }\n        });\n      }\n      setTimeout(() => this.triggerOrdinateAttributes$.next(), 10);\n    }\n  }\n\n  changeAbscissa($event: string) {\n    if ($event && this.optionsCopy$.value) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        abscissa: { ...this.optionsCopy$.value?.abscissa, attribute: $event }\n      });\n      const attr = this.classes\n        .map((clazz) => clazz.attributes)\n        .reduce((a, b) => [...a, ...b], [])\n        .find((attr) => attr.id === $event);\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        abscissa: { ...this.optionsCopy$.value?.abscissa, label: attr?.name ?? 'attr-not-found' }\n      });\n\n      this.copyAbscissaField = this.fields.find((field) => attr?.field === field.id);\n\n      this.limitElements(!!this.optionsCopy$.value?.abscissa.limit);\n    }\n  }\n\n  changeAbscissaLabel($event: string) {\n    if (this.optionsCopy$.value) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        abscissa: { ...this.optionsCopy$.value?.abscissa, label: $event }\n      });\n    }\n  }\n\n  changeOrdinate($event: any) {\n    if ($event && this.optionsCopy$.value) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        ordinate: { ...this.optionsCopy$.value?.ordinate, attribute: $event }\n      });\n      const attr = this.classes\n        .map((clazz) => clazz.attributes)\n        .reduce((a, b) => [...a, ...b], [])\n        .find((attr) => attr.id === $event);\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        ordinate: { ...this.optionsCopy$.value?.ordinate, label: attr?.name ?? 'attr-not-found' }\n      });\n\n      this.copyOrdinateField = this.fields.find((field) => attr?.field === field.id);\n    }\n  }\n\n  changeOrdinateLabel($event: any) {\n    if (this.optionsCopy$.value) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        ordinate: { ...this.optionsCopy$.value?.ordinate, label: $event }\n      });\n    }\n  }\n\n  changeKeep0Abscissa($event: any) {\n    if (this.optionsCopy$.value) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        abscissa: { ...this.optionsCopy$.value?.abscissa, keep0: $event }\n      });\n    }\n  }\n\n  changeKeep0Ordinate($event: any) {\n    if (this.optionsCopy$.value) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        ordinate: { ...this.optionsCopy$.value?.ordinate, keep0: $event }\n      });\n    }\n  }\n\n  limitElements($event: any) {\n    if (this.optionsCopy$.value) {\n      if ($event) {\n        if (\n          this.copyAbscissaField?.type !== FieldType.INSTANT &&\n          this.optionsCopy$.value?.abscissa?.limit &&\n          'at' in this.optionsCopy$.value?.abscissa?.limit\n        ) {\n          this.optionsCopy$.next({\n            ...this.optionsCopy$.value,\n            abscissa: {\n              ...this.optionsCopy$.value?.abscissa,\n              limit: {\n                at: this.optionsCopy$.value?.abscissa?.limit?.at ?? 3,\n                others: false,\n                order: 'asc',\n                isTimeLimit: false\n              }\n            }\n          });\n        } else {\n          this.optionsCopy$.next({\n            ...this.optionsCopy$.value,\n            abscissa: { ...this.optionsCopy$.value?.abscissa, limit: { interval: 'second', isTimeLimit: true } }\n          });\n        }\n      } else {\n        this.optionsCopy$.next({\n          ...this.optionsCopy$.value,\n          abscissa: { ...this.optionsCopy$.value?.abscissa, limit: undefined }\n        });\n      }\n    }\n  }\n\n  changeLimit($event: any) {\n    if (\n      this.optionsCopy$.value &&\n      this.optionsCopy$.value.abscissa.limit &&\n      !this.optionsCopy$.value.abscissa.limit.isTimeLimit\n    ) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        abscissa: {\n          ...this.optionsCopy$.value?.abscissa,\n          limit: {\n            ...this.optionsCopy$.value?.abscissa.limit,\n            at: $event\n          }\n        }\n      });\n    }\n  }\n\n  changeLimitOthers($event: any) {\n    if (\n      this.optionsCopy$.value &&\n      this.optionsCopy$.value.abscissa.limit &&\n      !this.optionsCopy$.value.abscissa.limit.isTimeLimit\n    ) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        abscissa: {\n          ...this.optionsCopy$.value?.abscissa,\n          limit: {\n            ...this.optionsCopy$.value?.abscissa.limit,\n            others: $event\n          }\n        }\n      });\n    }\n  }\n\n  changeLimitOrder($event: any) {\n    if (\n      this.optionsCopy$.value &&\n      this.optionsCopy$.value.abscissa.limit &&\n      !this.optionsCopy$.value.abscissa.limit.isTimeLimit\n    ) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        abscissa: {\n          ...this.optionsCopy$.value?.abscissa,\n          limit: {\n            ...this.optionsCopy$.value?.abscissa.limit,\n            order: $event ? 'asc' : 'desc'\n          }\n        }\n      });\n    }\n  }\n\n  changeTimeLimit($event: any) {\n    if (\n      this.optionsCopy$.value &&\n      this.optionsCopy$.value.abscissa.limit &&\n      this.optionsCopy$.value.abscissa.limit.isTimeLimit\n    ) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        abscissa: {\n          ...this.optionsCopy$.value.abscissa,\n          limit: {\n            ...this.optionsCopy$.value.abscissa.limit,\n            interval: $event\n          }\n        }\n      });\n    }\n  }\n\n  toggleLegend($event: any) {\n    if (this.optionsCopy$.value) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        graph: { ...this.optionsCopy$.value.graph, legend: $event }\n      });\n    }\n  }\n\n  toggleTooltip($event: any) {\n    if (this.optionsCopy$.value) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        graph: { ...this.optionsCopy$.value?.graph, tooltip: $event }\n      });\n    }\n  }\n\n  toggleGroupBy($event: any) {\n    if (this.optionsCopy$.value) {\n      if ($event) {\n        this.optionsCopy$.next({\n          ...this.optionsCopy$.value,\n          groupBy: { attribute: this.optionsCopy$.value?.groupBy?.attribute ?? '', color: this.schemes[0].id }\n        });\n      } else {\n        this.optionsCopy$.next({\n          ...this.optionsCopy$.value,\n          groupBy: undefined\n        });\n      }\n    }\n  }\n\n  changeGroupBy($event: any) {\n    if (typeof $event === 'string' && this.optionsCopy$.value && this.optionsCopy$.value.groupBy) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        groupBy: {\n          ...this.optionsCopy$.value?.groupBy,\n          attribute: $event\n        }\n      });\n    }\n  }\n\n  changeColorScheme($event: any) {\n    if (this.optionsCopy$.value && this.optionsCopy$.value.groupBy) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        groupBy: {\n          attribute: this.optionsCopy$.value.groupBy?.attribute,\n          color: $event\n        }\n      });\n    }\n  }\n\n  setTickCount(data: any) {\n    return Math.max(...data.map((val: any) => val.value)) < 3\n      ? { tickCount: Math.max(...data.map((val: any) => val.value)) }\n      : {};\n  }\n\n  scheme() {\n    return vega.scheme(this.optionsCopy$.value?.groupBy?.color ?? '');\n  }\n\n  toggleStacked($event: any) {\n    if (this.optionsCopy$.value) {\n      this.optionsCopy$.next({\n        ...this.optionsCopy$.value,\n        graph: {\n          ...this.optionsCopy$.value?.graph,\n          stacked: $event\n        }\n      });\n    }\n  }\n\n  override toImage(): Promise<string> {\n    return new Promise((resolve, reject) => {\n      resolve(this.vega.nativeElement.querySelectorAll('canvas')[0].toDataURL('image/png'));\n    });\n  }\n}\n","<yap-widget-aggregated-chart-css></yap-widget-aggregated-chart-css>\n<div class=\"o-widget o-widget--chart\" *ngIf=\"optionsCopy$ | async as optionsCopy\">\n  <yap-widget-header\n    [datasourceIds$]=\"datasourceIds$\"\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  >\n    <yap-settings\n      (saveTriggered)=\"emitManifest()\"\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        <yap-edit-input\n          label=\"@yap.widget.chart.title\"\n          (ngModelChange)=\"changeChartTitle($event)\"\n          [ngModel]=\"optionsCopy.graph.title\"\n        ></yap-edit-input>\n\n        <div *ngIf=\"optionsCopy\" class=\"m-form-label-field\">\n          <label class=\"a-label\" for=\"chart_type\">{{ '@yap.widget.chart.type' | i18n }}</label>\n          <yap-select\n            (ngModelChange)=\"changeType($event)\"\n            [itemsAsOption]=\"true\"\n            [items]=\"typeOptions\"\n            [ngModel]=\"optionsCopy.graph.type\"\n            class=\"a-yap-select\"\n            bindLabel=\"label\"\n            bindValue=\"id\"\n            id=\"chart_type\"\n          ></yap-select>\n        </div>\n\n        <ng-container *ngIf=\"optionsCopy.graph.type === GraphType.DONUT\">\n          <yap-range\n            [ngModel]=\"optionsCopy.graph.donutSize\"\n            (ngModelChange)=\"changeDonutSize($event)\"\n            labelTranslate=\"@yap.widget.chart.donutSize\"\n            min=\"1\"\n            max=\"500\"\n          ></yap-range>\n        </ng-container>\n\n        <div class=\"m-form-label-field\">\n          <yap-checkbox (ngModelChange)=\"toggleLegend($event)\" [ngModel]=\"!!optionsCopy.graph.legend\">\n            {{ '@yap.widget.chart.legend' | i18n }}\n          </yap-checkbox>\n        </div>\n\n        <div class=\"m-form-label-field\">\n          <yap-checkbox (ngModelChange)=\"toggleTooltip($event)\" [ngModel]=\"!!optionsCopy.graph.tooltip\"\n            >{{ '@yap.widget.chart.tooltip' | i18n }}\n          </yap-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\">{{ '@yap.widget.chart.abscissa' | i18n }}</label>\n            <yap-select\n              (ngModelChange)=\"changeAbscissa($event)\"\n              [itemsAsOption]=\"true\"\n              [items]=\"abscissaAttributes$ | async\"\n              [ngModel]=\"optionsCopy.abscissa.attribute\"\n              bindLabel=\"name\"\n              bindValue=\"id\"\n              class=\"a-yap-select\"\n              id=\"abscissa\"\n            ></yap-select>\n          </div>\n\n          <yap-edit-input\n            label=\"@yap.widget.chart.dataLabel\"\n            (ngModelChange)=\"changeAbscissaLabel($event)\"\n            [ngModel]=\"optionsCopy.abscissa.label\"\n          ></yap-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            <yap-checkbox (ngModelChange)=\"changeKeep0Abscissa($event)\" [ngModel]=\"optionsCopy.abscissa.keep0\"\n              >{{ '@yap.widget.chart.origin' | i18n }}\n            </yap-checkbox>\n\n            <yap-checkbox\n              (ngModelChange)=\"limitElements($event)\"\n              [ngModel]=\"!!optionsCopy.abscissa.limit\"\n              [disabled]=\"optionsCopy.graph.type === GraphType.HISTOGRAM\"\n              >{{ '@yap.widget.chart.limit' | i18n }}\n            </yap-checkbox>\n\n            <ng-container *ngIf=\"!!optionsCopy.abscissa.limit\">\n              <ng-container *ngIf=\"optionsCopy.abscissa.limit.isTimeLimit === false\">\n                <yap-range\n                  [ngModel]=\"optionsCopy.abscissa.limit.at\"\n                  (ngModelChange)=\"changeLimit($event)\"\n                  labelTranslate=\"@yap.widget.chart.limit\"\n                  min=\"1\"\n                  max=\"10\"\n                ></yap-range>\n\n                <ng-container *ngIf=\"optionsCopy.graph.type !== GraphType.HISTOGRAM\">\n                  <yap-checkbox\n                    (ngModelChange)=\"changeLimitOthers($event)\"\n                    [ngModel]=\"optionsCopy.abscissa.limit.others\"\n                    >{{ '@yap.widget.chart.others' | i18n }}\n                  </yap-checkbox>\n\n                  <label class=\"a-label\" for=\"date_limit\">{{ '@yap.widget.chart.order' | i18n }}</label>\n                  <yap-select\n                    (ngModelChange)=\"changeLimitOrder($event)\"\n                    [itemsAsOption]=\"true\"\n                    [items]=\"[{ id: 'asc' }, { id: 'desc' }]\"\n                    [ngModel]=\"optionsCopy.abscissa.limit.order\"\n                    [baseTranslate]=\"'@yap.widget.chart.'\"\n                    [labelTranslate]=\"true\"\n                    bindLabel=\"id\"\n                    bindValue=\"id\"\n                    class=\"a-yap-select\"\n                    id=\"other_limit\"\n                  ></yap-select>\n                </ng-container>\n              </ng-container>\n\n              <ng-container *ngIf=\"!!optionsCopy.abscissa.limit.isTimeLimit\">\n                <label class=\"a-label\" for=\"date_limit\">{{ '@yap.widget.chart.timeInterval' | i18n }}</label>\n                <yap-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=\"@yap.widget.chart.time.\"\n                  bindLabel=\"id\"\n                  bindValue=\"id\"\n                  class=\"a-yap-select\"\n                  id=\"date_limit\"\n                ></yap-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\">{{ '@yap.widget.chart.operation.title' | i18n }}</label>\n            <yap-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-yap-select\"\n              id=\"operations\"\n            ></yap-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\">{{ '@yap.widget.chart.ordinate' | i18n }}</label>\n              <yap-select\n                (ngModelChange)=\"changeOrdinate($event)\"\n                [itemsAsOption]=\"true\"\n                [items]=\"ordinateAttributes$ | async\"\n                [ngModel]=\"optionsCopy.ordinate.attribute\"\n                bindLabel=\"name\"\n                bindValue=\"id\"\n                class=\"a-yap-select\"\n                id=\"ordinate\"\n              ></yap-select>\n            </div>\n          </ng-container>\n\n          <yap-edit-input\n            label=\"@yap.widget.chart.dataLabel\"\n            (ngModelChange)=\"changeOrdinateLabel($event)\"\n            [ngModel]=\"optionsCopy.ordinate.label\"\n          ></yap-edit-input>\n\n          <div *ngIf=\"translateToVegaType(copyOrdinateField?.type) === 'quantitative'\" class=\"m-form-label-field\">\n            <yap-checkbox (ngModelChange)=\"changeKeep0Ordinate($event)\" [ngModel]=\"optionsCopy.ordinate.keep0\"\n              >{{ '@yap.widget.chart.origin' | i18n }}\n            </yap-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              <yap-checkbox (ngModelChange)=\"toggleGroupBy($event)\" [ngModel]=\"!!optionsCopy.groupBy\"\n                >{{ '@yap.widget.chart.groupBy' | i18n }}\n              </yap-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\">{{ '@yap.widget.chart.groupAttr' | i18n }}</label>\n                <yap-select\n                  (ngModelChange)=\"changeGroupBy($event)\"\n                  [ngModel]=\"optionsCopy.groupBy.attribute\"\n                  [items]=\"abscissaAttributes$ | async\"\n                  bindLabel=\"name\"\n                  bindValue=\"id\"\n                  class=\"a-yap-select\"\n                  id=\"chart_seriesAttr\"\n                ></yap-select>\n              </div>\n\n              <div class=\"m-form-label-field\">\n                <label class=\"a-label\" for=\"chart_seriesScheme\">{{ '@yap.widget.chart.colorScheme' | i18n }}</label>\n                <yap-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=\"@yap.widget.chart.scheme.\"\n                  bindValue=\"id\"\n                  bindLabel=\"id\"\n                ></yap-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                <yap-checkbox [ngModel]=\"optionsCopy.graph.stacked\" (ngModelChange)=\"toggleStacked($event)\">\n                  {{ '@yap.widget.chart.stacked' | i18n }}\n                </yap-checkbox>\n              </div>\n            </ng-container>\n          </div>\n        </ng-container>\n      </ng-container>\n    </yap-settings>\n  </yap-widget-header>\n  <div class=\"no-result\" *ngIf=\"(isChartValid$ | async) === false\">\n    <img\n      class=\"no-result__search\"\n      src=\"../../../assets/svgs/yap_recherche_pas_de_resultat.svg\"\n      alt=\"{{ '@yap.widget.chart.noData' | i18n }}\"\n      aria-hidden=\"true\"\n    />\n    <span class=\"no-result__text\">{{ '@yap.widget.chart.noData' | i18n }}</span>\n  </div>\n  <ng-container *ngIf=\"(isChartValid$ | async) && !(noData$ | async)\">\n    <div #vega></div>\n  </ng-container>\n\n  <ng-container *ngIf=\"!(isChartValid$ | async)\">\n    <div class=\"o-widget__choose-parameters\">\n      <p class=\"a-p\">\n        {{ '@yap.widget.chart.chooseParameters' | i18n }}\n      </p>\n      <button type=\"button\" (click)=\"openSettings()\" class=\"a-btn a-btn--primary\">\n        <yap-icon [height]=\"20\" [width]=\"20\" iconSvg=\"control\"></yap-icon>\n        <span>{{ '@yap.widget.settings.title' | i18n }}</span>\n      </button>\n    </div>\n  </ng-container>\n\n  <ng-container *ngIf=\"noData$ | async\">\n    <div class=\"o-widget__choose-parameters\">\n      <p class=\"a-p\">\n        {{ '@yap.widget.chart.noData' | i18n }}\n      </p>\n    </div>\n  </ng-container>\n</div>\n","export const enTranslations = {\n  '@yap': {\n    widget: {\n      chart: {\n        numberLocale: {\n          decimal: '.',\n          thousands: ',',\n          grouping: [3],\n          currency: ['$', '']\n        },\n        timeFormatLocale: {\n          dateTime: '%Y %B %d %H:%M:%S',\n          date: '%d/%m/%Y',\n          time: '%H:%M:%S',\n          periods: ['AM', 'PM'],\n          days: ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'],\n          shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n          months: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],\n          shortMonths: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']\n        },\n        operation: {\n          none: 'Attribute value',\n          count: 'Count',\n          sum: 'Sum',\n          cardinality: 'Distinct elements',\n          avg: 'Average',\n          median: 'Median',\n          q1: 'Lower quartile',\n          q3: 'Upper Quartile',\n          min: 'Minimum',\n          max: 'Maximum',\n          percent: 'Percent',\n          title: 'Operation'\n        },\n        chooseParameters: 'Please select parameters to display chart.',\n        series: 'Series',\n        type: 'Chart type',\n        title: 'Chart title',\n        graphType: {\n          'area-default': 'Area',\n          'area-with-lines-and-points': 'Curve with lines and points',\n          'bar-default': 'Bar',\n          'arc-default': 'Circular',\n          'line-default': 'Curve',\n          'line-with-points': 'Curve with points',\n          'arc-donut': 'Donut',\n          'bar-histogram': 'Histogram',\n          'point-default': 'Points'\n        },\n        donutSize: 'Donut inner radius',\n        abscissa: 'Abscissa',\n        ordinate: 'Ordinate',\n        dataLabel: 'Data label',\n        origin: 'Axis containing 0',\n        limit: 'Limit elements',\n        asc: 'Biggest elements',\n        desc: 'Smallest elements',\n        timeInterval: 'Time interval',\n        others: 'Regroup remaining values in category \"Other\"',\n        order: 'Component selection',\n        groupBy: 'Group by',\n        groupAttr: 'Grouping attribute',\n        colorScheme: 'Color scheme',\n        legend: 'Display legend',\n        legendLabel: 'Legend',\n        tooltip: 'Display tooltip',\n        stacked: 'Vertical stacking',\n        noData: 'No data to display',\n        scheme: {\n          accent: '8 colors n°1',\n          set2: '8 colors n°2',\n          dark2: '8 dark colors',\n          pastel2: '8 pastel colors',\n          set1: '9 colors',\n          pastel1: '9 pastel colors',\n          category10: '10 colors',\n          tableau10: '10 different colors',\n          set3: '12 colors',\n          paired: '12 different colors',\n          tableau20: '20 colors',\n          category20: '20 colors with 2 shades',\n          category20b: '20 colors with 4 shades n°1',\n          category20c: '20 colors with 4 shades n°2',\n          'KO/W/OK': 'Traffic light'\n        },\n        time: {\n          second: 'Second',\n          minute: 'Minute',\n          hour: 'Hour',\n          day: 'Day',\n          week: 'Week',\n          month: 'Month',\n          quarter: 'Quarter',\n          year: 'Year'\n        }\n      }\n    },\n    message: {\n      'backend-only-1-datasource': 'Aggregation service can only manage the first datasource linked to the widget.',\n      'cannot-aggregate-virtual-ds':\n        'Aggregation service cannot perform aggregation on virtual datasets such as current search.'\n    }\n  }\n};\n","export const frTranslations = {\n  '@yap': {\n    widget: {\n      chart: {\n        numberLocale: {\n          decimal: '.',\n          thousands: ' ',\n          grouping: [3],\n          currency: ['€', '']\n        },\n        timeFormatLocale: {\n          dateTime: '%Y %B %d %H:%M:%S',\n          date: '%d/%m/%Y',\n          time: '%H:%M:%S',\n          periods: ['AM', 'PM'],\n          days: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],\n          shortDays: ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],\n          months: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],\n          shortMonths: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']\n        },\n        operation: {\n          none: \"Valeur de l'attribut\",\n          count: 'Nombre',\n          sum: 'Somme',\n          cardinality: \"Nombre d'éléments distincts\",\n          avg: 'Moyenne',\n          median: 'Médiane',\n          q1: 'Quartile inférieur',\n          q3: 'Quartile supérieur',\n          min: 'Minimum',\n          max: 'Maximum',\n          percent: 'Pourcentage',\n          title: 'Opération'\n        },\n        chooseParameters: \"Merci de sélectionner les paramètres afin d'afficher le graphique\",\n        series: 'Regroupement',\n        type: 'Type de graphique',\n        title: 'Titre du graphique',\n        graphType: {\n          'area-default': 'Aire',\n          'area-with-lines-and-points': 'Aire avec lignes et marques',\n          'bar-default': 'Barres',\n          'arc-default': 'Circulaire',\n          'line-default': 'Courbe',\n          'line-with-points': 'Courbe avec marques',\n          'arc-donut': 'Diagramme anneau',\n          'bar-histogram': 'Histogramme',\n          'point-default': 'Points'\n        },\n        donutSize: \"Diamètre intérieur de l'anneau\",\n        abscissa: 'Abscisse',\n        ordinate: 'Ordonnée',\n        dataLabel: 'Libellé de la donnée',\n        origin: 'Axe contenant 0',\n        limit: 'Limiter les éléments',\n        asc: 'Aux plus grands éléments',\n        desc: 'Aux plus petits éléments',\n        timeInterval: 'Intervalle de temps',\n        others: 'Regrouper les valeurs restantes dans une catégorie \"Autre\"',\n        order: 'Choix des éléments',\n        groupBy: 'Regroupement',\n        groupAttr: 'Attribut de regroupement',\n        colorScheme: 'Schéma de couleur',\n        legend: 'Afficher la légende',\n        legendLabel: 'Légende',\n        tooltip: 'Affichage des info-bulles',\n        stacked: 'Superposition verticale',\n        noData: 'Aucune donnée à afficher',\n        scheme: {\n          accent: '8 couleurs n°1',\n          set2: '8 couleurs n°2',\n          dark2: '8 couleurs sombre',\n          pastel2: '8 couleurs pastel',\n          set1: '9 couleurs',\n          pastel1: '9 couleurs pastel',\n          category10: '10 couleurs',\n          tableau10: '10 couleurs différentes',\n          set3: '12 couleurs',\n          paired: '12 couleurs différentes',\n          tableau20: '20 couleurs',\n          category20: '20 couleurs avec 2 nuances',\n          category20b: '20 couleurs avec 4 nuances n°1',\n          category20c: '20 couleurs avec 4 nuances n°2',\n          'KO/W/OK': 'Feu de signalisation'\n        },\n        time: {\n          second: 'Seconde',\n          minute: 'Minute',\n          hour: 'Heure',\n          day: 'Jour',\n          week: 'Semaine',\n          month: 'Mois',\n          quarter: 'Trimestre',\n          year: 'Année'\n        }\n      }\n    },\n    message: {\n      'backend-only-1-datasource':\n        'Le service aggregation ne peut prendre en compte que la première datasource associée au widget.',\n      'cannot-aggregate-virtual-ds':\n        'Le service aggregation ne peut pas agréger sur des dataset virtuels tels que la recherche courante.'\n    }\n  }\n};\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  BaseWidgetComponent,\n  BaseWidgetModule,\n  YapCoreModule,\n  YapDashboardModule,\n  YapEditInputModule,\n  YapI18nModule,\n  YapI18nService,\n  YapIconModule,\n  YapRangeModule,\n  YapSelectModule,\n  YapToggleModule\n} from '@onepoint-yap/dashboard';\nimport { YapCheckboxModule } from '@onepoint-yap/dashboard/components/checkbox';\nimport { WidgetAggregatedChartComponent } from './component/widget-aggregated-chart.component';\nimport { enTranslations } from './i18n/en.translations';\nimport { frTranslations } from './i18n/fr.translations';\nimport { YapAggregationService } from './service/base-aggregation.service';\nimport { YapWidgetAggregatedChartCssComponent } from './style/css.component';\n\n@NgModule({\n  declarations: [WidgetAggregatedChartComponent, YapWidgetAggregatedChartCssComponent],\n  imports: [\n    CommonModule,\n    FormsModule,\n    OverlayModule,\n    YapCoreModule,\n    YapDashboardModule,\n    YapSelectModule,\n    YapIconModule,\n    YapCheckboxModule,\n    YapToggleModule,\n    YapEditInputModule,\n    YapI18nModule,\n    YapRangeModule\n  ],\n  exports: [WidgetAggregatedChartComponent],\n  providers: [YapAggregationService]\n})\nexport class WidgetAggregatedChartModule extends BaseWidgetModule {\n  constructor(private yapTranslateService: YapI18nService) {\n    super();\n    this.yapTranslateService.addLangObject('fr', 'widget-aggregated-chart', frTranslations);\n    this.yapTranslateService.addLangObject('en', 'widget-aggregated-chart', enTranslations);\n  }\n\n  override getComponent() {\n    return WidgetAggregatedChartComponent as Type<BaseWidgetComponent>;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport {\n  AtLimit,\n  ChartAggregatedWidgetOptions,\n  ClassSelectors,\n  DashboardSelectors,\n  Item,\n  ItemUtils,\n  Operation,\n  ResultsetUtils,\n  TimeLimit,\n  ValueType\n} from '@onepoint-yap/dashboard';\nimport { combineLatest, map, Observable } from 'rxjs';\nimport { AggregationResult, YapAggregationService } from './base-aggregation.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class YapFrontendAggregationService extends YapAggregationService {\n  constructor(private store: Store) {\n    super();\n  }\n\n  // @ts-ignore\n  override aggregate(datasource: string[], options: ChartAggregatedWidgetOptions): Observable<AggregationResult> {\n    return combineLatest([\n      this.store.select(DashboardSelectors.resultSets),\n      this.store.select(ClassSelectors.classes)\n    ]).pipe(\n      map(([resultSets, classes]) => {\n        const abscissa = classes\n          .map((clazz) => clazz.attributes.find((attr) => attr.id === options.abscissa.attribute))\n          .find((attr) => !!attr)?.name;\n        const ordinate = classes\n          .map((clazz) => clazz.attributes.find((attr) => attr.id === options.ordinate.attribute))\n          .find((attr) => !!attr)?.name;\n        if (!abscissa || !ordinate) {\n          throw new Error('abscissaorodinateinvalid');\n        }\n        let data = datasource.map((rsName) => resultSets[rsName ?? '']).filter((rsName) => !!rsName);\n        const resultSet = data.reduce((rs1, rs2) => ResultsetUtils.mergeResultSets(rs1, rs2), {\n          items: {},\n          relations: [],\n          merged: data.length\n        });\n        let items: Item[] = Object.keys(resultSet.items)\n          .map((classId) => resultSet.items[classId])\n          .reduce((prev, curr) => [...prev, ...curr], []) as Item[];\n        if (!!options.groupBy) {\n          const groupBy = classes\n            .map((clazz) => clazz.attributes.find((attr) => attr.id === options.groupBy?.attribute))\n            .find((attr) => !!attr)?.name;\n          if (!groupBy) {\n            throw new Error('groupByAttributeisinvalid');\n          }\n          const itemsGrouped: { [key: string | number]: Item[] } = this.groupBy(items, groupBy);\n          const values: { key: ValueType; groupBy: {}[] }[] = [];\n          Object.keys(itemsGrouped).forEach((key) => {\n            values.push({\n              key,\n              groupBy: this.getValueFromOperation(\n                itemsGrouped[key],\n                options.ordinate.operation,\n                abscissa,\n                ordinate,\n                options.abscissa.limit\n              )\n            });\n          });\n          return { operation: options.ordinate.operation, values: values } as AggregationResult;\n        }\n        const values = this.getValueFromOperation(\n          items,\n          options.ordinate.operation,\n          abscissa,\n          ordinate,\n          options.abscissa.limit\n        );\n        return { operation: options.ordinate.operation, values: values } as AggregationResult;\n      })\n    );\n  }\n\n  getValueFromOperation(\n    items: Item[],\n    operation: Operation,\n    abscissa: string,\n    ordinate: string,\n    limit?: AtLimit | TimeLimit\n  ) {\n    let result: { key: ValueType; value: ValueType }[] = [];\n    const groupByAbscissa = this.groupBy(items, abscissa);\n    groupByAbscissa.map((test: any) => console.log(groupByAbscissa[test]));\n    switch (operation) {\n      case Operation.COUNT:\n        result.push(\n          ...Object.keys(groupByAbscissa).map((key) => ({\n            key: key,\n            value: groupByAbscissa[key].length\n          }))\n        );\n        break;\n      case Operation.SUM:\n        result.push(\n          ...Object.keys(groupByAbscissa).map((key) => ({\n            key: key,\n            value: this.getSum(groupByAbscissa[key], ordinate)\n          }))\n        );\n        break;\n      case Operation.DISTINCT:\n        result.push(\n          ...Object.keys(groupByAbscissa).map((key) => ({\n            key: key,\n            value: this.getDistinct(groupByAbscissa[key], ordinate)\n          }))\n        );\n        break;\n      case Operation.AVERAGE:\n        result.push(\n          ...Object.keys(groupByAbscissa).map((key) => ({\n            key: key,\n            value: this.getAverage(groupByAbscissa[key], ordinate)\n          }))\n        );\n        break;\n      case Operation.MEDIAN:\n        result.push(\n          ...Object.keys(groupByAbscissa).map((key) => ({\n            key: key,\n            value: this.getQuartile(groupByAbscissa[key], ordinate, 0.5)\n          }))\n        );\n        break;\n      case Operation.Q1:\n        result.push(\n          ...Object.keys(groupByAbscissa).map((key) => ({\n            key: key,\n            value: this.getQuartile(groupByAbscissa[key], ordinate, 0.25)\n          }))\n        );\n        break;\n      case Operation.Q3:\n        result.push(\n          ...Object.keys(groupByAbscissa).map((key) => ({\n            key: key,\n            value: this.getQuartile(groupByAbscissa[key], ordinate, 0.75)\n          }))\n        );\n        break;\n      case Operation.MIN:\n        result.push(\n          ...Object.keys(groupByAbscissa).map((key) => ({\n            key: key,\n            value: this.getMin(groupByAbscissa[key], ordinate)\n          }))\n        );\n        break;\n      default:\n        result.push(\n          ...Object.keys(groupByAbscissa).map((key) => ({\n            key: key,\n            value: this.getMax(groupByAbscissa[key], ordinate)\n          }))\n        );\n        break;\n    }\n    if (limit) {\n      result = this.formatByLimit(result, limit);\n    }\n    return result;\n  }\n\n  groupBy(items: Item[], attribute: string) {\n    let distincts: any = [];\n    items.forEach((item: Item) => {\n      let value = this.getValueFromAttribute(item, attribute);\n      if (distincts[value.value as string | number]) {\n        distincts[value.value as string | number].push(item);\n      } else {\n        distincts[value.value as string | number] = [item];\n      }\n    });\n    return distincts;\n  }\n\n  getValueFromAttribute(item: Item, attribute: string) {\n    let value = ItemUtils.getAttributeValue(item, attribute);\n    return Array.isArray(value) ? value[0] : value;\n  }\n\n  getSum(items: Item[], attribute: string) {\n    let sum: number = 0;\n    items.forEach((item) => {\n      sum += this.getValueFromAttribute(item, attribute).value as number;\n    });\n    return sum;\n  }\n\n  getMin(items: Item[], attribute: string) {\n    const result = items.reduce((prev: any, curr: any) => {\n      const prevValue = this.getValueFromAttribute(prev, attribute).value;\n      const currValue = this.getValueFromAttribute(curr, attribute).value;\n      return prevValue < currValue ? prev : curr;\n    });\n    return this.getValueFromAttribute(result, attribute).value;\n  }\n\n  getMax(items: Item[], attribute: string) {\n    const result = items.reduce((prev: any, curr: any) => {\n      const prevValue = this.getValueFromAttribute(prev, attribute).value;\n      const currValue = this.getValueFromAttribute(curr, attribute).value;\n      return prevValue > currValue ? prev : curr;\n    });\n    return this.getValueFromAttribute(result, attribute).value;\n  }\n\n  getAverage(items: Item[], attribute: string) {\n    const allValues = items.map((item) => this.getValueFromAttribute(item, attribute).value as number);\n    return allValues.reduce((acc, val) => acc + val, 0) / allValues.length;\n  }\n\n  getDistinct(items: Item[], attribute: string) {\n    return [...new Set(items.map((item) => this.getValueFromAttribute(item, attribute).value))].length;\n  }\n\n  getQuartile(items: Item[], attribute: string, q: number) {\n    const allValues = items.map((item) => this.getValueFromAttribute(item, attribute).value as number);\n    const allValuesSorted = allValues.sort((a: number, b: number) => a - b);\n\n    let pos = (allValuesSorted.length - 1) * q;\n    if (pos % 1 === 0) {\n      return allValuesSorted[pos];\n    }\n\n    pos = Math.floor(pos);\n    if (allValuesSorted[pos + 1] !== undefined) {\n      return (allValuesSorted[pos] + allValuesSorted[pos + 1]) / 2;\n    }\n\n    return allValuesSorted[pos];\n  }\n\n  getPercentile(items: Item[], attribute: string, q: number) {\n    const allValues = items.map((item) => this.getValueFromAttribute(item, attribute).value as number);\n    const allValuesSorted = allValues.sort((a: number, b: number) => a - b);\n    return (\n      (100 * allValuesSorted.reduce((acc, v) => acc + (v < q ? 1 : 0) + (v === q ? 0.5 : 0), 0)) /\n      allValuesSorted.length\n    );\n  }\n\n  formatByLimit(data: { key: ValueType; value: ValueType }[], limit: AtLimit | TimeLimit) {\n    if (!limit.isTimeLimit) {\n      data\n        .sort((a, b) => (limit.order === 'asc' ? (a.value > b.value ? 1 : -1) : a.value < b.value ? 1 : -1))\n        .splice(limit.at);\n      return data;\n    }\n    return data;\n  }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport {\n  Attribute,\n  ChartAggregatedWidgetOptions,\n  Class,\n  ClassSelectors,\n  ConfigSelectors,\n  DashboardSelectors,\n  DEFAULT_NAMED_QUERY_ID,\n  EXPLORE_NAMED_QUERY_ID,\n  Field,\n  FieldSelectors,\n  FilterContext,\n  Item,\n  ItemUtils,\n  Operation,\n  ResultSets,\n  YapI18nService,\n  YapSnackbarService\n} from '@onepoint-yap/dashboard';\nimport { map, Observable, of, switchMap } from 'rxjs';\nimport { AggregationResult, YapAggregationService } from './base-aggregation.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class YapBackendAggregationService extends YapAggregationService {\n  private rs: ResultSets = {};\n  private classes: Class[] = [];\n  private fields: Field[] = [];\n  private filters: { [datasource: string]: FilterContext[] } = {};\n\n  constructor(\n    private store: Store,\n    private snackBar: YapSnackbarService,\n    private translateService: YapI18nService,\n    private httpClient: HttpClient\n  ) {\n    super();\n\n    this.store.select(DashboardSelectors.resultSets).subscribe((rs) => (this.rs = rs as ResultSets));\n    this.store.select(ClassSelectors.classes).subscribe((classes) => (this.classes = classes));\n    this.store.select(FieldSelectors.fields).subscribe((fields) => (this.fields = fields));\n    this.store.select(DashboardSelectors.filters).subscribe((filters) => (this.filters = filters));\n  }\n\n  override aggregate(datasources: string[], options: ChartAggregatedWidgetOptions): Observable<AggregationResult> {\n    const targetDatasource = datasources.find((ds) => ![DEFAULT_NAMED_QUERY_ID, EXPLORE_NAMED_QUERY_ID].includes(ds));\n\n    if (datasources.length > 1) {\n      this.snackBar.open({\n        type: 'warning',\n        message: this.translateService.instant('@yap.message.backend-only-1-datasource'),\n        timeout: 4000\n      });\n    }\n\n    if (datasources.includes(DEFAULT_NAMED_QUERY_ID) || datasources.includes(EXPLORE_NAMED_QUERY_ID)) {\n      this.snackBar.open({\n        type: 'warning',\n        message: this.translateService.instant('@yap.message.cannot-aggregate-virtual-ds'),\n        timeout: 4000\n      });\n    }\n\n    if (!options.abscissa || !options.ordinate) {\n      console.warn('Abscissa and ordinate must both be defined');\n      return of({ operation: 'none', values: [] } as AggregationResult);\n    }\n\n    if (!targetDatasource) {\n      console.warn('Aggregation needs a target datasource.');\n      return of({ operation: options.ordinate.operation, values: [] } as AggregationResult);\n    }\n\n    let params = new HttpParams();\n    if (options.abscissa.attribute) {\n      params = params.set('aggregatedBy', options.abscissa.attribute);\n    } else {\n      console.warn('Aggregation needs an aggregatedBy member.');\n      return of({ operation: options.ordinate.operation, values: [] } as AggregationResult);\n    }\n    if (options.abscissa.limit) {\n      if (options.abscissa.limit.isTimeLimit) {\n        params = params.set('dateInterval', options.abscissa.limit.interval);\n      } else {\n        params = params.set('interval', options.abscissa.limit.at);\n        params = params.set('limitOrder', options.abscissa.limit.order);\n        params = params.set('limitOthers', options.abscissa.limit.others);\n      }\n    }\n    const operation = options.ordinate.operation?.replace(/^none$/, Operation.SUM);\n    params = params.set('operation', operation);\n    if (!!options.ordinate.attribute) {\n      params = params.set('valueField', options.ordinate.attribute);\n    }\n    if (options.groupBy) {\n      params = params.set('groupBy', options.groupBy.attribute);\n    }\n    if (this.filters[targetDatasource]) {\n      this.filters[targetDatasource].forEach((filter) => {\n        params = params.append('filter', filter.attribute + ',' + filter.operator + ',' + filter.value);\n      });\n    }\n\n    return this.store.select(ConfigSelectors.dataUrl).pipe(\n      switchMap((url) =>\n        this.httpClient\n          .get<AggregationResult>(`${url}/data-sources/id/${targetDatasource}/items/aggregate`, {\n            params\n          })\n          .pipe(\n            map((result) => ({\n              ...result,\n              operation: options.ordinate.operation === Operation.NONE ? Operation.NONE : result.operation\n            }))\n          )\n      )\n    );\n  }\n\n  getValueFromAttribute(item: Item, attribute: Attribute) {\n    let value = ItemUtils.getAttributeValue(item, attribute);\n    return Array.isArray(value) ? value[0] : value;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.YapAggregationService","i7.YapWidgetAggregatedChartCssComponent","i1","map"],"mappings":"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"}