From bdca9f32a72391ae1c688fd3dc56831e5c070b2b Mon Sep 17 00:00:00 2001 From: chad-ramos Date: Fri, 22 Nov 2024 10:21:06 -0600 Subject: [PATCH] Refactor components to use Angular's inject function for dependency injection --- .../src/app/services/pc.service.ts | 6 ++-- .../src/app/app.repository.ts | 4 +-- .../layouts/jump-nav/jump-nav.component.ts | 8 +++--- .../line-area-chart.component.ts | 5 ++-- .../charts/pie-chart/pie-chart.component.ts | 6 ++-- .../bar-horizontal-chart.builder.ts | 28 +++++++++++++------ .../bar-horizontal-chart.component.ts | 18 +++--------- .../bar-vertical-chart.builder.ts | 28 +++++++++++++------ .../bar-vertical-chart.component.ts | 18 +++--------- projects/pioneer-charts/src/lib/core/chart.ts | 18 ++++++------ .../line-area-chart.builder.ts | 28 +++++++++++++------ .../line-area-chart.component.ts | 18 +++--------- .../src/lib/pie-chart/pie-chart.builder.ts | 28 +++++++++++++------ .../src/lib/pie-chart/pie-chart.component.ts | 18 +++--------- 14 files changed, 119 insertions(+), 112 deletions(-) diff --git a/projects/pioneer-charts-dev/src/app/services/pc.service.ts b/projects/pioneer-charts-dev/src/app/services/pc.service.ts index dc4f53d..262388c 100644 --- a/projects/pioneer-charts-dev/src/app/services/pc.service.ts +++ b/projects/pioneer-charts-dev/src/app/services/pc.service.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@angular/core'; +import { Injectable, inject } from '@angular/core'; import { PcacLineAreaChartConfig, PcacData, @@ -13,6 +13,8 @@ import { PcRepository } from './pc.repository'; providedIn: 'root', }) export class PcService { + private repository = inject(PcRepository); + barVerticalChartConfig!: PcacBarVerticalChartConfig; barVerticalChartSingleConfig!: PcacBarVerticalChartConfig; barVerticalChartGroupConfig!: PcacBarVerticalChartConfig; @@ -30,8 +32,6 @@ export class PcService { currentDocRoute = 'bar-chart'; navDisplay = 'none'; - constructor(private repository: PcRepository) { } - onClicked(data: any) { alert(`Key: ${data.key} - Value: ${data.value}`); } diff --git a/projects/pioneer-charts-web/src/app/app.repository.ts b/projects/pioneer-charts-web/src/app/app.repository.ts index c32be19..cb71082 100644 --- a/projects/pioneer-charts-web/src/app/app.repository.ts +++ b/projects/pioneer-charts-web/src/app/app.repository.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@angular/core'; +import { Injectable, inject } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { PcacBarHorizontalChartConfig, @@ -13,8 +13,8 @@ import { providedIn: 'root', }) export class AppRepository { + private http = inject(HttpClient); - constructor(private http: HttpClient) { } /** * Bar Charts Horizontal diff --git a/projects/pioneer-charts-web/src/app/layouts/jump-nav/jump-nav.component.ts b/projects/pioneer-charts-web/src/app/layouts/jump-nav/jump-nav.component.ts index e35b927..0723a80 100644 --- a/projects/pioneer-charts-web/src/app/layouts/jump-nav/jump-nav.component.ts +++ b/projects/pioneer-charts-web/src/app/layouts/jump-nav/jump-nav.component.ts @@ -1,5 +1,5 @@ import { NgClass } from '@angular/common'; -import { Component, Input, OnInit, AfterViewChecked } from '@angular/core'; +import { Component, Input, OnInit, AfterViewChecked, inject } from '@angular/core'; import { Router, RouterLink } from '@angular/router'; export enum JumpNavLevel { @@ -24,13 +24,13 @@ export interface IJumpNav { ] }) export class JumpNavComponent implements OnInit, AfterViewChecked { + private route = inject(Router); + @Input() jumpNav: IJumpNav[] = [] currentRoute: string[] = [] fragment!: string; - constructor( - private route: Router - ) { + constructor() { this.route.events.subscribe((res) => { this.currentRoute = [this.route.url]; if (this.currentRoute[0].includes('#')) { diff --git a/projects/pioneer-charts-web/src/app/pages/docs/components/charts/line-area-chart/line-area-chart.component.ts b/projects/pioneer-charts-web/src/app/pages/docs/components/charts/line-area-chart/line-area-chart.component.ts index f87a156..e1b41c7 100644 --- a/projects/pioneer-charts-web/src/app/pages/docs/components/charts/line-area-chart/line-area-chart.component.ts +++ b/projects/pioneer-charts-web/src/app/pages/docs/components/charts/line-area-chart/line-area-chart.component.ts @@ -1,4 +1,4 @@ -import { Component } from '@angular/core'; +import { Component, inject } from '@angular/core'; import { AppService } from '../../../../../app.service'; import { IJumpNav, JumpNavLevel } from '../../../../../layouts/jump-nav/jump-nav.component'; import { MatCardModule } from '@angular/material/card'; @@ -23,6 +23,8 @@ import { StringifyPipe } from 'projects/pioneer-charts-web/src/app/stringify.pip ] }) export class LineAreaChartComponent { + pcService = inject(AppService); + jumpNav = [ { key: 'Line Area Chart', @@ -57,6 +59,5 @@ export class LineAreaChartComponent { ] as IJumpNav[]; markupCode = ``; importCode = `import { PcacLineAreaChartModule } from '@pioneer-code/pioneer-charts';`; - constructor(public pcService: AppService) { } } diff --git a/projects/pioneer-charts-web/src/app/pages/docs/components/charts/pie-chart/pie-chart.component.ts b/projects/pioneer-charts-web/src/app/pages/docs/components/charts/pie-chart/pie-chart.component.ts index 20a69e7..1a14dd8 100644 --- a/projects/pioneer-charts-web/src/app/pages/docs/components/charts/pie-chart/pie-chart.component.ts +++ b/projects/pioneer-charts-web/src/app/pages/docs/components/charts/pie-chart/pie-chart.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, inject } from '@angular/core'; import { AppService } from '../../../../../app.service'; import { IJumpNav, JumpNavLevel } from '../../../../../layouts/jump-nav/jump-nav.component'; import { PcacPieChartComponent } from '@pioneer-code/pioneer-charts'; @@ -23,6 +23,8 @@ import { StringifyPipe } from 'projects/pioneer-charts-web/src/app/stringify.pip ] }) export class PieChartComponent { + pcService = inject(AppService); + jumpNav = [ { key: 'Pie Chart', @@ -57,6 +59,4 @@ export class PieChartComponent { ] as IJumpNav[]; markupCode = ``; importCode = `import { PcacPieChartModule } from '@pioneer-code/pioneer-charts';`; - - constructor(public pcService: AppService) { } } diff --git a/projects/pioneer-charts/src/lib/bar-chart/bar-horizontal-chart/bar-horizontal-chart.builder.ts b/projects/pioneer-charts/src/lib/bar-chart/bar-horizontal-chart/bar-horizontal-chart.builder.ts index c255db8..b06cbb4 100644 --- a/projects/pioneer-charts/src/lib/bar-chart/bar-horizontal-chart/bar-horizontal-chart.builder.ts +++ b/projects/pioneer-charts/src/lib/bar-chart/bar-horizontal-chart/bar-horizontal-chart.builder.ts @@ -1,4 +1,4 @@ -import { Injectable, ElementRef } from '@angular/core'; +import { Injectable, ElementRef, inject } from '@angular/core'; import { transition } from 'd3-transition'; import { color } from 'd3-color'; @@ -34,6 +34,12 @@ type GroupType = Selection; private yScaleStacked!: ScaleBand; @@ -43,13 +49,13 @@ export class BarHorizontalChartBuilder extends PcacChart { private cachedMargins: any; barClicked$ = this.barClickedSource.asObservable(); - constructor( - public override axisBuilder: PcacAxisBuilder, - public override gridBuilder: PcacGridBuilder, - public override transitionService: PcacTransitionService, - public override tooltipBuilder: PcacTooltipBuilder, - public override colorService: PcacColorService - ) { + constructor() { + const axisBuilder = inject(PcacAxisBuilder); + const gridBuilder = inject(PcacGridBuilder); + const transitionService = inject(PcacTransitionService); + const tooltipBuilder = inject(PcacTooltipBuilder); + const colorService = inject(PcacColorService); + super( axisBuilder, gridBuilder, @@ -57,6 +63,12 @@ export class BarHorizontalChartBuilder extends PcacChart { tooltipBuilder, colorService ); + this.axisBuilder = axisBuilder; + this.gridBuilder = gridBuilder; + this.transitionService = transitionService; + this.tooltipBuilder = tooltipBuilder; + this.colorService = colorService; + } buildChart(chartElm: ElementRef, config: PcacBarHorizontalChartConfig): void { diff --git a/projects/pioneer-charts/src/lib/bar-chart/bar-horizontal-chart/bar-horizontal-chart.component.ts b/projects/pioneer-charts/src/lib/bar-chart/bar-horizontal-chart/bar-horizontal-chart.component.ts index ea28cc0..d1ff833 100644 --- a/projects/pioneer-charts/src/lib/bar-chart/bar-horizontal-chart/bar-horizontal-chart.component.ts +++ b/projects/pioneer-charts/src/lib/bar-chart/bar-horizontal-chart/bar-horizontal-chart.component.ts @@ -1,14 +1,4 @@ -import { - Component, - Input, - ElementRef, - ViewChild, - OnChanges, - EventEmitter, - Output, - HostListener, - ViewEncapsulation -} from '@angular/core'; +import { Component, Input, ElementRef, ViewChild, OnChanges, EventEmitter, Output, HostListener, ViewEncapsulation, inject } from '@angular/core'; import { BarHorizontalChartBuilder } from './bar-horizontal-chart.builder'; import { PcacBarHorizontalChartConfig } from './bar-horizontal-chart.model'; import { PcacData } from '../../core'; @@ -21,15 +11,15 @@ import { PcacData } from '../../core'; standalone: true }) export class PcacBarHorizontalChartComponent implements OnChanges { + private chartBuilder = inject(BarHorizontalChartBuilder); + @Input() config!: PcacBarHorizontalChartConfig; @ViewChild('chart', { static: true }) chartElm!: ElementRef; @Output() barClicked: EventEmitter = new EventEmitter(); private resizeWindowTimeout: any; - constructor( - private chartBuilder: BarHorizontalChartBuilder, - ) { + constructor() { this.chartBuilder.barClicked$.subscribe(data => { this.barClicked.emit(data); }); diff --git a/projects/pioneer-charts/src/lib/bar-chart/bar-vertical-chart/bar-vertical-chart.builder.ts b/projects/pioneer-charts/src/lib/bar-chart/bar-vertical-chart/bar-vertical-chart.builder.ts index d3be29d..94a7237 100644 --- a/projects/pioneer-charts/src/lib/bar-chart/bar-vertical-chart/bar-vertical-chart.builder.ts +++ b/projects/pioneer-charts/src/lib/bar-chart/bar-vertical-chart/bar-vertical-chart.builder.ts @@ -1,4 +1,4 @@ -import { Injectable, ElementRef } from '@angular/core'; +import { Injectable, ElementRef, inject } from '@angular/core'; import { select, Selection, EnterElement, BaseType } from 'd3-selection'; import { scaleBand, ScaleBand, scaleLinear, ScaleLinear } from 'd3-scale'; @@ -38,19 +38,25 @@ export interface IBarVerticalChartBuilder { providedIn: 'root', }) export class BarVerticalChartBuilder extends PcacChart { + override axisBuilder: PcacAxisBuilder; + override gridBuilder: PcacGridBuilder; + override transitionService: PcacTransitionService; + override tooltipBuilder: PcacTooltipBuilder; + override colorService: PcacColorService; + private xScaleStacked!: ScaleBand; private xScaleGrouped!: ScaleBand; private yScale!: ScaleLinear; private barClickedSource = new Subject(); barClicked$ = this.barClickedSource.asObservable(); - constructor( - public override axisBuilder: PcacAxisBuilder, - public override gridBuilder: PcacGridBuilder, - public override transitionService: PcacTransitionService, - public override tooltipBuilder: PcacTooltipBuilder, - public override colorService: PcacColorService - ) { + constructor() { + const axisBuilder = inject(PcacAxisBuilder); + const gridBuilder = inject(PcacGridBuilder); + const transitionService = inject(PcacTransitionService); + const tooltipBuilder = inject(PcacTooltipBuilder); + const colorService = inject(PcacColorService); + super( axisBuilder, gridBuilder, @@ -58,6 +64,12 @@ export class BarVerticalChartBuilder extends PcacChart { tooltipBuilder, colorService ); + this.axisBuilder = axisBuilder; + this.gridBuilder = gridBuilder; + this.transitionService = transitionService; + this.tooltipBuilder = tooltipBuilder; + this.colorService = colorService; + } buildChart(chartElm: ElementRef, config: PcacBarVerticalChartConfig): void { diff --git a/projects/pioneer-charts/src/lib/bar-chart/bar-vertical-chart/bar-vertical-chart.component.ts b/projects/pioneer-charts/src/lib/bar-chart/bar-vertical-chart/bar-vertical-chart.component.ts index a228d83..ee804a3 100644 --- a/projects/pioneer-charts/src/lib/bar-chart/bar-vertical-chart/bar-vertical-chart.component.ts +++ b/projects/pioneer-charts/src/lib/bar-chart/bar-vertical-chart/bar-vertical-chart.component.ts @@ -1,14 +1,4 @@ -import { - Component, - Input, - ElementRef, - ViewChild, - OnChanges, - EventEmitter, - Output, - HostListener, - ViewEncapsulation -} from '@angular/core'; +import { Component, Input, ElementRef, ViewChild, OnChanges, EventEmitter, Output, HostListener, ViewEncapsulation, inject } from '@angular/core'; import { BarVerticalChartBuilder } from './bar-vertical-chart.builder'; import { PcacBarVerticalChartConfig } from './bar-vertical-chart.model'; import { PcacData } from '../../core'; @@ -21,15 +11,15 @@ import { PcacData } from '../../core'; standalone: true }) export class PcacBarVerticalChartComponent implements OnChanges { + private chartBuilder = inject(BarVerticalChartBuilder); + @Input() config!: PcacBarVerticalChartConfig; @ViewChild('chart', { static: true }) chartElm!: ElementRef; @Output() barClicked: EventEmitter = new EventEmitter(); private resizeWindowTimeout: any; - constructor( - private chartBuilder: BarVerticalChartBuilder - ) { + constructor() { this.chartBuilder.barClicked$.subscribe(data => { this.barClicked.emit(data); }); diff --git a/projects/pioneer-charts/src/lib/core/chart.ts b/projects/pioneer-charts/src/lib/core/chart.ts index 41b2385..200ff42 100644 --- a/projects/pioneer-charts/src/lib/core/chart.ts +++ b/projects/pioneer-charts/src/lib/core/chart.ts @@ -5,7 +5,7 @@ import { PcacGridBuilder } from './grid.builder'; import { PcacChartConfig } from './chart.model'; import { PcacColorService } from './color.service'; import { select } from 'd3-selection'; -import { ElementRef, Injectable } from '@angular/core'; +import { ElementRef, Injectable, inject } from '@angular/core'; import { PcacData } from '.'; import { PcacTransitionService } from './transition.service'; import { PcacTooltipBuilder } from './tooltip.builder'; @@ -14,21 +14,19 @@ import { PcacTooltipBuilder } from './tooltip.builder'; providedIn: 'root', }) export class PcacChart { + axisBuilder = inject(PcacAxisBuilder); + gridBuilder = inject(PcacGridBuilder); + transitionService = inject(PcacTransitionService); + tooltipBuilder = inject(PcacTooltipBuilder); + colorService = inject(PcacColorService); + margin = { top: 8, right: 16, bottom: 20, left: 40 }; svg: Selection | any; // Typing? width = 400; height = 400; colors = [] as string[]; startData = [] as any[]; // TODO: Strongly type - endData = [] as any[]; // TODO: Strongly type - - constructor( - public axisBuilder: PcacAxisBuilder, - public gridBuilder: PcacGridBuilder, - public transitionService: PcacTransitionService, - public tooltipBuilder: PcacTooltipBuilder, - public colorService: PcacColorService - ) { } + endData = [] as any[]; /** * Prior to building a chart, we need to initialize the state of the chart diff --git a/projects/pioneer-charts/src/lib/line-area-chart/line-area-chart.builder.ts b/projects/pioneer-charts/src/lib/line-area-chart/line-area-chart.builder.ts index 711b963..d4aa9fd 100644 --- a/projects/pioneer-charts/src/lib/line-area-chart/line-area-chart.builder.ts +++ b/projects/pioneer-charts/src/lib/line-area-chart/line-area-chart.builder.ts @@ -1,4 +1,4 @@ -import { Injectable, ElementRef } from '@angular/core'; +import { Injectable, ElementRef, inject } from '@angular/core'; import { ScaleTime, scaleTime } from 'd3'; import { transition } from 'd3-transition'; @@ -27,6 +27,12 @@ import { PcacData, PcacFormatEnum } from '../core/chart.model'; providedIn: 'root', }) export class LineAreaChartBuilder extends PcacChart { + override axisBuilder: PcacAxisBuilder; + override gridBuilder: PcacGridBuilder; + override transitionService: PcacTransitionService; + override tooltipBuilder: PcacTooltipBuilder; + override colorService: PcacColorService; + private line!: Line<[number, number]>; private area!: Area<[number, number]>; private xScale!: ScaleLinear | ScaleTime; @@ -35,13 +41,13 @@ export class LineAreaChartBuilder extends PcacChart { private config!: PcacLineAreaChartConfig; dotClicked$ = this.dotClickedSource.asObservable(); - constructor( - public override axisBuilder: PcacAxisBuilder, - public override gridBuilder: PcacGridBuilder, - public override transitionService: PcacTransitionService, - public override tooltipBuilder: PcacTooltipBuilder, - public override colorService: PcacColorService - ) { + constructor() { + const axisBuilder = inject(PcacAxisBuilder); + const gridBuilder = inject(PcacGridBuilder); + const transitionService = inject(PcacTransitionService); + const tooltipBuilder = inject(PcacTooltipBuilder); + const colorService = inject(PcacColorService); + super( axisBuilder, gridBuilder, @@ -49,6 +55,12 @@ export class LineAreaChartBuilder extends PcacChart { tooltipBuilder, colorService ); + this.axisBuilder = axisBuilder; + this.gridBuilder = gridBuilder; + this.transitionService = transitionService; + this.tooltipBuilder = tooltipBuilder; + this.colorService = colorService; + } buildChart(chartElm: ElementRef, config: PcacLineAreaChartConfig): void { diff --git a/projects/pioneer-charts/src/lib/line-area-chart/line-area-chart.component.ts b/projects/pioneer-charts/src/lib/line-area-chart/line-area-chart.component.ts index 4ad2af4..6c9ca49 100644 --- a/projects/pioneer-charts/src/lib/line-area-chart/line-area-chart.component.ts +++ b/projects/pioneer-charts/src/lib/line-area-chart/line-area-chart.component.ts @@ -1,14 +1,4 @@ -import { - Component, - Input, - ViewChild, - ElementRef, - EventEmitter, - Output, - HostListener, - ViewEncapsulation, - SimpleChanges -} from '@angular/core'; +import { Component, Input, ViewChild, ElementRef, EventEmitter, Output, HostListener, ViewEncapsulation, SimpleChanges, inject } from '@angular/core'; import { PcacLineAreaChartConfig } from './line-area-chart.model'; import { LineAreaChartBuilder } from './line-area-chart.builder'; @@ -22,15 +12,15 @@ import { PcacData } from '../core'; standalone: true }) export class PcacLineAreaChartComponent { + private chartBuilder = inject(LineAreaChartBuilder); + @Input() config!: PcacLineAreaChartConfig; @ViewChild('chart', { static: true }) chartElm!: ElementRef; @Output() dotClicked: EventEmitter = new EventEmitter(); private resizeWindowTimeout: any; - constructor( - private chartBuilder: LineAreaChartBuilder - ) { + constructor() { this.chartBuilder.dotClicked$.subscribe(data => { this.dotClicked.emit(data); }); diff --git a/projects/pioneer-charts/src/lib/pie-chart/pie-chart.builder.ts b/projects/pioneer-charts/src/lib/pie-chart/pie-chart.builder.ts index 8a77a5a..53e8fec 100644 --- a/projects/pioneer-charts/src/lib/pie-chart/pie-chart.builder.ts +++ b/projects/pioneer-charts/src/lib/pie-chart/pie-chart.builder.ts @@ -1,4 +1,4 @@ -import { Injectable, ElementRef } from '@angular/core'; +import { Injectable, ElementRef, inject } from '@angular/core'; /** * D3 @@ -28,6 +28,12 @@ import { Subject } from 'rxjs'; providedIn: 'root', }) export class PieChartBuilder extends PcacChart { + override axisBuilder: PcacAxisBuilder; + override gridBuilder: PcacGridBuilder; + override transitionService: PcacTransitionService; + override tooltipBuilder: PcacTooltipBuilder; + override colorService: PcacColorService; + private radius!: number; private arcShape!: Arc | any; private arcOverShape!: Arc | any; @@ -35,13 +41,13 @@ export class PieChartBuilder extends PcacChart { private sliceClickedSource = new Subject(); sliceClicked$ = this.sliceClickedSource.asObservable(); - constructor( - public override axisBuilder: PcacAxisBuilder, - public override gridBuilder: PcacGridBuilder, - public override transitionService: PcacTransitionService, - public override tooltipBuilder: PcacTooltipBuilder, - public override colorService: PcacColorService - ) { + constructor() { + const axisBuilder = inject(PcacAxisBuilder); + const gridBuilder = inject(PcacGridBuilder); + const transitionService = inject(PcacTransitionService); + const tooltipBuilder = inject(PcacTooltipBuilder); + const colorService = inject(PcacColorService); + super( axisBuilder, gridBuilder, @@ -49,6 +55,12 @@ export class PieChartBuilder extends PcacChart { tooltipBuilder, colorService ); + this.axisBuilder = axisBuilder; + this.gridBuilder = gridBuilder; + this.transitionService = transitionService; + this.tooltipBuilder = tooltipBuilder; + this.colorService = colorService; + } buildChart(chartElm: ElementRef, config: PcacPieChartConfig): void { diff --git a/projects/pioneer-charts/src/lib/pie-chart/pie-chart.component.ts b/projects/pioneer-charts/src/lib/pie-chart/pie-chart.component.ts index 49a9098..8de7bae 100644 --- a/projects/pioneer-charts/src/lib/pie-chart/pie-chart.component.ts +++ b/projects/pioneer-charts/src/lib/pie-chart/pie-chart.component.ts @@ -1,14 +1,4 @@ -import { - Component, - Input, - ViewChild, - ElementRef, - OnChanges, - Output, - EventEmitter, - HostListener, - ViewEncapsulation -} from '@angular/core'; +import { Component, Input, ViewChild, ElementRef, OnChanges, Output, EventEmitter, HostListener, ViewEncapsulation, inject } from '@angular/core'; import { PcacPieChartConfig } from './pie-chart.model'; import { PieChartBuilder } from './pie-chart.builder'; import { PcacData } from '../core'; @@ -21,15 +11,15 @@ import { PcacData } from '../core'; standalone: true }) export class PcacPieChartComponent implements OnChanges { + private chartBuilder = inject(PieChartBuilder); + @Input() config!: PcacPieChartConfig; @ViewChild('chart', { static: true }) chartElm!: ElementRef; @Output() sliceClicked: EventEmitter = new EventEmitter(); private resizeWindowTimeout: any; - constructor( - private chartBuilder: PieChartBuilder - ) { + constructor() { this.chartBuilder.sliceClicked$.subscribe(data => { this.sliceClicked.emit(data); });