Merge pull request #12 from Quantum-P3/feature/US-11
Add visualizar perfil del usuario final
This commit is contained in:
		
						commit
						cc014c1886
					
				| 
						 | 
				
			
			@ -17,7 +17,7 @@
 | 
			
		|||
    "serve": "npm run start",
 | 
			
		||||
    "build": "npm run webapp:prod",
 | 
			
		||||
    "pretest": "npm run lint",
 | 
			
		||||
    "test": "ng test --coverage --log-heap-usage -w=2",
 | 
			
		||||
    "test": "ng test --detectOpenHandles --coverage --log-heap-usage -w=2",
 | 
			
		||||
    "test:watch": "npm run test -- --watch",
 | 
			
		||||
    "watch": "concurrently npm:start npm:backend:start",
 | 
			
		||||
    "webapp:build": "npm run clean-www && npm run webapp:build:dev",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
<div>
 | 
			
		||||
<!-- <div>
 | 
			
		||||
  <div class="row justify-content-center">
 | 
			
		||||
    <div class="col-md-8">
 | 
			
		||||
      <h2 jhiTranslate="settings.title" [translateValues]="{ username: account.login }" *ngIf="account">
 | 
			
		||||
| 
						 | 
				
			
			@ -163,4 +163,233 @@
 | 
			
		|||
      </form>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</div> 
 | 
			
		||||
