@pega/lists-core-utils 8.0.0-build.27.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/LICENSE +185 -0
  2. package/README.md +66 -0
  3. package/SECURITY.md +11 -0
  4. package/lib/dataApi/Aggregation.d.ts +2 -0
  5. package/lib/dataApi/Aggregation.d.ts.map +1 -0
  6. package/lib/dataApi/Aggregation.js +36 -0
  7. package/lib/dataApi/Aggregation.js.map +1 -0
  8. package/lib/dataApi/DataFeatures.d.ts +9 -0
  9. package/lib/dataApi/DataFeatures.d.ts.map +1 -0
  10. package/lib/dataApi/DataFeatures.js +7 -0
  11. package/lib/dataApi/DataFeatures.js.map +1 -0
  12. package/lib/dataApi/Filter.d.ts +8 -0
  13. package/lib/dataApi/Filter.d.ts.map +1 -0
  14. package/lib/dataApi/Filter.js +52 -0
  15. package/lib/dataApi/Filter.js.map +1 -0
  16. package/lib/dataApi/Grouping.d.ts +2 -0
  17. package/lib/dataApi/Grouping.d.ts.map +1 -0
  18. package/lib/dataApi/Grouping.js +133 -0
  19. package/lib/dataApi/Grouping.js.map +1 -0
  20. package/lib/dataApi/Paginate.d.ts +2 -0
  21. package/lib/dataApi/Paginate.d.ts.map +1 -0
  22. package/lib/dataApi/Paginate.js +53 -0
  23. package/lib/dataApi/Paginate.js.map +1 -0
  24. package/lib/dataApi/Sort.d.ts +2 -0
  25. package/lib/dataApi/Sort.d.ts.map +1 -0
  26. package/lib/dataApi/Sort.js +146 -0
  27. package/lib/dataApi/Sort.js.map +1 -0
  28. package/lib/dataApi/index.d.ts +6 -0
  29. package/lib/dataApi/index.d.ts.map +1 -0
  30. package/lib/dataApi/index.js +98 -0
  31. package/lib/dataApi/index.js.map +1 -0
  32. package/lib/dataApi/utils.d.ts +27 -0
  33. package/lib/dataApi/utils.d.ts.map +1 -0
  34. package/lib/dataApi/utils.js +95 -0
  35. package/lib/dataApi/utils.js.map +1 -0
  36. package/lib/index.d.ts +8 -0
  37. package/lib/index.d.ts.map +1 -0
  38. package/lib/index.js +7 -0
  39. package/lib/index.js.map +1 -0
  40. package/lib/stateConversion/PrepareDatapageQuery.d.ts +46 -0
  41. package/lib/stateConversion/PrepareDatapageQuery.d.ts.map +1 -0
  42. package/lib/stateConversion/PrepareDatapageQuery.js +558 -0
  43. package/lib/stateConversion/PrepareDatapageQuery.js.map +1 -0
  44. package/lib/stateConversion/PrepareDatapageQuery.types.d.ts +137 -0
  45. package/lib/stateConversion/PrepareDatapageQuery.types.d.ts.map +1 -0
  46. package/lib/stateConversion/PrepareDatapageQuery.types.js +2 -0
  47. package/lib/stateConversion/PrepareDatapageQuery.types.js.map +1 -0
  48. package/lib/stateConversion/PrepareUniqueValuesQuery.d.ts +9 -0
  49. package/lib/stateConversion/PrepareUniqueValuesQuery.d.ts.map +1 -0
  50. package/lib/stateConversion/PrepareUniqueValuesQuery.js +45 -0
  51. package/lib/stateConversion/PrepareUniqueValuesQuery.js.map +1 -0
  52. package/lib/stateConversion/QueryToListsState.d.ts +9 -0
  53. package/lib/stateConversion/QueryToListsState.d.ts.map +1 -0
  54. package/lib/stateConversion/QueryToListsState.js +111 -0
  55. package/lib/stateConversion/QueryToListsState.js.map +1 -0
  56. package/lib/stateConversion/utils.d.ts +12 -0
  57. package/lib/stateConversion/utils.d.ts.map +1 -0
  58. package/lib/stateConversion/utils.js +55 -0
  59. package/lib/stateConversion/utils.js.map +1 -0
  60. package/lib/types.d.ts +24 -0
  61. package/lib/types.d.ts.map +1 -0
  62. package/lib/types.js +7 -0
  63. package/lib/types.js.map +1 -0
  64. package/package.json +27 -0
