Refactoring

This commit is contained in:
Rampeur
2024-05-08 23:46:08 +02:00
parent 7c3f0c9648
commit d1870adff6
54 changed files with 227 additions and 282 deletions
@@ -1,23 +0,0 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AeronefComponent } from './aeronef.component';
describe('AeronefComponent', () => {
let component: AeronefComponent;
let fixture: ComponentFixture<AeronefComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [AeronefComponent]
})
.compileComponents();
fixture = TestBed.createComponent(AeronefComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -1,25 +1,23 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { AeronefsComponent } from './aeronefs.component';
describe('AeronefsComponent', () => {
let component: AeronefsComponent;
let fixture: ComponentFixture<AeronefsComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [AeronefsComponent]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AeronefsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AeronefsComponent } from './aeronefs.component';
describe('AeronefsComponent', () => {
let component: AeronefsComponent;
let fixture: ComponentFixture<AeronefsComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [AeronefsComponent]
})
.compileComponents();
fixture = TestBed.createComponent(AeronefsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -21,7 +21,7 @@ import { UtilitiesService } from 'src/app/core/services';
import { AeronefByImat, AeronefByYear } from 'src/app/core/models';
@Component({
selector: 'app-aeronef',
selector: 'app-aeronefs',
standalone: true,
imports: [
DatePipe,
@@ -29,8 +29,8 @@ import { AeronefByImat, AeronefByYear } from 'src/app/core/models';
MatExpansionModule, MatGridListModule, MatIconModule, MatMenuModule,
BarsChartComponent, HistoryTableComponent, PieChartComponent
],
templateUrl: './aeronef.component.html',
styleUrl: './aeronef.component.scss',
templateUrl: './aeronefs.component.html',
styleUrl: './aeronefs.component.scss',
animations: [
trigger('flyInOut', [
state('in', style({ transform: 'translateX(0)' })),
@@ -45,7 +45,7 @@ import { AeronefByImat, AeronefByYear } from 'src/app/core/models';
])
]
})
export class AeronefComponent implements OnInit, OnDestroy {
export class AeronefsComponent implements OnInit, OnDestroy {
private _data: Subscription = new Subscription();
private _aeronefsByImat!: Array<AeronefByImat>;
private _aeronefsByYear!: Array<AeronefByYear>;
@@ -1,18 +1,18 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { CanopyComponent } from './canopy.component';
import { CanopiesComponent } from './canopies.component';
describe('CanopyComponent', () => {
let component: CanopyComponent;
let fixture: ComponentFixture<CanopyComponent>;
describe('CanopiesComponent', () => {
let component: CanopiesComponent;
let fixture: ComponentFixture<CanopiesComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [CanopyComponent]
imports: [CanopiesComponent]
})
.compileComponents();
fixture = TestBed.createComponent(CanopyComponent);
fixture = TestBed.createComponent(CanopiesComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
@@ -20,7 +20,7 @@ import { UtilitiesService } from 'src/app/core/services';
import { CanopyBySize, CanopyByYear, CanopyModelBySize, CanopyModelByYear } from 'src/app/core/models';
@Component({
selector: 'app-canopy',
selector: 'app-canopies',
standalone: true,
imports: [
DatePipe,
@@ -28,8 +28,8 @@ import { CanopyBySize, CanopyByYear, CanopyModelBySize, CanopyModelByYear } from
MatGridListModule, MatIconModule, MatMenuModule,
HistoryTableComponent, BarsChartComponent, PieChartComponent
],
templateUrl: './canopy.component.html',
styleUrl: './canopy.component.scss',
templateUrl: './canopies.component.html',
styleUrl: './canopies.component.scss',
animations: [
trigger('flyInOut', [
state('in', style({ transform: 'translateX(0)' })),
@@ -44,7 +44,7 @@ import { CanopyBySize, CanopyByYear, CanopyModelBySize, CanopyModelByYear } from
])
]
})
export class CanopyComponent implements OnInit, OnDestroy {
export class CanopiesComponent implements OnInit, OnDestroy {
private _data: Subscription = new Subscription();
private _canopiesModelBySize!: Array<CanopyModelBySize>;
private _canopiesModelByYear!: Array<CanopyModelByYear>;
@@ -11,15 +11,15 @@
</div>
<div class="row mt-sm-2 mt-lg-3">
<div class="col-md-4 col-sm-12">
<app-drop-zones></app-drop-zones>
<app-dropzones-pie></app-dropzones-pie>
</div>
<div class="col-md-8 col-sm-12">
<app-drop-zones-bar></app-drop-zones-bar>
<app-dropzones-bar></app-dropzones-bar>
</div>
</div>
<div class="row mt-sm-2 mt-lg-3">
<div class="col-md-4 col-sm-12">
<app-aeronefs></app-aeronefs>
<app-aeronefs-pie></app-aeronefs-pie>
</div>
<div class="col-md-8 col-sm-12">
<app-aeronefs-bar></app-aeronefs-bar>
@@ -27,10 +27,10 @@
</div>
<div class="row mt-sm-2 mt-lg-3">
<div class="col-md-6 col-sm-12">
<app-canopy-models></app-canopy-models>
<app-canopies-models></app-canopies-models>
</div>
<div class="col-md-6 col-sm-12">
<app-canopy-sizes></app-canopy-sizes>
<app-canopies-sizes></app-canopies-sizes>
</div>
</div>
</ng-container>
@@ -12,9 +12,9 @@ import { Aeronef, AeronefByImat, Canopy, CanopyModelBySize, DropZone, DropZoneBy
import { JumpsService, UserService } from 'src/app/core/services';
import { ShowAuthedDirective } from 'src/app/components/shared/show-authed.directive';
import {
AeronefsComponent, AeronefsBarComponent,
CanopyModelsComponent, CanopySizesComponent,
DropZonesComponent, DropZonesBarComponent,
AeronefsPieComponent, AeronefsBarComponent,
CanopiesModelsComponent, CanopiesSizesComponent,
DropzonesPieComponent, DropzonesBarComponent,
JumpsByMonthComponent
} from 'src/app/components/shared/dashboard-components';
@@ -22,9 +22,9 @@ import {
standalone: true,
imports: [
DatePipe, ShowAuthedDirective, MatDividerModule,
AeronefsComponent, AeronefsBarComponent,
CanopyModelsComponent, CanopySizesComponent,
DropZonesComponent, DropZonesBarComponent,
AeronefsPieComponent, AeronefsBarComponent,
CanopiesModelsComponent, CanopiesSizesComponent,
DropzonesPieComponent, DropzonesBarComponent,
JumpsByMonthComponent
],
selector: 'app-dashboard',
@@ -1,18 +1,18 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { DropzoneComponent } from './dropzone.component';
import { DropzonesComponent } from './dropzones.component';
describe('DropzoneComponent', () => {
let component: DropzoneComponent;
let fixture: ComponentFixture<DropzoneComponent>;
describe('DropzonesComponent', () => {
let component: DropzonesComponent;
let fixture: ComponentFixture<DropzonesComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [DropzoneComponent]
imports: [DropzonesComponent]
})
.compileComponents();
fixture = TestBed.createComponent(DropzoneComponent);
fixture = TestBed.createComponent(DropzonesComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
@@ -21,7 +21,7 @@ import { DropZoneByOaci, DropZoneByYear, DropZonesPageData, Jump } from 'src/app
import { UtilitiesService } from 'src/app/core/services';
@Component({
selector: 'app-dropzone',
selector: 'app-dropzones',
standalone: true,
imports: [
DatePipe,
@@ -30,8 +30,8 @@ import { UtilitiesService } from 'src/app/core/services';
//ChartistModule,
HistoryTableComponent, BarsChartComponent, PieChartComponent
],
templateUrl: './dropzone.component.html',
styleUrl: './dropzone.component.scss',
templateUrl: './dropzones.component.html',
styleUrl: './dropzones.component.scss',
animations: [
trigger('flyInOut', [
state('in', style({ transform: 'translateX(0)' })),
@@ -46,7 +46,7 @@ import { UtilitiesService } from 'src/app/core/services';
])
]
})
export class DropzoneComponent implements OnInit, OnDestroy {
export class DropzonesComponent implements OnInit, OnDestroy {
private _data: Subscription = new Subscription();
private _lastjump: Subscription = new Subscription();
private _dropzonesByOaci!: Array<DropZoneByOaci>;
+3 -3
View File
@@ -1,9 +1,9 @@
export * from './auth/auth.component';
export * from './aeronef/aeronef.component';
export * from './aeronefs/aeronefs.component';
export * from './calculator/calculator.component';
export * from './canopy/canopy.component';
export * from './canopies/canopies.component';
export * from './dashboard/dashboard.component';
export * from './dropzone/dropzone.component';
export * from './dropzones/dropzones.component';
export * from './home/home.component';
export * from './jump/jump.component';
export * from './jumps/jumps.component';
+38 -38
View File
@@ -23,6 +23,44 @@
</div>
<mat-divider class="my-3"></mat-divider>
<mat-card>
<mat-card-header>
<mat-card-title>Types de sauts</mat-card-title>
</mat-card-header>
<mat-card-content class="mt-2">
@if(displayCharts) {
<div class="row">
<div class="col-xs-12">
<app-line-chart [headers]="seriesTypesHeader" [names]="seriesTypesName" [values]="seriesTypesRowCumulated" [colors]="seriesTypesColor" [legend]="true" [hideZero]="true"></app-line-chart>
</div>
</div>
<mat-divider class="mt-2 mb-3"></mat-divider>
<div class="row">
@for (item of getCategories(); track $index) {
<div class="col-lg-2 col-sm-4 col-xs-6">
<app-circle-chart [headers]="seriesHeader" [names]="seriesName" [values]="[item.count, (lastJump.numero-item.count)]" [color]="$index" [label]="item.categorie"></app-circle-chart>
</div>
}
@for (item of getModules(); track $index) {
<div class="col-lg-2 col-sm-4 col-xs-6">
<app-circle-chart [headers]="seriesHeader" [names]="seriesName" [values]="[item.count, (lastJump.numero-item.count)]" [color]="getModuleColor($index)" [label]="item.module"></app-circle-chart>
</div>
}
</div>
<mat-divider class="my-3"></mat-divider>
<!--
<div class="row">
<div class="col-xxl-6 col-xs-12">
<app-line-chart [headers]="seriesTypesHeader" [names]="seriesTypesName" [values]="seriesTypesRow" [colors]="seriesTypesColor" [legend]="true"></app-line-chart>
</div>
<div class="col-xxl-6 col-xs-12">
<app-line-chart [headers]="seriesTypesHeader" [names]="seriesTypesName" [values]="seriesTypesRowCumulated" [colors]="seriesTypesColor" [legend]="true"></app-line-chart>
</div>
</div>
-->
}
</mat-card-content>
</mat-card>
<mat-card class="mt-3">
<mat-card-header>
<mat-card-title>{{ subtitle }}</mat-card-title>
</mat-card-header>
@@ -89,42 +127,4 @@
</div>
</mat-card-content>
</mat-card>
<mat-card class="mt-3">
<mat-card-header>
<mat-card-title>Types de sauts</mat-card-title>
</mat-card-header>
<mat-card-content class="mt-2">
@if(displayCharts) {
<div class="row">
<div class="col-xs-12">
<app-line-chart [headers]="seriesTypesHeader" [names]="seriesTypesName" [values]="seriesTypesRowCumulated" [colors]="seriesTypesColor" [legend]="true"></app-line-chart>
</div>
</div>
<mat-divider class="mt-2 mb-3"></mat-divider>
<div class="row">
@for (item of getCategories(); track $index) {
<div class="col-lg-2 col-sm-4 col-xs-6">
<app-circle-chart [headers]="seriesHeader" [names]="seriesName" [values]="[item.count, (lastJump.numero-item.count)]" [color]="$index" [label]="item.categorie"></app-circle-chart>
</div>
}
@for (item of getModules(); track $index) {
<div class="col-lg-2 col-sm-4 col-xs-6">
<app-circle-chart [headers]="seriesHeader" [names]="seriesName" [values]="[item.count, (lastJump.numero-item.count)]" [color]="getModuleColor($index)" [label]="item.module"></app-circle-chart>
</div>
}
</div>
<mat-divider class="my-3"></mat-divider>
<!--
<div class="row">
<div class="col-xxl-6 col-xs-12">
<app-line-chart [headers]="seriesTypesHeader" [names]="seriesTypesName" [values]="seriesTypesRow" [colors]="seriesTypesColor" [legend]="true"></app-line-chart>
</div>
<div class="col-xxl-6 col-xs-12">
<app-line-chart [headers]="seriesTypesHeader" [names]="seriesTypesName" [values]="seriesTypesRowCumulated" [colors]="seriesTypesColor" [legend]="true"></app-line-chart>
</div>
</div>
-->
}
</mat-card-content>
</mat-card>
</div>
+3 -5
View File
@@ -28,11 +28,9 @@
<div class="mx-3 my-5">
<mat-progress-bar [mode]="loading ? 'query' : 'determinate'" [value]="loading ? 0 : (totalAnswer/questionsCount*100)" color="accent"></mat-progress-bar>
<mat-progress-bar class="mt-0" [mode]="loading ? 'query' : 'determinate'" [value]="loading ? 0 : ((timeProgress/timeMax)*100)" [color]="timeProgressColor"></mat-progress-bar>
<ol class="squareItem clearfix">
@for (category of qcm.categories; track category.num) {
@for (question of category.questions; track question.num) {
<li class="rounded-0">{{ question.num }}</li>
}
<ol class="squareItems clearfix">
@for (answer of answers; track $index) {
<li [class]="answer">{{ ($index + 1) }}</li>
}
</ol>
</div>
+1 -1
View File
@@ -1,7 +1,7 @@
/* QCM */
@use 'variable' as var;
ol.squareItem {
ol.squareItems {
padding: 0;
margin: 1rem 0;
li {
+5 -1
View File
@@ -16,7 +16,7 @@ import { take } from 'rxjs/operators';
import { MenuItems } from 'src/app/components/shared';
import { ListErrorsComponent } from 'src/app/components/shared';
import { Errors, Qcm, QcmCategory, QcmQuestion, User } from 'src/app/core/models';
import { Errors, Qcm, QcmCategory, QcmQuestion, QcmQuestionState, User } from 'src/app/core/models';
import { QcmService, UserService } from 'src/app/core/services';
import data from 'src/qcm-bpa.json';
@@ -47,6 +47,7 @@ export class QcmComponent implements OnInit, OnDestroy {
public destroyRef = inject(DestroyRef);
public expandedIndex = 0;
public questionsCount = 0;
public answers: Array<QcmQuestionState> = [];
public qcmForm!: FormGroup;
public loading = true;
public totalAnswer = 0;
@@ -131,6 +132,7 @@ export class QcmComponent implements OnInit, OnDestroy {
id: [question.num],
choice: ['']
});
this.answers.push(QcmQuestionState.UNANSWERED);
this.questions.push(item);
}
@@ -146,8 +148,10 @@ export class QcmComponent implements OnInit, OnDestroy {
this.qcm.categories[(category.num-1)].questions[(question.num-1)].choices.forEach(choice => {
if (choice.index === value) {
if (choice.correct) {
this.answers[(question.num-1)] = QcmQuestionState.VALID;
console.log(`Réponse à la question ${question.num} de la catégorie ${category.num} : correcte`);
} else {
this.answers[(question.num-1)] = QcmQuestionState.ERROR;
console.log(`Réponse à la question ${question.num} de la catégorie ${category.num} : incorrecte`);
}
}
@@ -0,0 +1,25 @@
import { waitForAsync, ComponentFixture, TestBed } from '@angular/core/testing';
import { AeronefsPieComponent } from './aeronefs-pie.component';
describe('AeronefsPieComponent', () => {
let component: AeronefsPieComponent;
let fixture: ComponentFixture<AeronefsPieComponent>;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
imports: [AeronefsPieComponent]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AeronefsPieComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
@@ -16,16 +16,16 @@ import { UtilitiesService, AeronefsService } from 'src/app/core/services';
import { AeronefByImat, AeronefByYear } from 'src/app/core/models';
@Component({
selector: 'app-aeronefs',
selector: 'app-aeronefs-pie',
standalone: true,
imports: [
MatBadgeModule, MatButtonModule, MatCardModule, MatDividerModule,
MatExpansionModule, MatIconModule, MatMenuModule,
HistoryTableComponent, PieChartComponent
],
templateUrl: './aeronefs.component.html'
templateUrl: './aeronefs-pie.component.html'
})
export class AeronefsComponent implements OnInit, OnDestroy {
export class AeronefsPieComponent implements OnInit, OnDestroy {
private _aeronefByImat: Subscription = new Subscription();
private _aeronefByYear: Subscription = new Subscription();
private _aeronefsByImat!: Array<AeronefByImat>;
@@ -1,20 +1,20 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { DropZonesComponent } from './drop-zones.component';
import { CanopiesModelsComponent } from './canopies-models.component';
describe('DropZonesComponent', () => {
let component: DropZonesComponent;
let fixture: ComponentFixture<DropZonesComponent>;
describe('CanopiesModelsComponent', () => {
let component: CanopiesModelsComponent;
let fixture: ComponentFixture<CanopiesModelsComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [DropZonesComponent]
TestBed.configureTestingModule({
imports: [CanopiesModelsComponent]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(DropZonesComponent);
fixture = TestBed.createComponent(CanopiesModelsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
@@ -15,16 +15,16 @@ import { UtilitiesService, CanopiesService } from 'src/app/core/services';
import { CanopyModelBySize, CanopyModelByYear } from 'src/app/core/models';
@Component({
selector: 'app-canopy-models',
selector: 'app-canopies-models',
standalone: true,
imports: [
MatButtonModule, MatCardModule, MatDividerModule,
MatExpansionModule, MatIconModule, MatMenuModule,
PieChartComponent, HistoryTableComponent
],
templateUrl: './canopy-models.component.html'
templateUrl: './canopies-models.component.html'
})
export class CanopyModelsComponent implements OnInit, OnDestroy {
export class CanopiesModelsComponent implements OnInit, OnDestroy {
private _canopyBySize: Subscription = new Subscription();
private _canopyByYear: Subscription = new Subscription();
private _canopiesBySize!: Array<CanopyModelBySize>;
@@ -1,20 +1,20 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { DropZonesBarComponent } from './drop-zones-bar.component';
import { CanopiesSizesComponent } from './canopies-sizes.component';
describe('DropZonesBarComponent', () => {
let component: DropZonesBarComponent;
let fixture: ComponentFixture<DropZonesBarComponent>;
describe('CanopiesSizesComponent', () => {
let component: CanopiesSizesComponent;
let fixture: ComponentFixture<CanopiesSizesComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [DropZonesBarComponent]
TestBed.configureTestingModule({
imports: [CanopiesSizesComponent]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(DropZonesBarComponent);
fixture = TestBed.createComponent(CanopiesSizesComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
@@ -16,16 +16,16 @@ import { UtilitiesService, CanopiesService } from 'src/app/core/services';
import { CanopyBySize, CanopyByYear } from 'src/app/core/models';
@Component({
selector: 'app-canopy-sizes',
selector: 'app-canopies-sizes',
standalone: true,
imports: [
MatButtonModule, MatCardModule, MatDividerModule,
MatExpansionModule, MatIconModule, MatMenuModule,
PieChartComponent, HistoryTableComponent
],
templateUrl: './canopy-sizes.component.html'
templateUrl: './canopies-sizes.component.html'
})
export class CanopySizesComponent implements OnInit, OnDestroy {
export class CanopiesSizesComponent implements OnInit, OnDestroy {
private _canopyBySize: Subscription = new Subscription();
private _canopyByYear: Subscription = new Subscription();
private _canopiesBySize!: Array<CanopyBySize>;
@@ -1,20 +1,20 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { CanopyModelsComponent } from './canopy-models.component';
import { DropzonesBarComponent } from './dropzones-bar.component';
describe('CanopyModelsComponent', () => {
let component: CanopyModelsComponent;
let fixture: ComponentFixture<CanopyModelsComponent>;
describe('DropzonesBarComponent', () => {
let component: DropzonesBarComponent;
let fixture: ComponentFixture<DropzonesBarComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [CanopyModelsComponent]
TestBed.configureTestingModule({
imports: [DropzonesBarComponent]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(CanopyModelsComponent);
fixture = TestBed.createComponent(DropzonesBarComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
@@ -17,7 +17,7 @@ import { UtilitiesService, DropZonesService } from 'src/app/core/services';
import { DropZoneByOaci, DropZoneByYear } from 'src/app/core/models';
@Component({
selector: 'app-drop-zones-bar',
selector: 'app-dropzones-bar',
standalone: true,
imports: [
MatButtonModule, MatCardModule, MatDividerModule,
@@ -25,9 +25,9 @@ import { DropZoneByOaci, DropZoneByYear } from 'src/app/core/models';
BaseChartDirective, ChartistModule,
HistoryTableComponent
],
templateUrl: './drop-zones-bar.component.html'
templateUrl: './dropzones-bar.component.html'
})
export class DropZonesBarComponent implements OnInit, OnDestroy {
export class DropzonesBarComponent implements OnInit, OnDestroy {
private _dropzoneByOaci: Subscription = new Subscription();
private _dropzoneByYear: Subscription = new Subscription();
private _dropzonesByOaci!: Array<DropZoneByOaci>;
@@ -1,20 +1,20 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { CanopySizesComponent } from './canopy-sizes.component';
import { DropzonesPieComponent } from './dropzones-pie.component';
describe('CanopySizesComponent', () => {
let component: CanopySizesComponent;
let fixture: ComponentFixture<CanopySizesComponent>;
describe('DropzonesPieComponent', () => {
let component: DropzonesPieComponent;
let fixture: ComponentFixture<DropzonesPieComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [CanopySizesComponent]
TestBed.configureTestingModule({
imports: [DropzonesPieComponent]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(CanopySizesComponent);
fixture = TestBed.createComponent(DropzonesPieComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
@@ -16,16 +16,16 @@ import { UtilitiesService, DropZonesService } from 'src/app/core/services';
import { DropZoneByOaci, DropZoneByYear } from 'src/app/core/models';
@Component({
selector: 'app-drop-zones',
selector: 'app-dropzones-pie',
standalone: true,
imports: [
MatButtonModule, MatCardModule, MatDividerModule,
MatExpansionModule, MatIconModule, MatMenuModule,
PieChartComponent, HistoryTableComponent
],
templateUrl: './drop-zones.component.html'
templateUrl: './dropzones-pie.component.html'
})
export class DropZonesComponent implements OnInit, OnDestroy {
export class DropzonesPieComponent implements OnInit, OnDestroy {
private _dropzoneByOaci: Subscription = new Subscription();
private _dropzoneByYear: Subscription = new Subscription();
private _dropzonesByOaci!: Array<DropZoneByOaci>;
@@ -1,7 +1,7 @@
export * from './aeronefs/aeronefs.component';
export * from './aeronefs-pie/aeronefs-pie.component';
export * from './aeronefs-bar/aeronefs-bar.component';
export * from './canopy-models/canopy-models.component';
export * from './canopy-sizes/canopy-sizes.component';
export * from './drop-zones/drop-zones.component';
export * from './drop-zones-bar/drop-zones-bar.component';
export * from './canopies-models/canopies-models.component';
export * from './canopies-sizes/canopies-sizes.component';
export * from './dropzones-pie/dropzones-pie.component';
export * from './dropzones-bar/dropzones-bar.component';
export * from './jumps-by-month/jumps-by-month.component';
@@ -39,7 +39,7 @@ export class BarChartComponent implements OnChanges {
}
private _loadBarChart(): void {
const data: ChartDataset<'bar'> = {
const dataset: ChartDataset<'bar'> = {
data: [...this.values],
label: this.label,
backgroundColor: this.colors.backgroundColor,
@@ -47,7 +47,7 @@ export class BarChartComponent implements OnChanges {
borderWidth: 1
};
this.chartConfig.barChartData.labels = [...this.names];
this.chartConfig.barChartData.datasets!.push(data);
this.chartConfig.barChartData.datasets!.push(dataset);
/*this.chartConfig.barChartOptions!.scales = {
x: {display: false},
y: {display: true}
@@ -39,7 +39,7 @@ export class BarHorizontalChartComponent implements OnChanges {
}
private _loadBarChart(): void {
const data: ChartDataset<'bar'> = {
const dataset: ChartDataset<'bar'> = {
data: [...this.values],
label: this.label,
backgroundColor: this.colors.backgroundColor,
@@ -47,7 +47,7 @@ export class BarHorizontalChartComponent implements OnChanges {
borderWidth: 1
};
this.chartConfig.barChartData.labels = [...this.names];
this.chartConfig.barChartData.datasets!.push(data);
this.chartConfig.barChartData.datasets!.push(dataset);
this.chartConfig.barChartLegend = this.legend;
this.displayCharts = true;
}
@@ -34,7 +34,7 @@ export class BarsChartComponent implements OnChanges, AfterContentChecked {
@Input() legend: boolean = false;
ngOnChanges() {
//this._loadBarChart();
this._loadBarChart();
}
ngAfterContentChecked() {
@@ -63,7 +63,7 @@ export class BarsChartComponent implements OnChanges, AfterContentChecked {
}
};
this.names.forEach((label: string, index: number) => {
const data: ChartDataset<'bar'> = {
const dataset: ChartDataset<'bar'> = {
data: [...this.values[index]],
label: label,
backgroundColor: this.colors.backgroundColor[index],
@@ -71,7 +71,7 @@ export class BarsChartComponent implements OnChanges, AfterContentChecked {
borderWidth: 1,
//stack: 'Stack 0'
};
this.chartConfig.barChartData.datasets!.push(data);
this.chartConfig.barChartData.datasets!.push(dataset);
});
this.chartConfig.barChartLegend = this.legend;
this.displayCharts = true;
@@ -50,7 +50,7 @@ export class CircleChartComponent implements OnChanges {
}
/*private _loadCircleChart(): void {
const data: ChartDataset<'circle'> = {
const dataset: ChartDataset<'circle'> = {
data: [...this.values],
label: 'Nombre total de sauts',
backgroundColor: this._utilitiesService.getSeriesColors(0.8),
@@ -58,7 +58,7 @@ export class CircleChartComponent implements OnChanges {
borderWidth: 1
};
this.chartConfig.circleChartLabels = [...this.names];
this.chartConfig.circleChartDatasets!.push(data);
this.chartConfig.circleChartDatasets!.push(dataset);
this.displayCharts = true;
}*/
}
@@ -1,5 +1,5 @@
import { Component, Input, OnChanges } from '@angular/core';
import { ChartDataset } from 'chart.js';
import { ChartDataset, Point } from 'chart.js';
import { BaseChartDirective } from 'ng2-charts';
import { UtilitiesService } from 'src/app/core/services';
@@ -32,6 +32,7 @@ export class LineChartComponent implements OnChanges {
borderColor: this._utilitiesService.getSeriesColors(1)
};
@Input() legend: boolean = false;
@Input() hideZero: boolean = false;
ngOnChanges() {
this._loadLineChart();
@@ -40,8 +41,14 @@ export class LineChartComponent implements OnChanges {
private _loadLineChart(): void {
this.chartConfig.lineChartData.labels = [...this.headers];
this.names.forEach((label: string, index: number) => {
const data: ChartDataset<'line'> = {
data: [...this.values[index]],
let data: Array<(number | Point | null)> = [];
if (this.hideZero) {
data = [...this.values[index].map(value => value === 0 ? null : value)];
} else {
data = [...this.values[index]];
}
const dataset: ChartDataset<'line'> = {
data: data,
label: label,
backgroundColor: this.colors.backgroundColor[index],
borderColor: this.colors.borderColor[index],
@@ -49,7 +56,7 @@ export class LineChartComponent implements OnChanges {
cubicInterpolationMode: 'monotone',
tension: 0
};
this.chartConfig.lineChartData.datasets!.push(data);
this.chartConfig.lineChartData.datasets!.push(dataset);
});
this.chartConfig.lineChartLegend = this.legend;
this.displayCharts = true;
@@ -44,7 +44,7 @@ export class LineAreaChartComponent implements OnChanges {
if (index === 0) {
fill = true;
}
const data: ChartDataset<'line'> = {
const dataset: ChartDataset<'line'> = {
data: [...this.values[index]],
label: label,
backgroundColor: this.colors.backgroundColor[index],
@@ -55,7 +55,7 @@ export class LineAreaChartComponent implements OnChanges {
cubicInterpolationMode: 'monotone',
tension: 0
};
this.chartConfig.lineChartData.datasets!.push(data);
this.chartConfig.lineChartData.datasets!.push(dataset);
});
this.chartConfig.lineChartLegend = this.legend;
this.displayCharts = true;
@@ -49,7 +49,7 @@ export class PieChartComponent implements OnChanges {
}
/*private _loadDoughnutChart(): void {
const data: ChartDataset<'doughnut'> = {
const dataset: ChartDataset<'doughnut'> = {
data: [...this.values],
label: 'Nombre total de sauts',
backgroundColor: this._utilitiesService.getSeriesColors(0.8),
@@ -57,7 +57,7 @@ export class PieChartComponent implements OnChanges {
borderWidth: 1
};
this.chartConfig.doughnutChartLabels = [...this.names];
this.chartConfig.doughnutChartDatasets!.push(data);
this.chartConfig.doughnutChartDatasets!.push(dataset);
this.displayCharts = true;
}*/
}
+4 -4
View File
@@ -11,10 +11,10 @@ const MENUAUTH: Menu[] = [
const MENUITEMS: Menu[] = [
{ state: 'dashboard', type: 'link', name: 'Dashboard', icon: 'dashboard', desc: '' },
{ state: 'logbook', type: 'link', name: 'Carnet de saut', icon: 'assignment_turned_in', desc: '' },
{ state: 'aeronef', type: 'link', name: 'Aéronefs', icon: 'flight', desc: '' },
{ state: 'canopy', type: 'link', name: 'Voiles', icon: 'paragliding', desc: '' },
{ state: 'dropzone', type: 'link', name: 'Drop Zones', icon: 'flight_takeoff', desc: '' },
{ state: 'jumps', type: 'link', name: 'Sauts', icon: 'cloud', desc: '' },
{ state: 'aeronefs', type: 'link', name: 'Aéronefs', icon: 'flight', desc: '' },
{ state: 'dropzones', type: 'link', name: 'Drop Zones', icon: 'flight_takeoff', desc: '' },
{ state: 'canopies', type: 'link', name: 'Voiles', icon: 'paragliding', desc: '' },
{ state: 'jumps', type: 'link', name: 'Sauts', icon: 'filter_drama', desc: '' },
{ state: 'calculator', type: 'link', name: 'Taille de voile', icon: 'calculate', desc: '' },
{ state: 'qcm', type: 'menu', name: 'QCM Brevets', icon: 'rule_folder', desc: '' }
];
+3 -1
View File
@@ -32,12 +32,14 @@ export interface Jump {
//isEdit?: boolean;
isSelected?: boolean;
}
export enum JumpFileType {
CSV = "csv",
IMAGE = "image",
KML = "kml",
VIDEO = "video",
VIDEO = "video"
}
export interface JumpFile {
slug: string;
name: string;
+7 -73
View File
@@ -15,81 +15,15 @@ export interface QcmQuestion {
choices: Array<QcmChoice>;
}
export enum QcmQuestionState {
UNANSWERED = "unanswered",
DEFERED = "defer",
VALID = "valid",
ERROR = "error"
}
export interface QcmChoice {
index: string;
libelle: string;
correct: boolean;
}
/*
{
"num": 1,
"name": "Aéronefs",
"questions": []
},
{
"num": 2,
"name": "Altimètre",
"questions": []
},
{
"num": 3,
"name": "Déclencheurs et matériels",
"questions": []
},
{
"num": 4,
"name": "Largage",
"questions": []
},
{
"num": 5,
"name": "Règlementation",
"questions": []
},
{
"num": 6,
"name": "Pilotage et mécanique de vol",
"questions": []
},
{
"num": 7,
"name": "Physiologie",
"questions": []
},
{
"num": 8,
"name": "Connaissances générales",
"questions": []
},
{
"num": 9,
"name": "Unités de mesure",
"questions": []
},
{
"num": 10,
"name": "Altimétrie",
"questions": []
},
{
"num": 11,
"name": "Météorologie et aérologie",
"questions": []
},
{
"num": 12,
"name": "Sauts spéciaux",
"questions": []
},
{
"num": 13,
"name": "Questions spécifiques au brevet C",
"questions": []
},
{
"num": 14,
"name": "Questions spécifiques au brevet D",
"questions": []
}
*/
+8 -8
View File
@@ -1,8 +1,8 @@
import { Routes } from '@angular/router';
import {
AeronefComponent, CalculatorComponent, CanopyComponent, CredentialsComponent,
DashboardComponent, DropzoneComponent, JumpComponent, JumpsComponent,
AeronefsComponent, CalculatorComponent, CanopiesComponent, CredentialsComponent,
DashboardComponent, DropzonesComponent, JumpComponent, JumpsComponent,
LogbookComponent, ProfileComponent, QcmComponent, SettingsComponent
} from 'src/app/components';
import { authGuard } from 'src/app/core/guards';
@@ -13,8 +13,8 @@ import {
export const AUTH_ROUTES: Routes = [
{
path: 'aeronef',
component: AeronefComponent,
path: 'aeronefs',
component: AeronefsComponent,
canActivate: [ authGuard ],
resolve: {
aeronefsPageData: aeronefsPageResolver
@@ -29,8 +29,8 @@ export const AUTH_ROUTES: Routes = [
}
},
{
path: 'canopy',
component: CanopyComponent,
path: 'canopies',
component: CanopiesComponent,
canActivate: [ authGuard ],
resolve: {
canopiesPageData: canopiesPageResolver
@@ -45,8 +45,8 @@ export const AUTH_ROUTES: Routes = [
}
},
{
path: 'dropzone',
component: DropzoneComponent,
path: 'dropzones',
component: DropzonesComponent,
canActivate: [ authGuard ],
resolve: {
dropZonesPageData: dropZonesPageResolver