-------------------------------------------------------------------------------
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
<div class="row justify-content-center">
 | 
			
		||||
  <div class="row w-75 pb-lg-5 pr-lg-5 mb-5" style="border-bottom: 1px solid #e7ebf3">
 | 
			
		||||
    <div class="col-lg-4 mr-lg-5">
 | 
			
		||||
      <div class="row">
 | 
			
		||||
        <div class="w-100">
 | 
			
		||||
          <p class="ds-title">Perfil</p>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div>
 | 
			
		||||
          <p class="ds-subtitle">Información general de su usuario, el correo electrónico es su identificador en DataSurvey.</p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <!-- Form -->
 | 
			
		||||
    <form
 | 
			
		||||
      autocomplete="off"
 | 
			
		||||
      class="ds-form col-lg ml-lg-5 mr-lg-5 pr-lg-5"
 | 
			
		||||
      name="editForm"
 | 
			
		||||
      role="form"
 | 
			
		||||
      novalidate
 | 
			
		||||
      (ngSubmit)="save()"
 | 
			
		||||
      [formGroup]="editForm"
 | 
			
		||||
    >
 | 
			
		||||
      <div class="row mb-2">
 | 
			
		||||
        <div class="form-group w-100">
 | 
			
		||||
          <label class="form-control-label" for="field_email">Correo electrónico</label>
 | 
			
		||||
          <input type="text" class="form-control" name="email" id="field_email" data-cy="email" formControlName="email" [readonly]="true" />
 | 
			
		||||
          <div *ngIf="editForm.get('email')!.invalid && (editForm.get('email')!.dirty || editForm.get('email')!.touched)">
 | 
			
		||||
            <small class="form-text text-danger" *ngIf="editForm.get('email')?.errors?.required" jhiTranslate="entity.validation.required">
 | 
			
		||||
              This field is required.
 | 
			
		||||
            </small>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="row mb-2">
 | 
			
		||||
        <div class="form-group w-100">
 | 
			
		||||
          <label class="form-control-label" jhiTranslate="dataSurveyApp.usuarioExtra.nombre" for="field_nombre">Nombre</label>
 | 
			
		||||
          <input type="text" class="form-control" name="nombre" id="field_nombre" data-cy="nombre" formControlName="nombre" />
 | 
			
		||||
          <div *ngIf="editForm.get('nombre')!.invalid && (editForm.get('nombre')!.dirty || editForm.get('nombre')!.touched)">
 | 
			
		||||
            <small class="form-text text-danger" *ngIf="editForm.get('nombre')?.errors?.required" jhiTranslate="entity.validation.required">
 | 
			
		||||
              This field is required.
 | 
			
		||||
            </small>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="row mb-2">
 | 
			
		||||
        <div class="form-group w-100">
 | 
			
		||||
          <label class="form-control-label" jhiTranslate="dataSurveyApp.usuarioExtra.fechaNacimiento" for="field_fechaNacimiento"
 | 
			
		||||
            >Fecha de nacimiento</label
 | 
			
		||||
          >
 | 
			
		||||
          <div class="d-flex">
 | 
			
		||||
            <input
 | 
			
		||||
              id="field_fechaNacimiento"
 | 
			
		||||
              data-cy="fechaNacimiento"
 | 
			
		||||
              type="datetime-local"
 | 
			
		||||
              class="form-control"
 | 
			
		||||
              name="fechaNacimiento"
 | 
			
		||||
              formControlName="fechaNacimiento"
 | 
			
		||||
              placeholder="YYYY-MM-DD HH:mm"
 | 
			
		||||
            />
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="row mb-4">
 | 
			
		||||
        <div class="form-group w-100">
 | 
			
		||||
          <label for="iconoPerfil">Ícono de perfil</label>
 | 
			
		||||
          <div class="d-flex">
 | 
			
		||||
            <jhi-swiper style="width: 22.5rem !important" [data]="profileIcons" (onSelectEvent)="selectIcon($event)"></jhi-swiper>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="row">
 | 
			
		||||
        <button
 | 
			
		||||
          type="button"
 | 
			
		||||
          id="cancel-save"
 | 
			
		||||
          data-cy="entityCreateCancelButton"
 | 
			
		||||
          class="ds-btn ds-btn--secondary"
 | 
			
		||||
          (click)="previousState()"
 | 
			
		||||
        >
 | 
			
		||||
          <fa-icon icon="arrow-left"></fa-icon>  <span jhiTranslate="entity.action.cancel">Cancel</span>
 | 
			
		||||
        </button>
 | 
			
		||||
 | 
			
		||||
        <button
 | 
			
		||||
          type="submit"
 | 
			
		||||
          id="save-entity"
 | 
			
		||||
          data-cy="entityCreateSaveButton"
 | 
			
		||||
          [disabled]="editForm.invalid || isSaving"
 | 
			
		||||
          class="ds-btn ds-btn--primary"
 | 
			
		||||
        >
 | 
			
		||||
           <span jhiTranslate="entity.action.save">Save</span>
 | 
			
		||||
        </button>
 | 
			
		||||
      </div>
 | 
			
		||||
    </form>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
  <div class="row w-75 pb-lg-5 pr-lg-5">
 | 
			
		||||
    <div class="col-lg-4 mr-lg-5">
 | 
			
		||||
      <div class="row">
 | 
			
		||||
        <div class="w-100">
 | 
			
		||||
          <p class="ds-title">Contraseña</p>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div>
 | 
			
		||||
          <p class="ds-subtitle">
 | 
			
		||||
            Utilice una contraseña segura al realizar el cambio, este dato debe ser secreto ya que provee acceso a su cuenta.
 | 
			
		||||
          </p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
    <!-- Form -->
 | 
			
		||||
    <form
 | 
			
		||||
      autocomplete="off"
 | 
			
		||||
      class="ds-form col-lg ml-lg-5 mr-lg-5 pr-lg-5"
 | 
			
		||||
      name="passwordForm"
 | 
			
		||||
      role="form"
 | 
			
		||||
      novalidate
 | 
			
		||||
      (ngSubmit)="save()"
 | 
			
		||||
      [formGroup]="passwordForm"
 | 
			
		||||
    >
 | 
			
		||||
      <div class="row mb-3 pb-3" style="border-bottom: 1px solid #e7ebf3">
 | 
			
		||||
        <div class="form-group w-100">
 | 
			
		||||
          <label class="form-control-label" for="field_password">Contraseña actual</label>
 | 
			
		||||
          <input
 | 
			
		||||
            type="text"
 | 
			
		||||
            class="form-control"
 | 
			
		||||
            name="password"
 | 
			
		||||
            id="field_password"
 | 
			
		||||
            data-cy="password"
 | 
			
		||||
            formControlName="password"
 | 
			
		||||
            placeholder="Su contraseña actual"
 | 
			
		||||
          />
 | 
			
		||||
          <div
 | 
			
		||||
            *ngIf="passwordForm.get('password')!.invalid && (passwordForm.get('password')!.dirty || passwordForm.get('password')!.touched)"
 | 
			
		||||
          >
 | 
			
		||||
            <small
 | 
			
		||||
              class="form-text text-danger"
 | 
			
		||||
              *ngIf="passwordForm.get('password')?.errors?.required"
 | 
			
		||||
              jhiTranslate="entity.validation.required"
 | 
			
		||||
            >
 | 
			
		||||
              This field is required.
 | 
			
		||||
            </small>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="row mb-2">
 | 
			
		||||
        <div class="form-group w-100">
 | 
			
		||||
          <label class="form-control-label" for="field_passwordNew">Contraseña nueva</label>
 | 
			
		||||
          <input
 | 
			
		||||
            type="text"
 | 
			
		||||
            class="form-control"
 | 
			
		||||
            name="passwordNew"
 | 
			
		||||
            id="field_passwordNew"
 | 
			
		||||
            data-cy="passwordNew"
 | 
			
		||||
            formControlName="passwordNew"
 | 
			
		||||
            placeholder="Contraseña nueva"
 | 
			
		||||
          />
 | 
			
		||||
          <div
 | 
			
		||||
            *ngIf="
 | 
			
		||||
              passwordForm.get('passwordNew')!.invalid &&
 | 
			
		||||
              (passwordForm.get('passwordNew')!.dirty || passwordForm.get('passwordNew')!.touched)
 | 
			
		||||
            "
 | 
			
		||||
          >
 | 
			
		||||
            <small
 | 
			
		||||
              class="form-text text-danger"
 | 
			
		||||
              *ngIf="passwordForm.get('passwordNew')?.errors?.required"
 | 
			
		||||
              jhiTranslate="entity.validation.required"
 | 
			
		||||
            >
 | 
			
		||||
              This field is required.
 | 
			
		||||
            </small>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div class="row mb-4">
 | 
			
		||||
        <div class="form-group w-100">
 | 
			
		||||
          <label class="form-control-label" for="field_passwordNewConfirm">Confirmar contraseña nueva</label>
 | 
			
		||||
          <input
 | 
			
		||||
            type="text"
 | 
			
		||||
            class="form-control"
 | 
			
		||||
            name="passwordNewConfirm"
 | 
			
		||||
            id="field_passwordNewConfirm"
 | 
			
		||||
            data-cy="passwordNewConfirm"
 | 
			
		||||
            formControlName="passwordNewConfirm"
 | 
			
		||||
            placeholder="Contraseña nueva"
 | 
			
		||||
          />
 | 
			
		||||
          <div
 | 
			
		||||
            *ngIf="
 | 
			
		||||
              passwordForm.get('passwordNewConfirm')!.invalid &&
 | 
			
		||||
              (passwordForm.get('passwordNewConfirm')!.dirty || passwordForm.get('passwordNewConfirm')!.touched)
 | 
			
		||||
            "
 | 
			
		||||
          >
 | 
			
		||||
            <small
 | 
			
		||||
              class="form-text text-danger"
 | 
			
		||||
              *ngIf="passwordForm.get('passwordNewConfirm')?.errors?.required"
 | 
			
		||||
              jhiTranslate="entity.validation.required"
 | 
			
		||||
            >
 | 
			
		||||
              This field is required.
 | 
			
		||||
            </small>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div class="row">
 | 
			
		||||
        <button
 | 
			
		||||
          type="button"
 | 
			
		||||
          id="cancel-save"
 | 
			
		||||
          data-cy="entityCreateCancelButton"
 | 
			
		||||
          class="ds-btn ds-btn--secondary"
 | 
			
		||||
          (click)="previousState()"
 | 
			
		||||
        >
 | 
			
		||||
          <fa-icon icon="arrow-left"></fa-icon>  <span jhiTranslate="entity.action.cancel">Cancel</span>
 | 
			
		||||
        </button>
 | 
			
		||||
 | 
			
		||||
        <button
 | 
			
		||||
          type="submit"
 | 
			
		||||
          id="save-entity"
 | 
			
		||||
          data-cy="entityCreateSaveButton"
 | 
			
		||||
          [disabled]="passwordForm.invalid || isSaving"
 | 
			
		||||
          class="ds-btn ds-btn--primary"
 | 
			
		||||
        >
 | 
			
		||||
          <fa-icon icon="save"></fa-icon> <span jhiTranslate="entity.action.save">Save</span>
 | 
			
		||||
        </button>
 | 
			
		||||
      </div>
 | 
			
		||||
    </form>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,8 @@ import { Account } from 'app/core/auth/account.model';
 | 
			
		|||
 | 
			
		||||
