ngx-custom-form-error
Version:
This library makes showing errors in angular forms easier.
1 lines • 20 kB
Source Map (JSON)
{"version":3,"file":"ngx-custom-form-error.mjs","sources":["../../../projects/ngx-custom-form-error/src/lib/custom-form-label.directive.ts","../../../projects/ngx-custom-form-error/src/lib/helper.ts","../../../projects/ngx-custom-form-error/src/lib/injection-token.ts","../../../projects/ngx-custom-form-error/src/lib/component/ngx-custom-form-error.component.ts","../../../projects/ngx-custom-form-error/src/lib/component/ngx-custom-form-error.component.html","../../../projects/ngx-custom-form-error/src/lib/ngx-custom-form-error.module.ts","../../../projects/ngx-custom-form-error/src/public-api.ts","../../../projects/ngx-custom-form-error/src/ngx-custom-form-error.ts"],"sourcesContent":["import { Directive, ElementRef } from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: \"[cLabel]\"\r\n})\r\nexport class CustomFormControlLabelDirective {\r\n constructor(public el: ElementRef) {\r\n }\r\n}","export function hasTwoObjectsSameProps(x: Object, y: Object): boolean {\r\n let xProp: string[], yProp: string[];\r\n try {\r\n xProp = Object.getOwnPropertyNames(x);\r\n } catch {\r\n xProp = [];\r\n }\r\n try {\r\n yProp = Object.getOwnPropertyNames(y);\r\n } catch {\r\n yProp = [];\r\n }\r\n if (xProp.length !== yProp.length) return false;\r\n return xProp.every((prop: string) => yProp.includes(prop));\r\n}","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport const CUSTOM_FORM_CONFIG = new InjectionToken('Custom-Form-Config');","import { ChangeDetectionStrategy, Component, ContentChild, ElementRef, Inject, Input, Optional } from '@angular/core';\nimport { FormControlName } from '@angular/forms';\nimport { combineLatest, Observable, of, Subject } from 'rxjs';\nimport { distinctUntilChanged, map, switchMap, tap, takeUntil } from 'rxjs/operators';\nimport { CustomFormControlLabelDirective } from '../custom-form-label.directive';\nimport { hasTwoObjectsSameProps } from '../helper';\nimport { CUSTOM_FORM_CONFIG } from '../injection-token';\nimport { IError, IErrorConfig } from '../ngx-custom-form-error.model';\n@Component({\n selector: 'c-form-error',\n templateUrl: 'ngx-custom-form-error.component.html',\n styleUrls: ['ngx-custom-form-error.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgxCustomFormErrorComponent {\n private _destroy$ = new Subject<void>();\n\n private defaultConfig = {\n errorClass: 'c-control-error',\n errorTextColor: '#ee3e3e',\n addErrorClassToElement: true,\n onTouchedOnly: false\n };\n\n constructor(@Inject(CUSTOM_FORM_CONFIG) @Optional() public config: IErrorConfig) { }\n\n @ContentChild(FormControlName) formControl!: FormControlName;\n /** This input `controlElement` is just for adding errorClass to the native element if config has addErrorClassToElement set to true*/\n @ContentChild(FormControlName, { read: ElementRef }) controlElement!: ElementRef;\n /** This input labelRef, is used to grab label from innerText of the element that has `cLabel` directive. */\n @ContentChild(CustomFormControlLabelDirective) labelRef!: CustomFormControlLabelDirective;\n\n @Input() required?: string | null;\n @Input('maxLength') maxlength?: string | null;\n @Input('minLength') minlength?: string | null;\n @Input() min?: string | null;\n @Input() max?: string | null;\n @Input() email?: string | null;\n @Input() pattern?: string | null;\n\n /** If onTouchedOnly flag is on, we only show errors after the form is touched and has errors */\n @Input() onTouchedOnly!: boolean;\n /** It adds error class to the form-control element which you can use to style the element */\n @Input() addErrorClassToElement!: boolean;\n /** Color of the error message */\n @Input() errorTextColor!: string;\n /**Max Length count is used to show remaining letters in right hand side of form error area eg. [5 / 10] */\n @Input() maxLengthCount!: number;\n /** `label` input can give label for the form error as input property in case `cLabel` directive is not used. */\n @Input() label?: string | null;\n\n errors$!: Observable<null | string[]>;\n\n private messages!: IError;\n private errorClass!: string;\n\n ngAfterContentInit() {\n this.init();\n this.errors$ = this.getErrors();\n }\n\n init() {\n this.onTouchedOnly = this.onTouchedOnly ?? this.config?.onTouchedOnly ?? this.defaultConfig.onTouchedOnly;\n this.addErrorClassToElement = this.addErrorClassToElement ?? this.config?.addErrorClassToElement ?? this.defaultConfig.addErrorClassToElement;\n this.errorTextColor = this.errorTextColor ?? this.config?.errorTextColor ?? this.defaultConfig.errorTextColor;\n this.errorClass = this.config?.errorClass ?? this.defaultConfig.errorClass;\n this.label = this.label ?? this.labelRef?.el.nativeElement.innerText ?? undefined;\n this.initmessages();\n }\n\n /*** We compose messages object from user inputs and global config here, which will use to show the error */\n initmessages() {\n // We are checking for undefined because input property can be null if user don't want to show error that is configured \n // in the global config.\n this.messages = {\n required: this.required !== undefined ? this.required : this.config?.required,\n min: this.min !== undefined ? this.min : this.config?.min,\n max: this.max !== undefined ? this.max : this.config?.max,\n minlength: this.minlength !== undefined ? this.minlength : this.config?.minLength,\n maxlength: this.maxlength !== undefined ? this.maxlength : this.config?.maxLength,\n email: this.email !== undefined ? this.email : this.config?.email,\n pattern: this.pattern !== undefined ? this.pattern : this.config?.pattern\n };\n }\n\n getErrors() {\n const touched$ = new Observable<boolean>((subscribe => {\n // If onTouchedOnly is `true` the observable emits `true` only after the element is touched\n if (this.onTouchedOnly) {\n // Thsee are use to trigger if the input is marked as touched\n this.formControl.valueAccessor?.registerOnTouched(() => subscribe.next(true));\n this.formControl.valueChanges?.pipe(takeUntil(this._destroy$)).subscribe(() => this.formControl.touched ? subscribe.next(true) : null);\n } else {\n // If onTouchedOnly is `false` the observable emits `true` so as to start looking for error rightaway\n subscribe.next(true);\n }\n })).pipe(distinctUntilChanged());\n\n return combineLatest([touched$, this.formControl.statusChanges!]).pipe(\n switchMap(() => of(this.formControl.errors)),\n tap(errors => {\n if (!this.addErrorClassToElement) return;\n // if config has addErrorClassToElement set to true, we set the errorClass to the element thas has `formControlName` directive.\n if (errors) {\n this.controlElement.nativeElement.classList.add(this.errorClass);\n } else {\n this.controlElement.nativeElement.classList.remove(this.errorClass);\n }\n }),\n // This observable will emit everytime we input on the element. And a simple distinctUntilChanged will not work\n // since it will emit either `null` or `error object` with same properties. But two objects cannot be same\n // so I have used `hasTwoObjectsSameProps` to stop emitting if the error object has same properties (meaning it is same ) as previous one.\n distinctUntilChanged((x, y) => hasTwoObjectsSameProps(x as Object, y as Object)),\n map((errorObj: any) => {\n\n if (!errorObj) return [];\n\n let errors = Object.keys(errorObj).map(key => {\n\n let errorKey = key as keyof IError;\n\n if (!this.messages[errorKey]) return;\n\n if (typeof this.messages[errorKey] == 'string') {\n return this.messages[errorKey];\n } else {\n let errorFn = this.messages[errorKey] as Function;\n return errorFn(this.label, errorObj[errorKey]);\n }\n\n });\n // This to eliminate array of undefined and nulls\n return errors.filter(error => error);\n })\n ) as Observable<string[]>;\n }\n\n ngOnDestroy() {\n this._destroy$.next();\n }\n\n}\n","<ng-content></ng-content>\r\n<div class=\"c-additions\">\r\n <div class=\"c-error-container\" *ngIf=\"(errors$ | async) as errors;else emptyDiv\">\r\n <ng-container *ngIf=\"errors.length\">\r\n <ng-container *ngFor=\"let error of errors\">\r\n <div [style.color]=\"errorTextColor\" class=\"c-error\">\r\n {{error}}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"formControl && maxLengthCount\" class=\"c-counter\">\r\n <span class=\"c-counter-left-bracket\">[</span>\r\n <span class=\"c-counter-first-elem\">\r\n {{(formControl.valueChanges | async)?.length || formControl.value?.length || 0}}\r\n </span>\r\n <span class=\"c-counter-divider\">\r\n /\r\n </span>\r\n <span class=\"c-counter-last-elem\">\r\n {{maxLengthCount}}\r\n </span>\r\n <span class=\"c-counter-right-bracket\">]</span>\r\n\r\n </div>\r\n</div>\r\n<ng-template #emptyDiv>\r\n <div></div>\r\n</ng-template>","import { CommonModule } from \"@angular/common\";\nimport { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { NgxCustomFormErrorComponent } from \"./component/ngx-custom-form-error.component\";\nimport { CustomFormControlLabelDirective } from \"./custom-form-label.directive\";\nimport { CUSTOM_FORM_CONFIG } from \"./injection-token\";\nimport { IErrorConfig } from \"./ngx-custom-form-error.model\";\n\n@NgModule({\n declarations: [\n NgxCustomFormErrorComponent,\n CustomFormControlLabelDirective\n ],\n imports: [\n CommonModule,\n ],\n exports: [\n NgxCustomFormErrorComponent,\n CustomFormControlLabelDirective\n ]\n})\nexport class NgxCustomFormErrorModule {\n private static config: IErrorConfig;\n\n static rootConfig(config: IErrorConfig): ModuleWithProviders<NgxCustomFormErrorModule> {\n if (NgxCustomFormErrorModule.config) throw new Error(\"NgxCustomFormErrorModule.rootConfig() method cannot be called more than once in an application. Use NgxCustomFormErrorModule.childConfig() method if you want to pass extra configuration.\");\n NgxCustomFormErrorModule.config = config;\n return {\n ngModule: NgxCustomFormErrorModule,\n providers: [{\n provide: CUSTOM_FORM_CONFIG,\n useValue: config\n }\n ]\n };\n }\n\n static childConfig(config: IErrorConfig): ModuleWithProviders<NgxCustomFormErrorModule> {\n return {\n ngModule: NgxCustomFormErrorModule,\n providers: [{\n provide: CUSTOM_FORM_CONFIG,\n useValue: { ...NgxCustomFormErrorModule.config, ...config }\n }\n ]\n };\n }\n\n}","/*\n * Public API Surface of ngx-custom-form-error\n */\n\nexport * from './lib/component/ngx-custom-form-error.component';\nexport * from './lib/custom-form-label.directive';\nexport * from './lib/ngx-custom-form-error.module';\nexport * from './lib/ngx-custom-form-error.model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}