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'))); diff --git a/src/frontend/app/sidebar/sidebar.component.ts b/src/frontend/app/sidebar/sidebar.component.ts index 65df2131da35d26f04c1cf6bd7cfdce4d7db9044..d3e74e04611fdafebb6a0bca9a8c3d68b8126fec 100755 --- a/src/frontend/app/sidebar/sidebar.component.ts +++ b/src/frontend/app/sidebar/sidebar.component.ts @@ -78,7 +78,8 @@ export class SidebarComponent implements OnInit, AfterViewInit { async openProfile() { const modal = await this.modalController.create({ component: ProfileComponent, - cssClass: 'profileCss' + cssClass: 'profileCss', + backdropDismiss: false }); await modal.present(); } diff --git a/src/frontend/core/global.scss b/src/frontend/core/global.scss index 677133306eb77c355893dc27098657c69d8559eb..72561592efa13dcdcbb78e04156db9051a74a54d 100644 --- a/src/frontend/core/global.scss +++ b/src/frontend/core/global.scss @@ -92,8 +92,14 @@ input:read-only { } .profileCss { - --width: 40%; - --height: 65%; + @media screen and (min-width: 768px) and (min-height: 768px) { + --width: 56%; + --height: 600px + } + @media screen and (min-width: 768px) and (min-height: 600px) { + --width: 56%; + --height: 600px + } } .aboutUsCss {