angular-l10n
Version:
Angular library to translate texts, dates and numbers
76 lines • 10.5 kB
JavaScript
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==