diff --git a/src/frontend/app/pad/pad.component.html b/src/frontend/app/pad/pad.component.html index f6d209eb0fdf0afd4850ff7f09db16d6dbe7430b..7625ef5bdb8faa8dcdaa9570c4ecf40ac326e89d 100755 --- a/src/frontend/app/pad/pad.component.html +++ b/src/frontend/app/pad/pad.component.html @@ -36,7 +36,7 @@ <ion-button color="danger" (click)="closePad()"> <ion-label>{{'lang.cancel' | translate}}</ion-label> </ion-button> - <ion-button color="success" (click)="saveSignature()"> + <ion-button color="success" (click)="saveSignature()" [disabled]="isSaving"> <ion-label>{{'lang.save' | translate}}</ion-label> </ion-button> </ion-footer> diff --git a/src/frontend/app/pad/pad.component.ts b/src/frontend/app/pad/pad.component.ts index 0162ac856aaf494a8c5272dadf30354516c63338..941731191a97a0a9b17bb9405b33e954201cba88 100755 --- a/src/frontend/app/pad/pad.component.ts +++ b/src/frontend/app/pad/pad.component.ts @@ -1,11 +1,11 @@ import { Component, ViewChild, Output, EventEmitter } from '@angular/core'; import { SignaturePad } from 'angular2-signaturepad'; -import { Observable } from 'rxjs'; +import { Observable, of } from 'rxjs'; import { SignaturesContentService } from '../service/signatures.service'; import { HttpClient } from '@angular/common/http'; import { NotificationService } from '../service/notification.service'; import { TranslateService } from '@ngx-translate/core'; -import { finalize } from 'rxjs/operators'; +import { catchError, finalize, tap } from 'rxjs/operators'; import { AuthService } from '../service/auth.service'; import { LocalStorageService } from '../service/local-storage.service'; import { ModalController } from '@ionic/angular'; @@ -28,6 +28,7 @@ export class SignaturePadPageComponent implements AfterViewInit { selectedColor: any; haveSigned: any; disableState = false; + isSaving: boolean = false; pad$: Observable<boolean>; @@ -84,6 +85,7 @@ export class SignaturePadPageComponent implements AfterViewInit { saveSignature() { this.disableState = true; this.haveSigned = true; + this.isSaving = true; const newEncodedSign = this.signaturePad.toDataURL('image/png').replace('data:image/png;base64,', ''); this.localStorage.save('signature', JSON.stringify(newEncodedSign)); @@ -96,21 +98,26 @@ export class SignaturePadPageComponent implements AfterViewInit { this.http.post('../rest/users/' + this.authService.user.id + '/signatures', newSign) .pipe( + tap((data: any) => { + newSign.id = data.signatureId; + this.signaturesService.signaturesList.unshift( + { + id: newSign.id, + encodedSignature: newSign.encodedSignature + } + ); + this.modalController.dismiss('reload'); + this.notificationService.success('lang.signatureRegistered'); + }), finalize(() => { this.disableState = false; + }), + catchError((err: any) => { + this.notificationService.handleErrors(err); + this.isSaving = false; + return of(false); }) - ) - .subscribe((data: any) => { - newSign.id = data.signatureId; - this.signaturesService.signaturesList.unshift( - { - id: newSign.id, - encodedSignature: newSign.encodedSignature - } - ); - this.modalController.dismiss('reload'); - this.notificationService.success('lang.signatureRegistered'); - }); + ).subscribe(); // BUG IMAGE CROPPED // this.localStorage.save('signature', JSON.stringify(this.signaturePad.toDataURL('image/svg+xml')));