<ion-header [translucent]="true"> <ion-toolbar color="primary"> <ion-title>{{'lang.myProfil' | translate}}</ion-title> <ion-buttons slot="end"> <ion-button (click)="dismissModal()"> <ion-icon slot="icon-only" name="close-outline"></ion-icon> </ion-button> </ion-buttons> </ion-toolbar> </ion-header> <ion-header> <ion-toolbar> <ion-segment [value]="currentTool" (ionChange)="initTab($event.detail.value)"> <ion-segment-button value="info"> <ion-label>{{'lang.informations' | translate}}</ion-label> <ion-icon name="information-circle"></ion-icon> </ion-segment-button> <ion-segment-button value="pref"> <ion-label>{{'lang.preferences' | translate}}</ion-label> <ion-icon name="brush-outline"></ion-icon> </ion-segment-button> <ion-segment-button value="deleg"> <ion-label>{{'lang.substitute' | translate}}</ion-label> <ion-icon name="hand-left-outline"></ion-icon> </ion-segment-button> </ion-segment> </ion-toolbar> </ion-header> <form (ngSubmit)="submitProfile()" style="display: contents;" #profileForm="ngForm"> <ion-content> <ng-container *ngIf="currentTool === 'info'"> <ion-list lines="full" class="ion-no-margin"> <ion-item> <ion-avatar slot="start" style="cursor: pointer;" (click)="uploadFile.click();"> <img [src]="avatarInfo.picture"> </ion-avatar> <ion-label color="secondary" position="floating">{{'lang.login' | translate}}</ion-label> <ion-input name="login" [(ngModel)]="profileInfo.login" readonly required></ion-input> <input #uploadFile type="file" style="display:none;" (change)="handleFileInput($event.target.files)"> </ion-item> <ion-item> <ion-label color="secondary" position="floating">{{'lang.email' | translate}}</ion-label> <ion-input name="email" [(ngModel)]="profileInfo.email" pattern="(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)" [readonly]="authService.authMode !== 'default'" required></ion-input> </ion-item> <ion-item> <ion-label color="secondary" position="floating">{{'lang.firstname' | translate}}</ion-label> <ion-input name="firstname" [(ngModel)]="profileInfo.firstname" [readonly]="authService.authMode !== 'default'" required></ion-input> </ion-item> <ion-item> <ion-label color="secondary" position="floating">{{'lang.lastname' | translate}}</ion-label> <ion-input name="lastname" [(ngModel)]="profileInfo.lastname" [readonly]="authService.authMode !== 'default'" required></ion-input> </ion-item> <ion-list-header lines="none"> <ion-label color="primary">{{'lang.changePassword' | translate}}</ion-label> </ion-list-header> <ion-item> <ion-label color="secondary" position="stacked">{{'lang.currentPassword' | translate}}</ion-label> <ion-input name="currentPassword" [(ngModel)]="password.currentPassword" placeholder="{{'lang.currentPassword' | translate}}" [type]="hideCurrentPassword ? 'password' : 'text'" [readonly]="authService.authMode !== 'default'"></ion-input> <ion-button class="showpassButton" slot="end" color="light" (click)="hideCurrentPassword = !hideCurrentPassword"> <ion-icon slot="icon-only" color="primary" [name]="hideCurrentPassword ? 'eye-outline' : 'eye-off-outline'"></ion-icon> </ion-button> </ion-item> <ion-item> <ion-label color="secondary" position="stacked">{{'lang.newPassword' | translate}}</ion-label> <ion-input name="newPassword" [(ngModel)]="password.newPassword" placeholder="{{'lang.newPassword' | translate}}" [type]="hideNewPassword ? 'password' : 'text'" [readonly]="authService.authMode !== 'default'" (keyup)="checkPasswordValidity(password.newPassword)"></ion-input> <ion-button class="showpassButton" slot="end" color="light" (click)="hideNewPassword = !hideNewPassword"> <ion-icon slot="icon-only" color="primary" [name]="hideNewPassword ? 'eye-outline' : 'eye-off-outline'"></ion-icon> </ion-button> </ion-item> <ion-item> <ion-label color="secondary" position="stacked">{{'lang.passwordConfirmation' | translate}} </ion-label> <ion-input name="passwordConfirmation" [(ngModel)]="password.passwordConfirmation" placeholder="{{'lang.passwordConfirmation' | translate}}" [type]="hideNewPasswordConfirm ? 'password' : 'text'" [readonly]="authService.authMode !== 'default'"></ion-input> <ion-button class="showpassButton" slot="end" color="light" (click)="hideNewPasswordConfirm = !hideNewPasswordConfirm"> <ion-icon slot="icon-only" color="primary" [name]="hideNewPasswordConfirm ? 'eye-outline' : 'eye-off-outline'"></ion-icon> </ion-button> </ion-item> <ion-item lines="none"> <ion-note color="success" *ngIf="password.passwordConfirmation === password.newPassword && password.newPassword.length > 0 && password.passwordConfirmation.length> 0"> {{'lang.samePassword' | translate}}</ion-note> <ion-note color="danger" *ngIf="password.passwordConfirmation !== password.newPassword"> {{'lang.passwordNotMatch' | translate}}</ion-note> </ion-item> </ion-list> </ng-container> <ng-container *ngIf="currentTool === 'pref'"> <ion-list lines="full" class="ion-no-margin"> <ion-item> <ion-label>{{'lang.receiveNotif' | translate}}</ion-label> <ion-toggle slot="start" [checked]="preferenceInfo.notifications" (ionChange)="preferenceInfo.notifications=!preferenceInfo.notifications"></ion-toggle> </ion-item> <ion-list> <ion-item> <ion-label position="floating" color="secondary">{{'lang.language' | translate}}</ion-label> <ion-select name="langUser" [(ngModel)]="preferenceInfo.lang"> <ion-select-option *ngFor="let lang of this.profileInfo['availableLanguages']" [value]="lang">{{'lang.'+lang | translate }}</ion-select-option> </ion-select> </ion-item> </ion-list> <ion-list> <ion-item> <ion-label position="floating" color="secondary">{{'lang.annotationMode' | translate}} </ion-label> <ion-select name="writingMode" [(ngModel)]="this.preferenceInfo.writingMode"> <ion-select-option value="direct">{{'lang.free' | translate}}</ion-select-option> <ion-select-option value="stylus">{{'lang.appleStylus' | translate}} <i class="fab fa-apple"></i></ion-select-option> </ion-select> <ion-note *ngIf="this.preferenceInfo.writingMode === 'stylus'" [innerHTML]="'lang.freeModeInfo' | translate"></ion-note> <ion-note *ngIf="this.preferenceInfo.writingMode === 'direct'" [innerHTML]="'lang.standardModeInfo' | translate"></ion-note> </ion-item> </ion-list> <ion-list> <ion-item> <ion-label position="floating" color="secondary">{{'lang.stylusWidh' | translate}}</ion-label> <ion-select name="writingSize" [(ngModel)]="this.preferenceInfo.writingSize" (ionChange)="drawSample()"> <ion-select-option *ngFor='let in of counter(10) ;let i = index' [value]="i+1">{{i+1}} </ion-select-option> </ion-select> <ion-note slot="end"><canvas id="sampleNote" width="100" height="100"></canvas></ion-note> </ion-item> </ion-list> <ion-list> <ion-item> <ion-label position="floating" color="secondary">{{'lang.defaultColor' | translate}}</ion-label> <ion-select name="writingColor" [(ngModel)]="preferenceInfo.writingColor"> <ion-select-option value="#000000">{{'lang.black' | translate}}</ion-select-option> <ion-select-option value="#1a75ff">{{'lang.blue' | translate}}</ion-select-option> <ion-select-option value="#FF0000">{{'lang.red' | translate}}</ion-select-option> </ion-select> <ion-note slot="end"> <div style="height: 25px;width: 25px;border-radius: 20px;" [style.backgroundColor]="this.preferenceInfo.writingColor"> </div> </ion-note> </ion-item> </ion-list> </ion-list> </ng-container> <ng-container *ngIf="currentTool === 'deleg'"> <ion-list *ngIf="authService.user.substitute !== null"> <ion-item> <ion-input readonly [value]="authService.user.substituteUser"></ion-input> <ion-button slot="end" color="danger" (click)="deleteSubstitute()"> <ion-icon name="close-outline"></ion-icon> </ion-button> </ion-item> </ion-list> <ion-list *ngIf="authService.user.substitute === null"> <ion-item> <ion-searchbar [placeholder]="'lang.chooseSubstitute' | translate" (ionChange)="test($event)"></ion-searchbar> </ion-item> </ion-list> <ion-list *ngIf="authService.user.substitute === null"> <ion-item *ngFor="let user of userList"> <ion-checkbox color="primary" slot="start" [value]="user" (ionChange)="selectSubstitute($event.detail.value)"></ion-checkbox> <ion-label>{{ user.firstname }} {{ user.lastname }}</ion-label> <ion-note slot="end">{{ user.email }}</ion-note> </ion-item> </ion-list> <ng-container *ngIf="authService.user.substitute != null && signaturesService.signaturesList.length > 0"> <ion-item lines="none"> <ion-label color="secondary"> {{'lang.signSubstituted' | translate}} : </ion-label> </ion-item> <div style="display: grid;grid-template-columns: repeat(2, 1fr);"> <button type="button" class="signListButton" mat-stroked-button *ngFor="let signature of signaturesService.signaturesList; let i=index" (click)="toggleSignature(i)" [class.selected]="signature.substituted"> <img style="width: 190px;" [src]="sanitizer.bypassSecurityTrustUrl('data:image/png;base64,' + signature.encodedSignature)" /> </button> </div> </ng-container> </ng-container> </ion-content> </form> <ion-footer class="ion-no-border" *ngIf="['info','pref'].indexOf(currentTool) > -1"> <ion-toolbar> <ion-buttons class="ion-justify-content-center"> <ion-button type="submit" color="primary" (click)="submitProfile()" [disabled]="allowValidate() || !profileForm.form.valid"> <ion-label>{{'lang.save' | translate}}</ion-label> </ion-button> </ion-buttons> </ion-toolbar> </ion-footer>