@pega/lists-core-utils 9.0.0-build.2.9 → 9.0.0-build.3.1

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.
@@ -6,17 +6,18 @@
6
6
  * @param {DataApiTypes.Meta['patchQueryFields']} [patchQueryFields] A set of extra fields that should be appended in query
7
7
  * @param {string[]} [compositeKeys] A set of primary fields that should be appended in query
8
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}
9
+ * @param {boolean} [optimizeSelectFields] 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
10
  * @returns {DataApiTypes.DataViewsRequest} {@link DataApiTypes.DataViewsRequest dataViewsRequest}
11
11
  */
12
- export function prepareDatapageQuery(stateFromTable: DataApiTypes.State, meta: DataApiTypes.Meta, isClient?: boolean, patchQueryFields?: DataApiTypes.Meta["patchQueryFields"], compositeKeys?: string[], includeGroups?: boolean, optimizeQuery?: boolean): DataApiTypes.DataViewsRequest;
12
+ export function prepareDatapageQuery(stateFromTable: DataApiTypes.State, meta: DataApiTypes.Meta, isClient?: boolean, patchQueryFields?: DataApiTypes.Meta["patchQueryFields"], compositeKeys?: string[], includeGroups?: boolean, optimizeSelectFields?: boolean): DataApiTypes.DataViewsRequest;
13
13
  /**
14
14
  * It prepares clientApi query used to interact with pega-ui-list-data-apis.
15
15
  * @param {DataApiTypes.State} stateFromTable Current state object
16
16
  * @param {DataApiTypes.Meta} meta Metadata structure
17
+ * @param {boolean} [options.optimizeSelectFields] Whether to optimize select fields. Defaults to `meta?.isAnalyticsTable && meta?.isListViewOrListPage`.
17
18
  * @returns {DataApiTypes.ClientApiQuery} {@link DataApiTypes.ClientApiQuery clientApiQuery}
18
19
  */
19
- export function prepareClientApiQuery(stateFromTable: DataApiTypes.State, meta: DataApiTypes.Meta): DataApiTypes.ClientApiQuery;
20
+ export function prepareClientApiQuery(stateFromTable: DataApiTypes.State, meta: DataApiTypes.Meta, options?: {}): DataApiTypes.ClientApiQuery;
20
21
  export function getFieldsMap(fieldDefs: DataApiTypes.FieldDef[]): Map<string, DataApiTypes.FieldDef>;
21
22
  export function getField(fieldDefs: DataApiTypes.FieldDef[], columnId: string): DataApiTypes.FieldDef | undefined;
