UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

71 lines 13.5 kB
import { Component, Output, EventEmitter, Input } from '@angular/core'; import { LoginService } from '../login/login.service'; import { AlertService } from '../alert/alert.service'; import { LoginViews } from '../login/login.model'; import { UserService } from '@c8y/client'; import * as i0 from "@angular/core"; import * as i1 from "../login/login.service"; import * as i2 from "../alert/alert.service"; import * as i3 from "@c8y/client"; import * as i4 from "../forms/phone-validation.directive"; import * as i5 from "@angular/forms"; import * as i6 from "../forms/form-group.component"; import * as i7 from "../forms/required-input-placeholder.directive"; import * as i8 from "../i18n/c8y-translate.directive"; import * as i9 from "@angular/common"; import * as i10 from "../i18n/c8y-translate.pipe"; export class ProvidePhoneNumberComponent { constructor(loginService, alert, userService) { this.loginService = loginService; this.alert = alert; this.userService = userService; this.onCancel = new EventEmitter(); this.onChangeView = new EventEmitter(); this.requestInProgress = false; this.sendTfa = '0'; } async save() { try { this.requestInProgress = true; await this.userService.savePhoneNumber(this.phoneNumber); await this.sendTFASms(); this.onChangeView.emit({ view: LoginViews.SmsChallenge, credentials: this.credentials }); } catch (e) { this.alert.addServerFailure(e); } finally { this.requestInProgress = false; } } async sendTFASms() { try { await this.userService.verifyTFACode(this.sendTfa); } catch (e) { if (e.res.status === 403) { this.loginService.cleanMessages(); this.loginService.addSuccessMessage('send_sms'); } else { throw e; } } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProvidePhoneNumberComponent, deps: [{ token: i1.LoginService }, { token: i2.AlertService }, { token: i3.UserService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ProvidePhoneNumberComponent, selector: "c8y-provide-phone-number", inputs: { credentials: "credentials" }, outputs: { onCancel: "onCancel", onChangeView: "onChangeView" }, ngImport: i0, template: "<form #twoFactorForm=\"ngForm\" class=\"loginForm\" (ngSubmit)=\"save()\" novalidate>\n <div class=\"legend form-block center\" translate>Two-factor authentication</div>\n\n <c8y-form-group [ngClass]=\"requestInProgress || twoFactorForm.invalid ? 'p-b-8' : ''\">\n <label translate>Provide your phone number</label>\n\n <input\n class=\"form-control\"\n [(ngModel)]=\"phoneNumber\"\n #contactPhone=\"ngModel\"\n type=\"text\"\n name=\"phone\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n c8yPhoneValidation\n required\n />\n </c8y-form-group>\n\n <button\n title=\"{{ 'Save and continue' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary btn-lg btn-block form-group\"\n [disabled]=\"requestInProgress || twoFactorForm.invalid\"\n >\n {{ 'Save and continue' | translate }}\n </button>\n\n <div class=\"d-flex m-t-8\">\n <a\n title=\"{{ 'Login' | translate }}\"\n class=\"small pointer m-l-auto\"\n href=\"#\"\n (click)=\"onCancel.emit()\"\n >\n {{ 'Login' | translate }}\n </a>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i4.PhoneValidationDirective, selector: "[c8yPhoneValidation]" }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i6.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i7.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i8.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i10.C8yTranslatePipe, name: "translate" }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProvidePhoneNumberComponent, decorators: [{ type: Component, args: [{ selector: 'c8y-provide-phone-number', template: "<form #twoFactorForm=\"ngForm\" class=\"loginForm\" (ngSubmit)=\"save()\" novalidate>\n <div class=\"legend form-block center\" translate>Two-factor authentication</div>\n\n <c8y-form-group [ngClass]=\"requestInProgress || twoFactorForm.invalid ? 'p-b-8' : ''\">\n <label translate>Provide your phone number</label>\n\n <input\n class=\"form-control\"\n [(ngModel)]=\"phoneNumber\"\n #contactPhone=\"ngModel\"\n type=\"text\"\n name=\"phone\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n c8yPhoneValidation\n required\n />\n </c8y-form-group>\n\n <button\n title=\"{{ 'Save and continue' | translate }}\"\n type=\"submit\"\n class=\"btn btn-primary btn-lg btn-block form-group\"\n [disabled]=\"requestInProgress || twoFactorForm.invalid\"\n >\n {{ 'Save and continue' | translate }}\n </button>\n\n <div class=\"d-flex m-t-8\">\n <a\n title=\"{{ 'Login' | translate }}\"\n class=\"small pointer m-l-auto\"\n href=\"#\"\n (click)=\"onCancel.emit()\"\n >\n {{ 'Login' | translate }}\n </a>\n </div>\n</form>\n" }] }], ctorParameters: () => [{ type: i1.LoginService }, { type: i2.AlertService }, { type: i3.UserService }], propDecorators: { credentials: [{ type: Input }], onCancel: [{ type: Output }], onChangeView: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1waG9uZS1udW1iZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9hdXRoZW50aWNhdGlvbi9wcm92aWRlLXBob25lLW51bWJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2F1dGhlbnRpY2F0aW9uL3Byb3ZpZGUtcGhvbmUtbnVtYmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFnQixXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7Ozs7OztBQU14RCxNQUFNLE9BQU8sMkJBQTJCO0lBU3RDLFlBQ1MsWUFBMEIsRUFDMUIsS0FBbUIsRUFDbEIsV0FBd0I7UUFGekIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNsQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQVZ4QixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5QixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFHNUMsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQ1QsWUFBTyxHQUFXLEdBQUcsQ0FBQztJQU1wQyxDQUFDO0lBRUosS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1lBQzlCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUNyQixJQUFJLEVBQUUsVUFBVSxDQUFDLFlBQVk7Z0JBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVzthQUM5QixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakMsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxVQUFVO1FBQ3RCLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLENBQUM7WUFDVixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7K0dBMUNVLDJCQUEyQjttR0FBM0IsMkJBQTJCLHlLQ1Z4QyxtcENBdUNBOzs0RkQ3QmEsMkJBQTJCO2tCQUp2QyxTQUFTOytCQUNFLDBCQUEwQjtzSUFJM0IsV0FBVztzQkFBbkIsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSAnLi4vbG9naW4vbG9naW4uc2VydmljZSc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ2luVmlld3MgfSBmcm9tICcuLi9sb2dpbi9sb2dpbi5tb2RlbCc7XG5pbXBvcnQgeyBJQ3JlZGVudGlhbHMsIFVzZXJTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktcHJvdmlkZS1waG9uZS1udW1iZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvdmlkZS1waG9uZS1udW1iZXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByb3ZpZGVQaG9uZU51bWJlckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHM7XG4gIEBPdXRwdXQoKSBvbkNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uQ2hhbmdlVmlldyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwaG9uZU51bWJlcjogc3RyaW5nO1xuICByZXF1ZXN0SW5Qcm9ncmVzcyA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlbmRUZmE6IHN0cmluZyA9ICcwJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbG9naW5TZXJ2aWNlOiBMb2dpblNlcnZpY2UsXG4gICAgcHVibGljIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIHNhdmUoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucmVxdWVzdEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS5zYXZlUGhvbmVOdW1iZXIodGhpcy5waG9uZU51bWJlcik7XG4gICAgICBhd2FpdCB0aGlzLnNlbmRURkFTbXMoKTtcbiAgICAgIHRoaXMub25DaGFuZ2VWaWV3LmVtaXQoe1xuICAgICAgICB2aWV3OiBMb2dpblZpZXdzLlNtc0NoYWxsZW5nZSxcbiAgICAgICAgY3JlZGVudGlhbHM6IHRoaXMuY3JlZGVudGlhbHNcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2VuZFRGQVNtcygpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS52ZXJpZnlURkFDb2RlKHRoaXMuc2VuZFRmYSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUucmVzLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgIHRoaXMubG9naW5TZXJ2aWNlLmNsZWFuTWVzc2FnZXMoKTtcbiAgICAgICAgdGhpcy5sb2dpblNlcnZpY2UuYWRkU3VjY2Vzc01lc3NhZ2UoJ3NlbmRfc21zJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGZvcm0gI3R3b0ZhY3RvckZvcm09XCJuZ0Zvcm1cIiBjbGFzcz1cImxvZ2luRm9ybVwiIChuZ1N1Ym1pdCk9XCJzYXZlKClcIiBub3ZhbGlkYXRlPlxuICA8ZGl2IGNsYXNzPVwibGVnZW5kIGZvcm0tYmxvY2sgY2VudGVyXCIgdHJhbnNsYXRlPlR3by1mYWN0b3IgYXV0aGVudGljYXRpb248L2Rpdj5cblxuICA8Yzh5LWZvcm0tZ3JvdXAgW25nQ2xhc3NdPVwicmVxdWVzdEluUHJvZ3Jlc3MgfHwgdHdvRmFjdG9yRm9ybS5pbnZhbGlkID8gJ3AtYi04JyA6ICcnXCI+XG4gICAgPGxhYmVsIHRyYW5zbGF0ZT5Qcm92aWRlIHlvdXIgcGhvbmUgbnVtYmVyPC9sYWJlbD5cblxuICAgIDxpbnB1dFxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgWyhuZ01vZGVsKV09XCJwaG9uZU51bWJlclwiXG4gICAgICAjY29udGFjdFBob25lPVwibmdNb2RlbFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBuYW1lPVwicGhvbmVcIlxuICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gKzQ5IDkgODc2IDU0MyAyMTBgTE9DQUxJWkVgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICBjOHlQaG9uZVZhbGlkYXRpb25cbiAgICAgIHJlcXVpcmVkXG4gICAgLz5cbiAgPC9jOHktZm9ybS1ncm91cD5cblxuICA8YnV0dG9uXG4gICAgdGl0bGU9XCJ7eyAnU2F2ZSBhbmQgY29udGludWUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwic3VibWl0XCJcbiAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGZvcm0tZ3JvdXBcIlxuICAgIFtkaXNhYmxlZF09XCJyZXF1ZXN0SW5Qcm9ncmVzcyB8fCB0d29GYWN0b3JGb3JtLmludmFsaWRcIlxuICA+XG4gICAge3sgJ1NhdmUgYW5kIGNvbnRpbnVlJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cblxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG0tdC04XCI+XG4gICAgPGFcbiAgICAgIHRpdGxlPVwie3sgJ0xvZ2luJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICBjbGFzcz1cInNtYWxsIHBvaW50ZXIgbS1sLWF1dG9cIlxuICAgICAgaHJlZj1cIiNcIlxuICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsLmVtaXQoKVwiXG4gICAgPlxuICAgICAge3sgJ0xvZ2luJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYT5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=