2018-05-13 22:35:37 +02:00
|
|
|
import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
|
2018-05-11 10:46:27 +02:00
|
|
|
import { Title } from "@angular/platform-browser";
|
2018-05-11 18:22:59 +02:00
|
|
|
import { ActivatedRoute, Router } from "@angular/router";
|
|
|
|
|
|
|
|
|
|
import { Awardee } from "../shared/awardee";
|
|
|
|
|
import { AwardeeService } from "../shared/awardee.service";
|
2018-05-13 22:35:37 +02:00
|
|
|
import { environment } from "../../environments/environment";
|
|
|
|
|
import { merge } from "rxjs";
|
2018-05-10 16:39:05 +02:00
|
|
|
|
|
|
|
|
@Component({
|
|
|
|
|
selector: 'app-awardee-editor',
|
|
|
|
|
templateUrl: './awardee-editor.component.html',
|
|
|
|
|
styleUrls: ['./awardee-editor.component.css']
|
|
|
|
|
})
|
|
|
|
|
export class AwardeeEditorComponent implements OnInit {
|
|
|
|
|
|
2018-05-13 22:35:37 +02:00
|
|
|
private imageMatcher = /\.(jpe?g|png|gif)$/i;
|
|
|
|
|
|
2018-05-11 18:22:59 +02:00
|
|
|
public years: Array<number> = [];
|
|
|
|
|
public awardee: Awardee;
|
2018-05-13 22:35:37 +02:00
|
|
|
public rawProfileImage: string = null;
|
|
|
|
|
public rawAwardImage: string = null;
|
|
|
|
|
|
|
|
|
|
@ViewChild('profileImageUpload') profileImageUpload: ElementRef<HTMLInputElement>;
|
|
|
|
|
@ViewChild('awardImageUpload') awardImageUpload: ElementRef<HTMLInputElement>;
|
2018-05-11 18:22:59 +02:00
|
|
|
|
2018-05-11 10:46:27 +02:00
|
|
|
constructor(
|
2018-05-13 22:35:37 +02:00
|
|
|
private titleService: Title,
|
|
|
|
|
private route: ActivatedRoute,
|
|
|
|
|
private router: Router,
|
|
|
|
|
private awardeeService: AwardeeService,
|
2018-05-11 10:46:27 +02:00
|
|
|
) {}
|
2018-05-10 16:39:05 +02:00
|
|
|
|
|
|
|
|
ngOnInit() {
|
2018-05-11 10:46:27 +02:00
|
|
|
this.titleService.setTitle('Edit awardee');
|
2018-05-11 18:22:59 +02:00
|
|
|
this.route.data.subscribe((data: {
|
|
|
|
|
years: Array<number>,
|
|
|
|
|
awardee: Awardee,
|
|
|
|
|
}) => {
|
|
|
|
|
this.years = data.years ? data.years : [];
|
|
|
|
|
this.awardee = data.awardee ? data.awardee : new Awardee();
|
|
|
|
|
});
|
2018-05-11 10:46:27 +02:00
|
|
|
}
|
|
|
|
|
|
2018-05-13 22:35:37 +02:00
|
|
|
public profileImageSelectionChange() {
|
|
|
|
|
if (this.profileImageUpload.nativeElement.files.length === 0) {
|
|
|
|
|
this.rawProfileImage = null;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!this.imageMatcher.test(this.profileImageUpload.nativeElement.files[0].name)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
let reader = new FileReader();
|
|
|
|
|
reader.addEventListener("load", () => this.rawProfileImage = reader.result);
|
|
|
|
|
reader.readAsDataURL(this.profileImageUpload.nativeElement.files[0]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public awardImageSelectionChange() {
|
|
|
|
|
if (this.awardImageUpload.nativeElement.files.length === 0) {
|
|
|
|
|
this.rawAwardImage = null;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!this.imageMatcher.test(this.awardImageUpload.nativeElement.files[0].name)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
let reader = new FileReader();
|
|
|
|
|
reader.addEventListener("load", () => this.rawAwardImage = reader.result);
|
|
|
|
|
reader.readAsDataURL(this.awardImageUpload.nativeElement.files[0]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public undoImageSelect(field: HTMLInputElement) {
|
|
|
|
|
field.value = null;
|
|
|
|
|
field.dispatchEvent(new Event('change'));
|
|
|
|
|
}
|
|
|
|
|
|
2018-05-11 18:22:59 +02:00
|
|
|
public saveAwardee() {
|
|
|
|
|
if (this.canSave) {
|
2018-05-13 22:35:37 +02:00
|
|
|
this.awardeeService.persist(
|
|
|
|
|
this.awardee
|
|
|
|
|
).subscribe(savedAwardee => {
|
|
|
|
|
let observables = [];
|
|
|
|
|
if (this.rawProfileImage) {
|
|
|
|
|
observables.push(
|
|
|
|
|
this.awardeeService.saveImage(
|
|
|
|
|
savedAwardee.slug,
|
|
|
|
|
this.profileImageUpload.nativeElement.files[0],
|
|
|
|
|
'profile'
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
if (this.rawAwardImage) {
|
|
|
|
|
observables.push(
|
|
|
|
|
this.awardeeService.saveImage(
|
|
|
|
|
savedAwardee.slug,
|
|
|
|
|
this.awardImageUpload.nativeElement.files[0],
|
|
|
|
|
'award'
|
|
|
|
|
)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
observables.length
|
|
|
|
|
? merge(...observables).subscribe(() => this.router.navigate(['/awardees']))
|
|
|
|
|
: this.router.navigate(['/awardees']);
|
|
|
|
|
});
|
2018-05-11 18:22:59 +02:00
|
|
|
}
|
2018-05-10 16:39:05 +02:00
|
|
|
}
|
|
|
|
|
|
2018-05-11 18:22:59 +02:00
|
|
|
get canSave(): boolean {
|
|
|
|
|
return [
|
2018-05-13 22:35:37 +02:00
|
|
|
this.awardee.name,
|
|
|
|
|
this.awardee.text,
|
|
|
|
|
this.awardee.imageLabel].every(textField => textField.length > 0)
|
|
|
|
|
&& this.awardee.year !== null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
get profileImage(): string {
|
|
|
|
|
return `${environment.apiUrl}/awardee-image/profile/${this.awardee.slug}`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
get awardImage(): string {
|
|
|
|
|
return `${environment.apiUrl}/awardee-image/award/${this.awardee.slug}`
|
2018-05-11 18:22:59 +02:00
|
|
|
}
|
2018-05-10 16:39:05 +02:00
|
|
|
}
|