@haiilo/ngx-intl
Version:
Standalone Angular pipes using the ECMAScript Internationalization API, which provides language sensitive string comparison, number formatting, and date and time formatting.
59 lines • 8.14 kB
JavaScript
import { Inject, InjectionToken, LOCALE_ID, Optional, Pipe } from '@angular/core';
import * as i0 from "@angular/core";
export const INTL_SORT_OPTIONS = new InjectionToken('IntlSortOptions');
export const INTL_SORT_PRESET_LOWER_FIRST = { caseFirst: 'lower' };
export const INTL_SORT_PRESET_UPPER_FIRST = { caseFirst: 'upper' };
/**
* A pipe that sorts an array of strings using the Intl.Collator API.
*/
export class IntlSortPipe {
constructor(locale, options) {
this.locale = locale;
this.options = options;
}
transform(value, options, ...locales) {
if (value === null) {
return null;
}
const _locales = this.getLocales(locales);
const _options = this.getOptions(options);
return value.sort(new Intl.Collator(_locales, _options).compare);
}
getLocales(locales) {
return [...locales, this.locale];
}
getOptions(options) {
const presetStr = typeof options === 'string';
const presetKey = !presetStr
? options?.preset || this.options?.defaultPreset || IntlSortPipe.DEFAULT_OPTIONS.defaultPreset
: options;
const preset = presetKey
? (this.options?.presets?.[presetKey] || IntlSortPipe.DEFAULT_OPTIONS.presets?.[presetKey])
: undefined;
return { ...preset, ...(!presetStr ? options : undefined) };
}
}
IntlSortPipe.DEFAULT_OPTIONS = {
presets: {
lowerFirst: INTL_SORT_PRESET_LOWER_FIRST,
upperFirst: INTL_SORT_PRESET_UPPER_FIRST
}
};
IntlSortPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IntlSortPipe, deps: [{ token: LOCALE_ID }, { token: INTL_SORT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Pipe });
IntlSortPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: IntlSortPipe, isStandalone: true, name: "IntlSort" });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IntlSortPipe, decorators: [{
type: Pipe,
args: [{
name: 'IntlSort',
standalone: true
}]
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
type: Inject,
args: [LOCALE_ID]
}] }, { type: undefined, decorators: [{
type: Inject,
args: [INTL_SORT_OPTIONS]
}, {
type: Optional
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50bC1zb3J0LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaW50bC9zcmMvbGliL2ludGwtc29ydC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFnQmpHLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUM1QixJQUFJLGNBQWMsQ0FBd0IsaUJBQWlCLENBQUMsQ0FBQztBQUUvRCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FDdkMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDekIsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQ3ZDLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBRXpCOztHQUVHO0FBS0gsTUFBTSxPQUFPLFlBQVk7SUFRdkIsWUFDc0MsTUFBYyxFQUNNLE9BQXFDO1FBRHpELFdBQU0sR0FBTixNQUFNLENBQVE7UUFDTSxZQUFPLEdBQVAsT0FBTyxDQUE4QjtJQUM1RixDQUFDO0lBRUosU0FBUyxDQUFDLEtBQXNCLEVBQUUsT0FBdUMsRUFBRSxHQUFHLE9BQWlCO1FBQzdGLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyxVQUFVLENBQUMsT0FBaUI7UUFDbEMsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRU8sVUFBVSxDQUFDLE9BQXVDO1FBQ3hELE1BQU0sU0FBUyxHQUFHLE9BQU8sT0FBTyxLQUFLLFFBQVEsQ0FBQztRQUM5QyxNQUFNLFNBQVMsR0FBRyxDQUFDLFNBQVM7WUFDMUIsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLElBQUksWUFBWSxDQUFDLGVBQWUsQ0FBQyxhQUFhO1lBQzlGLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDWixNQUFNLE1BQU0sR0FBRyxTQUFTO1lBQ3RCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksWUFBWSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzRixDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2QsT0FBTyxFQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBQyxDQUFDO0lBQzVELENBQUM7O0FBbkN1Qiw0QkFBZSxHQUEwQjtJQUMvRCxPQUFPLEVBQUU7UUFDUCxVQUFVLEVBQUUsNEJBQTRCO1FBQ3hDLFVBQVUsRUFBRSw0QkFBNEI7S0FDekM7Q0FDRCxDQUFBO3lHQU5TLFlBQVksa0JBU2IsU0FBUyxhQUNULGlCQUFpQjt1R0FWaEIsWUFBWTsyRkFBWixZQUFZO2tCQUp4QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxVQUFVO29CQUNoQixVQUFVLEVBQUUsSUFBSTtpQkFDakI7OzBCQVVJLE1BQU07MkJBQUMsU0FBUzs7MEJBQ2hCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFBRyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgTE9DQUxFX0lELCBPcHRpb25hbCwgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKiogQSBwcmVjb25maWd1cmVkIG9wdGlvbiBwcmVzZXQgZm9yIHRoZSBJbnRsU29ydFBpcGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGxTb3J0T3B0aW9ucyBleHRlbmRzIEludGwuQ29sbGF0b3JPcHRpb25zIHt9XG5cbi8qKiBHbG9iYWwgb3B0aW9ucyBhbmQgcHJlc2V0cyBmb3IgdGhlIEludGxTb3J0UGlwZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50bFNvcnRHbG9iYWxPcHRpb25zIHtcbiAgcHJlc2V0cz86IHsgW2tleTogc3RyaW5nXTogSW50bFNvcnRPcHRpb25zIH07XG4gIGRlZmF1bHRQcmVzZXQ/OiBzdHJpbmc7XG59XG5cbi8qKiBPcHRpb25zIGZvciBhIHRyYW5zZm9ybSBjYWxsIG9mIHRoZSBJbnRsU29ydFBpcGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGxTb3J0TG9jYWxPcHRpb25zIGV4dGVuZHMgSW50bFNvcnRPcHRpb25zIHtcbiAgcHJlc2V0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgSU5UTF9TT1JUX09QVElPTlMgPVxuICBuZXcgSW5qZWN0aW9uVG9rZW48SW50bFNvcnRHbG9iYWxPcHRpb25zPignSW50bFNvcnRPcHRpb25zJyk7XG5cbmV4cG9ydCBjb25zdCBJTlRMX1NPUlRfUFJFU0VUX0xPV0VSX0ZJUlNUOiBJbnRsU29ydE9wdGlvbnMgPVxuICB7IGNhc2VGaXJzdDogJ2xvd2VyJyB9O1xuZXhwb3J0IGNvbnN0IElOVExfU09SVF9QUkVTRVRfVVBQRVJfRklSU1Q6IEludGxTb3J0T3B0aW9ucyA9XG4gIHsgY2FzZUZpcnN0OiAndXBwZXInIH07XG5cbi8qKlxuICogQSBwaXBlIHRoYXQgc29ydHMgYW4gYXJyYXkgb2Ygc3RyaW5ncyB1c2luZyB0aGUgSW50bC5Db2xsYXRvciBBUEkuXG4gKi9cbkBQaXBlKHtcbiAgbmFtZTogJ0ludGxTb3J0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJbnRsU29ydFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9PUFRJT05TOiBJbnRsU29ydEdsb2JhbE9wdGlvbnMgPSB7XG4gICAgcHJlc2V0czoge1xuICAgICAgbG93ZXJGaXJzdDogSU5UTF9TT1JUX1BSRVNFVF9MT1dFUl9GSVJTVCxcbiAgICAgIHVwcGVyRmlyc3Q6IElOVExfU09SVF9QUkVTRVRfVVBQRVJfRklSU1RcbiAgICB9XG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChMT0NBTEVfSUQpIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxlOiBzdHJpbmcsXG4gICAgQEluamVjdChJTlRMX1NPUlRfT1BUSU9OUykgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBJbnRsU29ydEdsb2JhbE9wdGlvbnMgfCBudWxsXG4gICkge31cblxuICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZ1tdIHwgbnVsbCwgb3B0aW9ucz86IHN0cmluZyB8IEludGxTb3J0TG9jYWxPcHRpb25zLCAuLi5sb2NhbGVzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBfbG9jYWxlcyA9IHRoaXMuZ2V0TG9jYWxlcyhsb2NhbGVzKTtcbiAgICBjb25zdCBfb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICByZXR1cm4gdmFsdWUuc29ydChuZXcgSW50bC5Db2xsYXRvcihfbG9jYWxlcywgX29wdGlvbnMpLmNvbXBhcmUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhbGVzKGxvY2FsZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4ubG9jYWxlcywgdGhpcy5sb2NhbGVdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcHRpb25zKG9wdGlvbnM/OiBzdHJpbmcgfCBJbnRsU29ydExvY2FsT3B0aW9ucyk6IEludGxTb3J0T3B0aW9ucyB7XG4gICAgY29uc3QgcHJlc2V0U3RyID0gdHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnO1xuICAgIGNvbnN0IHByZXNldEtleSA9ICFwcmVzZXRTdHJcbiAgICAgID8gb3B0aW9ucz8ucHJlc2V0IHx8IHRoaXMub3B0aW9ucz8uZGVmYXVsdFByZXNldCB8fCBJbnRsU29ydFBpcGUuREVGQVVMVF9PUFRJT05TLmRlZmF1bHRQcmVzZXRcbiAgICAgIDogb3B0aW9ucztcbiAgICBjb25zdCBwcmVzZXQgPSBwcmVzZXRLZXlcbiAgICAgID8gKHRoaXMub3B0aW9ucz8ucHJlc2V0cz8uW3ByZXNldEtleV0gfHwgSW50bFNvcnRQaXBlLkRFRkFVTFRfT1BUSU9OUy5wcmVzZXRzPy5bcHJlc2V0S2V5XSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7Li4ucHJlc2V0LCAuLi4oIXByZXNldFN0ciA/IG9wdGlvbnMgOiB1bmRlZmluZWQpfTtcbiAgfVxufVxuIl19