@pinelab/vendure-plugin-metrics
Version:
Vendure plugin measuring and visualizing e-commerce metrics
175 lines (166 loc) • 4.92 kB
text/typescript
import { ChangeDetectorRef, Component, OnInit } from '@angular/core';
import {
ModalService,
ProductMultiSelectorDialogComponent,
} from '@vendure/admin-ui/core';
// import { AdvancedMetricInterval } from './generated/graphql';
import { Observable } from 'rxjs';
import { ChartEntry } from './chartist/chartist.component';
import { MetricsUiService } from './metrics-ui.service';
export class MetricsWidgetComponent implements OnInit {
metrics$: Observable<ChartEntry[]> | undefined;
selectedMetric: ChartEntry | undefined;
dropDownName = 'Select Variant';
nrOfOrdersChart?: any;
selectedVariantIds: string[] = [];
selectedVariantNames: string[] = [];
loading = true;
constructor(
private changeDetectorRef: ChangeDetectorRef,
private modalService: ModalService,
private metricsService: MetricsUiService
) {}
async ngOnInit() {
this.loadChartData();
}
openProductSelectionDialog() {
this.modalService
.fromComponent(ProductMultiSelectorDialogComponent, {
size: 'xl',
locals: {
mode: 'variant',
initialSelectionIds: this.selectedVariantIds ?? [],
},
})
.subscribe((selection) => {
if (selection) {
this.selectedVariantNames = selection.map(
(s) => s.productVariantName
);
this.selectedVariantIds = selection.map((s) => s.productVariantId);
this.metricsService.selectedVariantIds$.next(this.selectedVariantIds);
this.changeDetectorRef.detectChanges();
}
});
}
clearProductVariantSelection() {
this.selectedVariantIds = [];
this.metricsService.selectedVariantIds$.next(this.selectedVariantIds);
this.selectedVariantNames = [];
this.changeDetectorRef.detectChanges();
}
loadChartData() {
this.loading = true;
this.metrics$ = this.metricsService.queryData$;
this.changeDetectorRef.detectChanges();
this.metrics$?.subscribe(async (metrics) => {
this.loading = false;
if (this.selectedMetric) {
this.selectedMetric = metrics.find(
(e) => e.summary.code == this.selectedMetric?.summary.code
);
} else {
this.selectedMetric = metrics[0];
}
this.changeDetectorRef.detectChanges();
});
this.changeDetectorRef.detectChanges();
}
}