import { AfterContentInit, Component, ContentChild, ElementRef, Input, OnChanges, TemplateRef } from '@angular/core'; import { RdComponent } from '../../base/rdComponent'; import { ScriptLoaderService } from '../../library/script-loader.service'; import { StyleLoaderService } from '../../library/style-loader.service'; export interface IProgresPieSettings { // first: number; // -> start-value // goal: number; // -> end-value min: number; max: number; width: number; // rem // size: number; // ?? barcolor?: string; // hex barsize?: number; trackcolor?: string; // hex fillcolor?: string; // hex speed?: number; easing?: string; // https://easings.net/ style?: { element: string; number: string; label: string; content: string; }, numberCallback?: Function, contentCallback?: Function } @Component({ selector: 'rd-pp-content', template: ` ` }) export class ProgresPieContent extends RdComponent { @ContentChild(TemplateRef) template; } @Component({ selector: 'rd-progress-pie', template: `
` }) export class ProgressPie extends RdComponent implements OnChanges, AfterContentInit { constructor(private element: ElementRef, private _script: ScriptLoaderService, private _style: StyleLoaderService) { super(); this._style.load(["./assets/css/progressPie.min.css"]); this._script.load(["./assets/js/progressPie.min.js"]); } @Input("rd-start-value") startValue; @Input("rd-end-value") endValue; @Input('rd-settings') settings: IProgresPieSettings; @ContentChild(ProgresPieContent) content; showNumberContent = true; baseSettings: IProgresPieSettings = { min: 0, max: 100, width: 10 }; ngOnChanges(changes) { if (changes.startValue || changes.endValue) { this.jQuery(this.element.nativeElement).find(".pie_progress").asPieProgress({ namespace: 'pie_progress', first: this.startValue || 0, goal: this.endValue || 0, ...this.baseSettings, ...this.settings }).asPieProgress("reset").asPieProgress("start"); } } ngAfterContentInit() { if (this.content) this.showNumberContent = false; } }