UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

119 lines 17.2 kB
import { passwordValidator } from '../models/password.validator'; import { Validators } from '@angular/forms'; import { Component, EventEmitter, Inject, Optional, Output } from '@angular/core'; import { LoadingEmitter } from "../../utility/loading-emitter"; import { take } from "rxjs/operators"; import { encodeBase64 } from '../../utility/base64'; import { NAE_DEFAULT_MIN_PASSWORD_LENGTH, NAE_MIN_PASSWORD_LENGTH } from "../min-password-length-token"; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "../../authentication/profile/services/profile.service"; import * as i3 from "../../user/services/user.service"; import * as i4 from "../../logger/services/logger.service"; import * as i5 from "@ngx-translate/core"; export const OLD_PASSWORD = 'oldPassword'; export const PASSWORD = 'password'; export const CONFIRM_PASSWORD = 'confirmPassword'; export class AbstractChangePasswordComponent { formBuilder; profileService; user; _log; _translate; minPasswordLength; rootFormGroup; hideOldPassword; hidePassword; hideRepeatPassword; formSubmit; changePassword; loadingSubmit; constructor(formBuilder, profileService, user, _log, _translate, minPasswordLength) { this.formBuilder = formBuilder; this.profileService = profileService; this.user = user; this._log = _log; this._translate = _translate; this.minPasswordLength = minPasswordLength; this.minPasswordLength = minPasswordLength ?? NAE_DEFAULT_MIN_PASSWORD_LENGTH; this.hidePassword = true; this.hideOldPassword = true; this.hideRepeatPassword = true; this.formSubmit = new EventEmitter(); this.changePassword = new EventEmitter(); this.loadingSubmit = new LoadingEmitter(false); this.rootFormGroup = formBuilder.group({ oldPassword: ['', [Validators.required, Validators.minLength(1)]], password: ['', [Validators.required, Validators.minLength(this.minPasswordLength)]], confirmPassword: ['', [Validators.required, Validators.minLength(this.minPasswordLength)]] }, { validator: passwordValidator }); } isFieldValid(formControlName) { return this.rootFormGroup.get(formControlName).valid; } createRequestBody() { return { login: this.user.user.email, password: encodeBase64(this.rootFormGroup.controls[OLD_PASSWORD].value), newPassword: encodeBase64(this.rootFormGroup.controls[PASSWORD].value) }; } getErrorMessage(formControlName) { const errors = this.rootFormGroup.get(formControlName).errors; if (errors === null) { return; } switch (Object.keys(errors)[0]) { case 'mismatchedPassword': return this._translate.instant('forms.register.passwordsMustMatch'); case 'minlength': return this._translate.instant('dataField.validations.minLength', { length: this.minPasswordLength }); case 'required': return this._translate.instant('dataField.validations.required'); } } onSubmit() { if (!this.rootFormGroup.valid) { return; } const request = this.createRequestBody(); this.formSubmit.emit(request); this.loadingSubmit.on(); this.profileService.changePassword(request).pipe(take(1)).subscribe(message => { if (message.error) { this.changePassword.emit({ error: message.error }); } else { this.changePassword.emit({ success: message.success }); } this.loadingSubmit.off(); }, error => { this.changePassword.emit({ error }); this.loadingSubmit.off(); }); } ngOnDestroy() { this.formSubmit.complete(); this.changePassword.complete(); this.loadingSubmit.complete(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractChangePasswordComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ProfileService }, { token: i3.UserService }, { token: i4.LoggerService }, { token: i5.TranslateService }, { token: NAE_MIN_PASSWORD_LENGTH, optional: true }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractChangePasswordComponent, selector: "ncc-abstract-change-password", outputs: { formSubmit: "formSubmit", changePassword: "changePassword" }, ngImport: i0, template: '', isInline: true }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractChangePasswordComponent, decorators: [{ type: Component, args: [{ selector: 'ncc-abstract-change-password', template: '' }] }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ProfileService }, { type: i3.UserService }, { type: i4.LoggerService }, { type: i5.TranslateService }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [NAE_MIN_PASSWORD_LENGTH] }] }], propDecorators: { formSubmit: [{ type: Output }], changePassword: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtY2hhbmdlLXBhc3N3b3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvZm9ybXMvY2hhbmdlLXBhc3N3b3JkL2Fic3RyYWN0LWNoYW5nZS1wYXNzd29yZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFFL0QsT0FBTyxFQUF5QixVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsRSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWEsUUFBUSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUzRixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBSXBDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsK0JBQStCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7OztBQUV0RyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDbkMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUM7QUFNbEQsTUFBTSxPQUFnQiwrQkFBK0I7SUFhakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUM2QztJQWhCdEUsYUFBYSxDQUFZO0lBQ3pCLGVBQWUsQ0FBVTtJQUV6QixZQUFZLENBQVU7SUFDdEIsa0JBQWtCLENBQVU7SUFFbEIsVUFBVSxDQUFnQztJQUMxQyxjQUFjLENBQWdDO0lBRXhELGFBQWEsQ0FBaUI7SUFFckMs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K0JBQStCLG1LQWtCUCx1QkFBdUI7NEZBbEIvQywrQkFBK0IsNklBRnZDLEVBQUU7OzRGQUVNLCtCQUErQjtrQkFKcEQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsOEJBQThCO29CQUN4QyxRQUFRLEVBQUUsRUFBRTtpQkFDZjs7MEJBbUIwQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLHVCQUF1Qjt5Q0FWaEQsVUFBVTtzQkFBMUIsTUFBTTtnQkFDVSxjQUFjO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwYXNzd29yZFZhbGlkYXRvcn0gZnJvbSAnLi4vbW9kZWxzL3Bhc3N3b3JkLnZhbGlkYXRvcic7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TWVzc2FnZVJlc291cmNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL21lc3NhZ2UtcmVzb3VyY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgT25EZXN0cm95LCBPcHRpb25hbCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybVN1Ym1pdEV2ZW50LCBIYXNGb3JtfSBmcm9tIFwiLi4vaGFzLWZvcm1cIjtcbmltcG9ydCB7TG9hZGluZ0VtaXR0ZXJ9IGZyb20gXCIuLi8uLi91dGlsaXR5L2xvYWRpbmctZW1pdHRlclwiO1xuaW1wb3J0IHt0YWtlfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7VXNlckNoYW5nZVBhc3N3b3JkUmVxdWVzdH0gZnJvbSBcIi4uLy4uL2F1dGhlbnRpY2F0aW9uL3Byb2ZpbGUvbW9kZWxzL3VzZXItY2hhbmdlLXBhc3N3b3JkLXJlcXVlc3RcIjtcbmltcG9ydCB7UHJvZmlsZVNlcnZpY2V9IGZyb20gXCIuLi8uLi9hdXRoZW50aWNhdGlvbi9wcm9maWxlL3NlcnZpY2VzL3Byb2ZpbGUuc2VydmljZVwiO1xuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uLy4uL3VzZXIvc2VydmljZXMvdXNlci5zZXJ2aWNlXCI7XG5pbXBvcnQge2VuY29kZUJhc2U2NH0gZnJvbSAnLi4vLi4vdXRpbGl0eS9iYXNlNjQnO1xuaW1wb3J0IHtOQUVfREVGQVVMVF9NSU5fUEFTU1dPUkRfTEVOR1RILCBOQUVfTUlOX1BBU1NXT1JEX0xFTkdUSH0gZnJvbSBcIi4uL21pbi1wYXNzd29yZC1sZW5ndGgtdG9rZW5cIjtcblxuZXhwb3J0IGNvbnN0IE9MRF9QQVNTV09SRCA9ICdvbGRQYXNzd29yZCc7XG5leHBvcnQgY29uc3QgUEFTU1dPUkQgPSAncGFzc3dvcmQnO1xuZXhwb3J0IGNvbnN0IENPTkZJUk1fUEFTU1dPUkQgPSAnY29uZmlybVBhc3N3b3JkJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduY2MtYWJzdHJhY3QtY2hhbmdlLXBhc3N3b3JkJyxcbiAgICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDaGFuZ2VQYXNzd29yZENvbXBvbmVudCBpbXBsZW1lbnRzIEhhc0Zvcm0sIE9uRGVzdHJveSB7XG5cbiAgICBwdWJsaWMgcm9vdEZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyBoaWRlT2xkUGFzc3dvcmQ6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgaGlkZVBhc3N3b3JkOiBib29sZWFuO1xuICAgIHB1YmxpYyBoaWRlUmVwZWF0UGFzc3dvcmQ6IGJvb2xlYW47XG5cbiAgICBAT3V0cHV0KCkgcHVibGljIGZvcm1TdWJtaXQ6IEV2ZW50RW1pdHRlcjxGb3JtU3VibWl0RXZlbnQ+O1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgY2hhbmdlUGFzc3dvcmQ6IEV2ZW50RW1pdHRlcjxNZXNzYWdlUmVzb3VyY2U+O1xuXG4gICAgcHVibGljIGxvYWRpbmdTdWJtaXQ6IExvYWRpbmdFbWl0dGVyO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBwcm9maWxlU2VydmljZTogUHJvZmlsZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCB1c2VyOiBVc2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5BRV9NSU5fUEFTU1dPUkRfTEVOR1RIKSBwcm90ZWN0ZWQgbWluUGFzc3dvcmRMZW5ndGg6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm1pblBhc3N3b3JkTGVuZ3RoID0gbWluUGFzc3dvcmRMZW5ndGggPz8gTkFFX0RFRkFVTFRfTUlOX1BBU1NXT1JEX0xFTkdUSDtcbiAgICAgICAgdGhpcy5oaWRlUGFzc3dvcmQgPSB0cnVlO1xuICAgICAgICB0aGlzLmhpZGVPbGRQYXNzd29yZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaGlkZVJlcGVhdFBhc3N3b3JkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb3JtU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtU3VibWl0RXZlbnQ+KCk7XG4gICAgICAgIHRoaXMuY2hhbmdlUGFzc3dvcmQgPSBuZXcgRXZlbnRFbWl0dGVyPE1lc3NhZ2VSZXNvdXJjZT4oKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3VibWl0ID0gbmV3IExvYWRpbmdFbWl0dGVyKGZhbHNlKTtcbiAgICAgICAgdGhpcy5yb290Rm9ybUdyb3VwID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgb2xkUGFzc3dvcmQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpXV0sXG4gICAgICAgICAgICBwYXNzd29yZDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5taW5QYXNzd29yZExlbmd0aCldXSxcbiAgICAgICAgICAgIGNvbmZpcm1QYXNzd29yZDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5taW5QYXNzd29yZExlbmd0aCldXVxuICAgICAgICB9LCB7dmFsaWRhdG9yOiBwYXNzd29yZFZhbGlkYXRvcn0pO1xuICAgIH1cblxuXG4gICAgcHVibGljIGlzRmllbGRWYWxpZChmb3JtQ29udHJvbE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290Rm9ybUdyb3VwLmdldChmb3JtQ29udHJvbE5hbWUpLnZhbGlkO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjcmVhdGVSZXF1ZXN0Qm9keSgpOiBVc2VyQ2hhbmdlUGFzc3dvcmRSZXF1ZXN0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxvZ2luOiB0aGlzLnVzZXIudXNlci5lbWFpbCxcbiAgICAgICAgICAgIHBhc3N3b3JkOiBlbmNvZGVCYXNlNjQodGhpcy5yb290Rm9ybUdyb3VwLmNvbnRyb2xzW09MRF9QQVNTV09SRF0udmFsdWUpLFxuICAgICAgICAgICAgbmV3UGFzc3dvcmQ6IGVuY29kZUJhc2U2NCh0aGlzLnJvb3RGb3JtR3JvdXAuY29udHJvbHNbUEFTU1dPUkRdLnZhbHVlKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFcnJvck1lc3NhZ2UoZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLnJvb3RGb3JtR3JvdXAuZ2V0KGZvcm1Db250cm9sTmFtZSkuZXJyb3JzO1xuICAgICAgICBpZiAoZXJyb3JzID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChPYmplY3Qua2V5cyhlcnJvcnMpWzBdKSB7XG4gICAgICAgICAgICBjYXNlICdtaXNtYXRjaGVkUGFzc3dvcmQnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZm9ybXMucmVnaXN0ZXIucGFzc3dvcmRzTXVzdE1hdGNoJyk7XG4gICAgICAgICAgICBjYXNlICdtaW5sZW5ndGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZGF0YUZpZWxkLnZhbGlkYXRpb25zLm1pbkxlbmd0aCcsIHtsZW5ndGg6IHRoaXMubWluUGFzc3dvcmRMZW5ndGh9KTtcbiAgICAgICAgICAgIGNhc2UgJ3JlcXVpcmVkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ2RhdGFGaWVsZC52YWxpZGF0aW9ucy5yZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3VibWl0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucm9vdEZvcm1Hcm91cC52YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmNyZWF0ZVJlcXVlc3RCb2R5KCk7XG4gICAgICAgIHRoaXMuZm9ybVN1Ym1pdC5lbWl0KHJlcXVlc3QpO1xuXG4gICAgICAgIHRoaXMubG9hZGluZ1N1Ym1pdC5vbigpO1xuICAgICAgICB0aGlzLnByb2ZpbGVTZXJ2aWNlLmNoYW5nZVBhc3N3b3JkKHJlcXVlc3QpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKG1lc3NhZ2UgPT4ge1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVBhc3N3b3JkLmVtaXQoe2Vycm9yOiBtZXNzYWdlLmVycm9yfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlUGFzc3dvcmQuZW1pdCh7c3VjY2VzczogbWVzc2FnZS5zdWNjZXNzfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJtaXQub2ZmKCk7XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlUGFzc3dvcmQuZW1pdCh7ZXJyb3J9KTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1Ym1pdC5vZmYoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybVN1Ym1pdC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmNoYW5nZVBhc3N3b3JkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1Ym1pdC5jb21wbGV0ZSgpO1xuICAgIH1cblxufVxuIl19