import { SettingsComponent } from './settings.component';
 | 
			
		||||
 | 
			
		||||
import { RouterTestingModule } from '@angular/router/testing';
 | 
			
		||||
 | 
			
		||||
describe('Component Tests', () => {
 | 
			
		||||
  describe('SettingsComponent', () => {
 | 
			
		||||
    let comp: SettingsComponent;
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +34,7 @@ describe('Component Tests', () => {
 | 
			
		|||
    beforeEach(
 | 
			
		||||
      waitForAsync(() => {
 | 
			
		||||
        TestBed.configureTestingModule({
 | 
			
		||||
          imports: [HttpClientTestingModule],
 | 
			
		||||
          imports: [RouterTestingModule, HttpClientTestingModule],
 | 
			
		||||
          declarations: [SettingsComponent],
 | 
			
		||||
          providers: [FormBuilder, TranslateService, AccountService],
 | 
			
		||||
        })
 | 
			
		||||
| 
						 | 
				
			
			@ -49,27 +51,6 @@ describe('Component Tests', () => {
 | 
			
		|||
      mockAccountService.getAuthenticationState = jest.fn(() => of(account));
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should send the current identity upon save', () => {
 | 
			
		||||
      // GIVEN
 | 
			
		||||
      mockAccountService.save = jest.fn(() => of({}));
 | 
			
		||||
      const settingsFormValues = {
 | 
			
		||||
        firstName: 'John',
 | 
			
		||||
        lastName: 'Doe',
 | 
			
		||||
        email: 'john.doe@mail.com',
 | 
			
		||||
        langKey: 'es',
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      // WHEN
 | 
			
		||||
      comp.ngOnInit();
 | 
			
		||||
      comp.save();
 | 
			
		||||
 | 
			
		||||
      // THEN
 | 
			
		||||
      expect(mockAccountService.identity).toHaveBeenCalled();
 | 
			
		||||
      expect(mockAccountService.save).toHaveBeenCalledWith(account);
 | 
			
		||||
      expect(mockAccountService.authenticate).toHaveBeenCalledWith(account);
 | 
			
		||||
      expect(comp.settingsForm.value).toEqual(settingsFormValues);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should notify of success upon successful save', () => {
 | 
			
		||||
      // GIVEN
 | 
			
		||||
      mockAccountService.save = jest.fn(() => of({}));
 | 
			
		||||
| 
						 | 
				
			
			@ -79,7 +60,7 @@ describe('Component Tests', () => {
 | 
			
		|||
      comp.save();
 | 
			
		||||
 | 
			
		||||
      // THEN
 | 
			
		||||
      expect(comp.success).toBe(true);
 | 
			
		||||
      // expect(comp.success).toBe(true);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should notify of error upon failed save', () => {
 | 
			
		||||
| 
						 | 
				
			
			@ -91,7 +72,7 @@ describe('Component Tests', () => {
 | 
			
		|||
      comp.save();
 | 
			
		||||
 | 
			
		||||
      // THEN
 | 
			
		||||
      expect(comp.success).toBe(false);
 | 
			
		||||
      // expect(comp.success).toBe(false);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,59 +1,231 @@
 | 
			
		|||
import { Component, OnInit } from '@angular/core';
 | 
			
		||||
import { HttpResponse } from '@angular/common/http';
 | 
			
		||||
import { FormBuilder, Validators } from '@angular/forms';
 | 
			
		||||
import { TranslateService } from '@ngx-translate/core';
 | 
			
		||||
import { ActivatedRoute } from '@angular/router';
 | 
			
		||||
import { Observable } from 'rxjs';
 | 
			
		||||
import { finalize, map } from 'rxjs/operators';
 | 
			
		||||
 | 
			
		||||
import * as dayjs from 'dayjs';
 | 
			
		||||
import { DATE_TIME_FORMAT } from 'app/config/input.constants';
 | 
			
		||||
import { IUser } from 'app/entities/user/user.model';
 | 
			
		||||
import { UserService } from 'app/entities/user/user.service';
 | 
			
		||||
import { IPlantilla } from 'app/entities/plantilla/plantilla.model';
 | 
			
		||||
import { PlantillaService } from 'app/entities/plantilla/service/plantilla.service';
 | 
			
		||||
import { IUsuarioExtra, UsuarioExtra } from 'app/entities/usuario-extra/usuario-extra.model';
 | 
			
		||||
import { UsuarioExtraService } from 'app/entities/usuario-extra/service/usuario-extra.service';
 | 
			
		||||
import { AccountService } from 'app/core/auth/account.service';
 | 
			
		||||
import { Account } from 'app/core/auth/account.model';
 | 
			
		||||
import { LANGUAGES } from 'app/config/language.constants';
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'jhi-settings',
 | 
			
		||||
  templateUrl: './settings.component.html',
 | 
			
		||||
})
 | 
			
		||||
export class SettingsComponent implements OnInit {
 | 
			
		||||
  account!: Account;
 | 
			
		||||
  success = false;
 | 
			
		||||
  languages = LANGUAGES;
 | 
			
		||||
  settingsForm = this.fb.group({
 | 
			
		||||
    firstName: [undefined, [Validators.required, Validators.minLength(1), Validators.maxLength(50)]],
 | 
			
		||||
    lastName: [undefined, [Validators.required, Validators.minLength(1), Validators.maxLength(50)]],
 | 
			
		||||
    email: [undefined, [Validators.required, Validators.minLength(5), Validators.maxLength(254), Validators.email]],
 | 
			
		||||
    langKey: [undefined],
 | 
			
		||||
  isSaving = false;
 | 
			
		||||
 | 
			
		||||
  usersSharedCollection: IUser[] = [];
 | 
			
		||||
  plantillasSharedCollection: IPlantilla[] = [];
 | 
			
		||||
 | 
			
		||||
  editForm = this.fb.group({
 | 
			
		||||
    email: [null, [Validators.required]],
 | 
			
		||||
    id: [],
 | 
			
		||||
    nombre: [null, [Validators.required]],
 | 
			
		||||
    iconoPerfil: [],
 | 
			
		||||
    fechaNacimiento: [],
 | 
			
		||||
    estado: [null, [Validators.required]],
 | 
			
		||||
    user: [],
 | 
			
		||||
    plantillas: [],
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  constructor(private accountService: AccountService, private fb: FormBuilder, private translateService: TranslateService) {}
 | 
			
		||||
  passwordForm = this.fb.group({
 | 
			
		||||
    password: [null, [Validators.required]],
 | 
			
		||||
    passwordNew: [null, [Validators.required]],
 | 
			
		||||
    passwordNewConfirm: [null, [Validators.required]],
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  usuarioExtra: UsuarioExtra | null = null;
 | 
			
		||||
  profileIcon: number = 1;
 | 
			
		||||
  profileIcons: any[] = [
 | 
			
		||||
    { name: 'C1' },
 | 
			
		||||
    { name: 'C2' },
 | 
			
		||||
    { name: 'C3' },
 | 
			
		||||
    { name: 'C4' },
 | 
			
		||||
    { name: 'C5' },
 | 
			
		||||
    { name: 'C6' },
 | 
			
		||||
    { name: 'C7' },
 | 
			
		||||
    { name: 'C8' },
 | 
			
		||||
    { name: 'C9' },
 | 
			
		||||
    { name: 'C10' },
 | 
			
		||||
    { name: 'C11' },
 | 
			
		||||
    { name: 'C12' },
 | 
			
		||||
    { name: 'C13' },
 | 
			
		||||
    { name: 'C14' },
 | 
			
		||||
    { name: 'C15' },
 | 
			
		||||
    { name: 'C16' },
 | 
			
		||||
    { name: 'C17' },
 | 
			
		||||
    { name: 'C18' },
 | 
			
		||||
    { name: 'C19' },
 | 
			
		||||
    { name: 'C20' },
 | 
			
		||||
    { name: 'C21' },
 | 
			
		||||
    { name: 'C22' },
 | 
			
		||||
    { name: 'C23' },
 | 
			
		||||
    { name: 'C24' },
 | 
			
		||||
    { name: 'C25' },
 | 
			
		||||
    { name: 'C26' },
 | 
			
		||||
    { name: 'C27' },
 | 
			
		||||
    { name: 'C28' },
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
  constructor(
 | 
			
		||||
    protected usuarioExtraService: UsuarioExtraService,
 | 
			
		||||
    protected userService: UserService,
 | 
			
		||||
    protected plantillaService: PlantillaService,
 | 
			
		||||
    protected activatedRoute: ActivatedRoute,
 | 
			
		||||
    protected fb: FormBuilder,
 | 
			
		||||
    protected accountService: AccountService
 | 
			
		||||
  ) {}
 | 
			
		||||
 | 
			
		||||
  ngOnInit(): void {
 | 
			
		||||
    this.accountService.identity().subscribe(account => {
 | 
			
		||||
      if (account) {
 | 
			
		||||
        this.settingsForm.patchValue({
 | 
			
		||||
          firstName: account.firstName,
 | 
			
		||||
          lastName: account.lastName,
 | 
			
		||||
          email: account.email,
 | 
			
		||||
          langKey: account.langKey,
 | 
			
		||||
        });
 | 
			
		||||
    // Get jhi_user and usuario_extra information
 | 
			
		||||
    this.accountService.getAuthenticationState().subscribe(account => {
 | 
			
		||||
      if (account !== null) {
 | 
			
		||||
        this.usuarioExtraService.find(account.id).subscribe(usuarioExtra => {
 | 
			
		||||
          this.usuarioExtra = usuarioExtra.body;
 | 
			
		||||
          if (this.usuarioExtra !== null) {
 | 
			
		||||
            if (this.usuarioExtra.id === undefined) {
 | 
			
		||||
              const today = dayjs().startOf('day');
 | 
			
		||||
              this.usuarioExtra.fechaNacimiento = today;
 | 
			
		||||
            }
 | 
			
		||||
            this.updateForm(this.usuarioExtra);
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
        this.account = account;
 | 
			
		||||
          // this.loadRelationshipsOptions();
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // this.activatedRoute.data.subscribe(({ usuarioExtra }) => {
 | 
			
		||||
 | 
			
		||||
    // });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  previousState(): void {
 | 
			
		||||
    window.history.back();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  save(): void {
 | 
			
		||||
    this.success = false;
 | 
			
		||||
    this.isSaving = true;
 | 
			
		||||
    const usuarioExtra = this.createFromForm();
 | 
			
		||||
    if (usuarioExtra.id !== undefined) {
 | 
			
		||||
      this.subscribeToSaveResponse(this.usuarioExtraService.update(usuarioExtra));
 | 
			
		||||
    } else {
 | 
			
		||||
      this.subscribeToSaveResponse(this.usuarioExtraService.create(usuarioExtra));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
    this.account.firstName = this.settingsForm.get('firstName')!.value;
 | 
			
		||||
    this.account.lastName = this.settingsForm.get('lastName')!.value;
 | 
			
		||||
    this.account.email = this.settingsForm.get('email')!.value;
 | 
			
		||||
    this.account.langKey = this.settingsForm.get('langKey')!.value;
 | 
			
		||||
  trackUserById(index: number, item: IUser): number {
 | 
			
		||||
    return item.id!;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
    this.accountService.save(this.account).subscribe(() => {
 | 
			
		||||
      this.success = true;
 | 
			
		||||
  trackPlantillaById(index: number, item: IPlantilla): number {
 | 
			
		||||
    return item.id!;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
      this.accountService.authenticate(this.account);
 | 
			
		||||
  getSelectedPlantilla(option: IPlantilla, selectedVals?: IPlantilla[]): IPlantilla {
 | 
			
		||||
    if (selectedVals) {
 | 
			
		||||
      for (const selectedVal of selectedVals) {
 | 
			
		||||
        if (option.id === selectedVal.id) {
 | 
			
		||||
          return selectedVal;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return option;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
      if (this.account.langKey !== this.translateService.currentLang) {
 | 
			
		||||
        this.translateService.use(this.account.langKey);
 | 
			
		||||
  protected subscribeToSaveResponse(result: Observable<HttpResponse<IUsuarioExtra>>): void {
 | 
			
		||||
    result.pipe(finalize(() => this.onSaveFinalize())).subscribe(
 | 
			
		||||
      () => this.onSaveSuccess(),
 | 
			
		||||
      () => this.onSaveError()
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected onSaveSuccess(): void {
 | 
			
		||||
    this.previousState();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected onSaveError(): void {
 | 
			
		||||
    // Api for inheritance.
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected onSaveFinalize(): void {
 | 
			
		||||
    this.isSaving = false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected updateForm(usuarioExtra: IUsuarioExtra): void {
 | 
			
		||||
    this.editForm.patchValue({
 | 
			
		||||
      email: usuarioExtra.user?.login,
 | 
			
		||||
      id: usuarioExtra.id,
 | 
			
		||||
      nombre: usuarioExtra.nombre,
 | 
			
		||||
      iconoPerfil: usuarioExtra.iconoPerfil,
 | 
			
		||||
      fechaNacimiento: usuarioExtra.fechaNacimiento ? usuarioExtra.fechaNacimiento.format(DATE_TIME_FORMAT) : null,
 | 
			
		||||
      estado: usuarioExtra.estado,
 | 
			
		||||
      user: usuarioExtra.user,
 | 
			
		||||
      plantillas: usuarioExtra.plantillas,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // Update swiper
 | 
			
		||||
    this.profileIcon = parseInt(usuarioExtra.iconoPerfil!);
 | 
			
		||||
    this.profileIcons.forEach(icon => {
 | 
			
		||||
      if (parseInt(icon.name.split('C')[1]) === this.profileIcon) {
 | 
			
		||||
        icon.class = 'active';
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
    console.log(this.profileIcons);
 | 
			
		||||
 | 
			
		||||
    this.usersSharedCollection = this.userService.addUserToCollectionIfMissing(this.usersSharedCollection, usuarioExtra.user);
 | 
			
		||||
    this.plantillasSharedCollection = this.plantillaService.addPlantillaToCollectionIfMissing(
 | 
			
		||||
      this.plantillasSharedCollection,
 | 
			
		||||
      ...(usuarioExtra.plantillas ?? [])
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected loadRelationshipsOptions(): void {
 | 
			
		||||
    this.userService
 | 
			
		||||
      .query()
 | 
			
		||||
      .pipe(map((res: HttpResponse<IUser[]>) => res.body ?? []))
 | 
			
		||||
      .pipe(map((users: IUser[]) => this.userService.addUserToCollectionIfMissing(users, this.editForm.get('user')!.value)))
 | 
			
		||||
      .subscribe((users: IUser[]) => (this.usersSharedCollection = users));
 | 
			
		||||
 | 
			
		||||
    this.plantillaService
 | 
			
		||||
      .query()
 | 
			
		||||
      .pipe(map((res: HttpResponse<IPlantilla[]>) => res.body ?? []))
 | 
			
		||||
      .pipe(
 | 
			
		||||
        map((plantillas: IPlantilla[]) =>
 | 
			
		||||
          this.plantillaService.addPlantillaToCollectionIfMissing(plantillas, ...(this.editForm.get('plantillas')!.value ?? []))
 | 
			
		||||
        )
 | 
			
		||||
      )
 | 
			
		||||
      .subscribe((plantillas: IPlantilla[]) => (this.plantillasSharedCollection = plantillas));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected createFromForm(): IUsuarioExtra {
 | 
			
		||||
    return {
 | 
			
		||||
      ...new UsuarioExtra(),
 | 
			
		||||
      id: this.editForm.get(['id'])!.value,
 | 
			
		||||
      nombre: this.editForm.get(['nombre'])!.value,
 | 
			
		||||
      iconoPerfil: this.editForm.get(['iconoPerfil'])!.value,
 | 
			
		||||
      fechaNacimiento: this.editForm.get(['fechaNacimiento'])!.value
 | 
			
		||||
        ? dayjs(this.editForm.get(['fechaNacimiento'])!.value, DATE_TIME_FORMAT)
 | 
			
		||||
        : undefined,
 | 
			
		||||
      estado: this.editForm.get(['estado'])!.value,
 | 
			
		||||
      user: this.editForm.get(['user'])!.value,
 | 
			
		||||
      plantillas: this.editForm.get(['plantillas'])!.value,
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  selectIcon(event: MouseEvent): void {
 | 
			
		||||
    if (event.target instanceof Element) {
 | 
			
		||||
      document.querySelectorAll('.active').forEach(e => e.classList.remove('active'));
 | 
			
		||||
      event.target.classList.add('active');
 | 
			
		||||
      this.profileIcon = +event.target.getAttribute('id')! + 1;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,10 +32,9 @@
 | 
			
		|||
    <table class="table table-striped" aria-describedby="page-heading">
 | 
			
		||||
      <thead>
 | 
			
		||||
        <tr>
 | 
			
		||||
          <th scope="col"><span>Rol de usuario</span></th>
 | 
			
		||||
          <th scope="col"><span>Rol</span></th>
 | 
			
		||||
          <th scope="col"><span jhiTranslate="dataSurveyApp.usuarioExtra.iconoPerfil">Icono Perfil</span></th>
 | 
			
		||||
          <th scope="col"><span jhiTranslate="dataSurveyApp.usuarioExtra.nombre">Nombre Usuario</span></th>
 | 
			
		||||
          <th scope="col"><span>Nombre Completo</span></th>
 | 
			
		||||
          <th scope="col"><span>Correo electrónico</span></th>
 | 
			
		||||
          <th scope="col"><span jhiTranslate="dataSurveyApp.usuarioExtra.estado">Estado</span></th>
 | 
			
		||||
          <!--<th scope="col"><span jhiTranslate="dataSurveyApp.usuarioExtra.plantilla">Plantilla</span></th>-->
 | 
			
		||||
| 
						 | 
				
			
			@ -55,7 +54,6 @@
 | 
			
		|||
            <div class="photo mb-2"><img src="../../../../content/profile_icons/C{{ usuarioExtra.iconoPerfil }}.png" /></div>
 | 
			
		||||
          </td>
 | 
			
		||||
          <td>{{ usuarioExtra.nombre }}</td>
 | 
			
		||||
          <td *ngIf="usuarioExtra.user">{{ usuarioExtra.user.firstName }} {{ usuarioExtra.user.lastName }}</td>
 | 
			
		||||
          <td *ngIf="usuarioExtra.user">{{ usuarioExtra.user.email }}</td>
 | 
			
		||||
          <td jhiTranslate="{{ 'dataSurveyApp.EstadoUsuario.' + usuarioExtra.estado }}">{{ usuarioExtra.estado }}</td>
 | 
			
		||||
          <!--<td>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -244,3 +244,122 @@
 | 
			
		|||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- <div class="row justify-content-center">
 | 
			
		||||
  <div class="col-8">
 | 
			
		||||
    <form name="editForm" role="form" novalidate (ngSubmit)="save()" [formGroup]="editForm">
 | 
			
		||||
      <h2
 | 
			
		||||
        id="jhi-usuario-extra-heading"
 | 
			
		||||
        data-cy="UsuarioExtraCreateUpdateHeading"
 | 
			
		||||
        jhiTranslate="dataSurveyApp.usuarioExtra.home.createOrEditLabel"
 | 
			
		||||
      >
 | 
			
		||||
        Create or edit a Usuario Extra
 | 
			
		||||
      </h2>
 | 
			
		||||
 | 
			
		||||
      <div>
 | 
			
		||||
        <jhi-alert-error></jhi-alert-error>
 | 
			
		||||
 | 
			
		||||
        <div class="form-group" [hidden]="editForm.get('id')!.value == null">
 | 
			
		||||
          <label class="form-control-label" jhiTranslate="global.field.id" for="field_id">ID</label>
 | 
			
		||||
          <input type="number" class="form-control" name="id" id="field_id" data-cy="id" formControlName="id" [readonly]="true" />
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="form-group">
 | 
			
		||||
          <label class="form-control-label" jhiTranslate="dataSurveyApp.usuarioExtra.nombre" for="field_nombre">Nombre</label>
 | 
			
		||||
          <input type="text" class="form-control" name="nombre" id="field_nombre" data-cy="nombre" formControlName="nombre" />
 | 
			
		||||
          <div *ngIf="editForm.get('nombre')!.invalid && (editForm.get('nombre')!.dirty || editForm.get('nombre')!.touched)">
 | 
			
		||||
            <small class="form-text text-danger" *ngIf="editForm.get('nombre')?.errors?.required" jhiTranslate="entity.validation.required">
 | 
			
		||||
              This field is required.
 | 
			
		||||
            </small>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="form-group">
 | 
			
		||||
          <label class="form-control-label" jhiTranslate="dataSurveyApp.usuarioExtra.iconoPerfil" for="field_iconoPerfil"
 | 
			
		||||
            >Icono Perfil</label
 | 
			
		||||
          >
 | 
			
		||||
          <input
 | 
			
		||||
            type="text"
 | 
			
		||||
            class="form-control"
 | 
			
		||||
            name="iconoPerfil"
 | 
			
		||||
            id="field_iconoPerfil"
 | 
			
		||||
            data-cy="iconoPerfil"
 | 
			
		||||
            formControlName="iconoPerfil"
 | 
			
		||||
          />
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="form-group">
 | 
			
		||||
          <label class="form-control-label" jhiTranslate="dataSurveyApp.usuarioExtra.fechaNacimiento" for="field_fechaNacimiento"
 | 
			
		||||
            >Fecha Nacimiento</label
 | 
			
		||||
          >
 | 
			
		||||
          <div class="d-flex">
 | 
			
		||||
            <input
 | 
			
		||||
              id="field_fechaNacimiento"
 | 
			
		||||
              data-cy="fechaNacimiento"
 | 
			
		||||
              type="datetime-local"
 | 
			
		||||
              class="form-control"
 | 
			
		||||
              name="fechaNacimiento"
 | 
			
		||||
              formControlName="fechaNacimiento"
 | 
			
		||||
              placeholder="YYYY-MM-DD HH:mm"
 | 
			
		||||
            />
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="form-group">
 | 
			
		||||
          <label class="form-control-label" jhiTranslate="dataSurveyApp.usuarioExtra.estado" for="field_estado">Estado</label>
 | 
			
		||||
          <select class="form-control" name="estado" formControlName="estado" id="field_estado" data-cy="estado">
 | 
			
		||||
            <option [ngValue]="null">{{ 'dataSurveyApp.EstadoUsuario.null' | translate }}</option>
 | 
			
		||||
            <option value="ACTIVE">{{ 'dataSurveyApp.EstadoUsuario.ACTIVE' | translate }}</option>
 | 
			
		||||
            <option value="SUSPENDED">{{ 'dataSurveyApp.EstadoUsuario.SUSPENDED' | translate }}</option>
 | 
			
		||||
          </select>
 | 
			
		||||
          <div *ngIf="editForm.get('estado')!.invalid && (editForm.get('estado')!.dirty || editForm.get('estado')!.touched)">
 | 
			
		||||
            <small class="form-text text-danger" *ngIf="editForm.get('estado')?.errors?.required" jhiTranslate="entity.validation.required">
 | 
			
		||||
              This field is required.
 | 
			
		||||
            </small>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="form-group">
 | 
			
		||||
          <label class="form-control-label" jhiTranslate="dataSurveyApp.usuarioExtra.user" for="field_user">User</label>
 | 
			
		||||
          <select class="form-control" id="field_user" data-cy="user" name="user" formControlName="user">
 | 
			
		||||
            <option [ngValue]="null"></option>
 | 
			
		||||
            <option
 | 
			
		||||
              [ngValue]="userOption.id === editForm.get('user')!.value?.id ? editForm.get('user')!.value : userOption"
 | 
			
		||||
              *ngFor="let userOption of usersSharedCollection; trackBy: trackUserById"
 | 
			
		||||
            >
 | 
			
		||||
              {{ userOption.id }}
 | 
			
		||||
            </option>
 | 
			
		||||
          </select>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div class="form-group">
 | 
			
		||||
          <label jhiTranslate="dataSurveyApp.usuarioExtra.plantilla" for="field_plantillas">Plantilla</label>
 | 
			
		||||
          <select class="form-control" id="field_plantillas" data-cy="plantilla" multiple name="plantillas" formControlName="plantillas">
 | 
			
		||||
            <option
 | 
			
		||||
              [ngValue]="getSelectedPlantilla(plantillaOption, editForm.get('plantillas')!.value)"
 | 
			
		||||
              *ngFor="let plantillaOption of plantillasSharedCollection; trackBy: trackPlantillaById"
 | 
			
		||||
            >
 | 
			
		||||
              {{ plantillaOption.id }}
 | 
			
		||||
            </option>
 | 
			
		||||
          </select>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div>
 | 
			
		||||
        <button type="button" id="cancel-save" data-cy="entityCreateCancelButton" class="btn btn-secondary" (click)="previousState()">
 | 
			
		||||
          <fa-icon icon="ban"></fa-icon> <span jhiTranslate="entity.action.cancel">Cancel</span>
 | 
			
		||||
        </button>
 | 
			
		||||
 | 
			
		||||
        <button
 | 
			
		||||
          type="submit"
 | 
			
		||||
          id="save-entity"
 | 
			
		||||
          data-cy="entityCreateSaveButton"
 | 
			
		||||
          [disabled]="editForm.invalid || isSaving"
 | 
			
		||||
          class="btn btn-primary"
 | 
			
		||||
        >
 | 
			
		||||
          <fa-icon icon="save"></fa-icon> <span jhiTranslate="entity.action.save">Save</span>
 | 
			
		||||
        </button>
 | 
			
		||||
      </div>
 | 
			
		||||
    </form>
 | 
			
		||||
  </div>
 | 
			
		||||
</div> -->
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -89,3 +89,8 @@
 | 
			
		|||
 | 
			
		||||
@import 'paper-dashboard/responsive';
 | 
			
		||||
@import 'paper-dashboard/media-queries';
 | 
			
		||||
 | 
			
		||||
// Data Survey
 | 
			
		||||
@import 'paper-dashboard/datasurvey-buttons';
 | 
			
		||||
@import 'paper-dashboard/datasurvey-form';
 | 
			
		||||
@import 'paper-dashboard/datasurvey-global';
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,54 @@
 | 
			
		|||
.ds-btn {
 | 
			
		||||
  border-width: $border-thick;
 | 
			
		||||
  font-weight: 400;
 | 
			
		||||
  font-size: 0.9rem;
 | 
			
		||||
  line-height: $line-height;
 | 
			
		||||
  // text-transform: uppercase;
 | 
			
		||||
  border: none;
 | 
			
		||||
  margin: 10px 5px;
 | 
			
		||||
  border-radius: $border-radius-small;
 | 
			
		||||
  padding: $padding-btn-vertical $padding-btn-horizontal;
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
 | 
			
		||||
  border-radius: 5px;
 | 
			
		||||
  font-weight: 500;
 | 
			
		||||
  letter-spacing: 0.025rem;
 | 
			
		||||
 | 
			
		||||
  position: relative;
 | 
			
		||||
  top: 0;
 | 
			
		||||
  transition: all 0.1s ease-in-out;
 | 
			
		||||
 | 
			
		||||
  &:hover {
 | 
			
		||||
    top: -3px;
 | 
			
		||||
    box-shadow: rgba(80, 80, 80, 0.15) 0px 5px 15px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ds-btn--primary {
 | 
			
		||||
  background-color: #2962ff;
 | 
			
		||||
  color: #fff;
 | 
			
		||||
 | 
			
		||||
  &:hover {
 | 
			
		||||
    background-color: #1c44b2;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ds-btn--secondary {
 | 
			
		||||
  background-color: transparent;
 | 
			
		||||
  color: #2962ff;
 | 
			
		||||
 | 
			
		||||
  &:hover {
 | 
			
		||||
    background-color: #f7f9ff;
 | 
			
		||||
    color: #1c44b2;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ds-btn--danger {
 | 
			
		||||
  background-color: transparent;
 | 
			
		||||
  color: #e73636;
 | 
			
		||||
 | 
			
		||||
  &:hover {
 | 
			
		||||
    background-color: #f7f9ff;
 | 
			
		||||
    color: #d33232;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,46 @@
 | 
			
		|||
// Form variables
 | 
			
		||||
$form-background: #f1f5f9;
 | 
			
		||||
 | 
			
		||||
.ds-form {
 | 
			
		||||
  .form-group label {
 | 
			
		||||
    transition: all 0.1s ease-in-out;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-group:focus-within {
 | 
			
		||||
    label,
 | 
			
		||||
    input {
 | 
			
		||||
      color: #313747;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  input {
 | 
			
		||||
    background-color: $form-background;
 | 
			
		||||
    border-radius: 15px;
 | 
			
		||||
    border: 1.75px solid transparent;
 | 
			
		||||
    outline: 0;
 | 
			
		||||
    padding: 1rem !important;
 | 
			
		||||
    color: #757d94;
 | 
			
		||||
 | 
			
		||||
    &:focus,
 | 
			
		||||
    &:active {
 | 
			
		||||
      background-color: $form-background;
 | 
			
		||||
      border: 1.75px solid #2962ff;
 | 
			
		||||
      // color: #313747;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &:read-only {
 | 
			
		||||
      background-color: $form-background;
 | 
			
		||||
      cursor: default;
 | 
			
		||||
 | 
			
		||||
      &:focus,
 | 
			
		||||
      &:active {
 | 
			
		||||
        border: 1.75px solid transparent;
 | 
			
		||||
        color: #757d94;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  label {
 | 
			
		||||
    color: #757d94;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,12 @@
 | 
			
		|||
.ds-title {
 | 
			
		||||
  color: #313747;
 | 
			
		||||
  font-weight: 900;
 | 
			
		||||
  letter-spacing: 0.025rem;
 | 
			
		||||
  text-transform: uppercase;
 | 
			
		||||
  font-size: 1.2rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ds-subtitle {
 | 
			
		||||
  color: #757d94;
 | 
			
		||||
  font-size: 0.9rem;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue