UNPKG

ngx-mat-errors

Version:

NgxMatErrors provides an easy, yet flexible solution for displaying error messages in a MatFormField.

1 lines 34.2 kB
{"version":3,"file":"ngx-mat-errors.mjs","sources":["../../../projects/ngx-mat-errors/src/lib/ngx-mat-error-control.ts","../../../projects/ngx-mat-errors/src/lib/ngx-mat-error-def.directive.ts","../../../projects/ngx-mat-errors/src/lib/utils/coerce-to-observable.ts","../../../projects/ngx-mat-errors/src/lib/utils/distinct-until-error-changed.ts","../../../projects/ngx-mat-errors/src/lib/utils/find-error-for-control.ts","../../../projects/ngx-mat-errors/src/lib/utils/get-abstract-controls.ts","../../../projects/ngx-mat-errors/src/lib/utils/get-control-with-error.ts","../../../projects/ngx-mat-errors/src/lib/ngx-mat-errors.component.ts","../../../projects/ngx-mat-errors/src/lib/locales/en.ts","../../../projects/ngx-mat-errors/src/lib/locales/hu.ts","../../../projects/ngx-mat-errors/src/lib/locales/pt-br.ts","../../../projects/ngx-mat-errors/src/lib/ngx-mat-errors-for-date-range-picker.directive.ts","../../../projects/ngx-mat-errors/src/lib/ngx-mat-errors.module.ts","../../../projects/ngx-mat-errors/src/public-api.ts","../../../projects/ngx-mat-errors/src/ngx-mat-errors.ts"],"sourcesContent":["import { Injectable, type Provider, inject } from '@angular/core';\r\nimport { MAT_FORM_FIELD } from '@angular/material/form-field';\r\nimport type { FormFieldControl } from './types';\r\n\r\n/**\r\n * This class contains the logic of getting the default control of a MatFormField.\r\n * Extend it to implement a custom getter method.\r\n */\r\n@Injectable()\r\nexport class NgxMatErrorControl {\r\n protected readonly matFormField = inject(MAT_FORM_FIELD, { optional: true });\r\n public get(): undefined | FormFieldControl | FormFieldControl[] {\r\n return this.matFormField?._control;\r\n }\r\n}\r\n\r\n/**\r\n * Provides the default control accessor of a MatFormField.\r\n */\r\nexport function provideDefaultNgxMatErrorControl(): Provider {\r\n return {\r\n provide: NgxMatErrorControl,\r\n };\r\n}\r\n","import {\r\n Directive,\r\n InjectionToken,\r\n Input,\r\n TemplateRef,\r\n inject,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlContainer,\r\n type AbstractControlDirective,\r\n} from '@angular/forms';\r\n\r\nexport interface INgxMatErrorDef {\r\n ngxMatErrorDefFor: string;\r\n ngxMatErrorDefWithControl?:\r\n | AbstractControlDirective\r\n | AbstractControl\r\n | string\r\n | null;\r\n template: TemplateRef<any>;\r\n control?: AbstractControl;\r\n}\r\n\r\n/**\r\n * Lightweight injection token. When NgxMatErrorDef is not used, only this token will remain, the directive will be tree-shaken.\r\n */\r\nexport const NGX_MAT_ERROR_DEF = new InjectionToken<INgxMatErrorDef>(\r\n 'NGX_MAT_ERROR_DEF'\r\n);\r\n\r\n@Directive({\r\n selector: '[ngxMatErrorDef]',\r\n standalone: true,\r\n providers: [\r\n {\r\n provide: NGX_MAT_ERROR_DEF,\r\n useExisting: NgxMatErrorDef,\r\n },\r\n ],\r\n})\r\nexport class NgxMatErrorDef implements INgxMatErrorDef {\r\n /**\r\n * Specify the error key to be used for error matching.\r\n * @required\r\n */\r\n @Input({\r\n required: true,\r\n })\r\n public ngxMatErrorDefFor!: string;\r\n\r\n /**\r\n * Specify the control to be used for error matching.\r\n * @optional\r\n */\r\n @Input()\r\n public ngxMatErrorDefWithControl?:\r\n | AbstractControlDirective\r\n | AbstractControl\r\n | string\r\n | null = undefined;\r\n public readonly template = inject(TemplateRef);\r\n private readonly controlContainer = inject(ControlContainer, {\r\n optional: true,\r\n skipSelf: true,\r\n });\r\n\r\n public get control(): AbstractControl | undefined {\r\n const input = this.ngxMatErrorDefWithControl;\r\n if (typeof input === 'string') {\r\n return this.controlContainer?.control?.get(input) ?? undefined;\r\n }\r\n if (input instanceof AbstractControl) {\r\n return input;\r\n }\r\n return input?.control ?? undefined;\r\n }\r\n}\r\n","import { type Observable, isObservable, of, } from 'rxjs';\r\nimport type { ErrorMessages } from '../types';\r\n\r\nexport function coerceToObservable(\r\n errorMessages: ErrorMessages | Observable<ErrorMessages>\r\n): Observable<ErrorMessages> {\r\n if (isObservable(errorMessages)) {\r\n return errorMessages;\r\n }\r\n return of(errorMessages);\r\n}\r\n","import type { ErrorTemplate } from '../types';\r\n\r\nexport function distinctUntilErrorChanged<P extends ErrorTemplate>(\r\n prev: P,\r\n curr: P\r\n) {\r\n if (prev === curr) {\r\n return true;\r\n }\r\n if (!prev || !curr) {\r\n return false;\r\n }\r\n if (prev.template !== curr.template) {\r\n return false;\r\n }\r\n return prev.$implicit === curr.$implicit;\r\n}\r\n","import type { AbstractControl } from '@angular/forms';\r\nimport type { INgxMatErrorDef } from '../ngx-mat-error-def.directive';\r\nimport { ErrorMessages } from '../types';\r\n\r\n/**\r\n * Finds the error key or custom error for a control.\r\n * @returns INgxMatErrorDef | undefined\r\n */\r\nexport function findErrorForControl(\r\n control: AbstractControl,\r\n messages: ErrorMessages,\r\n customErrorMessages: readonly INgxMatErrorDef[]\r\n) {\r\n const errorKeys = Object.keys(control.errors!);\r\n return (\r\n customErrorMessages.find((customErrorMessage) =>\r\n errorKeys.some((error) => {\r\n if (error !== customErrorMessage.ngxMatErrorDefFor) {\r\n return false;\r\n }\r\n return (\r\n !customErrorMessage.control || customErrorMessage.control === control\r\n );\r\n })\r\n ) ?? errorKeys.find((key) => key in messages)\r\n );\r\n}\r\n","import { coerceArray } from '@angular/cdk/coercion';\r\nimport { AbstractControl, AbstractControlDirective } from '@angular/forms';\r\nimport type { NgxMatErrorControls } from '../types';\r\n\r\nexport function getAbstractControls(\r\n controls: NgxMatErrorControls\r\n): AbstractControl[] | undefined {\r\n if (!controls) {\r\n return;\r\n }\r\n const _controls = coerceArray(controls)\r\n .map((control) =>\r\n !control\r\n ? undefined\r\n : control instanceof AbstractControlDirective\r\n ? control.control\r\n : control instanceof AbstractControl\r\n ? control\r\n : control.ngControl?.control\r\n )\r\n .filter(<T>(control: T): control is NonNullable<T> => control != null);\r\n return _controls.length ? _controls : undefined;\r\n}\r\n","import {\r\n StatusChangeEvent,\r\n ValueChangeEvent,\r\n type AbstractControl,\r\n} from '@angular/forms';\r\nimport { combineLatest, filter, map, startWith, type Observable } from 'rxjs';\r\n\r\nexport function getControlWithError(\r\n controls: AbstractControl[]\r\n): Observable<AbstractControl | undefined> {\r\n const controlChanges = controls.map((control) =>\r\n control.events.pipe(\r\n filter(\r\n (event) =>\r\n event instanceof StatusChangeEvent ||\r\n event instanceof ValueChangeEvent\r\n ),\r\n startWith(null as any),\r\n map(() => control)\r\n )\r\n );\r\n return combineLatest(controlChanges).pipe(\r\n map((control) => control.find((control) => !!control.errors))\r\n );\r\n}\r\n","import { AsyncPipe, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ContentChildren,\r\n InjectionToken,\r\n Input,\r\n ViewEncapsulation,\r\n inject,\r\n type OnDestroy,\r\n type QueryList,\r\n} from '@angular/core';\r\nimport {\r\n ReplaySubject,\r\n combineLatest,\r\n distinctUntilChanged,\r\n map,\r\n of,\r\n startWith,\r\n switchMap,\r\n type Observable,\r\n} from 'rxjs';\r\nimport {\r\n NgxMatErrorControl,\r\n provideDefaultNgxMatErrorControl,\r\n} from './ngx-mat-error-control';\r\nimport {\r\n NGX_MAT_ERROR_DEF,\r\n type INgxMatErrorDef,\r\n} from './ngx-mat-error-def.directive';\r\nimport type {\r\n ErrorMessages,\r\n ErrorTemplate,\r\n NgxMatErrorControls,\r\n} from './types';\r\nimport { coerceToObservable } from './utils/coerce-to-observable';\r\nimport { distinctUntilErrorChanged } from './utils/distinct-until-error-changed';\r\nimport { findErrorForControl } from './utils/find-error-for-control';\r\nimport { getAbstractControls } from './utils/get-abstract-controls';\r\nimport { getControlWithError } from './utils/get-control-with-error';\r\n\r\nexport const NGX_MAT_ERROR_DEFAULT_OPTIONS = new InjectionToken<\r\n ErrorMessages | Observable<ErrorMessages>\r\n>('NGX_MAT_ERROR_DEFAULT_OPTIONS');\r\n\r\n@Component({\r\n selector: 'ngx-mat-errors, [ngx-mat-errors]',\r\n template: `<ng-template #defaultTemplate let-error>{{ error }}</ng-template\r\n >@if( error$ | async; as error) {\r\n <ng-template\r\n [ngTemplateOutlet]=\"error.template ?? defaultTemplate\"\r\n [ngTemplateOutletContext]=\"error\"\r\n ></ng-template>\r\n }`,\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [AsyncPipe, NgTemplateOutlet],\r\n host: {\r\n class: 'ngx-mat-errors',\r\n },\r\n providers: [provideDefaultNgxMatErrorControl()],\r\n})\r\nexport class NgxMatErrors implements OnDestroy {\r\n private readonly messages$ = coerceToObservable(\r\n inject(NGX_MAT_ERROR_DEFAULT_OPTIONS)\r\n );\r\n private readonly defaultControl = inject(NgxMatErrorControl, {\r\n host: true,\r\n });\r\n private readonly controlChangedSubject =\r\n new ReplaySubject<NgxMatErrorControls>(1);\r\n\r\n protected error$!: Observable<ErrorTemplate>;\r\n\r\n // ContentChildren is set before ngAfterContentInit which is before ngAfterViewInit.\r\n // Before ngAfterViewInit lifecycle hook we can modify the error$ observable without needing another change detection cycle.\r\n // This elaborates the need of rxjs defer;\r\n @ContentChildren(NGX_MAT_ERROR_DEF, { descendants: true })\r\n protected set customErrorMessages(queryList: QueryList<INgxMatErrorDef>) {\r\n const firstControlWithError$ = this.controlChangedSubject.pipe(\r\n switchMap((_controls) => {\r\n const controls = getAbstractControls(\r\n _controls || this.defaultControl.get()\r\n );\r\n if (!controls) {\r\n return of(null);\r\n }\r\n return getControlWithError(controls);\r\n })\r\n ),\r\n customErrorMessages$ = (\r\n queryList.changes as Observable<QueryList<INgxMatErrorDef>>\r\n ).pipe(startWith(queryList));\r\n this.error$ = combineLatest([\r\n firstControlWithError$,\r\n customErrorMessages$,\r\n this.messages$,\r\n ]).pipe(\r\n map(([controlWithError, customErrorMessages, messages]) => {\r\n if (!controlWithError) {\r\n return;\r\n }\r\n const errors = controlWithError.errors!,\r\n errorOrErrorDef = findErrorForControl(\r\n controlWithError,\r\n messages,\r\n customErrorMessages.toArray()\r\n );\r\n if (!errorOrErrorDef) {\r\n return;\r\n }\r\n if (typeof errorOrErrorDef === 'object') {\r\n return {\r\n template: errorOrErrorDef.template,\r\n $implicit: errors[errorOrErrorDef.ngxMatErrorDefFor],\r\n };\r\n }\r\n const message = messages[errorOrErrorDef];\r\n return {\r\n $implicit:\r\n typeof message === 'function'\r\n ? message(errors[errorOrErrorDef])\r\n : message,\r\n };\r\n }),\r\n distinctUntilChanged(distinctUntilErrorChanged)\r\n );\r\n }\r\n\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n /**\r\n * @deprecated will be changed to a signal and it won't be possible to set the property from TS.\r\n * Instead of setting it in a directive, the directive should extend the {@link NgxMatErrorControl } class\r\n * and provide itself as it.\r\n */\r\n @Input('ngx-mat-errors')\r\n public set control(control: NgxMatErrorControls) {\r\n this.controlChangedSubject.next(control);\r\n }\r\n\r\n /** @ignore */\r\n public ngOnDestroy(): void {\r\n this.controlChangedSubject.complete();\r\n }\r\n}\r\n","import { formatDate } from '@angular/common';\r\nimport { type FactoryProvider, LOCALE_ID } from '@angular/core';\r\nimport type {\r\n EndDateError,\r\n ErrorMessages,\r\n LengthError,\r\n MaxError,\r\n MinError,\r\n StartDateError,\r\n ParseError,\r\n} from '../types';\r\nimport { NGX_MAT_ERROR_DEFAULT_OPTIONS } from '../ngx-mat-errors.component';\r\n\r\nexport function errorMessagesEnFactory(\r\n locale: string,\r\n dateFormat = 'shortDate',\r\n timeFormat = 'shortTime'\r\n): ErrorMessages {\r\n return {\r\n min: (error: MinError) =>\r\n `Please enter a value greater than or equal to ${error.min}.`,\r\n max: (error: MaxError) =>\r\n `Please enter a value less than or equal to ${error.max}.`,\r\n required: `This field is required.`,\r\n email: `Please enter a valid email address.`,\r\n minlength: (error: LengthError) =>\r\n `Please enter at least ${error.requiredLength} characters.`,\r\n maxlength: (error: LengthError) =>\r\n `Please enter no more than ${error.requiredLength} characters.`,\r\n matDatepickerMin: (error: MinError<Date>) => {\r\n const formatted = formatDate(error.min, dateFormat, locale);\r\n return `Please enter a date greater than or equal to ${\r\n formatted ?? error.min\r\n }.`;\r\n },\r\n matDatepickerMax: (error: MaxError<Date>) => {\r\n const formatted = formatDate(error.max, dateFormat, locale);\r\n return `Please enter a date less than or equal to ${\r\n formatted ?? error.max\r\n }.`;\r\n },\r\n matDatepickerParse: (error: ParseError) => `Invalid date format.`,\r\n matStartDateInvalid: (error: StartDateError<Date>) =>\r\n `Start date cannot be after end date.`,\r\n matEndDateInvalid: (error: EndDateError<Date>) =>\r\n `End date cannot be before start date.`,\r\n matDatepickerFilter: 'This date is filtered out.',\r\n matTimepickerParse: (error: ParseError) => `Invalid time format.`,\r\n matTimepickerMin: (error: MinError<Date>) => {\r\n const formatted = formatDate(error.min, timeFormat, locale);\r\n return `Please enter a time greater than or equal to ${\r\n formatted ?? error.min\r\n }.`;\r\n },\r\n matTimepickerMax: (error: MaxError<Date>) => {\r\n const formatted = formatDate(error.max, timeFormat, locale);\r\n return `Please enter a time less than or equal to ${\r\n formatted ?? error.max\r\n }.`;\r\n },\r\n };\r\n}\r\n\r\nexport const NGX_MAT_ERROR_CONFIG_EN: FactoryProvider = {\r\n provide: NGX_MAT_ERROR_DEFAULT_OPTIONS,\r\n useFactory: errorMessagesEnFactory,\r\n deps: [LOCALE_ID],\r\n};\r\n","import { formatDate } from '@angular/common';\r\nimport { type FactoryProvider, LOCALE_ID } from '@angular/core';\r\nimport type {\r\n ParseError,\r\n EndDateError,\r\n ErrorMessages,\r\n LengthError,\r\n MaxError,\r\n MinError,\r\n StartDateError,\r\n} from '../types';\r\nimport { NGX_MAT_ERROR_DEFAULT_OPTIONS } from '../ngx-mat-errors.component';\r\n\r\nexport function errorMessagesHuFactory(\r\n locale: string,\r\n dateFormat = 'shortDate',\r\n timeFormat = 'shortTime'\r\n): ErrorMessages {\r\n return {\r\n min: (error: MinError) => `Nem lehet kisebb, mint ${error.min}.`,\r\n max: (error: MaxError) => `Nem lehet nagyobb, mint ${error.max}.`,\r\n required: `Kötelező mező.`,\r\n email: `Nem érvényes e-mail cím.`,\r\n minlength: (error: LengthError) =>\r\n `Legalább ${error.requiredLength} karakter hosszú lehet.`,\r\n maxlength: (error: LengthError) =>\r\n `Legfeljebb ${error.requiredLength} karakter hosszú lehet.`,\r\n server: (error: string) => error,\r\n matDatepickerMin: (error: MinError<Date>) => {\r\n const formatted = formatDate(error.min, dateFormat, locale);\r\n // In Hungarian date ends with '.'\r\n return `Nem lehet korábbi dátum, mint ${formatted ?? error.min}`;\r\n },\r\n matDatepickerMax: (error: MaxError<Date>) => {\r\n const formatted = formatDate(error.max, dateFormat, locale);\r\n // In Hungarian date ends with '.'\r\n return `Nem lehet későbbi dátum, mint ${formatted ?? error.max}`;\r\n },\r\n matDatepickerParse: (error: ParseError) => `Érvénytelen dátum.`,\r\n matStartDateInvalid: (error: StartDateError<Date>) =>\r\n `A kezdő dátum nem lehet a vég dátum után.`,\r\n matEndDateInvalid: (error: EndDateError<Date>) =>\r\n `A vég dátum nem lehet a kezdő dátum előtt.`,\r\n matDatepickerFilter: 'Ez a dátum nem engedélyezett.',\r\n matTimepickerParse: (error: ParseError) => `Érvénytelen idő.`,\r\n matTimepickerMin: (error: MinError<Date>) => {\r\n const formatted = formatDate(error.min, timeFormat, locale);\r\n return `Nem lehet korábbi idő, mint ${\r\n formatted ?? error.min\r\n }.`;\r\n },\r\n matTimepickerMax: (error: MaxError<Date>) => {\r\n const formatted = formatDate(error.max, timeFormat, locale);\r\n return `Nem lehet későbbi idő, mint ${\r\n formatted ?? error.max\r\n }.`;\r\n },\r\n };\r\n}\r\n\r\nexport const NGX_MAT_ERROR_CONFIG_HU: FactoryProvider = {\r\n provide: NGX_MAT_ERROR_DEFAULT_OPTIONS,\r\n useFactory: errorMessagesHuFactory,\r\n deps: [LOCALE_ID],\r\n};\r\n","import { formatDate } from '@angular/common';\r\nimport { type FactoryProvider, LOCALE_ID } from '@angular/core';\r\nimport type {\r\n ParseError,\r\n EndDateError,\r\n ErrorMessages,\r\n LengthError,\r\n MaxError,\r\n MinError,\r\n StartDateError,\r\n} from '../types';\r\nimport { NGX_MAT_ERROR_DEFAULT_OPTIONS } from '../ngx-mat-errors.component';\r\n\r\nexport function errorMessagesPtBtFactory(\r\n locale: string,\r\n dateFormat = 'shortDate',\r\n timeFormat = 'shortTime'\r\n): ErrorMessages {\r\n return {\r\n min: (error: MinError) => `Informe um valor igual ou maior a ${error.min}.`,\r\n max: (error: MaxError) => `Informe um valor igual ou menor a ${error.max}.`,\r\n required: `Campo obrigatório.`,\r\n email: `Informe um endereço de email válido.`,\r\n minlength: (error: LengthError) =>\r\n `Informe pelo menos ${error.requiredLength} caracteres.`,\r\n maxlength: (error: LengthError) =>\r\n `O campo não pode ter mais que ${error.requiredLength} caracteres.`,\r\n matDatepickerMin: (error: MinError<Date>) => {\r\n const formatted = formatDate(error.min, dateFormat, locale);\r\n return `Informe uma data maior ou igual a ${formatted ?? error.min}.`;\r\n },\r\n matDatepickerMax: (error: MaxError<Date>) => {\r\n const formatted = formatDate(error.max, dateFormat, locale);\r\n return `Informe uma data menor ou igual a ${formatted ?? error.max}.`;\r\n },\r\n matDatepickerParse: (error: ParseError) => `Formato de data inválido.`,\r\n matStartDateInvalid: (error: StartDateError<Date>) =>\r\n `A data de início não pode ser posterior à data de término.`,\r\n matEndDateInvalid: (error: EndDateError<Date>) =>\r\n `A data de término não pode ser anterior à data de início.`,\r\n matDatepickerFilter: 'Esta data é filtrada.',\r\n matTimepickerParse: (error: ParseError) => `Formato de hora inválido.`,\r\n matTimepickerMin: (error: MinError<Date>) => {\r\n const formatted = formatDate(error.min, timeFormat, locale);\r\n return `Insira um horário maior ou igual a ${\r\n formatted ?? error.min\r\n }.`;\r\n },\r\n matTimepickerMax: (error: MaxError<Date>) => {\r\n const formatted = formatDate(error.max, timeFormat, locale);\r\n return `Insira um horário menor ou igual a ${\r\n formatted ?? error.max\r\n }.`;\r\n },\r\n };\r\n}\r\n\r\nexport const NGX_MAT_ERROR_CONFIG_PT_BR: FactoryProvider = {\r\n provide: NGX_MAT_ERROR_DEFAULT_OPTIONS,\r\n useFactory: errorMessagesPtBtFactory,\r\n deps: [LOCALE_ID],\r\n};\r\n","import { Directive } from '@angular/core';\r\nimport type { MatDateRangeInput } from '@angular/material/datepicker';\r\nimport { NgxMatErrorControl } from './ngx-mat-error-control';\r\n\r\n@Directive({\r\n selector: '[ngx-mat-errors][forDateRangePicker]',\r\n standalone: true,\r\n host: {\r\n class: 'ngx-mat-errors-for-date-range-picker',\r\n },\r\n providers: [\r\n {\r\n provide: NgxMatErrorControl,\r\n useExisting: NgxMatErrorsForDateRangePicker,\r\n },\r\n ],\r\n})\r\nexport class NgxMatErrorsForDateRangePicker<D> extends NgxMatErrorControl {\r\n /** Returns start and end controls of the date range picker. */\r\n public override get() {\r\n const { _startInput, _endInput } = this.matFormField!\r\n ._control as MatDateRangeInput<D>;\r\n return [_startInput, _endInput];\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { NgxMatErrorDef } from './ngx-mat-error-def.directive';\r\nimport { NgxMatErrors } from './ngx-mat-errors.component';\r\n\r\n@NgModule({\r\n imports: [NgxMatErrors, NgxMatErrorDef],\r\n exports: [NgxMatErrors, NgxMatErrorDef],\r\n})\r\nexport class NgxMatErrorsModule {}\r\n","/*\r\n * Public API Surface of ngx-mat-errors\r\n */\r\n\r\nexport * from './lib/locales';\r\nexport * from './lib/ngx-mat-error-def.directive';\r\nexport * from './lib/ngx-mat-errors-for-date-range-picker.directive';\r\nexport * from './lib/ngx-mat-errors.component';\r\nexport * from './lib/ngx-mat-errors.module';\r\nexport type * from './lib/types';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}