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