UNPKG

angular-l10n

Version:

Angular library to translate texts, dates and numbers

76 lines 10.3 kB
import { Directive, forwardRef, Input } from '@angular/core'; import { NG_VALIDATORS } from '@angular/forms'; import * as i0 from "@angular/core"; import * as i1 from "../services/l10n-validation"; /** * Function that takes a control and returns either null when it’s valid, or an error object if it’s not. * @param validation The instance of L10nValidation service * @param options A L10n or Intl DateTimeFormatOptions object * @param minDate The minimum date * @param maxDate The maximum date * @param language The current language * @return An error object: 'format', 'minDate' or 'maxDate'; null in case the date is valid */ export function l10nValidateDate(validation, options, minDate, maxDate, language) { const validator = (c) => { if (c.value === '' || c.value == null) return null; const date = validation.parseDate(c.value, options, language); if (date != null) { if (minDate && date < minDate) { return { mindate: true }; } else if (maxDate && date > maxDate) { return { maxDate: true }; } return null; // The date is valid. } else { return { format: true }; } }; return validator; } export class L10nValidateDateDirective { set l10nValidateDate(options) { if (options) this.options = options; } constructor(validation) { this.validation = validation; } ngOnInit() { this.validator = l10nValidateDate(this.validation, this.options, this.minDate, this.maxDate, this.language); } ngOnChanges() { this.validator = l10nValidateDate(this.validation, this.options, this.minDate, this.maxDate, this.language); } validate(c) { return this.validator ? this.validator(c) : null; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: L10nValidateDateDirective, deps: [{ token: i1.L10nValidation }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.4", type: L10nValidateDateDirective, isStandalone: true, selector: "[l10nValidateDate][ngModel],[l10nValidateDate][formControl],[l10nValidateDate][formControlName]", inputs: { l10nValidateDate: "l10nValidateDate", options: "options", minDate: "minDate", maxDate: "maxDate", language: "language" }, providers: [ { provide: NG_VALIDATORS, useExisting: forwardRef(() => L10nValidateDateDirective), multi: true } ], usesOnChanges: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: L10nValidateDateDirective, decorators: [{ type: Directive, args: [{ selector: '[l10nValidateDate][ngModel],[l10nValidateDate][formControl],[l10nValidateDate][formControlName]', providers: [ { provide: NG_VALIDATORS, useExisting: forwardRef(() => L10nValidateDateDirective), multi: true } ], standalone: true }] }], ctorParameters: () => [{ type: i1.L10nValidation }], propDecorators: { l10nValidateDate: [{ type: Input }], options: [{ type: Input }], minDate: [{ type: Input }], maxDate: [{ type: Input }], language: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDEwbi12YWxpZGF0ZS1kYXRlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItbDEwbi9zcmMvbGliL2RpcmVjdGl2ZXMvbDEwbi12YWxpZGF0ZS1kYXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBNkQsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBSzFHOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM1QixVQUEwQixFQUMxQixPQUFtQyxFQUNuQyxPQUFjLEVBQ2QsT0FBYyxFQUNkLFFBQWlCO0lBRWpCLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBa0IsRUFBMkIsRUFBRTtRQUM5RCxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRW5ELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUQsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO1lBQ2QsSUFBSSxPQUFPLElBQUksSUFBSSxHQUFHLE9BQU8sRUFBRTtnQkFDM0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUM1QjtpQkFBTSxJQUFJLE9BQU8sSUFBSSxJQUFJLEdBQUcsT0FBTyxFQUFFO2dCQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO2FBQzVCO1lBQ0QsT0FBTyxJQUFJLENBQUMsQ0FBQyxxQkFBcUI7U0FDckM7YUFBTTtZQUNILE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDLENBQUM7SUFDRixPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDO0FBU0QsTUFBTSxPQUFPLHlCQUF5QjtJQUVsQyxJQUFhLGdCQUFnQixDQUFDLE9BQXVDO1FBQ2pFLElBQUksT0FBTztZQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3hDLENBQUM7SUFXRCxZQUFzQixVQUEwQjtRQUExQixlQUFVLEdBQVYsVUFBVSxDQUFnQjtJQUFJLENBQUM7SUFFOUMsUUFBUTtRQUNYLElBQUksQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEgsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hILENBQUM7SUFFTSxRQUFRLENBQUMsQ0FBa0I7UUFDOUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckQsQ0FBQzs4R0EzQlEseUJBQXlCO2tHQUF6Qix5QkFBeUIsa1JBTHZCO1lBQ1AsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1NBQ3BHOzsyRkFHUSx5QkFBeUI7a0JBUHJDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGlHQUFpRztvQkFDM0csU0FBUyxFQUFFO3dCQUNQLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwwQkFBMEIsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7cUJBQ3BHO29CQUNELFVBQVUsRUFBRSxJQUFJO2lCQUNuQjttRkFHZ0IsZ0JBQWdCO3NCQUE1QixLQUFLO2dCQUlVLE9BQU87c0JBQXRCLEtBQUs7Z0JBRVUsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUVVLFFBQVE7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGZvcndhcmRSZWYsIE9uSW5pdCwgSW5wdXQsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOR19WQUxJREFUT1JTLCBWYWxpZGF0b3IsIFZhbGlkYXRvckZuLCBWYWxpZGF0aW9uRXJyb3JzLCBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5pbXBvcnQgeyBMMTBuRGF0ZVRpbWVGb3JtYXRPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzL3R5cGVzJztcclxuaW1wb3J0IHsgTDEwblZhbGlkYXRpb24gfSBmcm9tICcuLi9zZXJ2aWNlcy9sMTBuLXZhbGlkYXRpb24nO1xyXG5cclxuLyoqXHJcbiAqIEZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBjb250cm9sIGFuZCByZXR1cm5zIGVpdGhlciBudWxsIHdoZW4gaXTigJlzIHZhbGlkLCBvciBhbiBlcnJvciBvYmplY3QgaWYgaXTigJlzIG5vdC5cclxuICogQHBhcmFtIHZhbGlkYXRpb24gVGhlIGluc3RhbmNlIG9mIEwxMG5WYWxpZGF0aW9uIHNlcnZpY2VcclxuICogQHBhcmFtIG9wdGlvbnMgQSBMMTBuIG9yIEludGwgRGF0ZVRpbWVGb3JtYXRPcHRpb25zIG9iamVjdFxyXG4gKiBAcGFyYW0gbWluRGF0ZSBUaGUgbWluaW11bSBkYXRlXHJcbiAqIEBwYXJhbSBtYXhEYXRlIFRoZSBtYXhpbXVtIGRhdGVcclxuICogQHBhcmFtIGxhbmd1YWdlIFRoZSBjdXJyZW50IGxhbmd1YWdlXHJcbiAqIEByZXR1cm4gQW4gZXJyb3Igb2JqZWN0OiAnZm9ybWF0JywgJ21pbkRhdGUnIG9yICdtYXhEYXRlJzsgbnVsbCBpbiBjYXNlIHRoZSBkYXRlIGlzIHZhbGlkXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbDEwblZhbGlkYXRlRGF0ZShcclxuICAgIHZhbGlkYXRpb246IEwxMG5WYWxpZGF0aW9uLFxyXG4gICAgb3B0aW9ucz86IEwxMG5EYXRlVGltZUZvcm1hdE9wdGlvbnMsXHJcbiAgICBtaW5EYXRlPzogRGF0ZSxcclxuICAgIG1heERhdGU/OiBEYXRlLFxyXG4gICAgbGFuZ3VhZ2U/OiBzdHJpbmdcclxuKTogVmFsaWRhdG9yRm4ge1xyXG4gICAgY29uc3QgdmFsaWRhdG9yID0gKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgICBpZiAoYy52YWx1ZSA9PT0gJycgfHwgYy52YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IHZhbGlkYXRpb24ucGFyc2VEYXRlKGMudmFsdWUsIG9wdGlvbnMsIGxhbmd1YWdlKTtcclxuICAgICAgICBpZiAoZGF0ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChtaW5EYXRlICYmIGRhdGUgPCBtaW5EYXRlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBtaW5kYXRlOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWF4RGF0ZSAmJiBkYXRlID4gbWF4RGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbWF4RGF0ZTogdHJ1ZSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBUaGUgZGF0ZSBpcyB2YWxpZC5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4geyBmb3JtYXQ6IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tsMTBuVmFsaWRhdGVEYXRlXVtuZ01vZGVsXSxbbDEwblZhbGlkYXRlRGF0ZV1bZm9ybUNvbnRyb2xdLFtsMTBuVmFsaWRhdGVEYXRlXVtmb3JtQ29udHJvbE5hbWVdJyxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTDEwblZhbGlkYXRlRGF0ZURpcmVjdGl2ZSksIG11bHRpOiB0cnVlIH1cclxuICAgIF0sXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMMTBuVmFsaWRhdGVEYXRlRGlyZWN0aXZlIGltcGxlbWVudHMgVmFsaWRhdG9yLCBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gICAgQElucHV0KCkgc2V0IGwxMG5WYWxpZGF0ZURhdGUob3B0aW9uczogTDEwbkRhdGVUaW1lRm9ybWF0T3B0aW9ucyB8ICcnKSB7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMpIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIG9wdGlvbnM/OiBMMTBuRGF0ZVRpbWVGb3JtYXRPcHRpb25zO1xyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBtaW5EYXRlPzogRGF0ZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBtYXhEYXRlPzogRGF0ZTtcclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbGFuZ3VhZ2U/OiBzdHJpbmc7XHJcblxyXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRvcj86IFZhbGlkYXRvckZuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB2YWxpZGF0aW9uOiBMMTBuVmFsaWRhdGlvbikgeyB9XHJcblxyXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdG9yID0gbDEwblZhbGlkYXRlRGF0ZSh0aGlzLnZhbGlkYXRpb24sIHRoaXMub3B0aW9ucywgdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUsIHRoaXMubGFuZ3VhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcygpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRvciA9IGwxMG5WYWxpZGF0ZURhdGUodGhpcy52YWxpZGF0aW9uLCB0aGlzLm9wdGlvbnMsIHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlLCB0aGlzLmxhbmd1YWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsaWRhdGUoYzogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRvciA/IHRoaXMudmFsaWRhdG9yKGMpIDogbnVsbDtcclxuICAgIH1cclxuXHJcbn1cclxuIl19