UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

67 lines 8.67 kB
import { DecimalPipe as NgDecimalPipe } from '@angular/common'; import { Inject, LOCALE_ID, Pipe } from '@angular/core'; import * as i0 from "@angular/core"; export const NUMBER_FORMAT_REGEXP = /^(\d+)?\.((\d+)(-(\d+))?)?$/; /** * Formats a value according to digit options and locale rules. * Extends the behavior of Angular's <code>number</code> pipe by * providing an option to define if a truncated value should be * rounded up or down (with the <code>number</code> pipe the * value will be rounded using the "to-nearest" method). * * ```html * <span>{{ 3.45612 | c8yNumber: 'ceil':'1.1-3' }}</span> <!-- 3.457 --> * <span>{{ 3.46 | c8yNumber: 'ceil':'1.3-3' }}</span> <!-- 3.460 --> * <span>{{ 3.45685 | c8yNumber: 'floor':'1.1-3' }}</span> <!-- 3.456 --> * ``` */ export class NumberPipe extends NgDecimalPipe { constructor(locale) { super(locale); } /** * @param value The value to be formatted. * @param round When the value needs to be truncated defines if it will be rounded up (='ceil') or down (='floor') * @param digitsInfo Sets digit and decimal representation. * @param locale Specifies what locale format rules to use. */ transform(value, round, digitsInfo, locale) { if (round) { let maxFractionPart = 0; if (digitsInfo) { const parts = digitsInfo.match(NUMBER_FORMAT_REGEXP); if (parts === null) { throw new Error(`${digitsInfo} is not a valid digit info`); } maxFractionPart = Number.parseInt(parts[5], 10); } const multiplicator = Math.pow(10, maxFractionPart); value = strToNumber(value); value = Math[round](value * multiplicator) / multiplicator; } return super.transform(value, digitsInfo, locale); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NumberPipe, deps: [{ token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Pipe }); } static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NumberPipe, isStandalone: true, name: "c8yNumber" }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NumberPipe, decorators: [{ type: Pipe, args: [{ name: 'c8yNumber', standalone: true }] }], ctorParameters: () => [{ type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID] }] }] }); /** * Transforms a string into a number (if needed). */ function strToNumber(value) { // Convert strings to numbers if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) { return Number(value); } if (typeof value !== 'number') { throw new Error(`${value} is not a number`); } return value; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2NvbW1vbi9udW1iZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxJQUFJLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFeEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsNkJBQTZCLENBQUM7QUFFbEU7Ozs7Ozs7Ozs7OztHQVlHO0FBRUgsTUFBTSxPQUFPLFVBQVcsU0FBUSxhQUFhO0lBQzNDLFlBQStCLE1BQWM7UUFDM0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFjRDs7Ozs7T0FLRztJQUNILFNBQVMsQ0FDUCxLQUF5QyxFQUN6QyxLQUEwQyxFQUMxQyxVQUFtQixFQUNuQixNQUFlO1FBRWYsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztZQUN4QixJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFFckQsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxVQUFVLDRCQUE0QixDQUFDLENBQUM7Z0JBQzdELENBQUM7Z0JBQ0QsZUFBZSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELENBQUM7WUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUVwRCxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxHQUFHLGFBQWEsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEQsQ0FBQzsrR0E5Q1UsVUFBVSxrQkFDRCxTQUFTOzZHQURsQixVQUFVOzs0RkFBVixVQUFVO2tCQUR0QixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFOzswQkFFOUIsTUFBTTsyQkFBQyxTQUFTOztBQWdEL0I7O0dBRUc7QUFDSCxTQUFTLFdBQVcsQ0FBQyxLQUFzQjtJQUN6Qyw2QkFBNkI7SUFDN0IsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0UsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssa0JBQWtCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVjaW1hbFBpcGUgYXMgTmdEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIExPQ0FMRV9JRCwgUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgTlVNQkVSX0ZPUk1BVF9SRUdFWFAgPSAvXihcXGQrKT9cXC4oKFxcZCspKC0oXFxkKykpPyk/JC87XG5cbi8qKlxuICogRm9ybWF0cyBhIHZhbHVlIGFjY29yZGluZyB0byBkaWdpdCBvcHRpb25zIGFuZCBsb2NhbGUgcnVsZXMuXG4gKiBFeHRlbmRzIHRoZSBiZWhhdmlvciBvZiBBbmd1bGFyJ3MgPGNvZGU+bnVtYmVyPC9jb2RlPiBwaXBlIGJ5XG4gKiBwcm92aWRpbmcgYW4gb3B0aW9uIHRvIGRlZmluZSBpZiBhIHRydW5jYXRlZCB2YWx1ZSBzaG91bGQgYmVcbiAqIHJvdW5kZWQgdXAgb3IgZG93biAod2l0aCB0aGUgPGNvZGU+bnVtYmVyPC9jb2RlPiBwaXBlIHRoZVxuICogdmFsdWUgd2lsbCBiZSByb3VuZGVkIHVzaW5nIHRoZSBcInRvLW5lYXJlc3RcIiBtZXRob2QpLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxzcGFuPnt7IDMuNDU2MTIgfCBjOHlOdW1iZXI6ICdjZWlsJzonMS4xLTMnIH19PC9zcGFuPiA8IS0tIDMuNDU3IC0tPlxuICogPHNwYW4+e3sgMy40NiB8IGM4eU51bWJlcjogJ2NlaWwnOicxLjMtMycgfX08L3NwYW4+IDwhLS0gMy40NjAgLS0+XG4gKiA8c3Bhbj57eyAzLjQ1Njg1IHwgYzh5TnVtYmVyOiAnZmxvb3InOicxLjEtMycgfX08L3NwYW4+IDwhLS0gMy40NTYgLS0+XG4gKiBgYGBcbiAqL1xuQFBpcGUoeyBuYW1lOiAnYzh5TnVtYmVyJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE51bWJlclBpcGUgZXh0ZW5kcyBOZ0RlY2ltYWxQaXBlIHtcbiAgY29uc3RydWN0b3IoQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobG9jYWxlKTtcbiAgfVxuXG4gIHRyYW5zZm9ybShcbiAgICB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nLFxuICAgIHJvdW5kOiAnY2VpbCcgfCAnZmxvb3InIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICBkaWdpdHNJbmZvPzogc3RyaW5nLFxuICAgIGxvY2FsZT86IHN0cmluZ1xuICApOiBzdHJpbmcgfCBudWxsO1xuICB0cmFuc2Zvcm0oXG4gICAgdmFsdWU6IG51bGwgfCB1bmRlZmluZWQsXG4gICAgcm91bmQ6ICdjZWlsJyB8ICdmbG9vcicgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIGRpZ2l0c0luZm8/OiBzdHJpbmcsXG4gICAgbG9jYWxlPzogc3RyaW5nXG4gICk6IG51bGw7XG4gIC8qKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZC5cbiAgICogQHBhcmFtIHJvdW5kIFdoZW4gdGhlIHZhbHVlIG5lZWRzIHRvIGJlIHRydW5jYXRlZCBkZWZpbmVzIGlmIGl0IHdpbGwgYmUgcm91bmRlZCB1cCAoPSdjZWlsJykgb3IgZG93biAoPSdmbG9vcicpXG4gICAqIEBwYXJhbSBkaWdpdHNJbmZvIFNldHMgZGlnaXQgYW5kIGRlY2ltYWwgcmVwcmVzZW50YXRpb24uXG4gICAqIEBwYXJhbSBsb2NhbGUgU3BlY2lmaWVzIHdoYXQgbG9jYWxlIGZvcm1hdCBydWxlcyB0byB1c2UuXG4gICAqL1xuICB0cmFuc2Zvcm0oXG4gICAgdmFsdWU6IG51bWJlciB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgcm91bmQ6ICdjZWlsJyB8ICdmbG9vcicgfCBudWxsIHwgdW5kZWZpbmVkLFxuICAgIGRpZ2l0c0luZm8/OiBzdHJpbmcsXG4gICAgbG9jYWxlPzogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKHJvdW5kKSB7XG4gICAgICBsZXQgbWF4RnJhY3Rpb25QYXJ0ID0gMDtcbiAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gZGlnaXRzSW5mby5tYXRjaChOVU1CRVJfRk9STUFUX1JFR0VYUCk7XG5cbiAgICAgICAgaWYgKHBhcnRzID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2RpZ2l0c0luZm99IGlzIG5vdCBhIHZhbGlkIGRpZ2l0IGluZm9gKTtcbiAgICAgICAgfVxuICAgICAgICBtYXhGcmFjdGlvblBhcnQgPSBOdW1iZXIucGFyc2VJbnQocGFydHNbNV0sIDEwKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbXVsdGlwbGljYXRvciA9IE1hdGgucG93KDEwLCBtYXhGcmFjdGlvblBhcnQpO1xuXG4gICAgICB2YWx1ZSA9IHN0clRvTnVtYmVyKHZhbHVlKTtcbiAgICAgIHZhbHVlID0gTWF0aFtyb3VuZF0odmFsdWUgKiBtdWx0aXBsaWNhdG9yKSAvIG11bHRpcGxpY2F0b3I7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci50cmFuc2Zvcm0odmFsdWUsIGRpZ2l0c0luZm8sIGxvY2FsZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGEgc3RyaW5nIGludG8gYSBudW1iZXIgKGlmIG5lZWRlZCkuXG4gKi9cbmZ1bmN0aW9uIHN0clRvTnVtYmVyKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXIge1xuICAvLyBDb252ZXJ0IHN0cmluZ3MgdG8gbnVtYmVyc1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhaXNOYU4oTnVtYmVyKHZhbHVlKSAtIHBhcnNlRmxvYXQodmFsdWUpKSkge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3ZhbHVlfSBpcyBub3QgYSBudW1iZXJgKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG4iXX0=