import { Component, OnInit } from '@angular/core'; import { JumpTypeResp } from '../../models/jumpType'; import { AircraftResp } from '../../models/aircraft'; import { DropZoneResp } from '../../models/dropzone'; import { DateService } from '../../services/date.service'; import { GearResp } from '../../models/gear'; import { ServiceComm } from '../../services/service-comm.service'; import { DropzoneService } from '../../services/dropzone.service'; import { AircraftService } from '../../services/aircraft.service'; import { JumpService } from '../../services/jump.service'; import { JumpTypeService } from '../../services/jump-type.service'; import { GearService } from '../../services/gear.service'; import { isNumber } from 'util'; @Component({ selector: 'app-new-jump', templateUrl: './new-jump.component.html', styleUrls: ['./new-jump.component.css'], }) export class NewJumpComponent implements OnInit { beginDate: Date; endDate: Date; exitAltitude: number; deployAltitude: number; countOfJumps: number; selectedDz: DropZoneResp; selectedGear: GearResp; selectedAircraft: AircraftResp; selectedJumpType: JumpTypeResp; withCutaway: boolean; listOfJumpType: Array; listOfAircraft: Array; private listOfDropZone: Array; listOfFilteredDropZone: Array; listOfGear: Array; private countDatasLoaded: number; private pendingAddRequest: boolean; constructor( private serviceComm: ServiceComm, private serviceJump: JumpService, private serviceJumpType: JumpTypeService, private serviceAircraft: AircraftService, private serviceDropzone: DropzoneService, private serviceGear: GearService, private dateService: DateService ) { } ngOnInit() { this.serviceComm.UpdatedComponentTitle('Add a new jump'); this.pendingAddRequest = false; this.endDate = new Date(); this.beginDate = this.dateService.AddDays(new Date(), -1); this.exitAltitude = 4000; this.deployAltitude = 1000; this.countOfJumps = 1; this.getListOfJumpTypes(); } onFormSubmit() { this.pendingAddRequest = true; this.serviceJump.AddListOfJump( this.selectedJumpType.id, this.selectedAircraft.id, this.selectedDz.id, this.selectedGear.id, this.withCutaway, this.beginDate, this.endDate, this.exitAltitude, this.deployAltitude, this.countOfJumps ); setTimeout(() => { this.initForm(); this.pendingAddRequest = false; }, 1000); } public isValidatedForm(): boolean { return ( this.selectedDz !== undefined && this.selectedDz.id !== undefined && this.selectedGear !== undefined && this.selectedGear.id !== undefined && this.selectedAircraft !== undefined && this.selectedAircraft.id !== undefined && this.selectedJumpType !== undefined && this.selectedJumpType.id !== undefined && this.exitAltitude !== undefined && typeof this.exitAltitude === 'number' && this.deployAltitude !== undefined && typeof this.deployAltitude === 'number' && this.countOfJumps !== undefined && typeof this.countOfJumps === 'number' ); } private getListOfJumpTypes() { this.serviceJumpType.getListOfJumpTypes().subscribe((data) => { this.listOfJumpType = data; this.countDatasLoaded = 1; this.getListOfAircrafts(); this.getListOfDropZones(); this.getListOfGears(); }); } private getListOfAircrafts() { this.serviceAircraft.getListOfAircrafts().subscribe((data) => { this.listOfAircraft = data; this.countDatasLoaded++; }); } private getListOfDropZones() { this.serviceDropzone.getListOfDropZones().subscribe((data) => { data.sort((a, b) => (b.isFavorite ? 1 : 0) - (a.isFavorite ? 1 : 0)); this.listOfDropZone = data; this.listOfFilteredDropZone = data; this.countDatasLoaded++; }); } private getListOfGears() { this.serviceGear.getListOfGears().subscribe((data) => { this.listOfGear = data; this.countDatasLoaded++; }); } private initForm() { this.endDate = new Date(); this.beginDate = this.dateService.AddDays(new Date(), -1); this.exitAltitude = 4000; this.deployAltitude = 1000; this.countOfJumps = 1; this.selectedDz = undefined; this.selectedGear = undefined; this.selectedAircraft = undefined; this.selectedJumpType = undefined; this.listOfFilteredDropZone = this.listOfDropZone; } public displayFn(data?: JumpTypeResp): string | undefined { return data ? data.name : undefined; } public onChangeDz(event: any) { let filterValue: string; if (event.id !== undefined) { filterValue = event.name.toLowerCase(); } else { filterValue = event.toLowerCase(); } this.listOfFilteredDropZone = this.listOfDropZone; this.listOfFilteredDropZone = this.listOfFilteredDropZone.filter((option) => option.name.toLowerCase().includes(filterValue) ); } public notLoadingToDisplay(): boolean { return !(this.pendingAddRequest || this.countDatasLoaded !== 4); } }