@swimlane/ngx-charts
Version:
Declarative Charting Framework for Angular2 and beyond!
119 lines (101 loc) • 2.76 kB
text/typescript
import {
Component,
Input,
ChangeDetectionStrategy,
Output,
EventEmitter,
SimpleChanges,
OnChanges,
ChangeDetectorRef,
NgZone
} from '@angular/core';
import { formatLabel } from '../label.helper';
export class LegendComponent implements OnChanges {
data;
title;
colors;
height;
width;
activeEntries;
labelClick: EventEmitter<any> = new EventEmitter();
labelActivate: EventEmitter<any> = new EventEmitter();
labelDeactivate: EventEmitter<any> = new EventEmitter();
legendEntries: any[] = [];
constructor(private cd: ChangeDetectorRef, private zone: NgZone) { }
ngOnChanges(changes: SimpleChanges): void {
this.update();
}
update(): void {
this.zone.run(() => {
this.cd.markForCheck();
this.legendEntries = this.getLegendEntries();
});
}
getLegendEntries(): any[] {
let items = [];
for(const label of this.data) {
const formattedLabel = formatLabel(label);
let idx = items.findIndex((i) => {
return i.label === formattedLabel;
});
if (idx === -1) {
items.push({
label,
formattedLabel,
color: this.colors.getColor(label)
});
}
}
return items;
}
isActive(entry): boolean {
if(!this.activeEntries) return false;
let item = this.activeEntries.find(d => {
return entry.label === d.name;
});
return item !== undefined;
}
activate(item) {
this.zone.run(() => {
this.labelActivate.emit(item);
});
}
deactivate(item) {
this.zone.run(() => {
this.labelDeactivate.emit(item);
});
}
trackBy(index, item): string {
return item.label;
}
}