22
23
  export function addItemKeyInSelect({ fieldDefs, itemKey, select, compositeKeys }: {
@@ -29,7 +30,7 @@ export function sliceData(newStartIndex: number, startIndex: number, endIndex: n
29
30
  export function getFieldListFromFilter(filterExpression: NonNullable<DataApiTypes.State["filterExpression"]>): {
30
31
  columnId: string;
31
32
  }[];
32
- export function buildSelect(fieldDefs: DataApiTypes.FieldDef[], colId: string | undefined, patchQueryFields?: DataApiTypes.Meta["patchQueryFields"], compositeKeys?: string[], stateFromTable?: {}, optimizeQuery?: boolean): Extract<DataApiTypes.DataViewsQuery["select"], import("../stateConversion/PrepareDatapageQuery.types").FieldFragment>;
33
+ export function buildSelect(fieldDefs: DataApiTypes.FieldDef[], colId: string | undefined, patchQueryFields?: DataApiTypes.Meta["patchQueryFields"], compositeKeys?: string[], stateFromTable?: {}, optimizeSelectFields?: boolean): Extract<DataApiTypes.DataViewsQuery["select"], import("../stateConversion/PrepareDatapageQuery.types").FieldFragment>;
33
34
  export function buildSortInfo(sortingOrder?: DataApiTypes.State["sortingOrder"], groups?: DataApiTypes.Group, fieldDefs?: DataApiTypes.FieldDef[], itemKey?: DataApiTypes.Meta["itemKey"], isClient?: boolean): {
34
35
  sortBy: NonNullable<DataApiTypes.DataViewsQuery["sortBy"]>;
35
36
  calculations: NonNullable<DataApiTypes.DataViewsQuery["calculations"]>;
@@ -1 +1 @@
1
- {"version":3,"file":"PrepareDatapageQuery.d.ts","sourceRoot":"","sources":["../../stateConversion/PrepareDatapageQuery.js"],"names":[],"mappings":"AA+iBA;;;;;;;;;;GAUG;AACH,qDATW,YAAY,CAAC,KAAK,QAClB,YAAY,CAAC,IAAI,aACjB,OAAO,qBACP,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,kBACrC,MAAM,EAAE,kBACR,OAAO,kBACP,OAAO,GACL,YAAY,CAAC,gBAAgB,CAqEzC;AAED;;;;;GAKG;AACH,sDAJW,YAAY,CAAC,KAAK,QAClB,YAAY,CAAC,IAAI,GACf,YAAY,CAAC,cAAc,CA+CvC;AA7pBM,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,kBACrC,MAAM,EAAE,uCAER,OAAO,GACL,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,WAClC,YAAY,CAAC,KAAK,cAClB,YAAY,CAAC,QAAQ,EAAE,YACvB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,aAC5B,OAAO,GACL;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;AAgEM,6CALI,YAAY,CAAC,KAAK,QAClB,YAAY,CAAC,IAAI,kBACjB,OAAO,GACL,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,yCALI,MAAM,aACN,MAAM,iBACN,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,GAChC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAcnD;6BAtiB4B,UAAU"}
1
+ {"version":3,"file":"PrepareDatapageQuery.d.ts","sourceRoot":"","sources":["../../stateConversion/PrepareDatapageQuery.js"],"names":[],"mappings":"AAujBA;;;;;;;;;;GAUG;AACH,qDATW,YAAY,CAAC,KAAK,QAClB,YAAY,CAAC,IAAI,aACjB,OAAO,qBACP,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,kBACrC,MAAM,EAAE,kBACR,OAAO,yBACP,OAAO,GACL,YAAY,CAAC,gBAAgB,CAqEzC;AAED;;;;;;GAMG;AACH,sDALW,YAAY,CAAC,KAAK,QAClB,YAAY,CAAC,IAAI,iBAEf,YAAY,CAAC,cAAc,CAkDvC;AAzqBM,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;AAyDM,uCATI,YAAY,CAAC,QAAQ,EAAE,SACvB,MAAM,GAAG,SAAS,qBAClB,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,kBACrC,MAAM,EAAE,8CAER,OAAO,GACL,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,+CAA+C,EAAE,aAAa,CAAC,CA2DjI;AAWM,6CAPI,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,WAClC,YAAY,CAAC,KAAK,cAClB,YAAY,CAAC,QAAQ,EAAE,YACvB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,aAC5B,OAAO,GACL;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;AAgEM,6CALI,YAAY,CAAC,KAAK,QAClB,YAAY,CAAC,IAAI,kBACjB,OAAO,GACL,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,yCALI,MAAM,aACN,MAAM,iBACN,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,GAChC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAcnD;6BA9iB4B,UAAU"}
@@ -96,58 +96,60 @@ export const getFieldListFromFilter = filterExpression => {
96
96
  });
97
97
  return filterReferences;
98
98
  };
99
+ /**
100
+ * Checks if a field is visible by determining if it is not part of the hidden columns in the given state.
101
+ *
102
+ * @param {string} fieldName - The name of the field to check.
103
+ * @param {Object} stateFromTable - The state object containing the `hiddenColumns` array.
104
+ * @param {string[]} [stateFromTable.hiddenColumns] - An array of column names that are hidden.
105
+ * @returns {boolean} - Returns `true` if the field is visible (not hidden), otherwise `false`.
106
+ */
107
+ const isFieldVisible = (fieldName, stateFromTable) => {
108
+ return !stateFromTable?.hiddenColumns?.includes(fieldName);
109
+ };
110
+ /**
111
+ * Extracts referred fields from the table state, including grouped columns, custom columns, and conditional style formats.
112
+ * @param {Object} stateFromTable - The state object containing table configuration.
113
+ * @returns {string[]} - An array of referred field names (like groups , condition style and custom fields).
114
+ */
115
+ const getReferredFields = stateFromTable => {
116
+ let groupedColumns = [];
117
+ let customColumnsSource = [];
118
+ let conditionStyleFormatColumns = [];
119
+ if (stateFromTable?.groups) {
120
+ groupedColumns = stateFromTable.groups.map(group => group.columnId);
121
+ }
122
+ if (stateFromTable?.customFields) {
123
+ customColumnsSource = stateFromTable.customFields.reduce((sources, customField) => {
124
+ return sources.concat(customField.expression.filter(f => typeof f === 'string'));
125
+ }, []);
126
+ }
127
+ if (stateFromTable?.conditionalStyleFormats) {
128
+ conditionStyleFormatColumns = stateFromTable.conditionalStyleFormats
129
+ .filter(styleFormat => isFieldVisible(styleFormat.fieldName, stateFromTable))
130
+ .flatMap(styleFormat => getFieldListFromFilter(styleFormat.condition).map(condition => condition.columnId));
131
+ }
132
+ return [...new Set([...groupedColumns, ...customColumnsSource, ...conditionStyleFormatColumns])];
133
+ };
99
134
  /**
100
135
  * It prepares {@link DataApiTypes.DataViewsQuery.select select} clause for a query, by deriving fields from state, fieldDefs, uniqueColId, patchQueryFields and compositeKeys
101
136
  * @param {DataApiTypes.FieldDef[]} fieldDefs Set of fields which can be part of select clause. This will not be considered if {@link colId} is passed.
102
137
  * @param {string | undefined} colId A unique field which should be part of select clause. If this is provided then other fields from {@link fieldDefs} will not be considered.
103
138
  * @param {DataApiTypes.Meta['patchQueryFields']} [patchQueryFields] A set of extra fields which should be included in select clause. This will not be considered if {@link colId} is passed.
104
139
  * @param {string[]} [compositeKeys] A set of primary keys which should be included in select clause. This will always be included if passed.
105
- * @param {DataApiTypes.State} [state] This is required if {@link optimizeQuery} is passed as true. It is used to collect the fieldDefs that are part of {@link DataApiTypes.State.groups groups}, {@link DataApiTypes.State.filterExpression filters}, {@link DataApiTypes.State.sortingOrder sort} and are not {@link DataApiTypes.State.hiddenColumns hidden}
106
- * @param {boolean} [optimizeQuery] If set to true, buildSelect will include a subset of {@link fieldDefs} which are part of {@link DataApiTypes.State.groups groups}, {@link DataApiTypes.State.filterExpression filters}, {@link DataApiTypes.State.sortingOrder sort} and are not {@link DataApiTypes.State.hiddenColumns hidden}
140
+ * @param {DataApiTypes.State} [state] This is required if {@link optimizeSelectFields} is passed as true. It is used to collect the fieldDefs that are part of {@link DataApiTypes.State.groups groups}, {@link DataApiTypes.State.filterExpression filters}, {@link DataApiTypes.State.sortingOrder sort} and are not {@link DataApiTypes.State.hiddenColumns hidden}
141
+ * @param {boolean} [optimizeSelectFields] If set to true, buildSelect will include a subset of {@link fieldDefs} which are part of {@link DataApiTypes.State.groups groups} and are not {@link DataApiTypes.State.hiddenColumns hidden}
107
142
  * @returns {Extract<DataApiTypes.DataViewsQuery['select'], import('../stateConversion/PrepareDatapageQuery.types').FieldFragment>} a select clause of type {@link FieldFragment}
108
143
  */
109
- export const buildSelect = (fieldDefs, colId, patchQueryFields = [], compositeKeys = [], stateFromTable = {}, optimizeQuery = false) => {
110
- const listFields = [];
111
- let groupedColumns = [];
112
- let sortColumns = [];
113
- let filterColumns = [];
114
- let customColumnsSource = [];
115
- let conditionStyleFormatColumns = [];
116
- if (optimizeQuery) {
117
- if (stateFromTable?.groups) {
118
- groupedColumns = stateFromTable.groups.map(group => group.columnId);
119
- }
120
- if (stateFromTable?.sortingOrder) {
121
- sortColumns = stateFromTable.sortingOrder.map(sort => sort.columnId);
122
- }
123
- if (stateFromTable?.filterExpression) {
124
- filterColumns = getFieldListFromFilter(stateFromTable.filterExpression).map(filter => filter.columnId);
125
- }
126
- if (stateFromTable?.customFields) {
127
- customColumnsSource = stateFromTable.customFields.reduce((sources, customField) => {
128
- return sources.concat(customField.expression.filter(f => typeof f === 'string'));
129
- }, []);
130
- }
131
- if (stateFromTable?.conditionalStyleFormats) {
132
- // Visible columns referencing any hidden column in conditionalStyleFormat condition.
133
- conditionStyleFormatColumns = stateFromTable.conditionalStyleFormats
134
- .filter(styleFormat => !stateFromTable?.hiddenColumns?.includes(styleFormat.fieldName))
135
- .flatMap(styleFormat => getFieldListFromFilter(styleFormat.condition).map(condition => condition.columnId));
136
- }
137
- // if table has grouping, sorting, filtering and customized columns and those columns are part of hidden columns
144
+ export const buildSelect = (fieldDefs, colId, patchQueryFields = [], compositeKeys = [], stateFromTable = {}, optimizeSelectFields = false) => {
145
+ const selectQueryFields = [];
146
+ if (optimizeSelectFields) {
147
+ // if table has grouping and customized columns and those columns are part of hidden columns
138
148
  // then include those columns in the fieldDef's
139
- const columns = [
140
- ...new Set([
141
- ...groupedColumns,
142
- ...sortColumns,
143
- ...filterColumns,
144
- ...customColumnsSource,
145
- ...conditionStyleFormatColumns
146
- ])
147
- ];
149
+ const referredFields = getReferredFields(stateFromTable);
148
150
  const filteredFieldDefs = [];
149
151
  fieldDefs.forEach(field => {
150
- if (!stateFromTable?.hiddenColumns?.includes(field.name) || columns.includes(field.name)) {
152
+ if (isFieldVisible(field.name, stateFromTable) || referredFields.includes(field.name)) {
151
153
  filteredFieldDefs.push(field);
152
154
  }
153
155
  });
@@ -155,35 +157,35 @@ export const buildSelect = (fieldDefs, colId, patchQueryFields = [], compositeKe
155
157
  }
156
158
  if (colId) {
157
159
  const field = getField(fieldDefs, colId);
158
- listFields.push({
160
+ selectQueryFields.push({
159
161
  field: field.name
160
162
  });
161
163
  }
162
164
  else {
163
165
  // NOTE: If we ever decide to not set up all the `fieldDefs` on select, ensure that the fields corresponding to `state.groups` are set up. Needed in Client-mode grouping/pagination.
164
166
  fieldDefs.forEach(field => {
165
- if (!listFields.find(f => f.field === field.name)) {
166
- listFields.push({
167
+ if (!selectQueryFields.find(f => f.field === field.name)) {
168
+ selectQueryFields.push({
167
169
  field: field.name
168
170
  });
169
171
  }
170
172
  });
171
173
  patchQueryFields.forEach(k => {
172
- if (!listFields.find(f => f.field === k)) {
173
- listFields.push({
174
+ if (!selectQueryFields.find(f => f.field === k)) {
175
+ selectQueryFields.push({
174
176
  field: k
175
177
  });
176
178
  }
177
179
  });
178
180
  }
179
181
  compositeKeys.forEach(k => {
180
- if (!listFields.find(f => f.field === k)) {
181
- listFields.push({
182
+ if (!selectQueryFields.find(f => f.field === k)) {
183
+ selectQueryFields.push({
182
184
  field: k
183
185
  });
184
186
  }
185
187
  });
186
- return listFields;
188
+ return selectQueryFields;
187
189
  };
188
190
  /**
189
191
  * It prepares {@link DataApiTypes.DataViewsQuery.sortBy sortBy} clause and {@link DataApiTypes.DataViewsQuery.calculations calculations} clause(for date type fields) for a query.
@@ -488,15 +490,15 @@ export const buildPaging = (startIndex, endIndex, groupFilters) => {
488
490
  * @param {DataApiTypes.Meta['patchQueryFields']} [patchQueryFields] A set of extra fields that should be appended in query
489
491
  * @param {string[]} [compositeKeys] A set of primary fields that should be appended in query
490
492
  * @param {boolean} [includeGroups] Groups should be included or not in the query
491
- * @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}
493
+ * @param {boolean} [optimizeSelectFields] 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}
492
494
  * @returns {DataApiTypes.DataViewsRequest} {@link DataApiTypes.DataViewsRequest dataViewsRequest}
493
495
  */
494
- export function prepareDatapageQuery(stateFromTable, meta, isClient = false, patchQueryFields = [], compositeKeys = [], includeGroups = true, optimizeQuery = false) {
496
+ export function prepareDatapageQuery(stateFromTable, meta, isClient = false, patchQueryFields = [], compositeKeys = [], includeGroups = true, optimizeSelectFields = false) {
495
497
  const { paginationOptions: { rootVirtualiser: { startIndex, endIndex } }, sortingOrder, groups, groupFilters } = stateFromTable;
496
498
  const { fieldDefs, itemKey } = meta;
497
499
  const paging = buildPaging(startIndex, endIndex, groupFilters);
498
500
  /* In case of WorkLink patch query with pyID and in association patch pzInsKey, pyID */
499
- let select = buildSelect(fieldDefs, undefined, patchQueryFields, compositeKeys, stateFromTable, optimizeQuery);
501
+ let select = buildSelect(fieldDefs, undefined, patchQueryFields, compositeKeys, stateFromTable, optimizeSelectFields);
500
502
  select = addItemKeyInSelect({ fieldDefs, itemKey, select, compositeKeys });
501
503
  const { sortBy, calculations: sortCalculations } = buildSortInfo(sortingOrder, groups, fieldDefs, itemKey, isClient);
502
504
  let query;
@@ -525,11 +527,13 @@ export function prepareDatapageQuery(stateFromTable, meta, isClient = false, pat
525
527
  * It prepares clientApi query used to interact with pega-ui-list-data-apis.
526
528
  * @param {DataApiTypes.State} stateFromTable Current state object
527
529
  * @param {DataApiTypes.Meta} meta Metadata structure
530
+ * @param {boolean} [options.optimizeSelectFields] Whether to optimize select fields. Defaults to `meta?.isAnalyticsTable && meta?.isListViewOrListPage`.
528
531
  * @returns {DataApiTypes.ClientApiQuery} {@link DataApiTypes.ClientApiQuery clientApiQuery}
529
532
  */
530
- export function prepareClientApiQuery(stateFromTable, meta) {
533
+ export function prepareClientApiQuery(stateFromTable, meta, options = {}) {
531
534
  const { groupFilters, groups, aggregationInfo } = stateFromTable;
532
- const queryState = prepareDatapageQuery(stateFromTable, meta, true, [], [], true, meta?.isAnalyticsTable && meta?.isListViewOrListPage);
535
+ const optimizeSelectFields = options.optimizeSelectFields ?? (meta?.isAnalyticsTable && meta?.isListViewOrListPage);
536
+ const queryState = prepareDatapageQuery(stateFromTable, meta, true, [], [], true, optimizeSelectFields);
533
537
  if (groups) {
534
538
  const groupBy = [];
535
539
  groups.forEach(group => {
@@ -1 +1 @@
1
- {"version":3,"file":"PrepareDatapageQuery.js","sourceRoot":"","sources":["../../stateConversion/PrepareDatapageQuery.js"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,sCAAsC,CAAC;AAE9C,kEAAkE;AAClE,0CAA0C;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EACL,uCAAuC,EACvC,eAAe,EACf,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAEjB;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC,EAAE;IACtC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;IAC5B,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAC1B,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE;IAC9C,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1C,OAAO,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE;IAClF,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAClD,IACE,OAAO;QACP,CAAC,YAAY;QACb,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACrB,CAAC,aAAa,EAAE,MAAM;QACtB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,OAAO,CAAC,EAC1C,CAAC;QACD,OAAO;YACL,GAAG,MAAM;YACT;gBACE,KAAK,EAAE,OAAO;aACf;SACF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;IACrE,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,aAAa,IAAI,QAAQ,EAAE,CAAC;YACjC,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;gBAChC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxB,IAAI,GAAG,EAAE,CAAC;oBACR,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;YACD,KAAK,IAAI,CAAC,CAAC;YACX,aAAa,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC,EAAE;IACvD,MAAM,WAAW,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAExD,MAAM,gBAAgB,GAAG,EAAE,CAAC;IAE5B,8BAA8B;IAC9B,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACvB,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;YACpB,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;YACpB,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,gBAAgB,CAAC;AAC1B,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,SAAS,EACT,KAAK,EACL,gBAAgB,GAAG,EAAE,EACrB,aAAa,GAAG,EAAE,EAClB,cAAc,GAAG,EAAE,EACnB,aAAa,GAAG,KAAK,EACrB,EAAE;IACF,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,mBAAmB,GAAG,EAAE,CAAC;IAC7B,IAAI,2BAA2B,GAAG,EAAE,CAAC;IACrC,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,cAAc,EAAE,MAAM,EAAE,CAAC;YAC3B,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,cAAc,EAAE,YAAY,EAAE,CAAC;YACjC,WAAW,GAAG,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,cAAc,EAAE,gBAAgB,EAAE,CAAC;YACrC,aAAa,GAAG,sBAAsB,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,GAAG,CACzE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAC1B,CAAC;QACJ,CAAC;QACD,IAAI,cAAc,EAAE,YAAY,EAAE,CAAC;YACjC,mBAAmB,GAAG,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE;gBAChF,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;YACnF,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,CAAC;QACD,IAAI,cAAc,EAAE,uBAAuB,EAAE,CAAC;YAC5C,qFAAqF;YACrF,2BAA2B,GAAG,cAAc,CAAC,uBAAuB;iBACjE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE,aAAa,EAAE,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;iBACtF,OAAO,CAAC,WAAW,CAAC,EAAE,CACrB,sBAAsB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CACnF,CAAC;QACN,CAAC;QACD,gHAAgH;QAChH,+CAA+C;QAC/C,MAAM,OAAO,GAAG;YACd,GAAG,IAAI,GAAG,CAAC;gBACT,GAAG,cAAc;gBACjB,GAAG,WAAW;gBACd,GAAG,aAAa;gBAChB,GAAG,mBAAmB;gBACtB,GAAG,2BAA2B;aAC/B,CAAC;SACH,CAAC;QACF,MAAM,iBAAiB,GAAG,EAAE,CAAC;QAC7B,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzF,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,SAAS,GAAG,iBAAiB,CAAC;IAChC,CAAC;IAED,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACzC,UAAU,CAAC,IAAI,CAAC;YACd,KAAK,EAAE,KAAK,CAAC,IAAI;SAClB,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,qLAAqL;QACrL,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,UAAU,CAAC,IAAI,CAAC;oBACd,KAAK,EAAE,KAAK,CAAC,IAAI;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACzC,UAAU,CAAC,IAAI,CAAC;oBACd,KAAK,EAAE,CAAC;iBACT,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACzC,UAAU,CAAC,IAAI,CAAC;gBACd,KAAK,EAAE,CAAC;aACT,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE;IAClF,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;IAC5B,IAAI,MAAM,EAAE,CAAC;QACX,wDAAwD;QACxD,qDAAqD;QACrD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACnB,iDAAiD;YACjD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAE1C,uDAAuD;YACvD,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,SAAS,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;gBAC9E,YAAY,CAAC,MAAM,CAAC,GAAG;oBACrB,QAAQ,EAAE,GAAG,CAAC,YAAY;oBAC1B,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;iBACpC,CAAC;gBACF,IAAI,GAAG,CAAC,YAAY,KAAK,cAAc,EAAE,CAAC;oBACxC,4EAA4E;oBAC5E,8BAA8B;oBAC9B,YAAY,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;gBACvD,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC;oBACV,WAAW,EAAE,MAAM;oBACnB,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE;iBAC9B,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,KAAK,CAAC,IAAI;oBACjB,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE;iBAC9B,CAAC,CAAC;gBACH,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB;IACtB,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACzB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAC1C,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,KAAK,CAAC,IAAI;oBACjB,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE;iBAC9B,CAAC,CAAC;gBACH,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1F,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACnG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;IACrD,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;IAC5B,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,IAAI,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC;QAC5B,IAAI,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC;QAE5B,OAAO,UAAU,GAAG,UAAU,EAAE,CAAC;YAC/B,CAAC,IAAI,CAAC,CAAC;YACP,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC;YACxB,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC;QAC1B,CAAC;QAED,QAAQ,GAAG,CAAC,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IACrD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC,CAAC;AACF,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE;IAC/C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IACpC,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1B,SAAS,EAAE;YACT,UAAU,EAAE,QAAQ;YACpB,GAAG,EAAE,EAAE,KAAK,EAAE;YACd,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;SACtB;KACF,CAAC,CAAC,CAAC;AACN,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,4BAA4B,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE;IACnF,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEvE,qGAAqG;IACrG,0DAA0D;IAC1D,yHAAyH;IACzH,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAChE,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED,+CAA+C;IAC/C,IAAI,SAAS,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC;QAChC,MAAM,aAAa,GAAG,GAAG,YAAY,kBAAkB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,iDAAiD;QACtH,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QACzC,MAAM,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC;QAEvC,wCAAwC;QACxC,YAAY,CAAC,aAAa,CAAC,GAAG;YAC5B,QAAQ,EAAE,YAAY;YACtB,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;SACtC,CAAC;QACF,IAAI,YAAY,KAAK,cAAc,EAAE,CAAC;YACpC,4EAA4E;YAC5E,8BAA8B;YAC9B,YAAY,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,2CAA2C;QAC3C,SAAS,CAAC,GAAG,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;QAC/C,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrD,OAAO,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;IACpC,CAAC;IAED,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,GAAG,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/F,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3C,SAAS,CAAC,GAAG,GAAG;YACd,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;SAC1J,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,aAAa,GAAG,KAAK,EAAE,EAAE;IAC1E,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC;IAC1E,MAAM,WAAW,GAAG,MAAM,EAAE,KAAK,CAAC;IAClC,MAAM,EACJ,SAAS,EACT,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAC5C,GAAG,IAAI,CAAC;IACT,IAAI,YAAY,GAAG,gBAAgB,CAAC;IACpC,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IACjC,IAAI,uBAAuB,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,CAAC;QAC7D,YAAY,GAAG,uCAAuC,CACpD,eAAe,EACf,YAAY,EACZ,cAAc,CACf,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,GAAG,yBAAyB,CAAC,YAAY,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,wBAAwB;IACxB,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEnD,IAAI,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,YAAY,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,aAAa,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7D,IAAI,iBAAiB,GAAG,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1C,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACzB,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;YACxB,MAAM,eAAe,GAAG,EAAE,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE;gBACnD,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACpE,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAEtC,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC1C,SAAS,CAAC,UAAU,GAAG,MAAM,CAAC;gBAChC,CAAC;qBAAM,CAAC;oBACN,SAAS,CAAC,UAAU,GAAG,MAAM,CAAC;oBAC9B,SAAS,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;gBAC1C,CAAC;gBAED,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YACH,iBAAiB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,IAAI,iBAAiB,CAAC;QACtB,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,iBAAiB,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACxD,iBAAiB,GAAG,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,iBAAiB,GAAG,EAAE,EAAE,EAAE,iBAAiB,EAAE,CAAC;QAChD,CAAC;QAED,IAAI,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,YAAY,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE,iBAAiB,CAAC,EAAE,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,iBAAiB,CAAC;QACnC,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,MAAM,YAAY,GAAG,EAAE,CAAC,CAAC,iDAAiD;IAC1E,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,gDAAgD;QACzG,YAAY,GAAG,kBAAkB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE;YACnE,4BAA4B,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,UAAU,EAAE,YAAY;QACxB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,gEAAgE;KAC/I,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,EAAE;IACzD,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC;IACpD,MAAM,WAAW,GAAG,MAAM,EAAE,KAAK,CAAC;IAClC,MAAM,EACJ,aAAa,EAAE,EAAE,QAAQ,EAAE,EAC5B,GAAG,IAAI,CAAC;IAET,wBAAwB;IACxB,IAAI,YAAY,GAAG,gBAAgB,CAAC;IACpC,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IACjC,IAAI,uBAAuB,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,CAAC;QAC7D,YAAY,GAAG,uCAAuC,CACpD,eAAe,EACf,YAAY,EACZ,cAAc,CACf,CAAC;IACJ,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEnD,IAAI,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,YAAY,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AACxE,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,eAAe,EAAE,SAAS,EAAE,EAAE;IAC9D,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QAChC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACnC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEtC,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAE3C,qBAAqB;QACrB,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,eAAe,EAAE,CAAC;QAC5C,YAAY,CAAC,GAAG,CAAC,GAAG;YAClB,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,eAAe;SAChB,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAEF,+DAA+D;AAC/D,SAAS,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM;IAC3D,IAAI,UAAU,GAAG,MAAM,CAAC;IACxB,IAAI,QAAQ,GAAG,MAAM,CAAC;IACtB,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvC,QAAQ,GAAG,CAAC,CAAC;QACb,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC5B,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,yHAAyH;QACzH,QAAQ,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE;IAChE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,uBAAuB,CAAC,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACrF,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtE,qFAAqF;IACrF,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC1E,OAAO;QACL,UAAU;QACV,QAAQ;QACR,aAAa;QACb,UAAU,EAAE,MAAM;QAClB,QAAQ,EAAE,MAAM;KACjB,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAClC,cAAc,EACd,IAAI,EACJ,QAAQ,GAAG,KAAK,EAChB,gBAAgB,GAAG,EAAE,EACrB,aAAa,GAAG,EAAE,EAClB,aAAa,GAAG,IAAI,EACpB,aAAa,GAAG,KAAK;IAErB,MAAM,EACJ,iBAAiB,EAAE,EACjB,eAAe,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAC1C,EACD,YAAY,EACZ,MAAM,EACN,YAAY,EACb,GAAG,cAAc,CAAC;IAEnB,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACpC,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAE/D,uFAAuF;IACvF,IAAI,MAAM,GAAG,WAAW,CACtB,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,aAAa,CACd,CAAC;IAEF,MAAM,GAAG,kBAAkB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAE3E,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,aAAa,CAC9D,YAAY,EACZ,MAAM,EACN,SAAS,EACT,OAAO,EACP,QAAQ,CACT,CAAC;IAEF,IAAI,KAAK,CAAC;IACV,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,GAAG,EAAE,CAAC;QACX,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACtB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACxB,CAAC;QACD,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,GAAG,YAAY,CACnE,cAAc,EACd,IAAI,EACJ,aAAa,CACd,CAAC;QACF,IAAI,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,KAAK,CAAC,MAAM,GAAG;gBACb,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,gBAAgB,EAAE,UAAU,CAAC,UAAU;aACxC,CAAC;QACJ,CAAC;QACD,IAAI,gBAAgB,IAAI,kBAAkB,EAAE,CAAC;YAC3C,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,gBAAgB,EAAE,GAAG,kBAAkB,EAAE,CAAC;QACtE,CAAC;QACD,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,sBAAsB;IACtB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,cAAc,EAAE,IAAI;IACxD,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,cAAc,CAAC;IAEjE,MAAM,UAAU,GAAG,oBAAoB,CACrC,cAAc,EACd,IAAI,EACJ,IAAI,EACJ,EAAE,EACF,EAAE,EACF,IAAI,EACJ,IAAI,EAAE,gBAAgB,IAAI,IAAI,EAAE,oBAAoB,CACrD,CAAC;IACF,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrB,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,KAAK,CAAC,QAAQ;gBACrB,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,QAAQ,EAAE,KAAK,CAAC,KAAK;aACtB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACrC,CAAC;IACD,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/E,gIAAgI;QAChI,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,kBAAkB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC5D,IAAI,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG;gBACxB,KAAK,EAAE,UAAU,CAAC,KAAK;gBACvB,gBAAgB,EAAE,UAAU,CAAC,UAAU;aACxC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,UAAU,CAAC,KAAK,CAAC,YAAY,GAAG,YAAY,CAAC;IAC/C,CAAC;IAED,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,UAAU,CAAC,KAAK,CAAC,YAAY,GAAG,iBAAiB,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["import {\n splitConditionTree,\n transformComplexCondition\n} 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';\nimport { getFormattedFields } from '../dataApi/utils';\n\nimport {\n appendExternalFiltersToFilterExpression,\n getGroupFromKey,\n isExternalFiltersExists\n} from './utils';\n\n/**\n * This method builds a {@link DataApiTypes.FieldDef fields} Map which will be used to get the field based on {@link DataApiTypes.FieldDef.id fieldDef id}\n * @param {DataApiTypes.FieldDef[]} fieldDefs\n * @returns {Map<string, DataApiTypes.FieldDef>} fields map - key is {@link DataApiTypes.FieldDef.id fieldDef id} and value is {@link DataApiTypes.FieldDef field} object\n */\nexport const getFieldsMap = fieldDefs => {\n const fieldsMap = new Map();\n fieldDefs.forEach(element => {\n fieldsMap.set(element.id, element);\n });\n return fieldsMap;\n};\n\n/**\n * This method used to fetch the FieldDef for a given {@link columnId} from given {@link fieldDefs} array\n * @param {DataApiTypes.FieldDef[]} fieldDefs An array of {@link DataApiTypes.FieldDef fieldDefs} from which a fieldDef need to be filtered.\n * @param {string} columnId A unique {@link DataApiTypes.FieldDef.id fieldId}\n * @returns {DataApiTypes.FieldDef | undefined} FieldDef for a given columnId\n */\nexport const getField = (fieldDefs, columnId) => {\n const fieldsMap = getFieldsMap(fieldDefs);\n return fieldsMap.get(columnId);\n};\n\n/**\n * It adds {@link DataApiTypes.Meta.itemKey itemKey} in the select clause if not present already.The compositeKeys array should be empty.\n * @param {object} param An object which contains {@link DataApiTypes.Meta.fieldDefs fieldDefs} {@link DataApiTypes.Meta.itemKey itemKey}, {@link DataApiTypes.DataViewsQuery.select select} clause, compositeKeys.\n * @param {DataApiTypes.Meta['fieldDefs']} param.fieldDefs\n * @param {DataApiTypes.Meta['itemKey']} param.itemKey\n * @param {DataApiTypes.DataViewsRequest['query']['select']} param.select\n * @param {string[]} param.compositeKeys\n * @returns {DataApiTypes.DataViewsRequest['query']['select']} Updated {@link DataApiTypes.DataViewsQuery.select select} clause\n */\nexport const addItemKeyInSelect = ({ fieldDefs, itemKey, select, compositeKeys }) => {\n const elementFound = getField(fieldDefs, itemKey);\n if (\n itemKey &&\n !elementFound &&\n Array.isArray(select) &&\n !compositeKeys?.length &&\n !select.find(sel => sel.field === itemKey)\n ) {\n return [\n ...select,\n {\n field: itemKey\n }\n ];\n }\n return select;\n};\n\n/**\n * Returns the correct set of data from bigger set based on the indexes\n * @param {number} newStartIndex newStartIndex\n * @param {number} startIndex existing startIndex\n * @param {number} endIndex endIndex\n * @param {DataApiTypes.Data} data full data\n * @returns {DataApiTypes.Data} sliced data\n */\nexport const sliceData = (newStartIndex, startIndex, endIndex, data) => {\n const slicedData = [];\n if (data && data.length > 0) {\n let index = 0;\n while (newStartIndex <= endIndex) {\n if (newStartIndex >= startIndex) {\n const obj = data[index];\n if (obj) {\n slicedData.push(obj);\n }\n }\n index += 1;\n newStartIndex += 1;\n }\n }\n return slicedData;\n};\n\n/**\n * It returns all the fields that are used in the given {@link filterExpression}\n * @param {NonNullable<DataApiTypes.State['filterExpression']>} filterExpression\n * @returns {{ columnId: string }[]} Fields which are part of {@link filterExpression}\n */\nexport const getFieldListFromFilter = filterExpression => {\n const splitFilter = splitConditionTree(filterExpression);\n const arrFilter = Object.values(splitFilter.conditions);\n\n const filterReferences = [];\n\n // Add in any field references\n arrFilter.forEach(item => {\n if (item.lhs?.field) {\n filterReferences.push({ columnId: item.lhs.field });\n }\n if (item.rhs?.field) {\n filterReferences.push({ columnId: item.rhs.field });\n }\n });\n\n return filterReferences;\n};\n\n/**\n * It prepares {@link DataApiTypes.DataViewsQuery.select select} clause for a query, by deriving fields from state, fieldDefs, uniqueColId, patchQueryFields and compositeKeys\n * @param {DataApiTypes.FieldDef[]} fieldDefs Set of fields which can be part of select clause. This will not be considered if {@link colId} is passed.\n * @param {string | undefined} colId A unique field which should be part of select clause. If this is provided then other fields from {@link fieldDefs} will not be considered.\n * @param {DataApiTypes.Meta['patchQueryFields']} [patchQueryFields] A set of extra fields which should be included in select clause. This will not be considered if {@link colId} is passed.\n * @param {string[]} [compositeKeys] A set of primary keys which should be included in select clause. This will always be included if passed.\n * @param {DataApiTypes.State} [state] This is required if {@link optimizeQuery} is passed as true. It is used to collect the fieldDefs that are part of {@link DataApiTypes.State.groups groups}, {@link DataApiTypes.State.filterExpression filters}, {@link DataApiTypes.State.sortingOrder sort} and are not {@link DataApiTypes.State.hiddenColumns hidden}\n * @param {boolean} [optimizeQuery] If set to true, buildSelect will include a subset of {@link fieldDefs} which are part of {@link DataApiTypes.State.groups groups}, {@link DataApiTypes.State.filterExpression filters}, {@link DataApiTypes.State.sortingOrder sort} and are not {@link DataApiTypes.State.hiddenColumns hidden}\n * @returns {Extract<DataApiTypes.DataViewsQuery['select'], import('../stateConversion/PrepareDatapageQuery.types').FieldFragment>} a select clause of type {@link FieldFragment}\n */\nexport const buildSelect = (\n fieldDefs,\n colId,\n patchQueryFields = [],\n compositeKeys = [],\n stateFromTable = {},\n optimizeQuery = false\n) => {\n const listFields = [];\n let groupedColumns = [];\n let sortColumns = [];\n let filterColumns = [];\n let customColumnsSource = [];\n let conditionStyleFormatColumns = [];\n if (optimizeQuery) {\n if (stateFromTable?.groups) {\n groupedColumns = stateFromTable.groups.map(group => group.columnId);\n }\n if (stateFromTable?.sortingOrder) {\n sortColumns = stateFromTable.sortingOrder.map(sort => sort.columnId);\n }\n if (stateFromTable?.filterExpression) {\n filterColumns = getFieldListFromFilter(stateFromTable.filterExpression).map(\n filter => filter.columnId\n );\n }\n if (stateFromTable?.customFields) {\n customColumnsSource = stateFromTable.customFields.reduce((sources, customField) => {\n return sources.concat(customField.expression.filter(f => typeof f === 'string'));\n }, []);\n }\n if (stateFromTable?.conditionalStyleFormats) {\n // Visible columns referencing any hidden column in conditionalStyleFormat condition.\n conditionStyleFormatColumns = stateFromTable.conditionalStyleFormats\n .filter(styleFormat => !stateFromTable?.hiddenColumns?.includes(styleFormat.fieldName))\n .flatMap(styleFormat =>\n getFieldListFromFilter(styleFormat.condition).map(condition => condition.columnId)\n );\n }\n // if table has grouping, sorting, filtering and customized columns and those columns are part of hidden columns\n // then include those columns in the fieldDef's\n const columns = [\n ...new Set([\n ...groupedColumns,\n ...sortColumns,\n ...filterColumns,\n ...customColumnsSource,\n ...conditionStyleFormatColumns\n ])\n ];\n const filteredFieldDefs = [];\n fieldDefs.forEach(field => {\n if (!stateFromTable?.hiddenColumns?.includes(field.name) || columns.includes(field.name)) {\n filteredFieldDefs.push(field);\n }\n });\n\n fieldDefs = filteredFieldDefs;\n }\n\n if (colId) {\n const field = getField(fieldDefs, colId);\n listFields.push({\n field: field.name\n });\n } else {\n // NOTE: If we ever decide to not set up all the `fieldDefs` on select, ensure that the fields corresponding to `state.groups` are set up. Needed in Client-mode grouping/pagination.\n fieldDefs.forEach(field => {\n if (!listFields.find(f => f.field === field.name)) {\n listFields.push({\n field: field.name\n });\n }\n });\n\n patchQueryFields.forEach(k => {\n if (!listFields.find(f => f.field === k)) {\n listFields.push({\n field: k\n });\n }\n });\n }\n\n compositeKeys.forEach(k => {\n if (!listFields.find(f => f.field === k)) {\n listFields.push({\n field: k\n });\n }\n });\n\n return listFields;\n};\n\n/**\n * It prepares {@link DataApiTypes.DataViewsQuery.sortBy sortBy} clause and {@link DataApiTypes.DataViewsQuery.calculations calculations} clause(for date type fields) for a query.\n * @param {DataApiTypes.State['sortingOrder']} [sortingOrder] Sorting information\n * @param {DataApiTypes.Group} [groups] grouping information\n * @param {DataApiTypes.FieldDef[]} [fieldDefs] Set of fields\n * @param {DataApiTypes.Meta['itemKey']} [itemKey] {@link DataApiTypes.Meta.itemKey itemKey}\n * @param {boolean} [isClient] A flag to know if the sorting info is required client side query\n * @returns {{ sortBy: NonNullable<DataApiTypes.DataViewsQuery['sortBy']>, calculations: NonNullable<DataApiTypes.DataViewsQuery['calculations']> }} {@link DataApiTypes.DataViewsQuery.sortBy sortBy} clause and {@link DataApiTypes.DataViewsQuery.calculations calculations} clause(for date type fields)\n */\nexport const buildSortInfo = (sortingOrder, groups, fieldDefs, itemKey, isClient) => {\n const fieldsMap = getFieldsMap(fieldDefs);\n const sortBy = [];\n const calculations = {};\n const sortedSet = new Set();\n if (groups) {\n // Sort by any groups before applying other sort options\n // Otherwise, the rows can appear in the wrong groups\n groups.forEach(obj => {\n // get field object corresponding to the columnId\n const field = fieldsMap.get(obj.columnId);\n\n // Set up a calculation when grouping by a dateFunction\n if (obj.dateFunction) {\n const calcId = `sortBy${field.name.replace(/[-_:]/g, '')}${obj.dateFunction}`;\n calculations[calcId] = {\n function: obj.dateFunction,\n parameters: [{ field: field.name }]\n };\n if (obj.dateFunction === 'DAYS_OF_WEEK') {\n // Currently, the cosmos control always assumes Monday as the start of week.\n // Specify the same to the API\n calculations[calcId].parameters.push({ value: '2' });\n }\n sortBy.push({\n calculation: calcId,\n type: obj.order.toUpperCase()\n });\n } else {\n sortBy.push({\n field: field.name,\n type: obj.order.toUpperCase()\n });\n sortedSet.add(field.id);\n }\n });\n }\n\n // Add remaining sorts\n if (sortingOrder) {\n sortingOrder.forEach(obj => {\n if (!sortedSet.has(obj.columnId)) {\n const field = fieldsMap.get(obj.columnId);\n sortBy.push({\n field: field.name,\n type: obj.order.toUpperCase()\n });\n sortedSet.add(field.id);\n }\n });\n } else if (!isClient && groups && groups.length > 0 && itemKey && !sortedSet.has(itemKey)) {\n sortBy.push({\n field: itemKey,\n type: 'ASC'\n });\n }\n\n return { sortBy, calculations: Object.keys(calculations).length > 0 ? calculations : undefined };\n};\n\nexport const calculatePageMetrics = (sIndex, eIndex) => {\n let n = eIndex - sIndex + 1;\n let pageSize = 1;\n\n if (n > 1) {\n let sRemainder = sIndex % n;\n let eRemainder = eIndex % n;\n\n while (eRemainder < sRemainder) {\n n += 1;\n sRemainder = sIndex % n;\n eRemainder = eIndex % n;\n }\n\n pageSize = n;\n }\n\n const pageNumber = Math.floor(sIndex / pageSize) + 1;\n return { pageNumber, pageSize };\n};\nconst getSearchFilters = (searchObj, contains) => {\n const { fields, query } = searchObj;\n return fields.map(field => ({\n condition: {\n comparator: contains,\n lhs: { field },\n rhs: { value: query }\n }\n }));\n};\n\n/**\n * Transforms a LeafCondition from the ConditionBuilder to the structure expected by the DataViews API\n * NOTE: Mutates the condition in-place\n */\nconst transformConditionForDataApi = (condition, conditionKey, meta, calculations) => {\n const field = meta.fieldDefs.find(f => f.name === condition.lhs.field);\n\n // Note: Workaround to include ignoreCase prop. It should eventually be coming from condition builder\n // Note: excluding pzInsKey as a workaround for BUG-606364\n // filter condition might be on a field which is not part of fieldDefs. This can be possible in case of external filters.\n if (field && field.type === 'text' && field.name !== 'pzInsKey') {\n condition.ignoreCase = true;\n }\n\n // Transform rhs date functions as calculations\n if (condition.rhs?.dateFunction) {\n const calculationId = `${conditionKey}_date_function_${Date.now()}`; // Using `Date.now()` to avoid any rare conflicts\n const lhsFieldName = condition.lhs.field;\n const { dateFunction } = condition.rhs;\n\n // Set up a new calculation on the query\n calculations[calculationId] = {\n function: dateFunction,\n parameters: [{ field: lhsFieldName }]\n };\n if (dateFunction === 'DAYS_OF_WEEK') {\n // Currently, the cosmos control always assumes Monday as the start of week.\n // Specify the same to the API\n calculations[calculationId].parameters.push({ value: '2' });\n }\n\n // Refer the calculation from the condition\n condition.lhs = { calculation: calculationId };\n condition.rhs.value = condition.rhs.value.toString();\n delete condition.rhs.dateFunction;\n }\n\n if (field && field.type === 'time' && condition.rhs && typeof condition.rhs.value === 'number') {\n const date = new Date(condition.rhs.value);\n condition.rhs = {\n value: `${String(date.getUTCHours()).padStart(2, '0')}:${String(date.getUTCMinutes()).padStart(2, '0')}:${String(date.getUTCSeconds()).padStart(2, '0')}`\n };\n }\n};\n\n/**\n * It prepares the {@link DataApiTypes.DataViewsQuery.filter filter} clause in the query.\n * @param {DataApiTypes.State} stateFromTable A state object to get current {@link DataApiTypes.State.filterExpression filterExpression}, {@link DataApiTypes.State.groupFilters groupFilters}, {@link DataApiTypes.State.search search}, {@link DataApiTypes.State.groups groups}, {@link DataApiTypes.State.externalState externalState} filters\n * @param {DataApiTypes.Meta} meta A metadata object to extract fieldDefs\n * @param {boolean} [includeGroups] Set to true if group filters need to be included\n * @returns {NonNullable<DataApiTypes.DataViewsQuery['filter']>} {@link DataApiTypes.DataViewsQuery.filter filter}\n */\nexport const buildFilters = (stateFromTable, meta, includeGroups = false) => {\n const { filterExpression, groupFilters, search, groups } = stateFromTable;\n const searchQuery = search?.query;\n const {\n fieldDefs,\n comparatorMap: { contains, equals, isNull }\n } = meta;\n let finalFilters = filterExpression;\n const { externalFilters } = meta;\n if (isExternalFiltersExists(externalFilters, stateFromTable)) {\n finalFilters = appendExternalFiltersToFilterExpression(\n externalFilters,\n finalFilters,\n stateFromTable\n );\n }\n\n if (finalFilters) {\n finalFilters = transformComplexCondition(finalFilters, getFormattedFields(fieldDefs));\n }\n\n // Append search filters\n if (searchQuery) {\n const filters = getSearchFilters(search, contains);\n\n if (finalFilters && Object.keys(finalFilters).length > 0) {\n finalFilters = { AND: [finalFilters, { OR: filters }] };\n } else {\n finalFilters = { OR: filters };\n }\n }\n\n // Append group filters\n if (includeGroups && groupFilters && groupFilters.length > 0) {\n let finalGroupFilters = [];\n const fieldsMap = getFieldsMap(fieldDefs);\n groupFilters.forEach(obj => {\n const { filters } = obj;\n const newGroupFilters = [];\n Object.entries(filters).forEach(([groupBy, value]) => {\n const { columnId, dateFunction } = getGroupFromKey(groupBy, groups);\n const field = fieldsMap.get(columnId);\n\n const condition = { lhs: { field: field.name } };\n if (value === null || value === undefined) {\n condition.comparator = isNull;\n } else {\n condition.comparator = equals;\n condition.rhs = { value, dateFunction };\n }\n\n newGroupFilters.push({ condition });\n });\n finalGroupFilters.push({ AND: newGroupFilters });\n });\n\n let groupFiltersLogic;\n if (finalGroupFilters.length === 1) {\n finalGroupFilters = [].concat(finalGroupFilters[0].AND);\n groupFiltersLogic = { AND: finalGroupFilters };\n } else {\n groupFiltersLogic = { OR: finalGroupFilters };\n }\n\n if (finalFilters && Object.keys(finalFilters).length > 0) {\n finalFilters = { AND: [finalFilters, groupFiltersLogic] };\n } else {\n finalFilters = groupFiltersLogic;\n }\n }\n\n // Transform the ConditionBuilder structure to the DataViews structure\n const calculations = {}; // Any calculations resulting from date functions\n if (finalFilters) {\n finalFilters = JSON.parse(JSON.stringify(finalFilters)); // Cloning to avoid editing the original objects\n finalFilters = splitConditionTree(finalFilters, 'T');\n Object.entries(finalFilters.conditions).forEach(([key, condition]) => {\n transformConditionForDataApi(condition, key, meta, calculations);\n });\n }\n\n return {\n filterTree: finalFilters,\n calculations: Object.keys(calculations).length > 0 ? calculations : undefined // Don't return empty objects to avoid any API validation errors\n };\n};\n\n/**\n * It prepares the client filters\n * @param {DataApiTypes.State} stateFromTable A state object to get current {@link DataApiTypes.State.filterExpression filterExpression}, {@link DataApiTypes.State.search search}, {@link DataApiTypes.State.externalState externalState} filters\n * @param {DataApiTypes.Meta} meta A metadata object to extract fieldDefs\n * @returns {ReturnType<typeof import('@pega/cosmos-react-condition-builder').splitConditionTree>}\n */\nexport const buildClientFilters = (stateFromTable, meta) => {\n const { filterExpression, search } = stateFromTable;\n const searchQuery = search?.query;\n const {\n comparatorMap: { contains }\n } = meta;\n\n // Append search filters\n let finalFilters = filterExpression;\n const { externalFilters } = meta;\n if (isExternalFiltersExists(externalFilters, stateFromTable)) {\n finalFilters = appendExternalFiltersToFilterExpression(\n externalFilters,\n finalFilters,\n stateFromTable\n );\n }\n if (searchQuery) {\n const filters = getSearchFilters(search, contains);\n\n if (finalFilters && Object.keys(finalFilters).length > 0) {\n finalFilters = { AND: [finalFilters, { OR: filters }] };\n } else {\n finalFilters = { OR: filters };\n }\n }\n\n return finalFilters ? splitConditionTree(finalFilters) : finalFilters;\n};\n\n/**\n * It build {@link DataApiTypes.DataViewsQuery.aggregations aggregations} clause in query.\n * @param {NonNullable<DataApiTypes.State['aggregationInfo']>} aggregationInfo Current aggregations applied in the state\n * @param {Map<string, DataApiTypes.FieldDef>} fieldsMap A map with key {@link DataApiTypes.FieldDef.id fieldDef id} and value {@link DataApiTypes.FieldDef field} object\n * @returns {NonNullable<DataApiTypes.DataViewsQuery['aggregations']>} {@link DataApiTypes.DataViewsQuery.aggregations aggregations}\n */\nexport const buildAggregations = (aggregationInfo, fieldsMap) => {\n const aggregations = {};\n aggregationInfo.forEach(element => {\n const { columnId, type } = element;\n const field = fieldsMap.get(columnId);\n\n const summaryFunction = type.toUpperCase();\n\n // build aggregations\n const agg = `${columnId}${summaryFunction}`;\n aggregations[agg] = {\n field: field.name,\n summaryFunction\n };\n });\n return aggregations;\n};\n\n// without grouping, startIndex and endIndex are both inclusive\nfunction prepareGroupDataIndexes(groupFilters, sIndex, eIndex) {\n let startIndex = sIndex;\n let endIndex = eIndex;\n if (groupFilters && groupFilters.length > 0) {\n startIndex = groupFilters[0].groupFrom;\n endIndex = 0;\n groupFilters.forEach(filter => {\n endIndex += filter.groupTo;\n });\n // with grouping, initially endIndex is not inclusive. So, update endIndex to keep the correct count of requested records\n endIndex -= 1;\n }\n return [startIndex, endIndex];\n}\n\n/**\n * It returns the paging information that will be used in query and parsing response data from API\n * @param {number} [startIndex] pagination startIndex\n * @param {number} [endIndex] pagination endIndex\n * @param {DataApiTypes.State['groupFilters']} [groupFilters] An array of {@link DataApiTypes.State.groupFilters GroupFilter}\n * @returns {DataApiTypes.DataViewsRequest['paging']} {@link DataApiTypes.DataViewsRequest.paging paging}\n */\nexport const buildPaging = (startIndex, endIndex, groupFilters) => {\n const [sIndex, eIndex] = prepareGroupDataIndexes(groupFilters, startIndex, endIndex);\n const { pageNumber, pageSize } = calculatePageMetrics(sIndex, eIndex);\n // When sIndex is 0, the starting index of new data should be considered from 0 only.\n const newStartIndex = sIndex === 0 ? 0 : pageSize * pageNumber - pageSize;\n return {\n pageNumber,\n pageSize,\n newStartIndex,\n startIndex: sIndex,\n endIndex: eIndex\n };\n};\n\n/**\n * It prepares {@link DataApiTypes.DataViewsRequest dataViewsRequest} that can be used to interact with pega-ui-lists-data-apis or data view api's\n * @param {DataApiTypes.State} stateFromTable Current state object\n * @param {DataApiTypes.Meta} meta Metadata structure\n * @param {boolean} [isClient] The query is being prepared to interact with pega-ui-lists-data-apis or data view api's\n * @param {DataApiTypes.Meta['patchQueryFields']} [patchQueryFields] A set of extra fields that should be appended in query\n * @param {string[]} [compositeKeys] A set of primary fields that should be appended in query\n * @param {boolean} [includeGroups] Groups should be included or not in the query\n * @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}\n * @returns {DataApiTypes.DataViewsRequest} {@link DataApiTypes.DataViewsRequest dataViewsRequest}\n */\nexport function prepareDatapageQuery(\n stateFromTable,\n meta,\n isClient = false,\n patchQueryFields = [],\n compositeKeys = [],\n includeGroups = true,\n optimizeQuery = false\n) {\n const {\n paginationOptions: {\n rootVirtualiser: { startIndex, endIndex }\n },\n sortingOrder,\n groups,\n groupFilters\n } = stateFromTable;\n\n const { fieldDefs, itemKey } = meta;\n const paging = buildPaging(startIndex, endIndex, groupFilters);\n\n /* In case of WorkLink patch query with pyID and in association patch pzInsKey, pyID */\n let select = buildSelect(\n fieldDefs,\n undefined,\n patchQueryFields,\n compositeKeys,\n stateFromTable,\n optimizeQuery\n );\n\n select = addItemKeyInSelect({ fieldDefs, itemKey, select, compositeKeys });\n\n const { sortBy, calculations: sortCalculations } = buildSortInfo(\n sortingOrder,\n groups,\n fieldDefs,\n itemKey,\n isClient\n );\n\n let query;\n if (select && select.length > 0) {\n query = {};\n query.select = select;\n if (sortBy && sortBy.length > 0) {\n query.sortBy = sortBy;\n }\n const { filterTree, calculations: filterCalculations } = buildFilters(\n stateFromTable,\n meta,\n includeGroups\n );\n if (filterTree && Object.keys(filterTree).length > 0) {\n query.filter = {\n logic: filterTree.logic,\n filterConditions: filterTree.conditions\n };\n }\n if (sortCalculations || filterCalculations) {\n query.calculations = { ...sortCalculations, ...filterCalculations };\n }\n query = { query, paging };\n }\n\n // console.log(query);\n return query;\n}\n\n/**\n * It prepares clientApi query used to interact with pega-ui-list-data-apis.\n * @param {DataApiTypes.State} stateFromTable Current state object\n * @param {DataApiTypes.Meta} meta Metadata structure\n * @returns {DataApiTypes.ClientApiQuery} {@link DataApiTypes.ClientApiQuery clientApiQuery}\n */\nexport function prepareClientApiQuery(stateFromTable, meta) {\n const { groupFilters, groups, aggregationInfo } = stateFromTable;\n\n const queryState = prepareDatapageQuery(\n stateFromTable,\n meta,\n true,\n [],\n [],\n true,\n meta?.isAnalyticsTable && meta?.isListViewOrListPage\n );\n if (groups) {\n const groupBy = [];\n groups.forEach(group => {\n groupBy.push({\n field: group.columnId,\n dateFunction: group.dateFunction,\n sortType: group.order\n });\n });\n queryState.query.groupBy = groupBy;\n }\n if (queryState.query.filter && Object.keys(queryState.query.filter).length > 0) {\n // Reconstruct without group filters. Also don't transform for the API, since the filters need to be passed to evaluateCondition\n queryState.query.filter = {};\n const filterTree = buildClientFilters(stateFromTable, meta);\n if (filterTree && Object.keys(filterTree).length > 0) {\n queryState.query.filter = {\n logic: filterTree.logic,\n filterConditions: filterTree.conditions\n };\n }\n }\n\n if (groupFilters && groupFilters.length > 0) {\n queryState.query.groupFilters = groupFilters;\n }\n\n if (aggregationInfo && aggregationInfo.length > 0) {\n const fieldsMap = getFieldsMap(meta.fieldDefs);\n queryState.query.aggregations = buildAggregations(aggregationInfo, fieldsMap);\n }\n\n return queryState;\n}\n"]}
1
+ {"version":3,"file":"PrepareDatapageQuery.js","sourceRoot":"","sources":["../../stateConversion/PrepareDatapageQuery.js"],"names":[],"mappings":"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","sourcesContent":["import {\n splitConditionTree,\n transformComplexCondition\n} 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';\nimport { getFormattedFields } from '../dataApi/utils';\n\nimport {\n appendExternalFiltersToFilterExpression,\n getGroupFromKey,\n isExternalFiltersExists\n} from './utils';\n\n/**\n * This method builds a {@link DataApiTypes.FieldDef fields} Map which will be used to get the field based on {@link DataApiTypes.FieldDef.id fieldDef id}\n * @param {DataApiTypes.FieldDef[]} fieldDefs\n * @returns {Map<string, DataApiTypes.FieldDef>} fields map - key is {@link DataApiTypes.FieldDef.id fieldDef id} and value is {@link DataApiTypes.FieldDef field} object\n */\nexport const getFieldsMap = fieldDefs => {\n const fieldsMap = new Map();\n fieldDefs.forEach(element => {\n fieldsMap.set(element.id, element);\n });\n return fieldsMap;\n};\n\n/**\n * This method used to fetch the FieldDef for a given {@link columnId} from given {@link fieldDefs} array\n * @param {DataApiTypes.FieldDef[]} fieldDefs An array of {@link DataApiTypes.FieldDef fieldDefs} from which a fieldDef need to be filtered.\n * @param {string} columnId A unique {@link DataApiTypes.FieldDef.id fieldId}\n * @returns {DataApiTypes.FieldDef | undefined} FieldDef for a given columnId\n */\nexport const getField = (fieldDefs, columnId) => {\n const fieldsMap = getFieldsMap(fieldDefs);\n return fieldsMap.get(columnId);\n};\n\n/**\n * It adds {@link DataApiTypes.Meta.itemKey itemKey} in the select clause if not present already.The compositeKeys array should be empty.\n * @param {object} param An object which contains {@link DataApiTypes.Meta.fieldDefs fieldDefs} {@link DataApiTypes.Meta.itemKey itemKey}, {@link DataApiTypes.DataViewsQuery.select select} clause, compositeKeys.\n * @param {DataApiTypes.Meta['fieldDefs']} param.fieldDefs\n * @param {DataApiTypes.Meta['itemKey']} param.itemKey\n * @param {DataApiTypes.DataViewsRequest['query']['select']} param.select\n * @param {string[]} param.compositeKeys\n * @returns {DataApiTypes.DataViewsRequest['query']['select']} Updated {@link DataApiTypes.DataViewsQuery.select select} clause\n */\nexport const addItemKeyInSelect = ({ fieldDefs, itemKey, select, compositeKeys }) => {\n const elementFound = getField(fieldDefs, itemKey);\n if (\n itemKey &&\n !elementFound &&\n Array.isArray(select) &&\n !compositeKeys?.length &&\n !select.find(sel => sel.field === itemKey)\n ) {\n return [\n ...select,\n {\n field: itemKey\n }\n ];\n }\n return select;\n};\n\n/**\n * Returns the correct set of data from bigger set based on the indexes\n * @param {number} newStartIndex newStartIndex\n * @param {number} startIndex existing startIndex\n * @param {number} endIndex endIndex\n * @param {DataApiTypes.Data} data full data\n * @returns {DataApiTypes.Data} sliced data\n */\nexport const sliceData = (newStartIndex, startIndex, endIndex, data) => {\n const slicedData = [];\n if (data && data.length > 0) {\n let index = 0;\n while (newStartIndex <= endIndex) {\n if (newStartIndex >= startIndex) {\n const obj = data[index];\n if (obj) {\n slicedData.push(obj);\n }\n }\n index += 1;\n newStartIndex += 1;\n }\n }\n return slicedData;\n};\n\n/**\n * It returns all the fields that are used in the given {@link filterExpression}\n * @param {NonNullable<DataApiTypes.State['filterExpression']>} filterExpression\n * @returns {{ columnId: string }[]} Fields which are part of {@link filterExpression}\n */\nexport const getFieldListFromFilter = filterExpression => {\n const splitFilter = splitConditionTree(filterExpression);\n const arrFilter = Object.values(splitFilter.conditions);\n\n const filterReferences = [];\n\n // Add in any field references\n arrFilter.forEach(item => {\n if (item.lhs?.field) {\n filterReferences.push({ columnId: item.lhs.field });\n }\n if (item.rhs?.field) {\n filterReferences.push({ columnId: item.rhs.field });\n }\n });\n\n return filterReferences;\n};\n\n/**\n * Checks if a field is visible by determining if it is not part of the hidden columns in the given state.\n *\n * @param {string} fieldName - The name of the field to check.\n * @param {Object} stateFromTable - The state object containing the `hiddenColumns` array.\n * @param {string[]} [stateFromTable.hiddenColumns] - An array of column names that are hidden.\n * @returns {boolean} - Returns `true` if the field is visible (not hidden), otherwise `false`.\n */\n\nconst isFieldVisible = (fieldName, stateFromTable) => {\n return !stateFromTable?.hiddenColumns?.includes(fieldName);\n};\n\n/**\n * Extracts referred fields from the table state, including grouped columns, custom columns, and conditional style formats.\n * @param {Object} stateFromTable - The state object containing table configuration.\n * @returns {string[]} - An array of referred field names (like groups , condition style and custom fields).\n */\nconst getReferredFields = stateFromTable => {\n let groupedColumns = [];\n let customColumnsSource = [];\n let conditionStyleFormatColumns = [];\n\n if (stateFromTable?.groups) {\n groupedColumns = stateFromTable.groups.map(group => group.columnId);\n }\n\n if (stateFromTable?.customFields) {\n customColumnsSource = stateFromTable.customFields.reduce((sources, customField) => {\n return sources.concat(customField.expression.filter(f => typeof f === 'string'));\n }, []);\n }\n\n if (stateFromTable?.conditionalStyleFormats) {\n conditionStyleFormatColumns = stateFromTable.conditionalStyleFormats\n .filter(styleFormat => isFieldVisible(styleFormat.fieldName, stateFromTable))\n .flatMap(styleFormat =>\n getFieldListFromFilter(styleFormat.condition).map(condition => condition.columnId)\n );\n }\n\n return [...new Set([...groupedColumns, ...customColumnsSource, ...conditionStyleFormatColumns])];\n};\n\n/**\n * It prepares {@link DataApiTypes.DataViewsQuery.select select} clause for a query, by deriving fields from state, fieldDefs, uniqueColId, patchQueryFields and compositeKeys\n * @param {DataApiTypes.FieldDef[]} fieldDefs Set of fields which can be part of select clause. This will not be considered if {@link colId} is passed.\n * @param {string | undefined} colId A unique field which should be part of select clause. If this is provided then other fields from {@link fieldDefs} will not be considered.\n * @param {DataApiTypes.Meta['patchQueryFields']} [patchQueryFields] A set of extra fields which should be included in select clause. This will not be considered if {@link colId} is passed.\n * @param {string[]} [compositeKeys] A set of primary keys which should be included in select clause. This will always be included if passed.\n * @param {DataApiTypes.State} [state] This is required if {@link optimizeSelectFields} is passed as true. It is used to collect the fieldDefs that are part of {@link DataApiTypes.State.groups groups}, {@link DataApiTypes.State.filterExpression filters}, {@link DataApiTypes.State.sortingOrder sort} and are not {@link DataApiTypes.State.hiddenColumns hidden}\n * @param {boolean} [optimizeSelectFields] If set to true, buildSelect will include a subset of {@link fieldDefs} which are part of {@link DataApiTypes.State.groups groups} and are not {@link DataApiTypes.State.hiddenColumns hidden}\n * @returns {Extract<DataApiTypes.DataViewsQuery['select'], import('../stateConversion/PrepareDatapageQuery.types').FieldFragment>} a select clause of type {@link FieldFragment}\n */\n\nexport const buildSelect = (\n fieldDefs,\n colId,\n patchQueryFields = [],\n compositeKeys = [],\n stateFromTable = {},\n optimizeSelectFields = false\n) => {\n const selectQueryFields = [];\n if (optimizeSelectFields) {\n // if table has grouping and customized columns and those columns are part of hidden columns\n // then include those columns in the fieldDef's\n const referredFields = getReferredFields(stateFromTable);\n const filteredFieldDefs = [];\n fieldDefs.forEach(field => {\n if (isFieldVisible(field.name, stateFromTable) || referredFields.includes(field.name)) {\n filteredFieldDefs.push(field);\n }\n });\n\n fieldDefs = filteredFieldDefs;\n }\n\n if (colId) {\n const field = getField(fieldDefs, colId);\n selectQueryFields.push({\n field: field.name\n });\n } else {\n // NOTE: If we ever decide to not set up all the `fieldDefs` on select, ensure that the fields corresponding to `state.groups` are set up. Needed in Client-mode grouping/pagination.\n fieldDefs.forEach(field => {\n if (!selectQueryFields.find(f => f.field === field.name)) {\n selectQueryFields.push({\n field: field.name\n });\n }\n });\n\n patchQueryFields.forEach(k => {\n if (!selectQueryFields.find(f => f.field === k)) {\n selectQueryFields.push({\n field: k\n });\n }\n });\n }\n\n compositeKeys.forEach(k => {\n if (!selectQueryFields.find(f => f.field === k)) {\n selectQueryFields.push({\n field: k\n });\n }\n });\n\n return selectQueryFields;\n};\n\n/**\n * It prepares {@link DataApiTypes.DataViewsQuery.sortBy sortBy} clause and {@link DataApiTypes.DataViewsQuery.calculations calculations} clause(for date type fields) for a query.\n * @param {DataApiTypes.State['sortingOrder']} [sortingOrder] Sorting information\n * @param {DataApiTypes.Group} [groups] grouping information\n * @param {DataApiTypes.FieldDef[]} [fieldDefs] Set of fields\n * @param {DataApiTypes.Meta['itemKey']} [itemKey] {@link DataApiTypes.Meta.itemKey itemKey}\n * @param {boolean} [isClient] A flag to know if the sorting info is required client side query\n * @returns {{ sortBy: NonNullable<DataApiTypes.DataViewsQuery['sortBy']>, calculations: NonNullable<DataApiTypes.DataViewsQuery['calculations']> }} {@link DataApiTypes.DataViewsQuery.sortBy sortBy} clause and {@link DataApiTypes.DataViewsQuery.calculations calculations} clause(for date type fields)\n */\nexport const buildSortInfo = (sortingOrder, groups, fieldDefs, itemKey, isClient) => {\n const fieldsMap = getFieldsMap(fieldDefs);\n const sortBy = [];\n const calculations = {};\n const sortedSet = new Set();\n if (groups) {\n // Sort by any groups before applying other sort options\n // Otherwise, the rows can appear in the wrong groups\n groups.forEach(obj => {\n // get field object corresponding to the columnId\n const field = fieldsMap.get(obj.columnId);\n\n // Set up a calculation when grouping by a dateFunction\n if (obj.dateFunction) {\n const calcId = `sortBy${field.name.replace(/[-_:]/g, '')}${obj.dateFunction}`;\n calculations[calcId] = {\n function: obj.dateFunction,\n parameters: [{ field: field.name }]\n };\n if (obj.dateFunction === 'DAYS_OF_WEEK') {\n // Currently, the cosmos control always assumes Monday as the start of week.\n // Specify the same to the API\n calculations[calcId].parameters.push({ value: '2' });\n }\n sortBy.push({\n calculation: calcId,\n type: obj.order.toUpperCase()\n });\n } else {\n sortBy.push({\n field: field.name,\n type: obj.order.toUpperCase()\n });\n sortedSet.add(field.id);\n }\n });\n }\n\n // Add remaining sorts\n if (sortingOrder) {\n sortingOrder.forEach(obj => {\n if (!sortedSet.has(obj.columnId)) {\n const field = fieldsMap.get(obj.columnId);\n sortBy.push({\n field: field.name,\n type: obj.order.toUpperCase()\n });\n sortedSet.add(field.id);\n }\n });\n } else if (!isClient && groups && groups.length > 0 && itemKey && !sortedSet.has(itemKey)) {\n sortBy.push({\n field: itemKey,\n type: 'ASC'\n });\n }\n\n return { sortBy, calculations: Object.keys(calculations).length > 0 ? calculations : undefined };\n};\n\nexport const calculatePageMetrics = (sIndex, eIndex) => {\n let n = eIndex - sIndex + 1;\n let pageSize = 1;\n\n if (n > 1) {\n let sRemainder = sIndex % n;\n let eRemainder = eIndex % n;\n\n while (eRemainder < sRemainder) {\n n += 1;\n sRemainder = sIndex % n;\n eRemainder = eIndex % n;\n }\n\n pageSize = n;\n }\n\n const pageNumber = Math.floor(sIndex / pageSize) + 1;\n return { pageNumber, pageSize };\n};\nconst getSearchFilters = (searchObj, contains) => {\n const { fields, query } = searchObj;\n return fields.map(field => ({\n condition: {\n comparator: contains,\n lhs: { field },\n rhs: { value: query }\n }\n }));\n};\n\n/**\n * Transforms a LeafCondition from the ConditionBuilder to the structure expected by the DataViews API\n * NOTE: Mutates the condition in-place\n */\nconst transformConditionForDataApi = (condition, conditionKey, meta, calculations) => {\n const field = meta.fieldDefs.find(f => f.name === condition.lhs.field);\n\n // Note: Workaround to include ignoreCase prop. It should eventually be coming from condition builder\n // Note: excluding pzInsKey as a workaround for BUG-606364\n // filter condition might be on a field which is not part of fieldDefs. This can be possible in case of external filters.\n if (field && field.type === 'text' && field.name !== 'pzInsKey') {\n condition.ignoreCase = true;\n }\n\n // Transform rhs date functions as calculations\n if (condition.rhs?.dateFunction) {\n const calculationId = `${conditionKey}_date_function_${Date.now()}`; // Using `Date.now()` to avoid any rare conflicts\n const lhsFieldName = condition.lhs.field;\n const { dateFunction } = condition.rhs;\n\n // Set up a new calculation on the query\n calculations[calculationId] = {\n function: dateFunction,\n parameters: [{ field: lhsFieldName }]\n };\n if (dateFunction === 'DAYS_OF_WEEK') {\n // Currently, the cosmos control always assumes Monday as the start of week.\n // Specify the same to the API\n calculations[calculationId].parameters.push({ value: '2' });\n }\n\n // Refer the calculation from the condition\n condition.lhs = { calculation: calculationId };\n condition.rhs.value = condition.rhs.value.toString();\n delete condition.rhs.dateFunction;\n }\n\n if (field && field.type === 'time' && condition.rhs && typeof condition.rhs.value === 'number') {\n const date = new Date(condition.rhs.value);\n condition.rhs = {\n value: `${String(date.getUTCHours()).padStart(2, '0')}:${String(date.getUTCMinutes()).padStart(2, '0')}:${String(date.getUTCSeconds()).padStart(2, '0')}`\n };\n }\n};\n\n/**\n * It prepares the {@link DataApiTypes.DataViewsQuery.filter filter} clause in the query.\n * @param {DataApiTypes.State} stateFromTable A state object to get current {@link DataApiTypes.State.filterExpression filterExpression}, {@link DataApiTypes.State.groupFilters groupFilters}, {@link DataApiTypes.State.search search}, {@link DataApiTypes.State.groups groups}, {@link DataApiTypes.State.externalState externalState} filters\n * @param {DataApiTypes.Meta} meta A metadata object to extract fieldDefs\n * @param {boolean} [includeGroups] Set to true if group filters need to be included\n * @returns {NonNullable<DataApiTypes.DataViewsQuery['filter']>} {@link DataApiTypes.DataViewsQuery.filter filter}\n */\nexport const buildFilters = (stateFromTable, meta, includeGroups = false) => {\n const { filterExpression, groupFilters, search, groups } = stateFromTable;\n const searchQuery = search?.query;\n const {\n fieldDefs,\n comparatorMap: { contains, equals, isNull }\n } = meta;\n let finalFilters = filterExpression;\n const { externalFilters } = meta;\n if (isExternalFiltersExists(externalFilters, stateFromTable)) {\n finalFilters = appendExternalFiltersToFilterExpression(\n externalFilters,\n finalFilters,\n stateFromTable\n );\n }\n\n if (finalFilters) {\n finalFilters = transformComplexCondition(finalFilters, getFormattedFields(fieldDefs));\n }\n\n // Append search filters\n if (searchQuery) {\n const filters = getSearchFilters(search, contains);\n\n if (finalFilters && Object.keys(finalFilters).length > 0) {\n finalFilters = { AND: [finalFilters, { OR: filters }] };\n } else {\n finalFilters = { OR: filters };\n }\n }\n\n // Append group filters\n if (includeGroups && groupFilters && groupFilters.length > 0) {\n let finalGroupFilters = [];\n const fieldsMap = getFieldsMap(fieldDefs);\n groupFilters.forEach(obj => {\n const { filters } = obj;\n const newGroupFilters = [];\n Object.entries(filters).forEach(([groupBy, value]) => {\n const { columnId, dateFunction } = getGroupFromKey(groupBy, groups);\n const field = fieldsMap.get(columnId);\n\n const condition = { lhs: { field: field.name } };\n if (value === null || value === undefined) {\n condition.comparator = isNull;\n } else {\n condition.comparator = equals;\n condition.rhs = { value, dateFunction };\n }\n\n newGroupFilters.push({ condition });\n });\n finalGroupFilters.push({ AND: newGroupFilters });\n });\n\n let groupFiltersLogic;\n if (finalGroupFilters.length === 1) {\n finalGroupFilters = [].concat(finalGroupFilters[0].AND);\n groupFiltersLogic = { AND: finalGroupFilters };\n } else {\n groupFiltersLogic = { OR: finalGroupFilters };\n }\n\n if (finalFilters && Object.keys(finalFilters).length > 0) {\n finalFilters = { AND: [finalFilters, groupFiltersLogic] };\n } else {\n finalFilters = groupFiltersLogic;\n }\n }\n\n // Transform the ConditionBuilder structure to the DataViews structure\n const calculations = {}; // Any calculations resulting from date functions\n if (finalFilters) {\n finalFilters = JSON.parse(JSON.stringify(finalFilters)); // Cloning to avoid editing the original objects\n finalFilters = splitConditionTree(finalFilters, 'T');\n Object.entries(finalFilters.conditions).forEach(([key, condition]) => {\n transformConditionForDataApi(condition, key, meta, calculations);\n });\n }\n\n return {\n filterTree: finalFilters,\n calculations: Object.keys(calculations).length > 0 ? calculations : undefined // Don't return empty objects to avoid any API validation errors\n };\n};\n\n/**\n * It prepares the client filters\n * @param {DataApiTypes.State} stateFromTable A state object to get current {@link DataApiTypes.State.filterExpression filterExpression}, {@link DataApiTypes.State.search search}, {@link DataApiTypes.State.externalState externalState} filters\n * @param {DataApiTypes.Meta} meta A metadata object to extract fieldDefs\n * @returns {ReturnType<typeof import('@pega/cosmos-react-condition-builder').splitConditionTree>}\n */\nexport const buildClientFilters = (stateFromTable, meta) => {\n const { filterExpression, search } = stateFromTable;\n const searchQuery = search?.query;\n const {\n comparatorMap: { contains }\n } = meta;\n\n // Append search filters\n let finalFilters = filterExpression;\n const { externalFilters } = meta;\n if (isExternalFiltersExists(externalFilters, stateFromTable)) {\n finalFilters = appendExternalFiltersToFilterExpression(\n externalFilters,\n finalFilters,\n stateFromTable\n );\n }\n if (searchQuery) {\n const filters = getSearchFilters(search, contains);\n\n if (finalFilters && Object.keys(finalFilters).length > 0) {\n finalFilters = { AND: [finalFilters, { OR: filters }] };\n } else {\n finalFilters = { OR: filters };\n }\n }\n\n return finalFilters ? splitConditionTree(finalFilters) : finalFilters;\n};\n\n/**\n * It build {@link DataApiTypes.DataViewsQuery.aggregations aggregations} clause in query.\n * @param {NonNullable<DataApiTypes.State['aggregationInfo']>} aggregationInfo Current aggregations applied in the state\n * @param {Map<string, DataApiTypes.FieldDef>} fieldsMap A map with key {@link DataApiTypes.FieldDef.id fieldDef id} and value {@link DataApiTypes.FieldDef field} object\n * @returns {NonNullable<DataApiTypes.DataViewsQuery['aggregations']>} {@link DataApiTypes.DataViewsQuery.aggregations aggregations}\n */\nexport const buildAggregations = (aggregationInfo, fieldsMap) => {\n const aggregations = {};\n aggregationInfo.forEach(element => {\n const { columnId, type } = element;\n const field = fieldsMap.get(columnId);\n\n const summaryFunction = type.toUpperCase();\n\n // build aggregations\n const agg = `${columnId}${summaryFunction}`;\n aggregations[agg] = {\n field: field.name,\n summaryFunction\n };\n });\n return aggregations;\n};\n\n// without grouping, startIndex and endIndex are both inclusive\nfunction prepareGroupDataIndexes(groupFilters, sIndex, eIndex) {\n let startIndex = sIndex;\n let endIndex = eIndex;\n if (groupFilters && groupFilters.length > 0) {\n startIndex = groupFilters[0].groupFrom;\n endIndex = 0;\n groupFilters.forEach(filter => {\n endIndex += filter.groupTo;\n });\n // with grouping, initially endIndex is not inclusive. So, update endIndex to keep the correct count of requested records\n endIndex -= 1;\n }\n return [startIndex, endIndex];\n}\n\n/**\n * It returns the paging information that will be used in query and parsing response data from API\n * @param {number} [startIndex] pagination startIndex\n * @param {number} [endIndex] pagination endIndex\n * @param {DataApiTypes.State['groupFilters']} [groupFilters] An array of {@link DataApiTypes.State.groupFilters GroupFilter}\n * @returns {DataApiTypes.DataViewsRequest['paging']} {@link DataApiTypes.DataViewsRequest.paging paging}\n */\nexport const buildPaging = (startIndex, endIndex, groupFilters) => {\n const [sIndex, eIndex] = prepareGroupDataIndexes(groupFilters, startIndex, endIndex);\n const { pageNumber, pageSize } = calculatePageMetrics(sIndex, eIndex);\n // When sIndex is 0, the starting index of new data should be considered from 0 only.\n const newStartIndex = sIndex === 0 ? 0 : pageSize * pageNumber - pageSize;\n return {\n pageNumber,\n pageSize,\n newStartIndex,\n startIndex: sIndex,\n endIndex: eIndex\n };\n};\n\n/**\n * It prepares {@link DataApiTypes.DataViewsRequest dataViewsRequest} that can be used to interact with pega-ui-lists-data-apis or data view api's\n * @param {DataApiTypes.State} stateFromTable Current state object\n * @param {DataApiTypes.Meta} meta Metadata structure\n * @param {boolean} [isClient] The query is being prepared to interact with pega-ui-lists-data-apis or data view api's\n * @param {DataApiTypes.Meta['patchQueryFields']} [patchQueryFields] A set of extra fields that should be appended in query\n * @param {string[]} [compositeKeys] A set of primary fields that should be appended in query\n * @param {boolean} [includeGroups] Groups should be included or not in the query\n * @param {boolean} [optimizeSelectFields] 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}\n * @returns {DataApiTypes.DataViewsRequest} {@link DataApiTypes.DataViewsRequest dataViewsRequest}\n */\nexport function prepareDatapageQuery(\n stateFromTable,\n meta,\n isClient = false,\n patchQueryFields = [],\n compositeKeys = [],\n includeGroups = true,\n optimizeSelectFields = false\n) {\n const {\n paginationOptions: {\n rootVirtualiser: { startIndex, endIndex }\n },\n sortingOrder,\n groups,\n groupFilters\n } = stateFromTable;\n\n const { fieldDefs, itemKey } = meta;\n const paging = buildPaging(startIndex, endIndex, groupFilters);\n\n /* In case of WorkLink patch query with pyID and in association patch pzInsKey, pyID */\n let select = buildSelect(\n fieldDefs,\n undefined,\n patchQueryFields,\n compositeKeys,\n stateFromTable,\n optimizeSelectFields\n );\n\n select = addItemKeyInSelect({ fieldDefs, itemKey, select, compositeKeys });\n\n const { sortBy, calculations: sortCalculations } = buildSortInfo(\n sortingOrder,\n groups,\n fieldDefs,\n itemKey,\n isClient\n );\n\n let query;\n if (select && select.length > 0) {\n query = {};\n query.select = select;\n if (sortBy && sortBy.length > 0) {\n query.sortBy = sortBy;\n }\n const { filterTree, calculations: filterCalculations } = buildFilters(\n stateFromTable,\n meta,\n includeGroups\n );\n if (filterTree && Object.keys(filterTree).length > 0) {\n query.filter = {\n logic: filterTree.logic,\n filterConditions: filterTree.conditions\n };\n }\n if (sortCalculations || filterCalculations) {\n query.calculations = { ...sortCalculations, ...filterCalculations };\n }\n query = { query, paging };\n }\n\n // console.log(query);\n return query;\n}\n\n/**\n * It prepares clientApi query used to interact with pega-ui-list-data-apis.\n * @param {DataApiTypes.State} stateFromTable Current state object\n * @param {DataApiTypes.Meta} meta Metadata structure\n * @param {boolean} [options.optimizeSelectFields] Whether to optimize select fields. Defaults to `meta?.isAnalyticsTable && meta?.isListViewOrListPage`.\n * @returns {DataApiTypes.ClientApiQuery} {@link DataApiTypes.ClientApiQuery clientApiQuery}\n */\nexport function prepareClientApiQuery(stateFromTable, meta, options = {}) {\n const { groupFilters, groups, aggregationInfo } = stateFromTable;\n\n const optimizeSelectFields =\n options.optimizeSelectFields ?? (meta?.isAnalyticsTable && meta?.isListViewOrListPage);\n\n const queryState = prepareDatapageQuery(\n stateFromTable,\n meta,\n true,\n [],\n [],\n true,\n optimizeSelectFields\n );\n if (groups) {\n const groupBy = [];\n groups.forEach(group => {\n groupBy.push({\n field: group.columnId,\n dateFunction: group.dateFunction,\n sortType: group.order\n });\n });\n queryState.query.groupBy = groupBy;\n }\n if (queryState.query.filter && Object.keys(queryState.query.filter).length > 0) {\n // Reconstruct without group filters. Also don't transform for the API, since the filters need to be passed to evaluateCondition\n queryState.query.filter = {};\n const filterTree = buildClientFilters(stateFromTable, meta);\n if (filterTree && Object.keys(filterTree).length > 0) {\n queryState.query.filter = {\n logic: filterTree.logic,\n filterConditions: filterTree.conditions\n };\n }\n }\n\n if (groupFilters && groupFilters.length > 0) {\n queryState.query.groupFilters = groupFilters;\n }\n\n if (aggregationInfo && aggregationInfo.length > 0) {\n const fieldsMap = getFieldsMap(meta.fieldDefs);\n queryState.query.aggregations = buildAggregations(aggregationInfo, fieldsMap);\n }\n\n return queryState;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pega/lists-core-utils",
3
- "version": "9.0.0-build.2.9",
3
+ "version": "9.0.0-build.3.1",
4
4
  "description": "Data api for data operations like sort, filter, grouping etc. and query builder api's to build Data views api query",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "author": "Pegasystems",
@@ -14,12 +14,12 @@
14
14
  "build": "tsc -b tsconfig.build.json"
15
15
  },
16
16
  "dependencies": {
17
- "@pega/cosmos-react-condition-builder": "9.0.0-build.2.9",
18
- "@pega/cosmos-react-core": "9.0.0-build.2.9",
17
+ "@pega/cosmos-react-condition-builder": "9.0.0-build.3.1",
18
+ "@pega/cosmos-react-core": "9.0.0-build.3.1",
19
19
  "@types/lodash.get": "^4.4.9",
20
20
  "dayjs": "^1.11.13",
21
21
  "lodash.get": "^4.4.2",
22
- "pega-repeating-structures-core": "npm:@pega/lists-core@9.0.0-build.2.9"
22
+ "pega-repeating-structures-core": "npm:@pega/lists-core@9.0.0-build.3.1"
23
23
  },
24
24
  "devDependencies": {
25
25
  "typescript": "~5.8.3"