Skip to content
Snippets Groups Projects
profile.component.html 12.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • <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.changePassword' | translate}}</ion-label>
    
                        <ion-input name="currentPassword" [(ngModel)]="password.currentPassword"
                            placeholder="{{'lang.currentPassword' | translate}}"
                            [type]="hideCurrentPassword ? 'password' : 'text'"></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'"
                            (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'"></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>