ngx-order-pipe
Version:
Angular order pipe, order collection by a field
1 lines • 12.1 kB
Source Map (JSON)
{"version":3,"file":"ngx-order-pipe.mjs","sources":["../../src/app/order-pipe/ngx-order.pipe.ts","../../src/app/order-pipe/ngx-order.module.ts","../../ngx-order-pipe.ts"],"sourcesContent":["import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({\n name: \"orderBy\",\n pure: false,\n})\nexport class OrderPipe implements PipeTransform {\n /**\n * Check if a value is a string\n *\n * @param value\n */\n static isString(value: any): boolean {\n return typeof value === \"string\" || value instanceof String;\n }\n\n /**\n * Sorts values ignoring the case\n *\n * @param a\n * @param b\n */\n static caseInsensitiveSort(a: any, b: any) {\n if (OrderPipe.isString(a) && OrderPipe.isString(b)) {\n return a.localeCompare(b);\n }\n return OrderPipe.defaultCompare(a, b);\n }\n\n /**\n * Default compare method\n *\n * @param a\n * @param b\n */\n static defaultCompare(a: any, b: any) {\n if (a && a instanceof Date) {\n a = a.getTime();\n }\n if (b && b instanceof Date) {\n b = b.getTime();\n }\n\n if (a === b) {\n return 0;\n }\n if (a == null) {\n return 1;\n }\n if (b == null) {\n return -1;\n }\n return a > b ? 1 : -1;\n }\n\n /**\n * Parse expression, split into items\n * @param expression\n * @returns {string[]}\n */\n static parseExpression(expression: string): string[] {\n expression = expression.replace(/\\[(\\w+)\\]/g, \".$1\");\n expression = expression.replace(/^\\./, \"\");\n return expression.split(\".\");\n }\n\n /**\n * Get value by expression\n *\n * @param object\n * @param expression\n * @returns {any}\n */\n static getValue(object: any, expression: string[]): any {\n for (let i = 0, n = expression.length; i < n; ++i) {\n if (!object) {\n return;\n }\n const k = expression[i];\n if (!(k in object)) {\n return;\n }\n if (typeof object[k] === \"function\") {\n object = object[k]();\n } else {\n object = object[k];\n }\n }\n\n return object;\n }\n\n /**\n * Set value by expression\n *\n * @param object\n * @param value\n * @param expression\n */\n static setValue(object: any, value: any, expression: string[]) {\n let i;\n for (i = 0; i < expression.length - 1; i++) {\n object = object[expression[i]];\n }\n\n object[expression[i]] = value;\n }\n\n transform(\n value: any | any[],\n expression?: any,\n reverse?: boolean,\n isCaseInsensitive: boolean = false,\n comparator?: Function\n ): any {\n if (!value) {\n return value;\n }\n\n if (Array.isArray(expression)) {\n return this.multiExpressionTransform(\n value,\n expression.slice(),\n reverse,\n isCaseInsensitive,\n comparator\n );\n }\n\n if (Array.isArray(value)) {\n return this.sortArray(\n value.slice(),\n expression,\n reverse,\n isCaseInsensitive,\n comparator\n );\n }\n\n if (typeof value === \"object\") {\n return this.transformObject(\n Object.assign({}, value),\n expression,\n reverse,\n isCaseInsensitive,\n comparator\n );\n }\n\n return value;\n }\n\n /**\n * Sort array, returns sorted array\n *\n * @param array\n * @param expression\n * @param reverse\n * @param isCaseInsensitive\n * @param comparator\n * @returns {Type[]}\n */\n private sortArray<Type>(\n array: Type[],\n expression?: any,\n reverse?: boolean,\n isCaseInsensitive?: boolean,\n comparator?: Function\n ): Type[] {\n const isDeepLink = expression && expression.indexOf(\".\") !== -1;\n\n if (isDeepLink) {\n expression = OrderPipe.parseExpression(expression);\n }\n\n let compareFn: Function;\n\n if (comparator && typeof comparator === \"function\") {\n compareFn = comparator;\n } else {\n compareFn = isCaseInsensitive\n ? OrderPipe.caseInsensitiveSort\n : OrderPipe.defaultCompare;\n }\n\n const sortedArray: any[] = array.sort((a: any, b: any): number => {\n if (!expression) {\n return compareFn(a, b);\n }\n\n if (!isDeepLink) {\n if (a && b) {\n return compareFn(a[expression], b[expression]);\n }\n return compareFn(a, b);\n }\n\n return compareFn(\n OrderPipe.getValue(a, expression),\n OrderPipe.getValue(b, expression)\n );\n });\n\n if (reverse) {\n return sortedArray.reverse();\n }\n\n return sortedArray;\n }\n\n /**\n * Transform Object\n *\n * @param value\n * @param expression\n * @param reverse\n * @param isCaseInsensitive\n * @param comparator\n * @returns {any[]}\n */\n private transformObject(\n value: any | any[],\n expression?: any,\n reverse?: boolean,\n isCaseInsensitive?: boolean,\n comparator?: Function\n ): any {\n const parsedExpression = OrderPipe.parseExpression(expression);\n let lastPredicate: any = parsedExpression.pop();\n let oldValue = OrderPipe.getValue(value, parsedExpression);\n\n if (!Array.isArray(oldValue)) {\n parsedExpression.push(lastPredicate);\n lastPredicate = null;\n oldValue = OrderPipe.getValue(value, parsedExpression);\n }\n\n if (!oldValue) {\n return value;\n }\n\n OrderPipe.setValue(\n value,\n this.transform(oldValue, lastPredicate, reverse, isCaseInsensitive),\n parsedExpression\n );\n return value;\n }\n\n /**\n * Apply multiple expressions\n *\n * @param value\n * @param {any[]} expressions\n * @param {boolean} reverse\n * @param {boolean} isCaseInsensitive\n * @param {Function} comparator\n * @returns {any}\n */\n private multiExpressionTransform(\n value: any,\n expressions: any[],\n reverse?: boolean,\n isCaseInsensitive: boolean = false,\n comparator?: Function\n ): any {\n return expressions.reverse().reduce((result: any, expression: any) => {\n return this.transform(\n result,\n expression,\n reverse,\n isCaseInsensitive,\n comparator\n );\n }, value);\n }\n}\n","/**\n * Created by vadimdez on 20/01/2017.\n */\nimport { NgModule } from '@angular/core';\nimport { OrderPipe } from './ngx-order.pipe';\n\n@NgModule({\n declarations: [OrderPipe],\n exports: [OrderPipe],\n providers: [OrderPipe]\n})\nexport class OrderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}