{ "version": 3, "sources": ["libs/shared/form-validation/src/lib/control-error/control-error.component.ts", "libs/shared/form-validation/src/lib/directives/form-submit.directive.ts", "libs/shared/form-validation/src/lib/form-errors.ts", "libs/shared/form-validation/src/lib/directives/control-error-container.directive.ts", "libs/shared/form-validation/src/lib/directives/control-error.directive.ts", "libs/shared/form-validation/src/lib/shared-form-validation.module.ts", "libs/shared/form-validation/src/lib/interceptor/form-validation.interceptor.ts"], "sourcesContent": ["import { Component, ChangeDetectionStrategy, Input, ChangeDetectorRef } from '@angular/core';\n\n@Component({\n template: `

\n \n

`,\n styleUrls: ['./control-error.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class ControlErrorComponent {\n public errorText!: string;\n public hide = true;\n\n @Input() public set text(value: string | null) {\n if (value !== this.errorText) {\n this.errorText = value || '';\n this.hide = !value;\n this.cdr.detectChanges();\n }\n }\n\n constructor(private cdr: ChangeDetectorRef) {}\n}\n", "import {\n ComponentFactoryResolver,\n ComponentRef,\n ContentChild,\n Directive,\n ElementRef,\n OnDestroy,\n OnInit,\n Renderer2,\n ViewContainerRef,\n} from '@angular/core';\nimport { fromEvent, Subscription, tap } from 'rxjs';\nimport { shareReplay } from 'rxjs/operators';\nimport { ControlContainer } from '@angular/forms';\nimport { ControlErrorComponent } from '../control-error/control-error.component';\n\nconst ERROR_EXIST_CLASS = 'show-errors-list';\nconst MIGRATION_ERROR = 'Your email address is associated with a different system. Please login at courses.corporatefinanceinstitute.com.';\nconst MIGRATION_ERROR_WITH_LINK =\n 'Your email address is associated with a different system. Please login at courses.corporatefinanceinstitute.com.';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'form',\n standalone: false,\n})\nexport class FormSubmitDirective implements OnInit, OnDestroy {\n ref: ComponentRef[] = [];\n container: ViewContainerRef;\n subs = new Subscription();\n @ContentChild('errorContainer', { read: ViewContainerRef }) containerRef!: ViewContainerRef;\n @ContentChild('errorContainer') containerEl!: any;\n\n submit$ = fromEvent(this.element, 'submit').pipe(\n tap(() => {\n if (!this.element.classList.contains('form-submitted')) {\n this.element.classList.add('form-submitted');\n }\n }),\n shareReplay(1),\n );\n\n constructor(\n private vcr: ViewContainerRef,\n private host: ElementRef,\n private formControl: ControlContainer,\n private resolver: ComponentFactoryResolver,\n private renderer: Renderer2,\n ) {\n this.container = vcr;\n }\n\n get element(): any {\n return this.host.nativeElement;\n }\n\n get control(): any {\n return this.formControl;\n }\n\n ngOnDestroy(): void {\n this.subs.unsubscribe();\n }\n\n ngOnInit(): void {\n this.subs.add(\n this.control?.statusChanges.subscribe(() => {\n const formServerErrors = this.control?.errors?.serverError || null;\n if (formServerErrors) {\n this.renderError(formServerErrors);\n } else {\n this.renderError(null);\n }\n }),\n );\n }\n\n private renderError(errorList: string[] | null): void {\n const parent = this.containerEl?.elementRef.nativeElement.parentElement;\n if (parent) {\n this.renderer.removeClass(parent, ERROR_EXIST_CLASS);\n this.ref.forEach(ref => ref.destroy());\n errorList?.forEach((error, index) => {\n const factory = this.resolver.resolveComponentFactory(ControlErrorComponent);\n this.ref[index] = this.containerRef.createComponent(factory, 0);\n if (error === MIGRATION_ERROR) {\n this.ref[index].instance.text = MIGRATION_ERROR_WITH_LINK;\n } else {\n this.ref[index].instance.text = error;\n }\n this.renderer.addClass(parent, ERROR_EXIST_CLASS);\n });\n }\n }\n}\n", "import { InjectionToken } from '@angular/core';\n\nexport const defaultErrors = {\n required: (): string => {\n return `This field is required`;\n },\n minlength: ({ requiredLength, actualLength }: Record): string => `Expect ${requiredLength} but got ${actualLength}`,\n};\n\nexport const FORM_ERRORS = new InjectionToken('FORM_ERRORS', {\n providedIn: 'root',\n factory: (): { minlength: ({ requiredLength, actualLength }: Record) => string; required: () => string } => defaultErrors,\n});\n", "import { Directive, ViewContainerRef } from '@angular/core';\n\n@Directive({\n selector: '[controlErrorContainer]',\n standalone: false,\n})\nexport class ControlErrorContainerDirective {\n constructor(public vcr: ViewContainerRef) {}\n}\n", "import {\n ChangeDetectorRef,\n ComponentFactoryResolver,\n ComponentRef,\n Directive,\n ElementRef,\n Host,\n Inject,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n ViewContainerRef,\n} from '@angular/core';\nimport { AbstractControl, NgControl } from '@angular/forms';\nimport { debounceTime, EMPTY, merge, Observable, Subscription } from 'rxjs';\nimport { ControlErrorComponent } from '../control-error/control-error.component';\nimport { FORM_ERRORS } from '../form-errors';\nimport { ControlErrorContainerDirective } from './control-error-container.directive';\nimport { FormSubmitDirective } from './form-submit.directive';\n\nconst FORBIDDEN_TYPE_TO_WRAP = ['checkbox', 'radio'];\nconst CONTROL_ERROR_CLASS = 'control-has-error';\n\n@Directive({\n selector: '[formControl], [formControlName]:not([controlErrorsIgnore]), [ngModel]',\n standalone: false,\n})\nexport class ControlErrorsDirective implements OnInit, OnDestroy {\n ref!: ComponentRef;\n container: ViewContainerRef;\n submit$: Observable;\n subscription: Subscription = new Subscription();\n\n constructor(\n private vcr: ViewContainerRef,\n private resolver: ComponentFactoryResolver,\n @Optional() controlErrorContainer: ControlErrorContainerDirective,\n @Inject(FORM_ERRORS) private errors: Record,\n @Optional() @Host() private form: FormSubmitDirective,\n private controlDir: NgControl,\n private elementRef: ElementRef,\n private renderer: Renderer2,\n private cdr: ChangeDetectorRef,\n ) {\n this.container = vcr;\n this.submit$ = this.form ? this.form.submit$ : EMPTY;\n }\n\n get control(): AbstractControl | null {\n return this.controlDir.control;\n }\n\n ngOnInit(): void {\n if (this.control) {\n // wrap control in order to display error icon on control\n if (FORBIDDEN_TYPE_TO_WRAP.indexOf(this.elementRef.nativeElement.type) === -1) {\n this.wrapControl();\n }\n\n this.subscription.add(\n merge(this.submit$, this.control.statusChanges, this.control.valueChanges)\n .pipe(debounceTime(100))\n .subscribe(() => {\n // display backend validation errors\n const controlServerErrors = this.control?.errors?.serverError ? this.control?.errors?.serverError[0] : null;\n if (controlServerErrors) {\n this.renderError(controlServerErrors);\n } else if (this.ref) {\n this.renderError(null);\n }\n\n // display frontend validation errors\n const controlErrors = this.control?.errors;\n if (controlErrors && !controlServerErrors) {\n const firstKey = Object.keys(controlErrors)[0];\n const getError = this.errors[firstKey];\n const text = firstKey ? getError(controlErrors[firstKey]) : '';\n this.renderError(text);\n } else if (this.ref && !controlServerErrors) {\n this.renderError(null);\n }\n this.cdr.markForCheck();\n }),\n );\n\n this.subscription.add(this.control.statusChanges.subscribe());\n }\n }\n\n ngOnDestroy(): void {\n this.subscription.unsubscribe();\n }\n\n wrapControl(): void {\n const div = this.renderer.createElement('div');\n this.renderer.insertBefore(this.elementRef.nativeElement.parentElement, div, this.elementRef.nativeElement);\n this.renderer.appendChild(div, this.elementRef.nativeElement);\n }\n\n renderError(text: string | null): void {\n if (!this.ref) {\n const factory = this.resolver.resolveComponentFactory(ControlErrorComponent);\n this.ref = this.container.createComponent(factory);\n }\n this.ref.instance.text = text;\n\n const parentEl = this.elementRef.nativeElement.parentElement;\n if (parentEl) {\n this.renderer.removeClass(parentEl, CONTROL_ERROR_CLASS);\n if (text) {\n this.renderer.addClass(parentEl, CONTROL_ERROR_CLASS);\n }\n }\n }\n}\n", "import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { ControlErrorsDirective } from './directives/control-error.directive';\nimport { FormSubmitDirective } from './directives/form-submit.directive';\nimport { ControlErrorContainerDirective } from './directives/control-error-container.directive';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ControlErrorComponent } from './control-error/control-error.component';\nimport { SharedUiUiComponentsModule } from '@lms/shared-ui/ui-components';\nimport { SharedPipesModule } from '@lms/shared/pipes';\n\n@NgModule({\n imports: [ReactiveFormsModule, SharedUiUiComponentsModule, FormsModule, SharedPipesModule],\n declarations: [ControlErrorsDirective, ControlErrorComponent, ControlErrorContainerDirective, FormSubmitDirective],\n exports: [ControlErrorsDirective, ControlErrorComponent, ControlErrorContainerDirective, FormSubmitDirective],\n})\nexport class SharedFormValidationModule {\n constructor(@Optional() @SkipSelf() parentModule: SharedFormValidationModule) {\n // if (parentModule) {\n // throw new Error('CoreModule is already loaded. Import it in the AppModule only');\n // }\n }\n\n static forRoot(): ModuleWithProviders {\n return {\n ngModule: SharedFormValidationModule,\n };\n }\n}\n", "import { Injectable } from '@angular/core';\nimport { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { CurrentUserStorage, TwoFaCompletedStorageService } from '@lms/shared/storages';\nimport { Router } from '@angular/router';\nimport { NotifierService } from '@lms/shared/services/app-services';\nimport { ApiErrorStatusEnum, ApiService, Violation } from '@lms/shared/services/api-services';\nimport { catchError } from 'rxjs/operators';\nimport { AbstractControl } from '@angular/forms';\nimport { Routing } from '@lms/shared/constants';\n\n@Injectable()\nexport class FormValidationInterceptor implements HttpInterceptor {\n constructor(\n private currentUserStorage: CurrentUserStorage,\n private twoFaCompletedStorage: TwoFaCompletedStorageService,\n private router: Router,\n private notifierService: NotifierService,\n private apiService: ApiService,\n ) {}\n\n intercept(req: HttpRequest, next: HttpHandler): Observable> {\n if (req.url.startsWith('/version')) {\n return next.handle(req);\n }\n\n return next.handle(req).pipe(catchError((err: unknown) => this.processError(err)));\n }\n\n private processError(err: any): Observable {\n const form = this.apiService.form;\n if (form) {\n this.renderValidationErrors(err, form);\n this.apiService.form = null;\n }\n\n const errorCode = err?.error?.status?.code;\n let errorMessages = ApiErrorStatusEnum.getMessages(errorCode, err?.error?.status?.desc);\n if (errorCode === ApiErrorStatusEnum.AUTH_SESSION_EXPIRED_EXCEPTION || errorCode === ApiErrorStatusEnum.AUTH_NOT_AUTHORIZED_EXCEPTION) {\n this.currentUserStorage.setCurrentUser(null);\n this.router.navigate(['/auth']);\n } else if (errorCode === ApiErrorStatusEnum.AUTH_TWO_FACTOR_CODE_NEEDED_EXCEPTION) {\n this.twoFaCompletedStorage.setState(false);\n this.router.navigate(['/auth/2fa']);\n } else if (err?.status === 413) {\n errorMessages = ['The file is too large.'];\n } else if (errorCode === ApiErrorStatusEnum.AUTH_ENROLLMENT_EXPIRED_EXCEPTION) {\n return throwError(err);\n } else if (errorCode === ApiErrorStatusEnum.AUTH_COMPANY_ACCESS_DENIED_EXCEPTION) {\n this.currentUserStorage.setCurrentUser(null);\n window.location.href = Routing.DASHBOARD;\n } else if (\n errorCode === ApiErrorStatusEnum.AUTH_RESET_PASSWORD_NOT_NEEDED_EXCEPTION ||\n errorCode === ApiErrorStatusEnum.AUTH_RESET_PASSWORD_TOKEN_HAS_EXPIRED_EXCEPTION\n ) {\n return throwError(err);\n }\n for (const index in errorMessages) {\n this.notifierService.error(errorMessages[index]);\n }\n return throwError(err);\n }\n\n public renderValidationErrors(err: Error, form: AbstractControl): void {\n if (!(err instanceof HttpErrorResponse)) {\n return;\n }\n form.setErrors({});\n if (err.status === 400) {\n const validationErrors = err.error?.status?.desc?.reduce(\n (acc: { [key: string]: Array }, { path: pathname, message }: Violation | { path: string; message: string }) => {\n pathname = pathname ? pathname : '_default';\n if (!acc[pathname]) {\n acc[pathname] = [];\n }\n acc[pathname].push(message);\n\n return acc;\n },\n {},\n );\n Object.keys(validationErrors).forEach(prop => {\n const formControl = form.get(prop);\n if (formControl) {\n // activate the error message\n formControl.setErrors({\n serverError: validationErrors[prop], // TODO validationErrors[prop] can be a collection!\n });\n } else {\n form.setErrors({\n ...form.errors,\n serverError: validationErrors[prop],\n });\n }\n });\n }\n }\n}\n"], "mappings": "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", "names": ["ControlErrorComponent", "text", "value", "errorText", "hide", "cdr", "detectChanges", "constructor", "\u0275\u0275directiveInject", "ChangeDetectorRef", "selectors", "inputs", "standalone", "decls", "vars", "consts", "template", "rf", "ctx", "\u0275\u0275elementStart", "\u0275\u0275element", "\u0275\u0275elementEnd", "\u0275\u0275classProp", "\u0275\u0275advance", "\u0275\u0275property", "\u0275\u0275pipeBind1", "\u0275\u0275sanitizeHtml", "ERROR_EXIST_CLASS", "MIGRATION_ERROR", "MIGRATION_ERROR_WITH_LINK", "FormSubmitDirective", "constructor", "vcr", "host", "formControl", "resolver", "renderer", "ref", "subs", "Subscription", "submit$", "fromEvent", "element", "pipe", "tap", "classList", "contains", "add", "shareReplay", "container", "nativeElement", "control", "ngOnDestroy", "unsubscribe", "ngOnInit", "statusChanges", "subscribe", "formServerErrors", "errors", "serverError", "renderError", "errorList", "parent", "containerEl", "elementRef", "parentElement", "removeClass", "forEach", "destroy", "error", "index", "factory", "resolveComponentFactory", "ControlErrorComponent", "containerRef", "createComponent", "instance", "text", "addClass", "\u0275\u0275directiveInject", "ViewContainerRef", "ElementRef", "ControlContainer", "ComponentFactoryResolver", "Renderer2", "selectors", "contentQueries", "rf", "ctx", "dirIndex", "defaultErrors", "required", "minlength", "requiredLength", "actualLength", "FORM_ERRORS", "InjectionToken", "providedIn", "factory", "ControlErrorContainerDirective", "constructor", "vcr", "\u0275\u0275directiveInject", "ViewContainerRef", "selectors", "standalone", "FORBIDDEN_TYPE_TO_WRAP", "CONTROL_ERROR_CLASS", "ControlErrorsDirective", "constructor", "vcr", "resolver", "controlErrorContainer", "errors", "form", "controlDir", "elementRef", "renderer", "cdr", "subscription", "Subscription", "container", "submit$", "EMPTY", "control", "ngOnInit", "indexOf", "nativeElement", "type", "wrapControl", "add", "merge", "statusChanges", "valueChanges", "pipe", "debounceTime", "subscribe", "controlServerErrors", "serverError", "renderError", "ref", "controlErrors", "firstKey", "Object", "keys", "getError", "text", "markForCheck", "ngOnDestroy", "unsubscribe", "div", "createElement", "insertBefore", "parentElement", "appendChild", "factory", "resolveComponentFactory", "ControlErrorComponent", "createComponent", "instance", "parentEl", "removeClass", "addClass", "\u0275\u0275directiveInject", "ViewContainerRef", "ComponentFactoryResolver", "ControlErrorContainerDirective", "FORM_ERRORS", "FormSubmitDirective", "NgControl", "ElementRef", "Renderer2", "ChangeDetectorRef", "selectors", "standalone", "SharedFormValidationModule", "constructor", "parentModule", "forRoot", "ngModule", "\u0275\u0275inject", "ReactiveFormsModule", "SharedUiUiComponentsModule", "FormsModule", "SharedPipesModule", "FormValidationInterceptor", "constructor", "currentUserStorage", "twoFaCompletedStorage", "router", "notifierService", "apiService", "intercept", "req", "next", "url", "startsWith", "handle", "pipe", "catchError", "err", "processError", "form", "renderValidationErrors", "errorCode", "error", "status", "code", "errorMessages", "ApiErrorStatusEnum", "getMessages", "desc", "AUTH_SESSION_EXPIRED_EXCEPTION", "AUTH_NOT_AUTHORIZED_EXCEPTION", "setCurrentUser", "navigate", "AUTH_TWO_FACTOR_CODE_NEEDED_EXCEPTION", "setState", "AUTH_ENROLLMENT_EXPIRED_EXCEPTION", "throwError", "AUTH_COMPANY_ACCESS_DENIED_EXCEPTION", "window", "location", "href", "Routing", "DASHBOARD", "AUTH_RESET_PASSWORD_NOT_NEEDED_EXCEPTION", "AUTH_RESET_PASSWORD_TOKEN_HAS_EXPIRED_EXCEPTION", "index", "HttpErrorResponse", "setErrors", "validationErrors", "reduce", "acc", "path", "pathname", "message", "push", "Object", "keys", "forEach", "prop", "formControl", "get", "serverError", "__spreadProps", "__spreadValues", "errors", "\u0275\u0275inject", "CurrentUserStorage", "TwoFaCompletedStorageService", "Router", "NotifierService", "ApiService", "factory", "\u0275fac"] }