angular-bootstrap-italia
Version:
<p align="center"> <h1 align="center">Bootstrap Italia + Angular 9</h1>
483 lines (470 loc) • 119 kB
JavaScript
import { __decorate } from 'tslib';
import { EventEmitter, Input, Output, Component, Injectable, ChangeDetectionStrategy, ɵɵdefineInjectable, ɵɵinject, ViewChild, NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { FormControl, Validators, FormGroup, ReactiveFormsModule, FormsModule } from '@angular/forms';
import { debounceTime, distinctUntilChanged, tap, switchMap, finalize } from 'rxjs/operators';
import { Subject } from 'rxjs/internal/Subject';
import { EMPTY } from 'rxjs/internal/observable/empty';
import { HttpClient } from '@angular/common/http';
import { FeatureGroup, icon, map, tileLayer, control, Control, Draw, geoJSON, marker } from 'leaflet';
import 'leaflet-draw';
import drawLocales from 'leaflet-draw-locales';
let HeaderComponent = class HeaderComponent {
constructor() {
this.logout = new EventEmitter();
}
onLogout(event) {
this.logout.emit(event);
}
};
__decorate([
Input()
], HeaderComponent.prototype, "owner", void 0);
__decorate([
Input()
], HeaderComponent.prototype, "appName", void 0);
__decorate([
Input()
], HeaderComponent.prototype, "isAuthenticated", void 0);
__decorate([
Input()
], HeaderComponent.prototype, "menuItems", void 0);
__decorate([
Input()
], HeaderComponent.prototype, "loginRoute", void 0);
__decorate([
Input()
], HeaderComponent.prototype, "userName", void 0);
__decorate([
Output()
], HeaderComponent.prototype, "logout", void 0);
HeaderComponent = __decorate([
Component({
selector: 'lib-header',
template: "<div class=\"it-header-wrapper\">\r\n\r\n <div class=\"it-header-slim-wrapper\">\r\n <div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"it-header-slim-wrapper-content\">\r\n <a class=\"d-lg-block navbar-brand\" href=\"http://www.protezionecivile.gov.it/\">{{ owner }}</a>\r\n <div class=\"it-header-slim-right-zone\">\r\n <div class=\"nav-item dropdown\">\r\n <a class=\"nav-link dropdown-toggle\" href=\"#\" data-toggle=\"dropdown\" aria-expanded=\"false\">\r\n <span>ITA</span>\r\n <svg class=\"icon d-none d-lg-block\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-expand\"></use>\r\n </svg>\r\n </a>\r\n <div class=\"dropdown-menu\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"link-list-wrapper\">\r\n <ul class=\"link-list\">\r\n <li>\r\n <a class=\"list-item\" href=\"#\"><span>ITA</span></a>\r\n </li>\r\n <li>\r\n <a class=\"list-item\" href=\"#\"><span>ENG</span></a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <a [routerLink]=\"[loginRoute]\" class=\"btn btn-primary btn-icon btn-full\"\r\n *ngIf=\"!isAuthenticated; else elseBlock\">\r\n <span class=\"rounded-icon\">\r\n <svg class=\"icon icon-primary\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-user\"></use>\r\n </svg>\r\n </span>\r\n <span class=\"d-none d-lg-block\">Accedi</span>\r\n </a>\r\n <ng-template #elseBlock>\r\n <div class=\"dropdown\">\r\n <a class=\"btn btn-primary btn-icon btn-full\" href=\"#\" role=\"button\" id=\"dropdownMenuLink\"\r\n data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n <span class=\"rounded-icon\">\r\n <svg class=\"icon icon-primary\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-user\"></use>\r\n </svg>\r\n </span>\r\n <span class=\"d-none d-lg-block\">{{ userName }}</span>\r\n </a>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuLink\">\r\n <div class=\"link-list-wrapper\">\r\n <ul class=\"link-list\">\r\n <li><a class=\"list-item\" href=\"#\" (click)=\"onLogout($event)\"><span>Logout</span></a></li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"it-nav-wrapper\">\r\n <div class=\"it-header-center-wrapper\">\r\n <div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <div class=\"it-header-center-content-wrapper\">\r\n <div class=\"it-brand-wrapper\">\r\n <a href=\"#\">\r\n <svg class=\"icon\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-code-circle\"></use>\r\n </svg>\r\n <div class=\"it-brand-text\">\r\n <h2 class=\"no_toc\">{{ appName }}</h2>\r\n <h3 class=\"no_toc d-none d-md-block\">Inserire qui la tag line</h3>\r\n </div>\r\n </a>\r\n </div>\r\n <div class=\"it-right-zone\">\r\n <div class=\"it-socials d-none d-md-flex\">\r\n <span>Seguici su</span>\r\n <ul>\r\n <li>\r\n <a href=\"#\" aria-label=\"Facebook\" target=\"_blank\">\r\n <svg class=\"icon\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-facebook\"></use>\r\n </svg>\r\n </a>\r\n </li>\r\n <li>\r\n <a href=\"#\" aria-label=\"Github\" target=\"_blank\">\r\n <svg class=\"icon\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-github\"></use>\r\n </svg>\r\n </a>\r\n </li>\r\n <li>\r\n <a href=\"#\" target=\"_blank\" aria-label=\"Twitter\">\r\n <svg class=\"icon\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-twitter\"></use>\r\n </svg>\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"it-search-wrapper\" *ngIf=\"isAuthenticated\">\r\n <span class=\"d-none d-md-block\">Cerca</span>\r\n <a class=\"search-link rounded-icon\" href=\"#\" aria-label=\"Cerca\" data-toggle=\"modal\"\r\n data-target=\"#modalSearchFullScreen\" data-backdrop=\"false\">\r\n <svg class=\"icon\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-search\"></use>\r\n </svg>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <lib-header-navbar [menuItems]=\"menuItems\" *ngIf=\"isAuthenticated\"></lib-header-navbar>\r\n <lib-search-modal *ngIf=\"isAuthenticated\"></lib-search-modal>\r\n </div>\r\n</div>\r\n"
})
], HeaderComponent);
let FooterComponent = class FooterComponent {
constructor() { }
};
__decorate([
Input()
], FooterComponent.prototype, "owner", void 0);
__decorate([
Input()
], FooterComponent.prototype, "appName", void 0);
FooterComponent = __decorate([
Component({
selector: 'lib-footer',
template: "<footer class=\"it-footer\">\r\n <div class=\"it-footer-main\">\r\n <div class=\"container-fluid\">\r\n <section>\r\n <div class=\"row clearfix\">\r\n <div class=\"col-sm-12\">\r\n <div class=\"it-brand-wrapper\">\r\n <a href=\"#\">\r\n <svg class=\"icon\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-code-circle\"></use>\r\n </svg>\r\n <div class=\"it-brand-text\">\r\n <h2 class=\"no_toc\">{{ appName }}</h2>\r\n <h3 class=\"no_toc d-none d-md-block\">Inserire qui la tag line</h3>\r\n </div>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n <section>\r\n <div class=\"row\">\r\n <div class=\"col-lg-3 col-md-3 col-sm-6 pb-2\">\r\n <h4>\r\n <a href=\"#\" title=\"Vai alla pagina: Amministrazione\">Amministrazione</a>\r\n </h4>\r\n <div class=\"link-list-wrapper\">\r\n <ul class=\"footer-list link-list clearfix\">\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Giunta e consiglio\">Giunta e consiglio</a>\r\n </li>\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Aree di competenza\">Aree di competenza</a>\r\n </li>\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Dipendenti\">Dipendenti</a></li>\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Luoghi\">Luoghi</a></li>\r\n <li><a class=\"list-item\" href=\"#\"\r\n title=\"Vai alla pagina: Associazioni e societ\u00E0 partecipate\">Associazioni e societ\u00E0 partecipate</a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-3 col-md-3 col-sm-6 pb-2\">\r\n <h4>\r\n <a href=\"#\" title=\"Vai alla pagina: Servizi\">Servizi</a>\r\n </h4>\r\n <div class=\"link-list-wrapper\">\r\n <ul class=\"footer-list link-list clearfix\">\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Pagamenti\">Pagamenti</a></li>\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Sostegno\">Sostegno</a></li>\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Domande e iscrizioni\">Domande e iscrizioni</a>\r\n </li>\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Segnalazioni\">Segnalazioni</a></li>\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Autorizzazioni e concessioni\">Autorizzazioni e\r\n concessioni</a></li>\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Certificati e dichiarazioni\">Certificati e\r\n dichiarazioni</a></li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-3 col-md-3 col-sm-6 pb-2\">\r\n <h4>\r\n <a href=\"#\" title=\"Vai alla pagina: Novit\u00E0\">Novit\u00E0</a>\r\n </h4>\r\n <div class=\"link-list-wrapper\">\r\n <ul class=\"footer-list link-list clearfix\">\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Notizie\">Notizie</a></li>\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Eventi\">Eventi</a></li>\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Comunicati stampa\">Comunicati stampa</a></li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-3 col-md-3 col-sm-6\">\r\n <h4>\r\n <a href=\"#\" title=\"Vai alla pagina: Documenti\">Documenti</a>\r\n </h4>\r\n <div class=\"link-list-wrapper\">\r\n <ul class=\"footer-list link-list clearfix\">\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Progetti e attivit\u00E0\">Progetti e attivit\u00E0</a>\r\n </li>\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Delibere, determine e ordinanze\">Delibere,\r\n determine e ordinanze</a></li>\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Bandi\">Bandi</a></li>\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Concorsi\">Concorsi</a></li>\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Albo pretorio\">Albo pretorio</a></li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n <section class=\"py-4 border-white border-top\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-4 col-md-4 pb-2\">\r\n <h4><a href=\"#\" title=\"Vai alla pagina: Contatti\">Contatti</a></h4>\r\n <p>\r\n <strong>Comune di Lorem Ipsum</strong><br> Via Roma 0 - 00000 Lorem Ipsum Codice fiscale / P. IVA:\r\n 000000000\r\n </p>\r\n <div class=\"link-list-wrapper\">\r\n <ul class=\"footer-list link-list clearfix\">\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: Posta Elettronica Certificata\">Posta\r\n Elettronica Certificata</a></li>\r\n <li><a class=\"list-item\" href=\"#\" title=\"Vai alla pagina: URP - Ufficio Relazioni con il Pubblico\">URP -\r\n Ufficio Relazioni con il Pubblico</a></li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-4 col-md-4 pb-2\">\r\n <h4><a href=\"#\" title=\"Vai alla pagina: Lorem Ipsum\">Lorem Ipsum</a></h4>\r\n </div>\r\n <div class=\"col-lg-4 col-md-4 pb-2\">\r\n <div class=\"pb-2\">\r\n <h4><a href=\"#\" title=\"Vai alla pagina: Seguici su\">Seguici su</a></h4>\r\n <ul class=\"list-inline text-left social\">\r\n <li class=\"list-inline-item\"><a class=\"p-2 text-white\" href=\"#\" target=\"_blank\"><svg\r\n class=\"icon icon-sm icon-white align-top\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-designers-italia\"></use>\r\n </svg><span class=\"sr-only\">Designers Italia</span></a></li>\r\n <li class=\"list-inline-item\"><a class=\"p-2 text-white\" href=\"#\" target=\"_blank\"><svg\r\n class=\"icon icon-sm icon-white align-top\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-twitter\"></use>\r\n </svg><span class=\"sr-only\">Twitter</span></a></li>\r\n <li class=\"list-inline-item\"><a class=\"p-2 text-white\" href=\"#\" target=\"_blank\"><svg\r\n class=\"icon icon-sm icon-white align-top\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-medium\"></use>\r\n </svg><span class=\"sr-only\">Medium</span></a></li>\r\n <li class=\"list-inline-item\"><a class=\"p-2 text-white\" href=\"#\" target=\"_blank\"><svg\r\n class=\"icon icon-sm icon-white align-top\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-behance\"></use>\r\n </svg><span class=\"sr-only\">Behance</span></a></li>\r\n </ul>\r\n </div>\r\n <div class=\"pb-2\">\r\n <h4><a href=\"#\" title=\"Vai alla pagina: Newsletter\">Newsletter</a></h4>\r\n <p>Form Newsletter</p>\r\n <!--<form action=\"#\" method=\"post\">\r\n <label for=\"input-newsletter\" class=\"active\">Iscriviti per riceverla</label>\r\n <div class=\"input-group\">\r\n <div class=\"input-group-prepend\">\r\n <div class=\"input-group-text\">@</div>\r\n </div>\r\n <input type=\"text\" class=\"form-control\" id=\"input-newsletter\" name=\"input-newsletter\" placeholder=\"Scrivi il tuo indirizzo email\" >\r\n <div class=\"input-group-append\">\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" id=\"button-addon2\">Button</button>\r\n </div>\r\n </div>\r\n <button class=\"btn btn-default pull-right\" type=\"submit\">Iscriviti</button>\r\n </form>-->\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n </div>\r\n <div class=\"it-footer-small-prints clearfix\">\r\n <div class=\"container-fluid\">\r\n <h3 class=\"sr-only\">Sezione Link Utili</h3>\r\n <ul class=\"it-footer-small-prints-list list-inline mb-0 d-flex flex-column flex-md-row\">\r\n <li class=\"list-inline-item\"><a href=\"#\" title=\"Note Legali\">Media policy</a></li>\r\n <li class=\"list-inline-item\"><a href=\"#\" title=\"Note Legali\">Note legali</a></li>\r\n <li class=\"list-inline-item\"><a href=\"#\" title=\"Privacy-Cookies\">Privacy policy</a></li>\r\n <li class=\"list-inline-item\"><a href=\"#\" title=\"Mappa del sito\">Mappa del sito</a> </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</footer>\r\n"
})
], FooterComponent);
let HeaderNavbarComponent = class HeaderNavbarComponent {
constructor() { }
};
__decorate([
Input()
], HeaderNavbarComponent.prototype, "menuItems", void 0);
HeaderNavbarComponent = __decorate([
Component({
selector: 'lib-header-navbar',
template: "<div class=\"it-header-navbar-wrapper\">\r\n <div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n\r\n <nav class=\"navbar navbar-expand-lg has-megamenu\">\r\n <button class=\"custom-navbar-toggler\" type=\"button\" aria-controls=\"nav10\" aria-expanded=\"false\"\r\n aria-label=\"Toggle navigation\" data-target=\"#nav10\">\r\n <svg class=\"icon\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-burger\"></use>\r\n </svg>\r\n </button>\r\n <div class=\"navbar-collapsable\" id=\"nav10\">\r\n <div class=\"overlay\"></div>\r\n <div class=\"close-div sr-only\">\r\n <button class=\"btn close-menu\" type=\"button\"><span class=\"it-close\"></span>close</button>\r\n </div>\r\n <div class=\"menu-wrapper\">\r\n\r\n <ul class=\"navbar-nav\">\r\n\r\n <ng-template ngFor let-item [ngForOf]=\"menuItems\">\r\n <ng-container [ngSwitch]=\"item.type\">\r\n\r\n <li *ngSwitchCase=\"'link'\" class=\"nav-item\" routerLinkActive=\"active\"\r\n [routerLinkActiveOptions]=\"{exact: true}\">\r\n\r\n <a *ngIf=\"!item.disabled; else elseBlock\" class=\"nav-link\" [routerLink]=\"[item.href]\"\r\n routerLinkActive=\"active\" [routerLinkActiveOptions]=\"{exact: true}\" #rla=\"routerLinkActive\">\r\n <span>{{ item.title }}</span>\r\n <span *ngIf=\"rla.isActive\" class=\"sr-only\"> attivo</span>\r\n </a>\r\n\r\n <ng-template #elseBlock>\r\n <a class=\"nav-link disabled\" [routerLink]=\"[item.href]\"><span>{{ item.title }}</span></a>\r\n </ng-template>\r\n\r\n </li>\r\n\r\n <li class=\"nav-item dropdown\" *ngSwitchCase=\"'dropdown'\">\r\n <lib-dropdown *ngSwitchCase=\"'dropdown'\" [title]=\"item.title\" [heading]=\"item.payload.heading\"\r\n [items]=\"item.payload.elements\"></lib-dropdown>\r\n </li>\r\n\r\n </ng-container>\r\n </ng-template>\r\n\r\n </ul>\r\n </div>\r\n\r\n </div>\r\n </nav>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n",
styles: [""]
})
], HeaderNavbarComponent);
let HeaderNavbarDropdownComponent = class HeaderNavbarDropdownComponent {
constructor() { }
};
__decorate([
Input()
], HeaderNavbarDropdownComponent.prototype, "title", void 0);
__decorate([
Input()
], HeaderNavbarDropdownComponent.prototype, "heading", void 0);
__decorate([
Input()
], HeaderNavbarDropdownComponent.prototype, "items", void 0);
HeaderNavbarDropdownComponent = __decorate([
Component({
selector: 'lib-dropdown',
template: "<a class=\"nav-link dropdown-toggle\" href=\"#\" data-toggle=\"dropdown\" aria-expanded=\"false\">\r\n <span>{{ title }}</span>\r\n <svg class=\"icon icon-xs\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-expand\"></use>\r\n </svg>\r\n</a>\r\n<div class=\"dropdown-menu\">\r\n <div class=\"link-list-wrapper\">\r\n <ul class=\"link-list\">\r\n <li>\r\n <h3 class=\"no_toc\" id=\"heading\">{{ heading }}</h3>\r\n </li>\r\n\r\n <li *ngFor=\"let item of items\">\r\n <a *ngIf=\"!item.isDivider && item.disabled==true\" class=\"list-item disabled\"\r\n aria-disabled=\"true\"><span>ciao</span></a>\r\n\r\n <a *ngIf=\"!item.isDivider && !item.disabled\" class=\"'list-item\" [routerLink]=\"[item.href]\"\r\n routerLinkActive=\"active\" [routerLinkActiveOptions]=\"{exact: true}\" #rla=\"routerLinkActive\">\r\n <span>{{ item.title }}</span>\r\n <span *ngIf=\"rla.isActive\" class=\"sr-only\">active</span>\r\n </a>\r\n\r\n <span *ngIf=\"item.isDivider\" class=\"divider\"></span>\r\n </li>\r\n\r\n </ul>\r\n </div>\r\n</div>\r\n",
styles: [""]
})
], HeaderNavbarDropdownComponent);
let BlankPageComponent = class BlankPageComponent {
constructor() { }
ngOnInit() {
}
};
BlankPageComponent = __decorate([
Component({
selector: 'lib-blank-page',
template: "<div class=\"container-fluid my-4 px-4\">\r\n <ng-content></ng-content>\r\n</div>\r\n"
})
], BlankPageComponent);
let LoginPageComponent = class LoginPageComponent {
constructor() {
this.formSubmit = new EventEmitter();
}
onSubmit(form) {
if (!form.valid) {
return;
}
const email = form.value.email;
const password = form.value.password;
this.formSubmit.emit({ email, password });
form.reset();
}
};
__decorate([
Input()
], LoginPageComponent.prototype, "isLoading", void 0);
__decorate([
Output()
], LoginPageComponent.prototype, "formSubmit", void 0);
LoginPageComponent = __decorate([
Component({
selector: 'lib-login-page',
template: "<div id=\"content\" class=\"container py-5\">\r\n <div class=\"wrapper\">\r\n\r\n <section class=\"container\" style=\"max-width: 40em\">\r\n <h1 class=\"pb-5\">Log in</h1>\r\n\r\n <form class=\"login\" #authForm=\"ngForm\" (ngSubmit)=\"onSubmit(authForm)\" *ngIf=\"!isLoading\">\r\n\r\n <div class=\"form-group\">\r\n <input type=\"text\" name=\"email\" class=\"form-control \" id=\"email\" ngModel required email>\r\n <label for=\"email\">Email</label>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <input type=\"password\" name=\"password\" class=\"form-control input-password\" id=\"password\" ngModel required minlength=\"14\">\r\n <label for=\"password\">Password</label>\r\n <span class=\"password-icon bg-transparent\" aria-hidden=\"true\">\r\n <svg class=\"password-icon-visible icon icon-sm\">\r\n <use\r\n xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-password-visible\">\r\n </use>\r\n </svg>\r\n <svg class=\"password-icon-invisible icon icon-sm d-none\">\r\n <use\r\n xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-password-invisible\">\r\n </use>\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n <div class=\"form-check\">\r\n <input id=\"remember\" name=\"remember\" type=\"checkbox\">\r\n <label for=\"remember\">Ricordami</label>\r\n </div>\r\n\r\n <div class=\"py-4 login_buttons\">\r\n <button class=\"btn btn-primary\" type=\"submit\" [disabled]=\"!authForm.valid\">Log in</button>\r\n </div>\r\n\r\n <!-- <p>Se non hai ancora creato un account, <a [routerLink]=\"['/']\" >registrati</a> adesso.</p> -->\r\n\r\n <p>Se invece hai dimenticato la password, puoi <a [routerLink]=\"['/reset-password']\">reimpostarla</a>.</p>\r\n\r\n </form>\r\n\r\n </section>\r\n\r\n </div>\r\n</div>\r\n",
styles: [".form-group{margin-bottom:1.5rem}"]
})
], LoginPageComponent);
let ResetPasswordPageComponent = class ResetPasswordPageComponent {
constructor() { }
};
ResetPasswordPageComponent = __decorate([
Component({
selector: 'lib-reset-password-page',
template: "<div id=\"content\" class=\"container py-5\">\r\n <div class=\"wrapper\">\r\n\r\n <section class=\"container\" style=\"max-width: 40em\">\r\n <h1>Re-imposta la Password</h1>\r\n\r\n <p>Hai dimenticato la tua password? Inserisci qui sotto l'indirizzo e-mail con cui ti sei registrato, ti invieremo\r\n una mail con un link per re-impostarla.</p>\r\n\r\n <form method=\"POST\" action=\"/accounts/password/reset/\" class=\"password_reset\">\r\n\r\n <div class=\"form-group\">\r\n <input type=\"email\" class=\"form-control\" id=\"id_email\" name=\"email\">\r\n <label for=\"id_email\">E-mail</label>\r\n </div>\r\n\r\n <button class=\"btn btn-primary\" type=\"submit\">Re-imposta la mia Password</button>\r\n </form>\r\n </section>\r\n\r\n </div>\r\n</div>\r\n",
styles: [".form-group{margin-bottom:1.5rem}"]
})
], ResetPasswordPageComponent);
let TableComponent = class TableComponent {
constructor() {
this.paginationChange = new EventEmitter();
this.detailSelected = new EventEmitter();
}
ngOnInit() {
// start loading
this.loading = true;
// check result
this.loadingSub = this.$rows.subscribe(newValue => {
if (newValue) {
this.loading = false;
}
});
}
ngOnChanges(changes) {
if (changes.pagination) {
this.loading = false;
}
}
ngOnDestroy() {
if (this.loadingSub) {
this.loadingSub.unsubscribe();
}
}
emitNewPagination(newPagination) {
this.loading = true;
this.paginationChange.emit(newPagination);
}
getElemKeys(elem) {
return Object.keys(elem);
}
onDetail(rowElem) {
this.detailSelected.emit(rowElem);
}
};
__decorate([
Input()
], TableComponent.prototype, "columns", void 0);
__decorate([
Input()
], TableComponent.prototype, "detailUpdate", void 0);
__decorate([
Input()
], TableComponent.prototype, "$rows", void 0);
__decorate([
Input()
], TableComponent.prototype, "pagination", void 0);
__decorate([
Output()
], TableComponent.prototype, "paginationChange", void 0);
__decorate([
Output()
], TableComponent.prototype, "detailSelected", void 0);
TableComponent = __decorate([
Component({
selector: 'lib-table',
template: "<div class=\"table-responsive my-5 shadow\">\r\n <table class=\"table mb-0 bg-white\">\r\n <thead>\r\n <tr>\r\n <th scope=\"col\" *ngFor=\"let colItem of columns\">\r\n <span>{{ colItem.label }}</span>\r\n <!-- <svg class=\"icon icon-xs\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-expand\">\r\n </use>\r\n </svg> -->\r\n </th>\r\n <th scope=\"col\" *ngIf=\"detailUpdate\">\r\n <span> Azione </span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngIf=\"loading\">\r\n <td [attr.colspan]=\"detailUpdate ? columns.length + 1 : columns.length\">\r\n <div class=\"progress progress-indeterminate\" style=\"width: 100%;\">\r\n <span class=\"sr-only\">In elaborazione...</span>\r\n <div class=\"progress-bar\" role=\"progressbar\"></div>\r\n </div>\r\n </td>\r\n </tr>\r\n\r\n <tr *ngFor=\"let item of $rows | async\">\r\n <td class=\"align-middle\" *ngFor=\"let column of columns\">\r\n {{ item[column.key] }}\r\n </td>\r\n <td class=\"align-middle\" *ngIf=\"detailUpdate\">\r\n <a href=\"javascript:void(0);\" class=\"btn btn-secondary btn-xs btn-icon\" role=\"button\" aria-disabled=\"true\" (click)=\"onDetail(item)\">\r\n <svg class=\"icon icon-white\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-search\">\r\n </use>\r\n </svg>\r\n <span>Dettagli</span>\r\n </a>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n<lib-table-pagination *ngIf=\"pagination\" [currentPagination]=\"pagination\"\r\n (paginationChange)=\"emitNewPagination($event)\"></lib-table-pagination>\r\n",
styles: [""]
})
], TableComponent);
let SearchModalComponent = class SearchModalComponent {
constructor() { }
ngOnInit() {
}
};
SearchModalComponent = __decorate([
Component({
selector: 'lib-search-modal',
template: "<div class=\"modal sfs-modal fade show\" tabindex=\"-1\" role=\"dialog\" id=\"modalSearchFullScreen\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"container\">\r\n <!-- Header -->\r\n <div class=\"row mt-5 mb-5\">\r\n <div class=\"col-12 d-flex justify-content-between align-items-center\">\r\n <h1 class=\"text-secondary\">Cerca</h1>\r\n <button class=\"close\" type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\">\r\n <svg class=\"icon icon-lg\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-close\"></use>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Input -->\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <form id=\"autocompleteSearchForm\" autocomplete=\"off\">\r\n <div class=\"form-group autocomplete-wrapper-big\">\r\n <input\r\n autocomplete=\"off\"\r\n type=\"search\"\r\n class=\"autocomplete\"\r\n placeholder=\"Cerca eventi, bollettini o per tag\"\r\n id=\"autocompleteSearchFullScreen\"\r\n name=\"autocompleteSearchFullScreen\">\r\n <span class=\"autocomplete-icon\" aria-hidden=\"true\">\r\n <svg class=\"icon icon-sm\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-search\"></use>\r\n </svg>\r\n </span>\r\n <ul class=\"autocomplete-list\" id=\"autocompleteListSearchFullScreen\"></ul>\r\n <label for=\"autocompleteSearchFullScreen\" class=\"sr-only\">Cerca nel sito</label>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Filters -->\r\n <div id=\"autocompleteFilters\" class=\"row\">\r\n <div class=\"col-12 sfs-modal-tags-container\">\r\n <button type=\"button\" class=\"btn btn-xs sfs-btn-tag btn-primary\" data-filter=\"\">Tutto</button>\r\n <button type=\"button\" class=\"btn btn-xs sfs-btn-tag btn-icon btn-outline-secondary\" data-filter=\"progetto\">\r\n <svg class=\"icon icon-secondary\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-map-marker-circle\"></use>\r\n </svg>\r\n <span>Eventi</span>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-xs sfs-btn-tag btn-icon btn-outline-secondary\" data-filter=\"documento\">\r\n <svg class=\"icon icon-secondary\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-note\"></use>\r\n </svg>\r\n <span>Bollettini</span>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-xs sfs-btn-tag btn-icon btn-outline-secondary\" data-filter=\"amministrazione\">\r\n <svg class=\"icon icon-secondary\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-star-outline\"></use>\r\n </svg>\r\n <span>Coau</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n",
styles: [".form-group{margin-bottom:1.5rem}.sfs-modal-button{background:0 0;border:none;color:#fff}.sfs-modal-button span{display:none;font-size:16px}.sfs-modal-button .sfs-modal-button-icon-bg{background:0 0;border-radius:44px;height:auto;width:auto;margin-left:0;flex:0 0 44px}.sfs-modal-button .sfs-modal-button-icon-bg .icon-primary{fill:#fff!important}@media (min-width:576px){.sfs-modal-button span{display:block;margin-bottom:1px}.sfs-modal-button .sfs-modal-button-icon-bg{background:#fff;height:44px;width:44px;margin-left:10px}.sfs-modal-button .sfs-modal-button-icon-bg .icon-primary{fill:#06c!important}}.sfs-modal.modal{height:100%;height:calc(100% - 48px);top:48px;bottom:0;left:0;right:0;border:none;background:#fff;border-radius:0;padding:0;z-index:1072;padding-right:0!important}@media (min-width:576px){.sfs-modal.modal{height:calc(100% - 54px);top:54px}}@media (min-width:992px){.sfs-modal.modal{height:calc(100% - 48px);top:48px}}.sfs-modal.modal .modal-dialog{background:#fff;margin:0;max-width:none;height:100%}.sfs-modal.modal .modal-dialog .modal-content{min-height:100%;box-shadow:none}.sfs-modal.modal .modal-dialog .modal-content .autocomplete-wrapper-big .autocomplete{padding-left:65px}.sfs-modal.modal .modal-dialog .modal-content .autocomplete-wrapper-big .autocomplete-list{z-index:1}.sfs-modal.modal .modal-dialog .modal-content .autocomplete-wrapper-big .autocomplete-list .autocomplete-list-freesearch a{font-size:16px;font-weight:600;color:#06c}.sfs-modal.modal .modal-dialog .modal-content .autocomplete-wrapper-big .autocomplete-list .autocomplete-list-freesearch a .search-icon{margin-top:1px}.sfs-modal.modal .modal-dialog .modal-content .autocomplete-wrapper-big .autocomplete-list .autocomplete-list-freesearch a .right-arrow-icon{margin-top:2px}.sfs-modal.modal .sfs-modal-tags-container .sfs-btn-tag{margin-right:10px;margin-bottom:10px}.sfs-modal.modal .sfs-modal-tags-container .btn-outline-secondary{box-shadow:inset 0 0 0 1px #5f7285}"]
})
], SearchModalComponent);
let TablePaginationComponent = class TablePaginationComponent {
constructor() {
this.paginationChange = new EventEmitter();
this.pages = [];
this.currentPageRound = [];
}
ngOnInit() {
this.setPageRound(1);
}
ngOnChanges(changes) {
if (changes.currentPagination) {
this.setPageRound(this.currentPagination.currentPage);
}
}
setPage(page) {
this.currentPagination.currentPage = page;
this.setPageRound(page);
this.paginationChange.emit({ page: this.currentPagination.currentPage, pageSize: this.currentPagination.pageSize });
}
nextPage() {
const newCurrentPage = this.currentPagination.currentPage + 1;
if (this.pages.find(elem => elem.page === newCurrentPage)) {
this.currentPagination.currentPage = newCurrentPage;
this.setPageRound(newCurrentPage);
this.paginationChange.emit({ page: this.currentPagination.currentPage, pageSize: this.currentPagination.pageSize });
}
}
previousPage() {
const newCurrentPage = this.currentPagination.currentPage - 1;
if (this.pages.find(elem => elem.page === newCurrentPage)) {
this.currentPagination.currentPage = newCurrentPage;
this.setPageRound(newCurrentPage);
this.paginationChange.emit({ page: this.currentPagination.currentPage, pageSize: this.currentPagination.pageSize });
}
}
changePageSize(newPageSizeValue) {
this.currentPagination.pageSize = newPageSizeValue;
this.paginationChange.emit({ page: 1, pageSize: this.currentPagination.pageSize });
}
setPageRound(currentPage) {
this.pages = [];
if (this.currentPagination.totalPages > 7) {
const lower = currentPage - 2 > 1 ? currentPage - 2 : 2;
const max = currentPage + 2 < this.currentPagination.totalPages ? currentPage + 2 : this.currentPagination.totalPages - 1;
// Inserisci primo elemento
this.pages.push({ separator: false, page: 1 });
// Seprator
if (lower > 2) {
this.pages.push({ separator: true });
}
// Round
const minNext = currentPage > this.currentPagination.totalPages - 4 ? this.currentPagination.totalPages - 4 : lower;
const maxNext = lower > 2 ? max : lower + 3;
for (let i = minNext; i <= maxNext; i++) {
this.pages.push({
separator: false,
page: i
});
}
// Seprator
if (max < this.currentPagination.totalPages - 1) {
this.pages.push({ separator: true });
}
// Inserisci ultimo elemento
this.pages.push({ separator: false, page: this.currentPagination.totalPages });
}
else {
for (let i = 1; i <= this.currentPagination.totalPages; i++) {
this.pages.push({
separator: false,
page: i
});
}
}
}
};
__decorate([
Input()
], TablePaginationComponent.prototype, "currentPagination", void 0);
__decorate([
Output()
], TablePaginationComponent.prototype, "paginationChange", void 0);
TablePaginationComponent = __decorate([
Component({
selector: 'lib-table-pagination',
template: "<div class=\"row\">\r\n <div class=\"col\">\r\n <nav class=\"pagination-wrapper justify-content-center\" aria-label=\"Esempio di navigazione della pagina\">\r\n <ul class=\"pagination\">\r\n <li class=\"page-item\">\r\n <a class=\"page-link\" href=\"javascript:void(0);\" (click)=\"previousPage()\">\r\n <svg class=\"icon icon-primary\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-chevron-left\">\r\n </use>\r\n </svg>\r\n <span class=\"sr-only\">Pagina precedente</span>\r\n </a>\r\n </li>\r\n\r\n <li class=\"page-item\" *ngFor=\"let elem of pages\">\r\n\r\n <a class=\"page-link\" href=\"javascript:void(0);\" aria-current=\"page\"\r\n *ngIf=\"!elem.separator && elem.page === currentPagination.currentPage\" (click)=\"setPage(elem.page)\">\r\n {{ elem.page }}\r\n </a>\r\n\r\n <a class=\"page-link\" href=\"javascript:void(0);\" (click)=\"setPage(elem.page)\"\r\n *ngIf=\"!elem.separator && elem.page !== currentPagination.currentPage;\">{{ elem.page }}</a>\r\n\r\n <span class=\"page-link\" *ngIf=\"elem.separator\">...</span>\r\n\r\n </li>\r\n\r\n <li class=\"page-item\">\r\n <a class=\"page-link\" href=\"javascript:void(0);\" (click)=\"nextPage()\">\r\n <span class=\"sr-only\">Pagina successiva</span>\r\n <svg class=\"icon icon-primary\">\r\n <use xlink:href=\"./assets/bootstrap-italia/svg/sprite.svg#it-chevron-right\">\r\n </use>\r\n </svg>\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n <div class=\"dropdown\">\r\n <a class=\"btn btn-dropdown dropdown-toggle\" href=\"javascript:void(0);\" role=\"button\" id=\"pagerChanger\"\r\n data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" aria-label=\"Salta alla pagina\">pag. {{ currentPagination.pageSize }}</a>\r\n <div class=\"dropdown-menu\" aria-labelledby=\"pagerChanger\">\r\n <div class=\"link-list-wrapper\">\r\n <ul class=\"link-list\">\r\n <li><a class=\"list-item\" href=\"javascript:void(0);\" (click)=\"changePageSize(10)\"><span>pag. 10</span></a></li>\r\n <li><a class=\"list-item\" href=\"javascript:void(0);\" (click)=\"changePageSize(20)\"><span>pag. 20</span></a></li>\r\n <li><a class=\"list-item\" href=\"javascript:void(0);\" (click)=\"changePageSize(30)\"><span>pag. 30</span></a></li>\r\n <li><a class=\"list-item\" href=\"javascript:void(0);\" (click)=\"changePageSize(40)\"><span>pag. 40</span></a></li>\r\n <li><a class=\"list-item\" href=\"javascript:void(0);\" (click)=\"changePageSize(50)\"><span>pag. 50</span></a></li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </nav>\r\n </div>\r\n</div>\r\n",
styles: [""]
})
], TablePaginationComponent);
let DynamicFormControlService = class DynamicFormControlService {
constructor() { }
toFormGroup(fields, defaultState = null) {
const group = {};
fields.forEach(field => {
let defaultValue;
if (typeof field.value === 'boolean') {
defaultValue = false;
}
else {
defaultValue = '';
}
if (defaultState) {
defaultValue = defaultState[field.key];
}
group[field.key] = field.required ?
new FormControl({ value: field.value || defaultValue, disabled: field.disabled }, Validators.required)
: new FormControl({ value: field.value || defaultValue, disabled: field.disabled });
});
return new FormGroup(group);
}
};
DynamicFormControlService = __decorate([
Injectable()
], DynamicFormControlService);
let StepperComponent = class StepperComponent {
constructor(qcs) {
this.qcs = qcs;
this.fromValueChange = new EventEmitter();
this.submitedEvent = new EventEmitter();
this.latitude = 42.50;
this.longitude = 12.50;
}
ngOnInit() {
var _a, _b, _c, _d;
this.widthExp = 100 / this.stepElements.length;
// step a 1
this.currentStepIndex = 1;
this.validSteps = [];
this.touchedSteps = [];
this.formRows = [].concat(...this.stepElements.map(e => e.fromRows));
const elements = [].concat(...this.formRows.map(e => e.items));
this.stepForm = this.qcs.toFormGroup(elements);
this.mapId = this.getMapId();
const mapFormRows = this.stepElements.find(elem => elem.mapId).fromRows;
this.mapFormFields = [].concat(...mapFormRows.map(e => e.items));
// Form Latiture
(_a = this.stepForm.controls.latitude) === null || _a === void 0 ? void 0 : _a.setValue(42.50);
this.latSub = (_b = this.stepForm.controls.latitude) === null || _b === void 0 ? void 0 : _b.valueChanges.pipe(debounceTime(500), distinctUntilChanged()).subscribe(newVal => {
this.latitude = newVal;
});
// Form Longitude
(_c = this.stepForm.controls.longitude) === null || _c === void 0 ? void 0 : _c.setValue(12.50);
this.lngSub = (_d = this.stepForm.controls.longitude) === null || _d === void 0 ? void 0 : _d.valueChanges.pipe(debounceTime(500), distinctUntilChanged()).subscribe(newVal => {
this.longitude = newVal;
});
this.formStateSubscription = this.stepForm.valueChanges
.subscribe(newValue => {
var _a;
const mapFieldsKeys = this.mapFormFields.map(e => e.key);
const mapBoxingValues = [];
mapFieldsKeys.forEach(key => {
const fieldValue = this.stepForm.value[key];
if (typeof fieldValue === 'object') {
mapBoxingValues.push(this.stepForm.value[key]);
}
if (fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.shapelight) { // TODO: Fix name
this.mapShapePolygon = fieldValue.shapelight;
}
});
if ((mapBoxingValues === null || mapBoxingValues === void 0 ? void 0 : mapBoxingValues.length) > 0) {
this.mapBboxPolygon = (_a = mapBoxingValues[mapBoxingValues.length - 1]) === null || _a === void 0 ? void 0 : _a.boundingbox; // TODO: Fix Name
}
this.fromValueChange.emit(newValue);
});
}
ngOnDestroy() {
if (this.formStateSubscription) {
this.formStateSubscription.unsubscribe();
}
if (this.latSub) {
this.latSub.unsubscribe();
}
if (this.lngSub) {
this.lngSub.unsubscribe();
}
}
get stepRows() {
const rows = this.stepElements.find(e => e.index === this.currentStepIndex).fromRows;
return rows;
}
getItems(formRow) {
const items = formRow.items.filter(item => {
var _a, _b, _c, _d, _e, _f, _g;
let showCondition = false;
// Se tipo semplice
if (((_a = item.parentShowCondition) === null || _a === void 0 ? void 0 : _a.parentKey) &&
((_b = item.parentShowCondition) === null || _b === void 0 ? void 0 : _b.parentValue) === this.stepForm.get(item.parentShowCondition.parentKey).value) {
showCondition = true;
}
// Se oggetto
if (((_c = item.parentShowCondition) === null || _c === void 0 ? void 0 : _c.parentKey) && typeof ((_d = item.parentShowCondition) === null || _d === void 0 ? void 0 : _d.parentValue) === 'object'
// tslint:disable-next-line: max-line-length
&& JSON.stringify((_e = item.parentShowCondition) === null || _e === void 0 ? void 0 : _e.parentValue) === JSON.stringify(this.stepForm.get(item.parentShowCondition.parentKey).value)) {
showCondition = true;
}
if (!item.parentShowCondition || showCondition) {
(_f = this.stepForm.get(item.key)) === null || _f === void 0 ? void 0 : _f.setValidators(Validators.required);
return item;
}
else {
(_g = this.stepForm.get(item.key)) === null || _g === void 0 ? void 0 : _g.setValidators(null);
}
});
return items;
}
getPratentField(itemKey) {
const elements = [].concat(...this.formRows.map(e => e.items));
return elements.find(e => e.parentFieldKey === itemKey);
}
isValidStep(stepIndex) {
const step = this.validSteps.find(e => e === stepIndex);
if (step) {
return true;
}
return false;
}
setValidStep(stepIndex) {
// ritorna true se tutti campi di quello step sono validi altrimenti false
// prendi le chiavi dei campi di quel particolare step
const rowsItems = this.stepElements
.find(e => e.index === stepIndex).fromRows
.map(e => e.items);
const rowsElements = [].concat(...rowsItems);
const fieldsKeys = rowsElements.map(e => e.key);
const controls = this.stepForm.controls;
const filtered = Object.keys(controls)
.filter(key => fieldsKeys.includes(key) && controls[key].valid)
.reduce((obj, key) => {
obj[key] = controls[key];
return obj;
}, {});
if (arraysEqual(fieldsKeys, Object.keys(filtered))) {
const index = this.validSteps.indexOf(stepIndex, 0);
if (index === -1) {
this.validSteps.push(stepIndex);
}
}
else {
const index = this.validSteps.indexOf(stepIndex, 0);
if (index > -1) {
this.validSteps.splice(index, 1);
}
}
}
isTouchedStep(stepIndex) {
const step = this.touchedSteps.find(e => e === stepIndex);
if (step) {
return true;
}
return false;
}
prevStep() {
this.stepForm.updateValueAndValidity();
this.setValidStep(this.currentStepIndex);
this.touchedSteps.push(this.currentStepIndex);