---|qcm| Mise à jour V17 et QCM

This commit is contained in:
Rampeur
2024-05-04 02:08:04 +02:00
parent fa93c0c8f2
commit 6dece821a8
241 changed files with 27526 additions and 6520 deletions
@@ -0,0 +1,142 @@
import { DatePipe } from '@angular/common';
import { trigger, state, style, animate, transition } from '@angular/animations';
import { Component, DestroyRef, inject, OnInit, OnDestroy } from '@angular/core';
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
import { ActivatedRoute } from '@angular/router';
import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card';
import { MatDividerModule } from '@angular/material/divider';
import { MatExpansionModule } from '@angular/material/expansion';
import { MatGridListModule } from '@angular/material/grid-list';
import { MatIconModule } from '@angular/material/icon';
import { MatMenuModule } from '@angular/material/menu';
import { Observable, Subscription } from 'rxjs';
import { MenuItems } from 'src/app/components/shared';
import { HistoryTableComponent } from 'src/app/components/shared/helpers-jump';
import { BarsChartComponent, PieChartComponent } from 'src/app/components/shared/helpers-chart';
import { Jump, CanopiesPageData } from 'src/app/core/models';
import { UtilitiesService } from 'src/app/core/services';
import { CanopyBySize, CanopyByYear, CanopyModelBySize, CanopyModelByYear } from 'src/app/core/models';
@Component({
selector: 'app-canopy',
standalone: true,
imports: [
DatePipe,
MatButtonModule, MatCardModule, MatDividerModule, MatExpansionModule,
MatGridListModule, MatIconModule, MatMenuModule,
HistoryTableComponent, BarsChartComponent, PieChartComponent
],
templateUrl: './canopy.component.html',
styleUrl: './canopy.component.scss',
animations: [
trigger('flyInOut', [
state('in', style({ transform: 'translateX(0)' })),
transition('void => *', [
style({ transform: 'translateX(-100%)' }),
animate(200)
]),
transition('* => void', [
style({ transform: 'translateX(100%)' }),
animate(200)
])
])
]
})
export class CanopyComponent implements OnInit, OnDestroy {
private _data: Subscription = new Subscription();
private _canopiesModelBySize!: Array<CanopyModelBySize>;
private _canopiesModelByYear!: Array<CanopyModelByYear>;
private _canopiesSizeBySize!: Array<CanopyBySize>;
private _canopiesSizeByYear!: Array<CanopyByYear>;
public lastJump: Jump = {} as Jump;
public title = 'Voiles';
public subtitle: string = 'Nombre total de sauts par modèle et taille';
public displayCharts = false;
public destroyRef = inject(DestroyRef);
public seriesModelHeader: string[] = [];
public seriesModelName: string[] = [];
public seriesModelValue: number[] = [];
public seriesModelRow: Array<Array<number>> = [];
public seriesSizeHeader: string[] = [];
public seriesSizeName: string[] = [];
public seriesSizeValue: number[] = [];
public seriesSizeRow: Array<Array<number>> = [];
public seriesColor: {
backgroundColor: string[],
borderColor: string[]
} = {
backgroundColor: this._utilitiesService.getSeriesColors(0.8, 'all'),
borderColor: this._utilitiesService.getSeriesColors(1, 'all')
};
public seriesColorClass: string[] = this._utilitiesService.getChartColors();
constructor(
private route: ActivatedRoute,
private _utilitiesService: UtilitiesService,
public menuItems: MenuItems
) { }
ngOnInit() {
const data$: Observable<{ canopiesPageData: CanopiesPageData }> = this.route.data as Observable<{ canopiesPageData: CanopiesPageData }>;
this._data = data$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((data: { canopiesPageData: CanopiesPageData }) => {
const pageData: CanopiesPageData = data.canopiesPageData;
this.lastJump = pageData.lastjump;
this._loadCanopyBySize(pageData);
this._loadCanopyModelBySize(pageData);
});
}
ngOnDestroy() {
this._data.unsubscribe();
}
private _loadCanopyBySize(pageData: CanopiesPageData): void {
this._canopiesSizeBySize = pageData.canopiesBySize.map((row: CanopyBySize) => {
this.seriesSizeName.push(row.taille.toString());
this.seriesSizeValue.push(row.count);
return row;
});
this._loadCanopyByYear(pageData);
}
private _loadCanopyByYear(pageData: CanopiesPageData): void {
this.seriesSizeHeader = ['2018', '2019', '2020', '2021', '2022', '2023', '2024'];
const values: Array<number> = this.seriesSizeHeader.map(() => 0);
this.seriesSizeName.forEach(() => {
this.seriesSizeRow.push([...values]);
});
this._canopiesSizeByYear = pageData.canopiesBySizeByYear.map((row: CanopyByYear) => {
const taille: string = row.taille.toString();
const year: string = row.year.toString();
this.seriesSizeRow[this.seriesSizeName.indexOf(taille)][this.seriesSizeHeader.indexOf(year)] = row.count;
return row;
});
}
private _loadCanopyModelBySize(pageData: CanopiesPageData): void {
this._canopiesModelBySize = pageData.canopiesBySizeByModel.map((row: CanopyModelBySize) => {
this.seriesModelName.push(`${row.taille.toString()} - ${row.voile}`);
this.seriesModelValue.push(row.count);
return row;
});
this._loadCanopyModelByYear(pageData);
}
private _loadCanopyModelByYear(pageData: CanopiesPageData): void {
this.seriesModelHeader = ['2018', '2019', '2020', '2021', '2022', '2023', '2024'];
const values: Array<number> = this.seriesModelHeader.map(() => 0);
this.seriesModelName.forEach(() => {
this.seriesModelRow.push([...values]);
});
this._canopiesModelByYear = pageData.canopiesBySizeByModelByYear.map((row: CanopyModelByYear) => {
const voile: string = row.voile;
const taille: string = row.taille.toString();
const year: string = row.year.toString();
this.seriesModelRow[this.seriesModelName.indexOf(`${taille} - ${voile}`)][this.seriesModelHeader.indexOf(year)] = row.count;
return row;
});
this.displayCharts = true;
}
}