diff --git a/Front/skydivelogs-app/src/app/list-of-aircrafts/list-of-aircrafts.component.ts b/Front/skydivelogs-app/src/app/list-of-aircrafts/list-of-aircrafts.component.ts
index 168d982..e29abbf 100644
--- a/Front/skydivelogs-app/src/app/list-of-aircrafts/list-of-aircrafts.component.ts
+++ b/Front/skydivelogs-app/src/app/list-of-aircrafts/list-of-aircrafts.component.ts
@@ -1,21 +1,21 @@
-import { Component, OnInit, ViewChild } from "@angular/core";
-import { MatPaginator } from "@angular/material/paginator";
-import { MatTableDataSource } from "@angular/material/table";
-import { MatDialog } from "@angular/material/dialog";
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { MatPaginator } from '@angular/material/paginator';
+import { MatTableDataSource } from '@angular/material/table';
+import { MatDialog } from '@angular/material/dialog';
-import { AircraftResp } from "../../models/aircraft";
-import { AircraftService } from "../../services/aircraft.service";
-import { ServiceComm } from "../../services/service-comm.service";
-import { NewAircraftComponent } from "../new-aircraft/new-aircraft.component";
-import { AddAction } from "../../models/add-action.enum";
+import { AircraftResp } from '../../models/aircraft';
+import { AircraftService } from '../../services/aircraft.service';
+import { ServiceComm } from '../../services/service-comm.service';
+import { NewAircraftComponent } from '../new-aircraft/new-aircraft.component';
+import { AddAction } from '../../models/add-action.enum';
@Component({
- selector: "app-list-of-aircrafts",
- templateUrl: "./list-of-aircrafts.component.html",
- styleUrls: ["./list-of-aircrafts.component.css"]
+ selector: 'app-list-of-aircrafts',
+ templateUrl: './list-of-aircrafts.component.html',
+ styleUrls: ['./list-of-aircrafts.component.css']
})
export class ListOfAircraftsComponent implements OnInit {
- public displayedColumns: Array
+ +
diff --git a/Front/skydivelogs-app/src/app/new-aircraft/new-aircraft.component.ts b/Front/skydivelogs-app/src/app/new-aircraft/new-aircraft.component.ts index e6b58be..5220310 100644 --- a/Front/skydivelogs-app/src/app/new-aircraft/new-aircraft.component.ts +++ b/Front/skydivelogs-app/src/app/new-aircraft/new-aircraft.component.ts @@ -1,16 +1,18 @@ -import { Component, OnInit } from "@angular/core"; -import { FormControl, FormGroup, Validators } from "@angular/forms"; -import { AircraftService } from "../../services/aircraft.service"; -import { ServiceComm } from "../../services/service-comm.service"; -import { AddAction } from "../../models/add-action.enum"; +import { Component, OnInit } from '@angular/core'; +import { FormControl, FormGroup, Validators } from '@angular/forms'; +import { AircraftService } from '../../services/aircraft.service'; +import { ServiceComm } from '../../services/service-comm.service'; +import { AddAction } from '../../models/add-action.enum'; @Component({ - selector: "app-new-aircraft", - templateUrl: "./new-aircraft.component.html", - styleUrls: ["./new-aircraft.component.css"] + selector: 'app-new-aircraft', + templateUrl: './new-aircraft.component.html', + styleUrls: ['./new-aircraft.component.css'] }) export class NewAircraftComponent implements OnInit { public addForm: FormGroup; + public imageError: string; + private selectedFile: string; constructor( private serviceComm: ServiceComm, @@ -18,16 +20,59 @@ export class NewAircraftComponent implements OnInit { ) { this.addForm = new FormGroup( { - aircraftName: new FormControl("", Validators.required) + aircraftName: new FormControl('', Validators.required) }, - { updateOn: "blur" } + { updateOn: 'blur' } ); } - ngOnInit() {} + ngOnInit() { } onSubmit(formData) { - this.serviceApi.AddAircraft(formData.aircraftName); + if (formData.invalid) { + return; + } + + this.serviceApi.AddAircraft(formData.aircraftName, this.selectedFile); this.serviceComm.RefreshData(AddAction.Aircraft); } + + public onFileChanged(fileInput: any) { + const file = fileInput.dataTransfer + ? fileInput.dataTransfer.files[0] + : fileInput.target.files[0]; + const allowed_types = ['image/png', 'image/jpeg']; + const max_size = 20971520; + + if (!allowed_types.includes(file.type)) { + this.imageError = 'Only Images are allowed ( JPG | PNG )'; + } else if (file.size > max_size) { + this.imageError = 'Maximum size allowed is ' + max_size / 1000 + 'Mb'; + } else { + const reader = new FileReader(); + reader.onload = this.checkAndExtractDataToBase64.bind(this); + reader.readAsDataURL(fileInput.target.files[0]); + } + } + + private checkAndExtractDataToBase64(e: any) { + const max_height = 15200; + const max_width = 25600; + + const image = new Image(); + image.src = e.target.result; + image.onload = (rs) => { + const img_height = rs.currentTarget['height']; + const img_width = rs.currentTarget['width']; + + if (img_height > max_height && img_width > max_width) { + this.imageError = + 'Maximum dimentions allowed ' + max_height + '*' + max_width + 'px'; + } else { + const imgBase64Path = e.target.result; + this.selectedFile = imgBase64Path; + this.imageError = 'OK'; + } + }; + } } diff --git a/Front/skydivelogs-app/src/app/user-profile/user-profile.component.ts b/Front/skydivelogs-app/src/app/user-profile/user-profile.component.ts index c1488e5..dfdbca2 100644 --- a/Front/skydivelogs-app/src/app/user-profile/user-profile.component.ts +++ b/Front/skydivelogs-app/src/app/user-profile/user-profile.component.ts @@ -1,20 +1,20 @@ -import { Component, OnInit } from "@angular/core"; -import { FormGroup, FormControl, Validators } from "@angular/forms"; -import { AuthenticationService } from "../../services/authentication.service"; -import { User } from "../../models/user"; +import { Component, OnInit } from '@angular/core'; +import { FormGroup, FormControl, Validators } from '@angular/forms'; +import { AuthenticationService } from '../../services/authentication.service'; +import { User } from '../../models/user'; @Component({ - selector: "app-user-profile", - templateUrl: "./user-profile.component.html", - styleUrls: ["./user-profile.component.css"], + selector: 'app-user-profile', + templateUrl: './user-profile.component.html', + styleUrls: ['./user-profile.component.css'], }) export class UserProfileComponent implements OnInit { public userForm: FormGroup; - constructor(private authenticationService: AuthenticationService) {} + constructor(private authenticationService: AuthenticationService) { } ngOnInit(): void { - let currentUser = this.authenticationService.currentUserValue; + const currentUser = this.authenticationService.currentUserValue; this.userForm = new FormGroup( { @@ -32,15 +32,15 @@ export class UserProfileComponent implements OnInit { Validators.email, ]), currentPassword: new FormControl( - "", - Validators.pattern("^[A-Za-z0-9_-]{8,15}$") + '', + Validators.pattern('^[A-Za-z0-9_-]{8,15}$') ), newPassword: new FormControl( - "", - Validators.pattern("^[A-Za-z0-9_-]{8,15}$") + '', + Validators.pattern('^[A-Za-z0-9_-]{8,15}$') ), }, - { updateOn: "blur" } + { updateOn: 'blur' } ); } @@ -49,7 +49,7 @@ export class UserProfileComponent implements OnInit { return; } - let updatedUser = new User(); + const updatedUser = new User(); updatedUser.login = formData.username; updatedUser.password = formData.password; updatedUser.firstName = formData.firstname; diff --git a/Front/skydivelogs-app/src/models/aircraft.ts b/Front/skydivelogs-app/src/models/aircraft.ts index 2a5322f..b04eddc 100644 --- a/Front/skydivelogs-app/src/models/aircraft.ts +++ b/Front/skydivelogs-app/src/models/aircraft.ts @@ -5,6 +5,7 @@ export class AircraftReq { public id: number; public name: string; + public imageData: string; } export class AircraftResp { @@ -14,4 +15,5 @@ export class AircraftResp { public id: number; public name: string; + public imageData: string; } diff --git a/Front/skydivelogs-app/src/services/aircraft.service.ts b/Front/skydivelogs-app/src/services/aircraft.service.ts index 41a85c9..56e9d9c 100644 --- a/Front/skydivelogs-app/src/services/aircraft.service.ts +++ b/Front/skydivelogs-app/src/services/aircraft.service.ts @@ -1,10 +1,10 @@ -import { Injectable } from "@angular/core"; -import { HttpClient } from "@angular/common/http"; -import { Observable } from "rxjs"; +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; -import { AircraftResp, AircraftReq } from "../models/aircraft"; +import { AircraftResp, AircraftReq } from '../models/aircraft'; -import { BaseService } from "./base.service"; +import { BaseService } from './base.service'; @Injectable() export class AircraftService extends BaseService { @@ -18,10 +18,11 @@ export class AircraftService extends BaseService { }); } - public AddAircraft(aircraftName: string) { + public AddAircraft(aircraftName: string, dataImg: string) { const bodyNewAircraft: AircraftReq = { id: 0, - name: aircraftName + name: aircraftName, + imageData: dataImg }; this.http diff --git a/Front/skydivelogs-app/src/services/image.service.ts b/Front/skydivelogs-app/src/services/image.service.ts index 360bb56..a16b43f 100644 --- a/Front/skydivelogs-app/src/services/image.service.ts +++ b/Front/skydivelogs-app/src/services/image.service.ts @@ -1,10 +1,10 @@ -import { Injectable } from "@angular/core"; -import { HttpClient } from "@angular/common/http"; -import { Observable } from "rxjs"; +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; -import { ImageResp, ImageReq } from "../models/Image"; +import { ImageResp, ImageReq } from '../models/Image'; -import { BaseService } from "./base.service"; +import { BaseService } from './base.service'; @Injectable() export class ImageService extends BaseService {