@ng-dl/numeric-input
Version:
override browser's default behavior & localization on numeric inputs
56 lines • 7.43 kB
JavaScript
import { Inject, Injectable, Optional } from '@angular/core';
import { NUMERIC_INPUT_LOCALE } from './locale.tokens';
import * as i0 from "@angular/core";
export class LocaleService {
constructor(locales) {
this.locales = locales;
}
getDecimalSeparators() {
const locales = this.getLocales();
const options = { useGrouping: false };
return locales.map(locale => this.localizedToDecimalSeparator(this.localizeDecimal(1.1, locale, options)));
}
getThousandSeparators() {
const locales = this.getLocales();
const options = { useGrouping: true };
return locales.map(locale => this.localizedToThousandSeparator(this.localizeDecimal(12345.6, locale, options)));
}
localizeNumber(value) {
return value.toLocaleString(this.getLocales());
}
localizedToDecimalSeparator(localizedParts) {
return localizedParts.find(part => part.type === 'decimal').value;
}
localizedToThousandSeparator(localizedParts) {
return localizedParts.find(part => part.type === 'group').value;
}
localizeDecimal(value, locale, options) {
return Intl.NumberFormat(locale, options).formatToParts(value);
}
get localeFromBrowser() {
return navigator.languages ? navigator.languages[0] : navigator.language;
}
getLocales() {
try {
const supportedLocales = Intl.NumberFormat.supportedLocalesOf(this.locales);
return supportedLocales;
}
catch {
return [this.localeFromBrowser];
}
}
}
LocaleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: LocaleService, deps: [{ token: NUMERIC_INPUT_LOCALE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
LocaleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: LocaleService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.2", ngImport: i0, type: LocaleService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [NUMERIC_INPUT_LOCALE]
}, {
type: Optional
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9udW1lcmljLWlucHV0L3NyYy9saWIvbG9jYWxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUt2RCxNQUFNLE9BQU8sYUFBYTtJQUV4QixZQUE4RCxPQUEyQjtRQUEzQixZQUFPLEdBQVAsT0FBTyxDQUFvQjtJQUFJLENBQUM7SUFFdkYsb0JBQW9CO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBNkIsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDakUsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVNLHFCQUFxQjtRQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEMsTUFBTSxPQUFPLEdBQTZCLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2hFLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFTSxjQUFjLENBQUMsS0FBYTtRQUNqQyxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVPLDJCQUEyQixDQUFDLGNBQXVDO1FBQ3pFLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3BFLENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxjQUF1QztRQUMxRSxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNsRSxDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQWEsRUFBRSxNQUFjLEVBQUUsT0FBa0M7UUFDdkYsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELElBQVksaUJBQWlCO1FBQzNCLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUMzRSxDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJO1lBQ0YsTUFBTSxnQkFBZ0IsR0FBYSxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0RixPQUFPLGdCQUFnQixDQUFDO1NBQ3pCO1FBQUMsTUFBTTtZQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUNqQztJQUNILENBQUM7OzBHQTNDVSxhQUFhLGtCQUVKLG9CQUFvQjs4R0FGN0IsYUFBYSxjQUZaLE1BQU07MkZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUdjLE1BQU07MkJBQUMsb0JBQW9COzswQkFBRyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTlVNRVJJQ19JTlBVVF9MT0NBTEUgfSBmcm9tICcuL2xvY2FsZS50b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBMb2NhbGVTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KE5VTUVSSUNfSU5QVVRfTE9DQUxFKSBAT3B0aW9uYWwoKSBwcml2YXRlIGxvY2FsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSkgeyB9XG5cbiAgcHVibGljIGdldERlY2ltYWxTZXBhcmF0b3JzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsb2NhbGVzID0gdGhpcy5nZXRMb2NhbGVzKCk7XG4gICAgY29uc3Qgb3B0aW9uczogSW50bC5OdW1iZXJGb3JtYXRPcHRpb25zID0geyB1c2VHcm91cGluZzogZmFsc2UgfTtcbiAgICByZXR1cm4gbG9jYWxlcy5tYXAobG9jYWxlID0+IHRoaXMubG9jYWxpemVkVG9EZWNpbWFsU2VwYXJhdG9yKHRoaXMubG9jYWxpemVEZWNpbWFsKDEuMSwgbG9jYWxlLCBvcHRpb25zKSkpO1xuICB9XG5cbiAgcHVibGljIGdldFRob3VzYW5kU2VwYXJhdG9ycygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbG9jYWxlcyA9IHRoaXMuZ2V0TG9jYWxlcygpO1xuICAgIGNvbnN0IG9wdGlvbnM6IEludGwuTnVtYmVyRm9ybWF0T3B0aW9ucyA9IHsgdXNlR3JvdXBpbmc6IHRydWUgfTtcbiAgICByZXR1cm4gbG9jYWxlcy5tYXAobG9jYWxlID0+IHRoaXMubG9jYWxpemVkVG9UaG91c2FuZFNlcGFyYXRvcih0aGlzLmxvY2FsaXplRGVjaW1hbCgxMjM0NS42LCBsb2NhbGUsIG9wdGlvbnMpKSk7XG4gIH1cblxuICBwdWJsaWMgbG9jYWxpemVOdW1iZXIodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlLnRvTG9jYWxlU3RyaW5nKHRoaXMuZ2V0TG9jYWxlcygpKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9jYWxpemVkVG9EZWNpbWFsU2VwYXJhdG9yKGxvY2FsaXplZFBhcnRzOiBJbnRsLk51bWJlckZvcm1hdFBhcnRbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxvY2FsaXplZFBhcnRzLmZpbmQocGFydCA9PiBwYXJ0LnR5cGUgPT09ICdkZWNpbWFsJykudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGxvY2FsaXplZFRvVGhvdXNhbmRTZXBhcmF0b3IobG9jYWxpemVkUGFydHM6IEludGwuTnVtYmVyRm9ybWF0UGFydFtdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbG9jYWxpemVkUGFydHMuZmluZChwYXJ0ID0+IHBhcnQudHlwZSA9PT0gJ2dyb3VwJykudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGxvY2FsaXplRGVjaW1hbCh2YWx1ZTogbnVtYmVyLCBsb2NhbGU6IHN0cmluZywgb3B0aW9ucz86IEludGwuTnVtYmVyRm9ybWF0T3B0aW9ucyk6IEludGwuTnVtYmVyRm9ybWF0UGFydFtdIHtcbiAgICByZXR1cm4gSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlLCBvcHRpb25zKS5mb3JtYXRUb1BhcnRzKHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGxvY2FsZUZyb21Ccm93c2VyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci5sYW5ndWFnZXMgPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhbGVzKCk6IHN0cmluZ1tdIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3VwcG9ydGVkTG9jYWxlczogc3RyaW5nW10gPSBJbnRsLk51bWJlckZvcm1hdC5zdXBwb3J0ZWRMb2NhbGVzT2YodGhpcy5sb2NhbGVzKTtcbiAgICAgIHJldHVybiBzdXBwb3J0ZWRMb2NhbGVzO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIFt0aGlzLmxvY2FsZUZyb21Ccm93c2VyXTtcbiAgICB9XG4gIH1cblxufVxuIl19