@contrail/data-grouping 1.0.27 → 1.0.28

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  import { DataGroup, DataGroupStructure, DataGroupingProperty } from '../interfaces';
2
2
  export declare class DataGroupGenerator {
3
- static getDistinctValues(data: any, rootIndex: any, slugIndex?: any, rootAltIndex?: any, slugAltIndex?: any, groupMultiSelectInSeparateFrame?: boolean): any[];
3
+ static getDistinctValues(data: any, rootIndex: any, slugIndex?: any, rootAltIndex?: any, slugAltIndex?: any, groupMultiSelectInSeparateFrame?: boolean, sortKey?: string): any[];
4
4
  static buildChildDataGroups(data: any, parentGroup: DataGroup, groupingProperties: Array<DataGroupingProperty>, leafNodeDataCount: any, currentDepth: any, groupMultiSelectInSeparateFrame?: boolean): void;
5
5
  static buildDataGroupStructure(data: Array<any>, groupingProperties: Array<DataGroupingProperty>, leafNodeDataCount: number, groupMultiSelectInSeparateFrame?: boolean): DataGroupStructure;
6
6
  static createPartitionedGroupsFromData(parentGroup: DataGroup, data: Array<any>, leafNodeDataCount: number): Array<DataGroup>;
@@ -4,10 +4,10 @@ exports.DataGroupGenerator = void 0;
4
4
  const util_1 = require("@contrail/util");
5
5
  const types_1 = require("@contrail/types");
6
6
  class DataGroupGenerator {
7
- static getDistinctValues(data, rootIndex, slugIndex = null, rootAltIndex = null, slugAltIndex = null, groupMultiSelectInSeparateFrame = false) {
7
+ static getDistinctValues(data, rootIndex, slugIndex = null, rootAltIndex = null, slugAltIndex = null, groupMultiSelectInSeparateFrame = false, sortKey = 'asc') {
8
8
  const map = new Map();
9
9
  const sortingArray = [];
10
- data.forEach(obj => {
10
+ data.forEach((obj) => {
11
11
  if (!obj) {
12
12
  return;
13
13
  }
@@ -27,7 +27,7 @@ class DataGroupGenerator {
27
27
  key = value.id || value.name || value;
28
28
  }
29
29
  if (Array.isArray(value) && !groupMultiSelectInSeparateFrame) {
30
- value.forEach(arrayValue => {
30
+ value.forEach((arrayValue) => {
31
31
  map[arrayValue] = arrayValue;
32
32
  if (!sortingArray.includes(arrayValue)) {
33
33
  sortingArray.push(arrayValue);
@@ -41,10 +41,19 @@ class DataGroupGenerator {
41
41
  }
42
42
  }
43
43
  });
44
- const distinctValues = [...Object.values(map)].sort((v1, v2) => {
44
+ const distinctValues = [...Object.values(map)];
45
+ distinctValues.sort((v1, v2) => {
45
46
  let val1 = v1 && typeof v1 === 'object' ? v1.name : v1;
46
47
  let val2 = v2 && typeof v2 === 'object' ? v2.name : v2;
47
- return sortingArray.indexOf(val1) - sortingArray.indexOf(val2);
48
+ if (sortKey === 'asc') {
49
+ return val1 > val2 ? 1 : -1;
50
+ }
51
+ else if (sortKey === 'desc') {
52
+ return val1 < val2 ? 1 : -1;
53
+ }
54
+ else {
55
+ return sortingArray.indexOf(val1) - sortingArray.indexOf(val2);
56
+ }
48
57
  });
49
58
  return distinctValues;
50
59
  }
@@ -54,9 +63,10 @@ class DataGroupGenerator {
54
63
  const slugIndex = groupingProperty.propertyDefinition.slug;
55
64
  const rootAltIndex = util_1.StringUtil.convertToCamelCase(groupingProperty.typeRootSlug);
56
65
  const slugAltIndex = groupingProperty.propertyDefinition.slug;
57
- let distinctValues = this.getDistinctValues(data, rootIndex, slugIndex, rootAltIndex, slugAltIndex, groupMultiSelectInSeparateFrame);
66
+ const sort = groupingProperty.sort || 'asc';
67
+ let distinctValues = this.getDistinctValues(data, rootIndex, slugIndex, rootAltIndex, slugAltIndex, groupMultiSelectInSeparateFrame, sort);
58
68
  for (let val of distinctValues) {
59
- const groupData = data.filter(obj => {
69
+ const groupData = data.filter((obj) => {
60
70
  const objVal = util_1.ObjectUtil.getBySlugs(obj, rootIndex, slugIndex) || util_1.ObjectUtil.getBySlugs(obj, rootAltIndex, slugAltIndex);
61
71
  if (Array.isArray(val) && Array.isArray(objVal)) {
62
72
  return val.sort().join() === objVal.sort().join();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contrail/data-grouping",
3
- "version": "1.0.27",
3
+ "version": "1.0.28",
4
4
  "description": "Utilities and interfaces for grouping data into hierarchial data structures based on properties.",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",