@@ -0,0 +1,53 @@
1
+ import get from 'lodash.get';
2
+ import { evaluateCondition } from '@pega/cosmos-react-condition-builder';
3
+ import { getFieldsMap } from '../stateConversion/PrepareDatapageQuery';
4
+ import { getGroupFromKey } from '../stateConversion/utils';
5
+ import { typeMap, DOT_DELIMITER } from './utils';
6
+ // eslint-disable-next-line default-param-last
7
+ export default function paginate(state = {}, data = [], meta) {
8
+ let paginatedData = [];
9
+ if (meta.grouping && state.groups && state.groups.length) {
10
+ const fieldsMap = getFieldsMap(meta.fieldDefs);
11
+ (state.groupFilters || []).forEach(groupOpt => {
12
+ let filteredData = data.filter(row => {
13
+ // Identify the rows where all the criteria from a given groupFilter are applicable
14
+ return Object.entries(groupOpt.filters).every(([groupBy, value]) => {
15
+ const { columnId, dateFunction } = getGroupFromKey(groupBy, state.groups);
16
+ const field = fieldsMap.get(columnId);
17
+ // If grouping by a dateFunction, use the ConditionBuilder utility to see if the row is matching the criteria
18
+ if (dateFunction) {
19
+ const condition = {
20
+ condition: {
21
+ lhs: { field: field.name },
22
+ comparator: 'EQ',
23
+ rhs: { value, dateFunction }
24
+ }
25
+ };
26
+ return evaluateCondition(condition, row, [{ id: field.name, name: field.name, type: typeMap[field.type] }], DOT_DELIMITER);
27
+ }
28
+ // Otherwise, simply check for equality
29
+ return get(row, field.name) === value;
30
+ });
31
+ });
32
+ filteredData = filteredData.slice(groupOpt.groupFrom, groupOpt.groupTo);
33
+ paginatedData = [...paginatedData, ...filteredData];
34
+ });
35
+ }
36
+ else {
37
+ paginatedData = data.slice(state.paginationOptions.rootVirtualiser.startIndex, state.paginationOptions.rootVirtualiser.endIndex + 1);
38
+ }
39
+ return paginatedData;
40
+ }
41
+ /* const processData = (paginationOptions, virtualizeIns, data) => {
42
+ let newData = data;
43
+ if (paginationOptions) {
44
+ if (paginationOptions.action === 'append') {
45
+ newData = virtualizeIns.oldData.slice(paginationOptions.rowsToDelete).concat(data);
46
+ } else if (paginationOptions.action === 'prepend') {
47
+ newData = data.concat(virtualizeIns.oldData);
48
+ newData = newData.slice(0, newData.length - paginationOptions.rowsToDelete);
49
+ }
50
+ }
51
+ return newData;
52
+ }; */
53
+ //# sourceMappingURL=Paginate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Paginate.js","sourceRoot":"","sources":["../../dataApi/Paginate.js"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,YAAY,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEjD,8CAA8C;AAC9C,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI;IAC1D,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACzD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC5C,IAAI,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBACnC,mFAAmF;gBACnF,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE;oBACjE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1E,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAEtC,6GAA6G;oBAC7G,IAAI,YAAY,EAAE,CAAC;wBACjB,MAAM,SAAS,GAAG;4BAChB,SAAS,EAAE;gCACT,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;gCAC1B,UAAU,EAAE,IAAI;gCAChB,GAAG,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;6BAC7B;yBACF,CAAC;wBACF,OAAO,iBAAiB,CACtB,SAAS,EACT,GAAG,EACH,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EACjE,aAAa,CACd,CAAC;oBACJ,CAAC;oBAED,uCAAuC;oBACvC,OAAO,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;gBACxC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;YACxE,aAAa,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,YAAY,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,IAAI,CAAC,KAAK,CACxB,KAAK,CAAC,iBAAiB,CAAC,eAAe,CAAC,UAAU,EAClD,KAAK,CAAC,iBAAiB,CAAC,eAAe,CAAC,QAAQ,GAAG,CAAC,CACrD,CAAC;IACJ,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;;;;;;;;KAWK","sourcesContent":["import get from 'lodash.get';\n\nimport { evaluateCondition } from '@pega/cosmos-react-condition-builder';\n\nimport { getFieldsMap } from '../stateConversion/PrepareDatapageQuery';\nimport { getGroupFromKey } from '../stateConversion/utils';\n\nimport { typeMap, DOT_DELIMITER } from './utils';\n\n// eslint-disable-next-line default-param-last\nexport default function paginate(state = {}, data = [], meta) {\n let paginatedData = [];\n if (meta.grouping && state.groups && state.groups.length) {\n const fieldsMap = getFieldsMap(meta.fieldDefs);\n (state.groupFilters || []).forEach(groupOpt => {\n let filteredData = data.filter(row => {\n // Identify the rows where all the criteria from a given groupFilter are applicable\n return Object.entries(groupOpt.filters).every(([groupBy, value]) => {\n const { columnId, dateFunction } = getGroupFromKey(groupBy, state.groups);\n const field = fieldsMap.get(columnId);\n\n // If grouping by a dateFunction, use the ConditionBuilder utility to see if the row is matching the criteria\n if (dateFunction) {\n const condition = {\n condition: {\n lhs: { field: field.name },\n comparator: 'EQ',\n rhs: { value, dateFunction }\n }\n };\n return evaluateCondition(\n condition,\n row,\n [{ id: field.name, name: field.name, type: typeMap[field.type] }],\n DOT_DELIMITER\n );\n }\n\n // Otherwise, simply check for equality\n return get(row, field.name) === value;\n });\n });\n filteredData = filteredData.slice(groupOpt.groupFrom, groupOpt.groupTo);\n paginatedData = [...paginatedData, ...filteredData];\n });\n } else {\n paginatedData = data.slice(\n state.paginationOptions.rootVirtualiser.startIndex,\n state.paginationOptions.rootVirtualiser.endIndex + 1\n );\n }\n return paginatedData;\n}\n\n/* const processData = (paginationOptions, virtualizeIns, data) => {\n let newData = data;\n if (paginationOptions) {\n if (paginationOptions.action === 'append') {\n newData = virtualizeIns.oldData.slice(paginationOptions.rowsToDelete).concat(data);\n } else if (paginationOptions.action === 'prepend') {\n newData = data.concat(virtualizeIns.oldData);\n newData = newData.slice(0, newData.length - paginationOptions.rowsToDelete);\n }\n }\n return newData;\n}; */\n"]}
@@ -0,0 +1,2 @@
1
+ export default function Sort(state?: {}, data?: any[], meta?: {}): any;
2
+ //# sourceMappingURL=Sort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sort.d.ts","sourceRoot":"","sources":["../../dataApi/Sort.js"],"names":[],"mappings":"AAwHA,uEAuDC"}
@@ -0,0 +1,146 @@
1
+ import get from 'lodash.get';
2
+ import { dateFuncsWithNumericValues } from '../stateConversion/utils';
3
+ import { getDateFunctionValue } from './utils';
4
+ function sorter(direction, a, b) {
5
+ if (a === b)
6
+ return 0;
7
+ if (a === undefined || a === null)
8
+ return direction;
9
+ if (b === undefined || b === null)
10
+ return -direction;
11
+ if (a < b)
12
+ return -direction;
13
+ return direction;
14
+ }
15
+ /**
16
+ * Used with 'by' sorter when we have sorting in multiple direction
17
+ * @example sort(users).asc(['firstName', 'lastName'])
18
+ */
19
+ function multiPropObjectSorter(sortByObj, thenBy, depth, _direction, a, b) {
20
+ const sortBy = sortByObj.asc || sortByObj.desc;
21
+ const direction = sortByObj.asc ? 1 : -1;
22
+ if (!sortBy) {
23
+ throw Error(`sort: Invalid 'by' sorting configuration.
24
+ Expecting object with 'asc' or 'desc' key`);
25
+ }
26
+ // eslint-disable-next-line no-use-before-define
27
+ const multiSorter = getMultiPropertySorter(sortByObj);
28
+ return multiSorter(sortBy, thenBy, depth, direction, a, b);
29
+ }
30
+ function multiPropEqualityHandler(valA, valB, thenBy, depth, direction, a, b) {
31
+ valA = typeof valA === 'string' ? valA.toLowerCase() : valA;
32
+ valB = typeof valB === 'string' ? valB.toLowerCase() : valB;
33
+ if (valA === valB || (valA === null && valB === null)) {
34
+ if (thenBy.length > depth) {
35
+ return multiPropObjectSorter(thenBy[depth], thenBy, depth + 1, direction, a, b);
36
+ }
37
+ return 0;
38
+ }
39
+ return sorter(direction, valA, valB);
40
+ }
41
+ /**
42
+ * Used when we have sorting by multiple properties and when current sorter is function
43
+ * @example sort(users).asc([p => p.address.city, p => p.firstName])
44
+ */
45
+ function multiPropFunctionSorter(sortBy, thenBy, depth, direction, a, b) {
46
+ return multiPropEqualityHandler(sortBy(a), sortBy(b), thenBy, depth, direction, a, b);
47
+ }
48
+ /**
49
+ * Used when we have sorting by multiple properties and when current sorter is string
50
+ * @example sort(users).asc(['firstName', 'lastName'])
51
+ */
52
+ function multiPropStringSorter(sortBy, thenBy, depth, direction, a, b) {
53
+ return multiPropEqualityHandler(get(a, sortBy), get(b, sortBy), thenBy, depth, direction, a, b);
54
+ }
55
+ /**
56
+ * Used when we have sorting by multiple properties and when current sorter is number
57
+ */
58
+ function multiPropNumberSorter(sortBy, thenBy, depth, direction, a, b) {
59
+ return multiPropEqualityHandler(get(a, sortBy) && parseInt(get(a, sortBy), 10), get(b, sortBy) && parseInt(get(b, sortBy), 10), thenBy, depth, direction, a, b);
60
+ }
61
+ /**
62
+ * Used when we have sorting by multiple properties and when current sorter is date
63
+ */
64
+ function multiPropDateSorter(sortBy, thenBy, depth, direction, a, b) {
65
+ return multiPropEqualityHandler(get(a, sortBy), get(b, sortBy), thenBy, depth, direction, a, b);
66
+ }
67
+ /**
68
+ * Return multiProperty sort handler based on sortBy value
69
+ */
70
+ function getMultiPropertySorter(sortByObj) {
71
+ const type = sortByObj.type.toLowerCase();
72
+ if (type.toLowerCase() === 'string' || type === 'text' || type === 'boolean') {
73
+ return multiPropStringSorter;
74
+ }
75
+ if (type === 'date' || type === 'datetime' || type === 'time') {
76
+ return multiPropDateSorter;
77
+ }
78
+ if (type === 'number') {
79
+ return multiPropNumberSorter;
80
+ }
81
+ if (type === 'function') {
82
+ return multiPropFunctionSorter;
83
+ }
84
+ return multiPropObjectSorter;
85
+ }
86
+ function sortUtil(ctx) {
87
+ return {
88
+ by: sortBy => {
89
+ if (!Array.isArray(ctx))
90
+ return ctx;
91
+ if (!Array.isArray(sortBy)) {
92
+ throw Error(`sort: Invalid usage of 'by' sorter. Array syntax is required.
93
+ Did you mean to use 'asc' or 'desc' sorter instead?`);
94
+ }
95
+ const s = multiPropObjectSorter.bind(undefined, sortBy.shift(), sortBy, 0, undefined);
96
+ return ctx.slice().sort(s);
97
+ }
98
+ };
99
+ }
100
+ export default function Sort(state = {}, data = [], meta = {}) {
101
+ const { sortingOrder = [] } = state;
102
+ const { fieldDefs } = meta;
103
+ const sortBy = [];
104
+ const transientColumns = []; // Ad-hoc column names set up to handle date functions
105
+ for (let seq = 1; seq <= sortingOrder.length; seq += 1) {
106
+ // Get sequence object in order.
107
+ const sortingInfo = sortingOrder.find(s => s.sequence === seq);
108
+ const sortColumn = fieldDefs.find(col => col.name === sortingInfo.columnId);
109
+ const sortOrder = sortingInfo.order;
110
+ // Construct sortBy object.
111
+ if (sortingInfo.dateFunction) {
112
+ // If sorting by a dateFunction (which is needed when grouping by a dateFunction),
113
+ // Set up an ad-hoc column on each data row for the dateFunction so that the sortUtil can simply treat it as any other literal value
114
+ const newDataColId = `${sortingInfo.columnId}||${sortingInfo.dateFunction}`; // Using `||` to avoid any ambiguities with regular columns
115
+ data.forEach(row => {
116
+ row[newDataColId] = getDateFunctionValue(row, sortingInfo.columnId, sortingInfo.dateFunction);
117
+ });
118
+ transientColumns.push(newDataColId);
119
+ // Set up configuration to sort by the ad-hoc column
120
+ sortBy.push({
121
+ [sortOrder]: newDataColId,
122
+ comparer: sortColumn.comparer,
123
+ type: dateFuncsWithNumericValues.includes(sortingInfo.dateFunction) ? 'number' : 'text' // RFC-3339 date strings can be sorted using alpha-sort
124
+ });
125
+ }
126
+ else {
127
+ sortBy.push({
128
+ [sortOrder]: sortColumn.sortPropFunc || sortColumn.name, // TODO: Need to remove it . Added for demo purpose.
129
+ comparer: sortColumn.comparer,
130
+ type: sortColumn.sortPropTypeFunc || sortColumn.type
131
+ });
132
+ }
133
+ }
134
+ if (data && sortBy.length) {
135
+ const sortedData = sortUtil(data).by(sortBy);
136
+ // Remove any transient data set up to handle date functions
137
+ transientColumns.forEach(colId => {
138
+ sortedData.forEach(row => {
139
+ delete row[colId];
140
+ });
141
+ });
142
+ return sortedData;
143
+ }
144
+ return data;
145
+ }
146
+ //# sourceMappingURL=Sort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sort.js","sourceRoot":"","sources":["../../dataApi/Sort.js"],"names":[],"mappings":"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","sourcesContent":["import get from 'lodash.get';\n\nimport { dateFuncsWithNumericValues } from '../stateConversion/utils';\n\nimport { getDateFunctionValue } from './utils';\n\nfunction sorter(direction, a, b) {\n if (a === b) return 0;\n if (a === undefined || a === null) return direction;\n if (b === undefined || b === null) return -direction;\n if (a < b) return -direction;\n\n return direction;\n}\n\n/**\n * Used with 'by' sorter when we have sorting in multiple direction\n * @example sort(users).asc(['firstName', 'lastName'])\n */\nfunction multiPropObjectSorter(sortByObj, thenBy, depth, _direction, a, b) {\n const sortBy = sortByObj.asc || sortByObj.desc;\n const direction = sortByObj.asc ? 1 : -1;\n\n if (!sortBy) {\n throw Error(`sort: Invalid 'by' sorting configuration.\n Expecting object with 'asc' or 'desc' key`);\n }\n\n // eslint-disable-next-line no-use-before-define\n const multiSorter = getMultiPropertySorter(sortByObj);\n return multiSorter(sortBy, thenBy, depth, direction, a, b);\n}\n\nfunction multiPropEqualityHandler(valA, valB, thenBy, depth, direction, a, b) {\n valA = typeof valA === 'string' ? valA.toLowerCase() : valA;\n valB = typeof valB === 'string' ? valB.toLowerCase() : valB;\n if (valA === valB || (valA === null && valB === null)) {\n if (thenBy.length > depth) {\n return multiPropObjectSorter(thenBy[depth], thenBy, depth + 1, direction, a, b);\n }\n return 0;\n }\n\n return sorter(direction, valA, valB);\n}\n\n/**\n * Used when we have sorting by multiple properties and when current sorter is function\n * @example sort(users).asc([p => p.address.city, p => p.firstName])\n */\nfunction multiPropFunctionSorter(sortBy, thenBy, depth, direction, a, b) {\n return multiPropEqualityHandler(sortBy(a), sortBy(b), thenBy, depth, direction, a, b);\n}\n\n/**\n * Used when we have sorting by multiple properties and when current sorter is string\n * @example sort(users).asc(['firstName', 'lastName'])\n */\nfunction multiPropStringSorter(sortBy, thenBy, depth, direction, a, b) {\n return multiPropEqualityHandler(get(a, sortBy), get(b, sortBy), thenBy, depth, direction, a, b);\n}\n\n/**\n * Used when we have sorting by multiple properties and when current sorter is number\n */\nfunction multiPropNumberSorter(sortBy, thenBy, depth, direction, a, b) {\n return multiPropEqualityHandler(\n get(a, sortBy) && parseInt(get(a, sortBy), 10),\n get(b, sortBy) && parseInt(get(b, sortBy), 10),\n thenBy,\n depth,\n direction,\n a,\n b\n );\n}\n\n/**\n * Used when we have sorting by multiple properties and when current sorter is date\n */\nfunction multiPropDateSorter(sortBy, thenBy, depth, direction, a, b) {\n return multiPropEqualityHandler(get(a, sortBy), get(b, sortBy), thenBy, depth, direction, a, b);\n}\n\n/**\n * Return multiProperty sort handler based on sortBy value\n */\nfunction getMultiPropertySorter(sortByObj) {\n const type = sortByObj.type.toLowerCase();\n if (type.toLowerCase() === 'string' || type === 'text' || type === 'boolean') {\n return multiPropStringSorter;\n }\n if (type === 'date' || type === 'datetime' || type === 'time') {\n return multiPropDateSorter;\n }\n if (type === 'number') {\n return multiPropNumberSorter;\n }\n if (type === 'function') {\n return multiPropFunctionSorter;\n }\n return multiPropObjectSorter;\n}\n\nfunction sortUtil(ctx) {\n return {\n by: sortBy => {\n if (!Array.isArray(ctx)) return ctx;\n\n if (!Array.isArray(sortBy)) {\n throw Error(`sort: Invalid usage of 'by' sorter. Array syntax is required.\n Did you mean to use 'asc' or 'desc' sorter instead?`);\n }\n\n const s = multiPropObjectSorter.bind(undefined, sortBy.shift(), sortBy, 0, undefined);\n return ctx.slice().sort(s);\n }\n };\n}\n\nexport default function Sort(state = {}, data = [], meta = {}) {\n const { sortingOrder = [] } = state;\n const { fieldDefs } = meta;\n\n const sortBy = [];\n const transientColumns = []; // Ad-hoc column names set up to handle date functions\n\n for (let seq = 1; seq <= sortingOrder.length; seq += 1) {\n // Get sequence object in order.\n const sortingInfo = sortingOrder.find(s => s.sequence === seq);\n const sortColumn = fieldDefs.find(col => col.name === sortingInfo.columnId);\n const sortOrder = sortingInfo.order;\n\n // Construct sortBy object.\n if (sortingInfo.dateFunction) {\n // If sorting by a dateFunction (which is needed when grouping by a dateFunction),\n // Set up an ad-hoc column on each data row for the dateFunction so that the sortUtil can simply treat it as any other literal value\n const newDataColId = `${sortingInfo.columnId}||${sortingInfo.dateFunction}`; // Using `||` to avoid any ambiguities with regular columns\n data.forEach(row => {\n row[newDataColId] = getDateFunctionValue(\n row,\n sortingInfo.columnId,\n sortingInfo.dateFunction\n );\n });\n transientColumns.push(newDataColId);\n\n // Set up configuration to sort by the ad-hoc column\n sortBy.push({\n [sortOrder]: newDataColId,\n comparer: sortColumn.comparer,\n type: dateFuncsWithNumericValues.includes(sortingInfo.dateFunction) ? 'number' : 'text' // RFC-3339 date strings can be sorted using alpha-sort\n });\n } else {\n sortBy.push({\n [sortOrder]: sortColumn.sortPropFunc || sortColumn.name, // TODO: Need to remove it . Added for demo purpose.\n comparer: sortColumn.comparer,\n type: sortColumn.sortPropTypeFunc || sortColumn.type\n });\n }\n }\n\n if (data && sortBy.length) {\n const sortedData = sortUtil(data).by(sortBy);\n\n // Remove any transient data set up to handle date functions\n transientColumns.forEach(colId => {\n sortedData.forEach(row => {\n delete row[colId];\n });\n });\n\n return sortedData;\n }\n return data;\n}\n"]}
@@ -0,0 +1,6 @@
1
+ export function fetchData(query: DataApiTypes.DataViewsRequest, meta: DataApiTypes.Meta, data: DataApiTypes.Data): import("../types").DataApiTypes.FetchDataResponse;
2
+ export function fetchUniqueColValues(query: DataApiTypes.DataViewsRequest, meta: DataApiTypes.Meta, colId: string, data: DataApiTypes.Data): DataApiTypes.UniqueColValuesResponse;
3
+ export function fetchGroupedInfo(query: DataApiTypes.DataViewsRequest, meta: DataApiTypes.Meta, clonedFormattedData: DataApiTypes.Data): DataApiTypes.FetchGroupedInfoResponse;
4
+ export function fetchAggregatedValues(query: DataApiTypes.DataViewsRequest, meta: DataApiTypes.Meta, clonedFormattedData: DataApiTypes.Data): DataApiTypes.AggregateValuesResponse;
5
+ import { DataApiTypes } from '../types';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../dataApi/index.js"],"names":[],"mappings":"AAoBO,iCALI,YAAY,CAAC,gBAAgB,QAC7B,YAAY,CAAC,IAAI,QACjB,YAAY,CAAC,IAAI,GACf,OAAO,UAAU,EAAE,YAAY,CAAC,iBAAiB,CAuB7D;AAUM,4CANI,YAAY,CAAC,gBAAgB,QAC7B,YAAY,CAAC,IAAI,SACjB,MAAM,QACN,YAAY,CAAC,IAAI,GACf,YAAY,CAAC,uBAAuB,CAsBhD;AASM,wCALI,YAAY,CAAC,gBAAgB,QAC7B,YAAY,CAAC,IAAI,uBACjB,YAAY,CAAC,IAAI,GACf,YAAY,CAAC,wBAAwB,CAOjD;AASM,6CALI,YAAY,CAAC,gBAAgB,QAC7B,YAAY,CAAC,IAAI,uBACjB,YAAY,CAAC,IAAI,GACf,YAAY,CAAC,uBAAuB,CAOhD;6BA/F4B,UAAU"}
@@ -0,0 +1,98 @@
1
+ import get from 'lodash.get';
2
+ // This should be converted to "import type" once this file is TS.
3
+ // eslint-disable-next-line no-unused-vars
4
+ import { DataApiTypes } from '../types';
5
+ import convertQueryToListState from '../stateConversion/QueryToListsState';
6
+ import getDataFeatures from './DataFeatures';
7
+ import grouping from './Grouping';
8
+ import aggregation from './Aggregation';
9
+ import { typeMap } from './utils';
10
+ /**
11
+ * This api is used to fetch a list of raw data rows (excluding aggregations) for a given group or at the top level when no groups
12
+ * from the provided {@link data} using {@link query} and {@link meta}
13
+ * @param {DataApiTypes.DataViewsRequest} query A data view api request object used to query the {@link data}
14
+ * @param {DataApiTypes.Meta} meta A metadata structure that is used to get extra information that is not present in the query.
15
+ * @param {DataApiTypes.Data} data The whole dataset on which this {@link query} operation needs to be performed
16
+ * @returns {import('../types').DataApiTypes.FetchDataResponse} {@link DataApiTypes.FetchDataResponse}
17
+ */
18
+ export const fetchData = (query, meta, data) => {
19
+ const stateFromTable = convertQueryToListState(query, data);
20
+ const serverData = {
21
+ data: data || []
22
+ };
23
+ serverData.totalRecordCount = serverData.data.length;
24
+ const features = getDataFeatures();
25
+ serverData.totalRecordCount = serverData.data.length;
26
+ Object.entries(features).forEach(([key, feature]) => {
27
+ if (key !== 'paginate' || (key === 'paginate' && stateFromTable.paginationOptions)) {
28
+ if (key === 'paginate') {
29
+ serverData.data = feature(stateFromTable, serverData.data, meta);
30
+ }
31
+ else {
32
+ serverData.data = feature(stateFromTable, serverData.data, meta);
33
+ serverData.filteredRecordCount = serverData.data.length;
34
+ }
35
+ }
36
+ });
37
+ return new Promise(resolve => {
38
+ resolve(serverData);
39
+ });
40
+ };
41
+ /**
42
+ * This api is used to fetch the unique values for a given colId. The {@link colId} should be equal to {@link DataApiTypes.FieldDef.id fieldDef id} for which unique values needs to be fetched.
43
+ * @param {DataApiTypes.DataViewsRequest} query A data view api request object used to query the {@link data}
44
+ * @param {DataApiTypes.Meta} meta A metadata structure that is used to get extra information that is not present in the query.
45
+ * @param {string} colId It should be equal to {@link DataApiTypes.FieldDef.id fieldDef id} for which unique values needs to be fetched.
46
+ * @param {DataApiTypes.Data} data The whole dataset on which this {@link query} operation needs to be performed
47
+ * @returns {DataApiTypes.UniqueColValuesResponse} {@link DataApiTypes.UniqueColValuesResponse}
48
+ */
49
+ export const fetchUniqueColValues = (query, meta, colId, data) => {
50
+ const column = meta.fieldDefs ? meta.fieldDefs.find(col => col.id === colId) : null;
51
+ const colName = column ? column.name : null;
52
+ if (!colName)
53
+ return Promise.resolve([]);
54
+ delete query.paging;
55
+ delete query.query.filter;
56
+ const resultSet = new Set();
57
+ return new Promise((success, failure) => {
58
+ fetchData(query, meta, data || [])
59
+ .then(({ data: resData }) => {
60
+ resData.forEach(obj => {
61
+ const value = get(obj, colName);
62
+ if (value)
63
+ resultSet.add(value);
64
+ });
65
+ success([...resultSet]);
66
+ })
67
+ .catch(error => {
68
+ failure(error);
69
+ });
70
+ });
71
+ };
72
+ /**
73
+ * This api is used to fetch details for any group/sub-group for a given {@link clonedFormattedData}. It returns labels, counts, aggregation values at each group node.
74
+ * @param {DataApiTypes.DataViewsRequest} query A data view api request object used to query the {@link clonedFormattedData}
75
+ * @param {DataApiTypes.Meta} meta A metadata structure that is used to get extra information that is not present in the query.
76
+ * @param {DataApiTypes.Data} clonedFormattedData The whole dataset on which this {@link query} operation needs to be performed
77
+ * @returns {DataApiTypes.FetchGroupedInfoResponse} {@link DataApiTypes.FetchGroupedInfoResponse}
78
+ */
79
+ export const fetchGroupedInfo = (query, meta, clonedFormattedData) => {
80
+ const state = convertQueryToListState(query, clonedFormattedData || []);
81
+ return new Promise(resolve => {
82
+ resolve(grouping(state, clonedFormattedData || [], { ...meta, typeMap }));
83
+ });
84
+ };
85
+ /**
86
+ * This api is used to fetch aggregation results for a given aggregation type(sum/min/max/count) in the {@link query}.
87
+ * @param {DataApiTypes.DataViewsRequest} query A data view api request object used to query the {@link clonedFormattedData}
88
+ * @param {DataApiTypes.Meta} meta A metadata structure that is used to get extra information that is not present in the query.
89
+ * @param {DataApiTypes.Data} clonedFormattedData The whole dataset on which this {@link query} operation needs to be performed
90
+ * @returns {DataApiTypes.AggregateValuesResponse} {@link DataApiTypes.AggregateValuesResponse}
91
+ */
92
+ export const fetchAggregatedValues = (query, meta, clonedFormattedData) => {
93
+ const state = convertQueryToListState(query, clonedFormattedData || []);
94
+ return new Promise(resolve => {
95
+ resolve(aggregation(state, clonedFormattedData || [], meta));
96
+ });
97
+ };
98
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../dataApi/index.js"],"names":[],"mappings":"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","sourcesContent":["import get from 'lodash.get';\n\n// This should be converted to \"import type\" once this file is TS.\n// eslint-disable-next-line no-unused-vars\nimport { DataApiTypes } from '../types';\nimport convertQueryToListState from '../stateConversion/QueryToListsState';\n\nimport getDataFeatures from './DataFeatures';\nimport grouping from './Grouping';\nimport aggregation from './Aggregation';\nimport { typeMap } from './utils';\n\n/**\n * This api is used to fetch a list of raw data rows (excluding aggregations) for a given group or at the top level when no groups\n * from the provided {@link data} using {@link query} and {@link meta}\n * @param {DataApiTypes.DataViewsRequest} query A data view api request object used to query the {@link data}\n * @param {DataApiTypes.Meta} meta A metadata structure that is used to get extra information that is not present in the query.\n * @param {DataApiTypes.Data} data The whole dataset on which this {@link query} operation needs to be performed\n * @returns {import('../types').DataApiTypes.FetchDataResponse} {@link DataApiTypes.FetchDataResponse}\n */\nexport const fetchData = (query, meta, data) => {\n const stateFromTable = convertQueryToListState(query, data);\n const serverData = {\n data: data || []\n };\n serverData.totalRecordCount = serverData.data.length;\n const features = getDataFeatures();\n serverData.totalRecordCount = serverData.data.length;\n Object.entries(features).forEach(([key, feature]) => {\n if (key !== 'paginate' || (key === 'paginate' && stateFromTable.paginationOptions)) {\n if (key === 'paginate') {\n serverData.data = feature(stateFromTable, serverData.data, meta);\n } else {\n serverData.data = feature(stateFromTable, serverData.data, meta);\n serverData.filteredRecordCount = serverData.data.length;\n }\n }\n });\n return new Promise(resolve => {\n resolve(serverData);\n });\n};\n\n/**\n * This api is used to fetch the unique values for a given colId. The {@link colId} should be equal to {@link DataApiTypes.FieldDef.id fieldDef id} for which unique values needs to be fetched.\n * @param {DataApiTypes.DataViewsRequest} query A data view api request object used to query the {@link data}\n * @param {DataApiTypes.Meta} meta A metadata structure that is used to get extra information that is not present in the query.\n * @param {string} colId It should be equal to {@link DataApiTypes.FieldDef.id fieldDef id} for which unique values needs to be fetched.\n * @param {DataApiTypes.Data} data The whole dataset on which this {@link query} operation needs to be performed\n * @returns {DataApiTypes.UniqueColValuesResponse} {@link DataApiTypes.UniqueColValuesResponse}\n */\nexport const fetchUniqueColValues = (query, meta, colId, data) => {\n const column = meta.fieldDefs ? meta.fieldDefs.find(col => col.id === colId) : null;\n const colName = column ? column.name : null;\n if (!colName) return Promise.resolve([]);\n delete query.paging;\n delete query.query.filter;\n const resultSet = new Set();\n return new Promise((success, failure) => {\n fetchData(query, meta, data || [])\n .then(({ data: resData }) => {\n resData.forEach(obj => {\n const value = get(obj, colName);\n if (value) resultSet.add(value);\n });\n success([...resultSet]);\n })\n .catch(error => {\n failure(error);\n });\n });\n};\n\n/**\n * This api is used to fetch details for any group/sub-group for a given {@link clonedFormattedData}. It returns labels, counts, aggregation values at each group node.\n * @param {DataApiTypes.DataViewsRequest} query A data view api request object used to query the {@link clonedFormattedData}\n * @param {DataApiTypes.Meta} meta A metadata structure that is used to get extra information that is not present in the query.\n * @param {DataApiTypes.Data} clonedFormattedData The whole dataset on which this {@link query} operation needs to be performed\n * @returns {DataApiTypes.FetchGroupedInfoResponse} {@link DataApiTypes.FetchGroupedInfoResponse}\n */\nexport const fetchGroupedInfo = (query, meta, clonedFormattedData) => {\n const state = convertQueryToListState(query, clonedFormattedData || []);\n return new Promise(resolve => {\n resolve(grouping(state, clonedFormattedData || [], { ...meta, typeMap }));\n });\n};\n\n/**\n * This api is used to fetch aggregation results for a given aggregation type(sum/min/max/count) in the {@link query}.\n * @param {DataApiTypes.DataViewsRequest} query A data view api request object used to query the {@link clonedFormattedData}\n * @param {DataApiTypes.Meta} meta A metadata structure that is used to get extra information that is not present in the query.\n * @param {DataApiTypes.Data} clonedFormattedData The whole dataset on which this {@link query} operation needs to be performed\n * @returns {DataApiTypes.AggregateValuesResponse} {@link DataApiTypes.AggregateValuesResponse}\n */\nexport const fetchAggregatedValues = (query, meta, clonedFormattedData) => {\n const state = convertQueryToListState(query, clonedFormattedData || []);\n return new Promise(resolve => {\n resolve(aggregation(state, clonedFormattedData || [], meta));\n });\n};\n"]}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * This api is used to transform the {@link fieldDefs} to a condition builder fields structure
3
+ * @param {DataApiTypes.FieldDef[]} fieldDefs meta fieldDefs which needs to be transformed to condition builder fields structure
4
+ * @param {string} [defaultType='text'] default field type to set if not found in typeMap
5
+ * @returns {Array} condition builder fields structure
6
+ */
7
+ export function getFormattedFields(fieldDefs: DataApiTypes.FieldDef[], defaultType?: string | undefined): any[];
8
+ export function getFilters({ filterExpression, comparator }: {
9
+ filterExpression: any;
10
+ comparator?: null | undefined;
11
+ }): any[];
12
+ /**
13
+ * Applies a dateFunction on the field value in the dataRow.
14
+ * Returns a formatted value that follows the same conventions as the DataViews API.
15
+ */
16
+ export function getDateFunctionValue(dataRow: any, fieldName: any, dateFunction: any): any;
17
+ export const DOT_DELIMITER: ".";
18
+ export namespace typeMap {
19
+ let text: string;
20
+ let number: string;
21
+ let boolean: string;
22
+ let datetime: string;
23
+ let date: string;
24
+ let time: string;
25
+ }
26
+ import { DataApiTypes } from '../types';
27
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../dataApi/utils.js"],"names":[],"mappings":"AAuBA;;;;;GAKG;AAEH,8CALW,YAAY,CAAC,QAAQ,EAAE,2CAgBjC;AAKD;;;UAUC;AAED;;;GAGG;AACH,2FAyCC;AA3FD,gCAAiC;;;;;;;;;6BAJJ,UAAU"}
@@ -0,0 +1,95 @@
1
+ import dayjs from 'dayjs';
2
+ import quarterOfYear from 'dayjs/plugin/quarterOfYear';
3
+ import get from 'lodash.get';
4
+ import { splitConditionTree } from '@pega/cosmos-react-condition-builder';
5
+ // This should be converted to "import type" once this file is TS.
6
+ // eslint-disable-next-line no-unused-vars
7
+ import { DataApiTypes } from '../types';
8
+ dayjs.extend(quarterOfYear);
9
+ export const DOT_DELIMITER = '.';
10
+ export const typeMap = {
11
+ text: 'TEXT',
12
+ number: 'DECIMAL',
13
+ boolean: 'BOOLEAN',
14
+ datetime: 'DATE_TIME',
15
+ date: 'DATE_ONLY',
16
+ time: 'TIME_ONLY'
17
+ };
18
+ /**
19
+ * This api is used to transform the {@link fieldDefs} to a condition builder fields structure
20
+ * @param {DataApiTypes.FieldDef[]} fieldDefs meta fieldDefs which needs to be transformed to condition builder fields structure
21
+ * @param {string} [defaultType='text'] default field type to set if not found in typeMap
22
+ * @returns {Array} condition builder fields structure
23
+ */
24
+ export function getFormattedFields(fieldDefs, defaultType = 'text') {
25
+ if (!fieldDefs)
26
+ return [];
27
+ return fieldDefs.map(field => {
28
+ const type = field.type ? typeMap[field.type.toLowerCase()] : typeMap[defaultType];
29
+ return {
30
+ id: field.name ? field.name : field.label,
31
+ name: field.name ? field.name : field.label,
32
+ label: field.label ? field.label : field.name,
33
+ type
34
+ };
35
+ });
36
+ }
37
+ /*
38
+ It returns currently applied filters by operators.
39
+ */
40
+ export function getFilters({ filterExpression, comparator = null }) {
41
+ const filters = [];
42
+ const { conditions } = splitConditionTree(filterExpression);
43
+ Object.keys(conditions).forEach(key => {
44
+ if (comparator) {
45
+ /* If comparator is given find field with that comparator */
46
+ if (conditions[key].comparator === comparator)
47
+ filters.push(conditions[key].lhs.field);
48
+ }
49
+ else
50
+ filters.push(conditions[key].lhs.field);
51
+ });
52
+ return filters;
53
+ }
54
+ /**
55
+ * Applies a dateFunction on the field value in the dataRow.
56
+ * Returns a formatted value that follows the same conventions as the DataViews API.
57
+ */
58
+ export function getDateFunctionValue(dataRow, fieldName, dateFunction) {
59
+ const fieldValue = get(dataRow, fieldName); // An RFC-3339 value of the date/datetime field
60
+ switch (dateFunction) {
61
+ case 'YEARS':
62
+ return dayjs(fieldValue).startOf('year').format('YYYY-MM-DD');
63
+ case 'QUARTERS':
64
+ return dayjs(fieldValue).startOf('quarter').format('YYYY-MM-DD');
65
+ case 'MONTHS':
66
+ return dayjs(fieldValue).startOf('month').format('YYYY-MM-DD');
67
+ case 'WEEKS':
68
+ return dayjs(fieldValue).startOf('week').format('YYYY-MM-DD');
69
+ case 'DAYS':
70
+ return dayjs(fieldValue).format('YYYY-MM-DD');
71
+ case 'HOURS':
72
+ return (dayjs(fieldValue)
73
+ .startOf('hour')
74
+ // cSpell:disable-next-line
75
+ .format('YYYY-MM-DDTHH:mm:ss'));
76
+ case 'MINUTES':
77
+ return (dayjs(fieldValue)
78
+ .startOf('minute')
79
+ // cSpell:disable-next-line
80
+ .format('YYYY-MM-DDTHH:mm:ss'));
81
+ case 'HOURS_OF_DAY':
82
+ return dayjs(fieldValue).hour();
83
+ case 'MONTHS_OF_YEAR':
84
+ return dayjs(fieldValue).month() + 1;
85
+ case 'DAYS_OF_MONTH':
86
+ return dayjs(fieldValue).date();
87
+ case 'DAYS_OF_WEEK':
88
+ // 'day()' returns 0 for Sundays. By our convention, it should be 7
89
+ return dayjs(fieldValue).day() || 7;
90
+ default:
91
+ // default case not needed
92
+ return fieldValue;
93
+ }
94
+ }
95
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../dataApi/utils.js"],"names":[],"mappings":"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","sourcesContent":["import dayjs from 'dayjs';\nimport quarterOfYear from 'dayjs/plugin/quarterOfYear';\nimport get from 'lodash.get';\n\nimport { splitConditionTree } from '@pega/cosmos-react-condition-builder';\n\n// This should be converted to \"import type\" once this file is TS.\n// eslint-disable-next-line no-unused-vars\nimport { DataApiTypes } from '../types';\n\ndayjs.extend(quarterOfYear);\n\nexport const DOT_DELIMITER = '.';\n\nexport const typeMap = {\n text: 'TEXT',\n number: 'DECIMAL',\n boolean: 'BOOLEAN',\n datetime: 'DATE_TIME',\n date: 'DATE_ONLY',\n time: 'TIME_ONLY'\n};\n\n/**\n * This api is used to transform the {@link fieldDefs} to a condition builder fields structure\n * @param {DataApiTypes.FieldDef[]} fieldDefs meta fieldDefs which needs to be transformed to condition builder fields structure\n * @param {string} [defaultType='text'] default field type to set if not found in typeMap\n * @returns {Array} condition builder fields structure\n */\n\nexport function getFormattedFields(fieldDefs, defaultType = 'text') {\n if (!fieldDefs) return [];\n return fieldDefs.map(field => {\n const type = field.type ? typeMap[field.type.toLowerCase()] : typeMap[defaultType];\n return {\n id: field.name ? field.name : field.label,\n name: field.name ? field.name : field.label,\n label: field.label ? field.label : field.name,\n type\n };\n });\n}\n\n/*\n It returns currently applied filters by operators.\n*/\nexport function getFilters({ filterExpression, comparator = null }) {\n const filters = [];\n const { conditions } = splitConditionTree(filterExpression);\n Object.keys(conditions).forEach(key => {\n if (comparator) {\n /* If comparator is given find field with that comparator */\n if (conditions[key].comparator === comparator) filters.push(conditions[key].lhs.field);\n } else filters.push(conditions[key].lhs.field);\n });\n return filters;\n}\n\n/**\n * Applies a dateFunction on the field value in the dataRow.\n * Returns a formatted value that follows the same conventions as the DataViews API.\n */\nexport function getDateFunctionValue(dataRow, fieldName, dateFunction) {\n const fieldValue = get(dataRow, fieldName); // An RFC-3339 value of the date/datetime field\n\n switch (dateFunction) {\n case 'YEARS':\n return dayjs(fieldValue).startOf('year').format('YYYY-MM-DD');\n case 'QUARTERS':\n return dayjs(fieldValue).startOf('quarter').format('YYYY-MM-DD');\n case 'MONTHS':\n return dayjs(fieldValue).startOf('month').format('YYYY-MM-DD');\n case 'WEEKS':\n return dayjs(fieldValue).startOf('week').format('YYYY-MM-DD');\n case 'DAYS':\n return dayjs(fieldValue).format('YYYY-MM-DD');\n case 'HOURS':\n return (\n dayjs(fieldValue)\n .startOf('hour')\n // cSpell:disable-next-line\n .format('YYYY-MM-DDTHH:mm:ss')\n );\n case 'MINUTES':\n return (\n dayjs(fieldValue)\n .startOf('minute')\n // cSpell:disable-next-line\n .format('YYYY-MM-DDTHH:mm:ss')\n );\n case 'HOURS_OF_DAY':\n return dayjs(fieldValue).hour();\n case 'MONTHS_OF_YEAR':\n return dayjs(fieldValue).month() + 1;\n case 'DAYS_OF_MONTH':\n return dayjs(fieldValue).date();\n case 'DAYS_OF_WEEK':\n // 'day()' returns 0 for Sundays. By our convention, it should be 7\n return dayjs(fieldValue).day() || 7;\n default:\n // default case not needed\n return fieldValue;\n }\n}\n"]}
package/lib/index.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ export * as PrepareDatapageQuery from './stateConversion/PrepareDatapageQuery';
2
+ export { default as prepareUniqueValuesQuery } from './stateConversion/PrepareUniqueValuesQuery';
3
+ export { default as convertQueryToListState } from './stateConversion/QueryToListsState';
4
+ export { getGroupKey, getGroupFromKey, dateFuncsWithNumericValues } from './stateConversion/utils';
5
+ export { fetchData, fetchUniqueColValues, fetchGroupedInfo, fetchAggregatedValues } from './dataApi';
6
+ export { getFormattedFields } from './dataApi/utils';
7
+ export type { DataApiTypes } from './types';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,oBAAoB,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAEjG,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export * as PrepareDatapageQuery from './stateConversion/PrepareDatapageQuery';
2
+ export { default as prepareUniqueValuesQuery } from './stateConversion/PrepareUniqueValuesQuery';
3
+ export { default as convertQueryToListState } from './stateConversion/QueryToListsState';
4
+ export { getGroupKey, getGroupFromKey, dateFuncsWithNumericValues } from './stateConversion/utils';
5
+ export { fetchData, fetchUniqueColValues, fetchGroupedInfo, fetchAggregatedValues } from './dataApi';
6
+ export { getFormattedFields } from './dataApi/utils';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,oBAAoB,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAEjG,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["export * as PrepareDatapageQuery from './stateConversion/PrepareDatapageQuery';\nexport { default as prepareUniqueValuesQuery } from './stateConversion/PrepareUniqueValuesQuery';\n\nexport { default as convertQueryToListState } from './stateConversion/QueryToListsState';\nexport { getGroupKey, getGroupFromKey, dateFuncsWithNumericValues } from './stateConversion/utils';\nexport {\n fetchData,\n fetchUniqueColValues,\n fetchGroupedInfo,\n fetchAggregatedValues\n} from './dataApi';\n\nexport { getFormattedFields } from './dataApi/utils';\n\nexport type { DataApiTypes } from './types';\n"]}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * It prepares {@link DataApiTypes.DataViewsRequest dataViewsRequest} that can be used to interact with pega-ui-lists-data-apis or data view api's
3
+ * @param {DataApiTypes.State} stateFromTable Current state object
4
+ * @param {DataApiTypes.Meta} meta Metadata structure
5
+ * @param {boolean} [isClient] The query is being prepared to interact with pega-ui-lists-data-apis or data view api's
6
+ * @param {DataApiTypes.Meta['patchQueryFields']} [patchQueryFields] A set of extra fields that should be appended in query
7
+ * @param {string[]} [compositeKeys] A set of primary fields that should be appended in query
8
+ * @param {boolean} [includeGroups] Groups should be included or not in the query
9
+ * @param {boolean} [optimizeQuery] Whether the query should be optimized to only include fields that are visible(means it should not be part of {@link DataApiTypes.State.hiddenColumns hidden}) or which are part of {@link DataApiTypes.State.groups groups}, {@link DataApiTypes.State.filterExpression filters}, {@link DataApiTypes.State.sortingOrder sort}
10
+ * @returns {DataApiTypes.DataViewsRequest} {@link DataApiTypes.DataViewsRequest dataViewsRequest}
11
+ */
12
+ export function prepareDatapageQuery(stateFromTable: DataApiTypes.State, meta: DataApiTypes.Meta, isClient?: boolean | undefined, patchQueryFields?: DataApiTypes.Meta["patchQueryFields"], compositeKeys?: string[] | undefined, includeGroups?: boolean | undefined, optimizeQuery?: boolean | undefined): DataApiTypes.DataViewsRequest;
13
+ /**
14
+ * It prepares clientApi query used to interact with pega-ui-list-data-apis.
15
+ * @param {DataApiTypes.State} stateFromTable Current state object
16
+ * @param {DataApiTypes.Meta} meta Metadata structure
17
+ * @returns {DataApiTypes.ClientApiQuery} {@link DataApiTypes.ClientApiQuery clientApiQuery}
18
+ */
19
+ export function prepareClientApiQuery(stateFromTable: DataApiTypes.State, meta: DataApiTypes.Meta): DataApiTypes.ClientApiQuery;
20
+ export function getFieldsMap(fieldDefs: DataApiTypes.FieldDef[]): Map<string, DataApiTypes.FieldDef>;
21
+ export function getField(fieldDefs: DataApiTypes.FieldDef[], columnId: string): DataApiTypes.FieldDef | undefined;
22
+ export function addItemKeyInSelect({ fieldDefs, itemKey, select, compositeKeys }: {
23
+ fieldDefs: DataApiTypes.Meta["fieldDefs"];
24
+ itemKey: DataApiTypes.Meta["itemKey"];
25
+ select: DataApiTypes.DataViewsRequest["query"]["select"];
26
+ compositeKeys: string[];
27
+ }): DataApiTypes.DataViewsRequest["query"]["select"];
28
+ export function sliceData(newStartIndex: number, startIndex: number, endIndex: number, data: DataApiTypes.Data): DataApiTypes.Data;
29
+ export function getFieldListFromFilter(filterExpression: NonNullable<DataApiTypes.State["filterExpression"]>): {
30
+ columnId: string;
31
+ }[];
32
+ export function buildSelect(fieldDefs: DataApiTypes.FieldDef[], colId: string | undefined, patchQueryFields?: DataApiTypes.Meta["patchQueryFields"], compositeKeys?: string[] | undefined, stateFromTable?: {}, optimizeQuery?: boolean | undefined): Extract<DataApiTypes.DataViewsQuery["select"], import("../stateConversion/PrepareDatapageQuery.types").FieldFragment>;
33
+ export function buildSortInfo(sortingOrder?: DataApiTypes.State["sortingOrder"], groups?: import("pega-repeating-structures-core/lib/types/State.types").Group | undefined, fieldDefs?: import("pega-repeating-structures-core/lib/types/Meta.types").FieldDef[] | undefined, itemKey?: string | undefined, isClient?: boolean | undefined): {
34
+ sortBy: NonNullable<DataApiTypes.DataViewsQuery["sortBy"]>;
35
+ calculations: NonNullable<DataApiTypes.DataViewsQuery["calculations"]>;
36
+ };
37
+ export function calculatePageMetrics(sIndex: any, eIndex: any): {
38
+ pageNumber: number;
39
+ pageSize: number;
40
+ };
41
+ export function buildFilters(stateFromTable: DataApiTypes.State, meta: DataApiTypes.Meta, includeGroups?: boolean | undefined): NonNullable<DataApiTypes.DataViewsQuery["filter"]>;
42
+ export function buildClientFilters(stateFromTable: DataApiTypes.State, meta: DataApiTypes.Meta): ReturnType<typeof import("@pega/cosmos-react-condition-builder").splitConditionTree>;
43
+ export function buildAggregations(aggregationInfo: NonNullable<DataApiTypes.State["aggregationInfo"]>, fieldsMap: Map<string, DataApiTypes.FieldDef>): NonNullable<DataApiTypes.DataViewsQuery["aggregations"]>;
44
+ export function buildPaging(startIndex?: number | undefined, endIndex?: number | undefined, groupFilters?: DataApiTypes.State["groupFilters"]): DataApiTypes.DataViewsRequest["paging"];
45
+ import { DataApiTypes } from '../types';
46
+ //# sourceMappingURL=PrepareDatapageQuery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrepareDatapageQuery.d.ts","sourceRoot":"","sources":["../../stateConversion/PrepareDatapageQuery.js"],"names":[],"mappings":"AAwiBA;;;;;;;;;;GAUG;AACH,qDATW,YAAY,CAAC,KAAK,QAClB,YAAY,CAAC,IAAI,qDAEjB,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,mHAInC,YAAY,CAAC,gBAAgB,CAqEzC;AAED;;;;;GAKG;AACH,sDAJW,YAAY,CAAC,KAAK,QAClB,YAAY,CAAC,IAAI,GACf,YAAY,CAAC,cAAc,CA+CvC;AAtpBM,wCAHI,YAAY,CAAC,QAAQ,EAAE,GACrB,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAQ9C;AAQM,oCAJI,YAAY,CAAC,QAAQ,EAAE,YACvB,MAAM,GACJ,YAAY,CAAC,QAAQ,GAAG,SAAS,CAK7C;AAWM,kFANJ;IAA8C,SAAS,EAA/C,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;IACM,OAAO,EAA3C,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IAC4B,MAAM,EAA9D,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;IAChC,aAAa,EAA7B,MAAM,EAAE;CAChB,GAAU,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAmB5D;AAUM,yCANI,MAAM,cACN,MAAM,YACN,MAAM,QACN,YAAY,CAAC,IAAI,GACf,YAAY,CAAC,IAAI,CAkB7B;AAOM,yDAHI,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,GACjD;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,CAmBlC;AAYM,uCARI,YAAY,CAAC,QAAQ,EAAE,SACvB,MAAM,GAAG,SAAS,qBAClB,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,mGAInC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,+CAA+C,EAAE,aAAa,CAAC,CA+FjI;AAWM,6CAPI,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,8PAKhC;IAAE,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IAAC,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAA;CAAE,CA4DlJ;AAEM;;;EAmBN;AAyDM,6CALI,YAAY,CAAC,KAAK,QAClB,YAAY,CAAC,IAAI,wCAEf,WAAW,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAuF9D;AAQM,mDAJI,YAAY,CAAC,KAAK,QAClB,YAAY,CAAC,IAAI,GACf,UAAU,CAAC,cAAc,sCAAsC,EAAE,kBAAkB,CAAC,CA8BhG;AAQM,mDAJI,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,aAClD,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,GAChC,WAAW,CAAC,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAkBpE;AAyBM,2GAHI,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,GAChC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAcnD;6BA/hB4B,UAAU"}