UNPKG

angular-l10n

Version:

Angular library to translate texts, dates and numbers

76 lines 10.5 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 NumberFormatOptions object * @param minValue The minimum value * @param maxValue The maximum value * @param language The current language * @return An error object: 'format', 'minValue' or 'maxValue'; null in case the value is valid */ export function l10nValidateNumber(validation, options, minValue = Number.MIN_VALUE, maxValue = Number.MAX_VALUE, language) { const validator = (c) => { if (c.value === '' || c.value == null) return null; const value = validation.parseNumber(c.value, options, language); if (value != null) { if (value < minValue) { return { minValue: true }; } else if (value > maxValue) { return { maxValue: true }; } return null; // The number is valid. } else { return { format: true }; } }; return validator; } export class L10nValidateNumberDirective { set l10nValidateNumber(options) { if (options) this.options = options; } constructor(validation) { this.validation = validation; } ngOnInit() { this.validator = l10nValidateNumber(this.validation, this.options, this.minValue, this.maxValue, this.language); } ngOnChanges() { this.validator = l10nValidateNumber(this.validation, this.options, this.minValue, this.maxValue, 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: L10nValidateNumberDirective, deps: [{ token: i1.L10nValidation }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.4", type: L10nValidateNumberDirective, isStandalone: true, selector: "[l10nValidateNumber][ngModel],[l10nValidateNumber][formControl],[l10nValidateNumber][formControlName]", inputs: { l10nValidateNumber: "l10nValidateNumber", options: "options", minValue: "minValue", maxValue: "maxValue", language: "language" }, providers: [ { provide: NG_VALIDATORS, useExisting: forwardRef(() => L10nValidateNumberDirective), multi: true } ], usesOnChanges: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: L10nValidateNumberDirective, decorators: [{ type: Directive, args: [{ selector: '[l10nValidateNumber][ngModel],[l10nValidateNumber][formControl],[l10nValidateNumber][formControlName]', providers: [ { provide: NG_VALIDATORS, useExisting: forwardRef(() => L10nValidateNumberDirective), multi: true } ], standalone: true }] }], ctorParameters: () => [{ type: i1.L10nValidation }], propDecorators: { l10nValidateNumber: [{ type: Input }], options: [{ type: Input }], minValue: [{ type: Input }], maxValue: [{ type: Input }], language: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDEwbi12YWxpZGF0ZS1udW1iZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1sMTBuL3NyYy9saWIvZGlyZWN0aXZlcy9sMTBuLXZhbGlkYXRlLW51bWJlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQVUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQTZELE1BQU0sZ0JBQWdCLENBQUM7OztBQUsxRzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDOUIsVUFBMEIsRUFDMUIsT0FBaUMsRUFDakMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQzNCLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUMzQixRQUFpQjtJQUVqQixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQWtCLEVBQTJCLEVBQUU7UUFDOUQsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUVuRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNmLElBQUksS0FBSyxHQUFHLFFBQVEsRUFBRTtnQkFDbEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUM3QjtpQkFBTSxJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUU7Z0JBQ3pCLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDN0I7WUFDRCxPQUFPLElBQUksQ0FBQyxDQUFDLHVCQUF1QjtTQUN2QzthQUFNO1lBQ0gsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUMzQjtJQUNMLENBQUMsQ0FBQztJQUNGLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFTRCxNQUFNLE9BQU8sMkJBQTJCO0lBRXBDLElBQWEsa0JBQWtCLENBQUMsT0FBcUM7UUFDakUsSUFBSSxPQUFPO1lBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDeEMsQ0FBQztJQVdELFlBQXNCLFVBQTBCO1FBQTFCLGVBQVUsR0FBVixVQUFVLENBQWdCO0lBQUksQ0FBQztJQUU5QyxRQUFRO1FBQ1gsSUFBSSxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwSCxDQUFDO0lBRU0sV0FBVztRQUNkLElBQUksQ0FBQyxTQUFTLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUVNLFFBQVEsQ0FBQyxDQUFrQjtRQUM5QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNyRCxDQUFDOzhHQTNCUSwyQkFBMkI7a0dBQTNCLDJCQUEyQixnU0FMekI7WUFDUCxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7U0FDdEc7OzJGQUdRLDJCQUEyQjtrQkFQdkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsdUdBQXVHO29CQUNqSCxTQUFTLEVBQUU7d0JBQ1AsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDRCQUE0QixDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtxQkFDdEc7b0JBQ0QsVUFBVSxFQUFFLElBQUk7aUJBQ25CO21GQUdnQixrQkFBa0I7c0JBQTlCLEtBQUs7Z0JBSVUsT0FBTztzQkFBdEIsS0FBSztnQkFFVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBRVUsUUFBUTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgZm9yd2FyZFJlZiwgT25Jbml0LCBJbnB1dCwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIFZhbGlkYXRvciwgVmFsaWRhdG9yRm4sIFZhbGlkYXRpb25FcnJvcnMsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IEwxMG5OdW1iZXJGb3JtYXRPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzL3R5cGVzJztcclxuaW1wb3J0IHsgTDEwblZhbGlkYXRpb24gfSBmcm9tICcuLi9zZXJ2aWNlcy9sMTBuLXZhbGlkYXRpb24nO1xyXG5cclxuLyoqXHJcbiAqIEZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBjb250cm9sIGFuZCByZXR1cm5zIGVpdGhlciBudWxsIHdoZW4gaXTigJlzIHZhbGlkLCBvciBhbiBlcnJvciBvYmplY3QgaWYgaXTigJlzIG5vdC5cclxuICogQHBhcmFtIHZhbGlkYXRpb24gVGhlIGluc3RhbmNlIG9mIEwxMG5WYWxpZGF0aW9uIHNlcnZpY2VcclxuICogQHBhcmFtIG9wdGlvbnMgQSBMMTBuIG9yIEludGwgTnVtYmVyRm9ybWF0T3B0aW9ucyBvYmplY3RcclxuICogQHBhcmFtIG1pblZhbHVlIFRoZSBtaW5pbXVtIHZhbHVlXHJcbiAqIEBwYXJhbSBtYXhWYWx1ZSBUaGUgbWF4aW11bSB2YWx1ZVxyXG4gKiBAcGFyYW0gbGFuZ3VhZ2UgVGhlIGN1cnJlbnQgbGFuZ3VhZ2VcclxuICogQHJldHVybiBBbiBlcnJvciBvYmplY3Q6ICdmb3JtYXQnLCAnbWluVmFsdWUnIG9yICdtYXhWYWx1ZSc7IG51bGwgaW4gY2FzZSB0aGUgdmFsdWUgaXMgdmFsaWRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBsMTBuVmFsaWRhdGVOdW1iZXIoXHJcbiAgICB2YWxpZGF0aW9uOiBMMTBuVmFsaWRhdGlvbixcclxuICAgIG9wdGlvbnM/OiBMMTBuTnVtYmVyRm9ybWF0T3B0aW9ucyxcclxuICAgIG1pblZhbHVlID0gTnVtYmVyLk1JTl9WQUxVRSxcclxuICAgIG1heFZhbHVlID0gTnVtYmVyLk1BWF9WQUxVRSxcclxuICAgIGxhbmd1YWdlPzogc3RyaW5nXHJcbik6IFZhbGlkYXRvckZuIHtcclxuICAgIGNvbnN0IHZhbGlkYXRvciA9IChjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XHJcbiAgICAgICAgaWYgKGMudmFsdWUgPT09ICcnIHx8IGMudmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFsaWRhdGlvbi5wYXJzZU51bWJlcihjLnZhbHVlLCBvcHRpb25zLCBsYW5ndWFnZSk7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlIDwgbWluVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IG1pblZhbHVlOiB0cnVlIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPiBtYXhWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbWF4VmFsdWU6IHRydWUgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gVGhlIG51bWJlciBpcyB2YWxpZC5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4geyBmb3JtYXQ6IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHZhbGlkYXRvcjtcclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tsMTBuVmFsaWRhdGVOdW1iZXJdW25nTW9kZWxdLFtsMTBuVmFsaWRhdGVOdW1iZXJdW2Zvcm1Db250cm9sXSxbbDEwblZhbGlkYXRlTnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdJyxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTDEwblZhbGlkYXRlTnVtYmVyRGlyZWN0aXZlKSwgbXVsdGk6IHRydWUgfVxyXG4gICAgXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWVcclxufSlcclxuZXhwb3J0IGNsYXNzIEwxMG5WYWxpZGF0ZU51bWJlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIFZhbGlkYXRvciwgT25Jbml0LCBPbkNoYW5nZXMge1xyXG5cclxuICAgIEBJbnB1dCgpIHNldCBsMTBuVmFsaWRhdGVOdW1iZXIob3B0aW9uczogTDEwbk51bWJlckZvcm1hdE9wdGlvbnMgfCAnJykge1xyXG4gICAgICAgIGlmIChvcHRpb25zKSB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBvcHRpb25zPzogTDEwbk51bWJlckZvcm1hdE9wdGlvbnM7XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIG1pblZhbHVlPzogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgcHVibGljIG1heFZhbHVlPzogbnVtYmVyO1xyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBsYW5ndWFnZT86IHN0cmluZztcclxuXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdG9yPzogVmFsaWRhdG9yRm47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHZhbGlkYXRpb246IEwxMG5WYWxpZGF0aW9uKSB7IH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0b3IgPSBsMTBuVmFsaWRhdGVOdW1iZXIodGhpcy52YWxpZGF0aW9uLCB0aGlzLm9wdGlvbnMsIHRoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWUsIHRoaXMubGFuZ3VhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcygpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRvciA9IGwxMG5WYWxpZGF0ZU51bWJlcih0aGlzLnZhbGlkYXRpb24sIHRoaXMub3B0aW9ucywgdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZSwgdGhpcy5sYW5ndWFnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZhbGlkYXRlKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0b3IgPyB0aGlzLnZhbGlkYXRvcihjKSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==