@pega/lists-core 9.0.0-build.29.10 → 9.0.0-build.29.12
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.
- package/lib/src/core/features/uIFeatures/beforeRender/prepareColumns.d.ts +13 -2
- package/lib/src/core/features/uIFeatures/beforeRender/prepareColumns.d.ts.map +1 -1
- package/lib/src/core/features/uIFeatures/beforeRender/prepareColumns.js +80 -113
- package/lib/src/core/features/uIFeatures/beforeRender/prepareColumns.js.map +1 -1
- package/lib/src/core/features/uIFeatures/index.d.ts.map +1 -1
- package/lib/src/core/utils/util.d.ts +19 -0
- package/lib/src/core/utils/util.d.ts.map +1 -1
- package/lib/src/core/utils/util.js +49 -1
- package/lib/src/core/utils/util.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,8 +1,19 @@
|
|
|
1
|
+
import type { OmitStrict } from '@pega/cosmos-react-core';
|
|
1
2
|
import type RsInternal from '../../../RsInternal';
|
|
2
|
-
import defaultTranslations from '../../../defaultTranslations';
|
|
3
3
|
import type { BeforeRenderFeatureProps } from '../../featureFactory';
|
|
4
4
|
import type { State } from '../../../../../types/State.types';
|
|
5
|
-
|
|
5
|
+
import type { FieldDef } from '../../../../../types/Meta.types';
|
|
6
|
+
import type { ColumnConfig } from '../../../generators/ColumnGenerator.types';
|
|
7
|
+
/**
|
|
8
|
+
* Adds a column to the view at a frozen index.
|
|
9
|
+
* If the column's field ID is not in the frozen-columns list, it is also frozen at the given index.
|
|
10
|
+
*
|
|
11
|
+
* @param rsInternal - The internal RS object.
|
|
12
|
+
* @param field - The field definition for the column.
|
|
13
|
+
* @param options - Column config options (excluding `field`).
|
|
14
|
+
* @param index - The freeze index to apply.
|
|
15
|
+
*/
|
|
16
|
+
export declare const addFrozenColumnAtIndex: (rsInternal: RsInternal, field: FieldDef, options: OmitStrict<ColumnConfig, "field">, index: number) => void;
|
|
6
17
|
/**
|
|
7
18
|
* Prepares newly visible, grouped, and custom-field-dependent {@link Column columns} for the view.
|
|
8
19
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareColumns.d.ts","sourceRoot":"","sources":["../../../../../../src/core/features/uIFeatures/beforeRender/prepareColumns.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prepareColumns.d.ts","sourceRoot":"","sources":["../../../../../../src/core/features/uIFeatures/beforeRender/prepareColumns.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAW1D,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAC;AAOlD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAE9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAE9E;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,GACjC,YAAY,UAAU,EACtB,OAAO,QAAQ,EACf,SAAS,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,EAC1C,OAAO,MAAM,SAYd,CAAC;AAoEF;;;;;;;;;;;GAWG;AACH,wBAAgB,qCAAqC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE;IACzE,UAAU,EAAE,UAAU;IACtB,KAAK,EAAE,KAAK;CACb,QAqCA;AA2BD;;GAEG;yBACa,YAAY,UAAU,MAKZ,cAAc,wBAAwB;AALhE,wBAaE"}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
import { isRowActionFieldEnabled, isRowErrorFieldEnabled, isRowReorderFieldEnabled, isRowSelectFieldEnabled, withMemoization } from '../../../utils/util';
|
|
2
|
-
import { REPEATING_STRUCTURE_TEMPLATES } from '../../../../../types/Meta.types';
|
|
1
|
+
import { isRowActionFieldEnabled, isRowErrorFieldEnabled, isRowReorderFieldEnabled, isRowSelectFieldEnabled, withMemoization, shouldCreateColumnForField, translateLabel } from '../../../utils/util';
|
|
3
2
|
import { rowActionColumnMeta, rowDragDropColumnMeta, rowErrorColumnMeta, rowSelectColumnMeta } from '../../../constants';
|
|
4
|
-
import defaultTranslations from '../../../defaultTranslations';
|
|
5
3
|
import Column from '../../../generators/ColumnGenerator';
|
|
6
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Adds a column to the view at a frozen index.
|
|
6
|
+
* If the column's field ID is not in the frozen-columns list, it is also frozen at the given index.
|
|
7
|
+
*
|
|
8
|
+
* @param rsInternal - The internal RS object.
|
|
9
|
+
* @param field - The field definition for the column.
|
|
10
|
+
* @param options - Column config options (excluding `field`).
|
|
11
|
+
* @param index - The freeze index to apply.
|
|
12
|
+
*/
|
|
13
|
+
export const addFrozenColumnAtIndex = (rsInternal, field, options, index) => {
|
|
7
14
|
const { getView, getRsStateResolver } = rsInternal;
|
|
8
15
|
const { getState } = getRsStateResolver();
|
|
9
16
|
const addedColumn = getView().addColumn(
|
|
@@ -13,110 +20,49 @@ const addFrozenColumnAtIndex = (rsInternal, field, options, index) => {
|
|
|
13
20
|
addedColumn.applyFreezeAtIndex(index);
|
|
14
21
|
}
|
|
15
22
|
};
|
|
16
|
-
export const isTranslationKey = (key) => {
|
|
17
|
-
return key in defaultTranslations;
|
|
18
|
-
};
|
|
19
23
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* This happens when the field is required by the current template configuration
|
|
24
|
-
* (e.g., Timeline, Gallery, Map) or when it is marked as a row header.
|
|
24
|
+
* Adds all OOTB columns (error, drag-drop, select, action) to the view.
|
|
25
|
+
* Must be called after base columns have been committed via `setProp`.
|
|
25
26
|
*
|
|
26
|
-
*
|
|
27
|
+
* @param rsInternal - The internal RS object used to access the view and store.
|
|
27
28
|
*/
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
return true;
|
|
31
|
-
if (fieldDef.filterPickList)
|
|
32
|
-
return true;
|
|
33
|
-
const template = meta.template;
|
|
34
|
-
if (template === REPEATING_STRUCTURE_TEMPLATES.TIMELINE) {
|
|
35
|
-
const { timelineFields = {} } = meta;
|
|
36
|
-
const referenceNames = [
|
|
37
|
-
timelineFields.title?.name,
|
|
38
|
-
timelineFields.date?.name,
|
|
39
|
-
timelineFields.content?.name,
|
|
40
|
-
timelineFields.status?.name,
|
|
41
|
-
timelineFields.icon?.name
|
|
42
|
-
].filter(Boolean);
|
|
43
|
-
return referenceNames.includes(fieldDef.name);
|
|
44
|
-
}
|
|
45
|
-
if (template === REPEATING_STRUCTURE_TEMPLATES.GALLERY) {
|
|
46
|
-
const { galleryConfig = {} } = meta;
|
|
47
|
-
const referenceIds = [
|
|
48
|
-
galleryConfig.header?.field,
|
|
49
|
-
galleryConfig.heroImage?.source?.field
|
|
50
|
-
].filter(Boolean);
|
|
51
|
-
return referenceIds.includes(fieldDef.id);
|
|
52
|
-
}
|
|
53
|
-
if (template === REPEATING_STRUCTURE_TEMPLATES.MAP) {
|
|
54
|
-
const { mapFieldIds = {} } = meta;
|
|
55
|
-
const referenceIds = [mapFieldIds.location, mapFieldIds.label, mapFieldIds.content].filter(Boolean);
|
|
56
|
-
return referenceIds.includes(fieldDef.id);
|
|
57
|
-
}
|
|
58
|
-
return false;
|
|
59
|
-
};
|
|
60
|
-
const prepareOOTBColumns = ([rsInternal]) => {
|
|
61
|
-
const { getView } = rsInternal;
|
|
29
|
+
const prepareOOTBColumns = (rsInternal) => {
|
|
30
|
+
const meta = rsInternal.getView().meta;
|
|
62
31
|
const translate = rsInternal.getRsStore().translate;
|
|
63
|
-
let
|
|
64
|
-
// Add error column.
|
|
65
|
-
if (isRowErrorFieldEnabled(
|
|
66
|
-
addFrozenColumnAtIndex(rsInternal,
|
|
67
|
-
// Error column is added as a hidden column. Toggles based on state.errors.dataErrors
|
|
68
|
-
{
|
|
32
|
+
let ootbIndex = 0;
|
|
33
|
+
// Add error column (initially hidden; toggled by state.errors.dataErrors).
|
|
34
|
+
if (isRowErrorFieldEnabled(meta)) {
|
|
35
|
+
addFrozenColumnAtIndex(rsInternal, {
|
|
69
36
|
...rowErrorColumnMeta.field,
|
|
70
|
-
label:
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}, rowErrorColumnMeta.options, ootColumnsIndex);
|
|
75
|
-
ootColumnsIndex += 1;
|
|
37
|
+
label: translateLabel(rowErrorColumnMeta.field.label, translate),
|
|
38
|
+
show: meta.rowErrorField?.show ?? false
|
|
39
|
+
}, rowErrorColumnMeta.options, ootbIndex);
|
|
40
|
+
ootbIndex += 1;
|
|
76
41
|
}
|
|
77
|
-
// Add row drag
|
|
78
|
-
if (isRowReorderFieldEnabled(
|
|
42
|
+
// Add row drag-drop column.
|
|
43
|
+
if (isRowReorderFieldEnabled(meta)) {
|
|
79
44
|
addFrozenColumnAtIndex(rsInternal, {
|
|
80
45
|
...rowDragDropColumnMeta.field,
|
|
81
|
-
label:
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}, rowDragDropColumnMeta.options, ootColumnsIndex);
|
|
86
|
-
ootColumnsIndex += 1;
|
|
46
|
+
label: translateLabel(rowDragDropColumnMeta.field.label, translate),
|
|
47
|
+
show: meta.rowReorderField?.show ?? true
|
|
48
|
+
}, rowDragDropColumnMeta.options, ootbIndex);
|
|
49
|
+
ootbIndex += 1;
|
|
87
50
|
}
|
|
88
51
|
// Add selection column.
|
|
89
|
-
if (isRowSelectFieldEnabled(
|
|
52
|
+
if (isRowSelectFieldEnabled(meta)) {
|
|
90
53
|
addFrozenColumnAtIndex(rsInternal, {
|
|
91
54
|
...rowSelectColumnMeta.field,
|
|
92
|
-
label:
|
|
93
|
-
|
|
94
|
-
: rowSelectColumnMeta.field.label
|
|
95
|
-
}, rowSelectColumnMeta.options, ootColumnsIndex);
|
|
55
|
+
label: translateLabel(rowSelectColumnMeta.field.label, translate)
|
|
56
|
+
}, rowSelectColumnMeta.options, ootbIndex);
|
|
96
57
|
}
|
|
97
58
|
// Add row action column.
|
|
98
|
-
if (isRowActionFieldEnabled(
|
|
99
|
-
getView().addColumn({
|
|
59
|
+
if (isRowActionFieldEnabled(meta)) {
|
|
60
|
+
rsInternal.getView().addColumn({
|
|
100
61
|
...rowActionColumnMeta.field,
|
|
101
|
-
label:
|
|
102
|
-
? translate(rowActionColumnMeta.field.label)
|
|
103
|
-
: rowActionColumnMeta.field.label
|
|
62
|
+
label: translateLabel(rowActionColumnMeta.field.label, translate)
|
|
104
63
|
}, rowActionColumnMeta.options);
|
|
105
64
|
}
|
|
106
65
|
};
|
|
107
|
-
/**
|
|
108
|
-
* Prepares {@link Column columns} for the view on initial load.
|
|
109
|
-
* Creates columns only for {@link FieldDef fieldDefs} that are visible or row headers.
|
|
110
|
-
*
|
|
111
|
-
* @param rsInternal - The internal RS object used to access the view and store.
|
|
112
|
-
*/
|
|
113
|
-
function prepareColumns([rsInternal]) {
|
|
114
|
-
const { fieldDefs } = rsInternal.getView().meta;
|
|
115
|
-
const columns = fieldDefs
|
|
116
|
-
.filter(fieldDef => fieldDef.show || shouldCreateColumnForField(rsInternal.getView().meta, fieldDef))
|
|
117
|
-
.map(fieldDef => new Column({ field: fieldDef }, rsInternal));
|
|
118
|
-
rsInternal.getView().setProp({ columns });
|
|
119
|
-
}
|
|
120
66
|
/**
|
|
121
67
|
* Prepares newly visible, grouped, and custom-field-dependent {@link Column columns} for the view.
|
|
122
68
|
*
|
|
@@ -131,47 +77,68 @@ function prepareColumns([rsInternal]) {
|
|
|
131
77
|
*/
|
|
132
78
|
export function prepareNewlyVisibleAndReferredColumns([rsInternal, state]) {
|
|
133
79
|
const rsStore = rsInternal.getRsStore();
|
|
134
|
-
|
|
135
|
-
const
|
|
80
|
+
// Build the full set of required column IDs in a single pass over all state slices.
|
|
81
|
+
const requiredColumnIds = new Set(state.visibleColumns);
|
|
82
|
+
state.groups?.forEach(group => {
|
|
83
|
+
requiredColumnIds.add(group.columnId);
|
|
84
|
+
// Grouped columns are also created for group headers and labels.
|
|
85
|
+
group.additionalFields?.forEach(field => requiredColumnIds.add(field.id));
|
|
86
|
+
});
|
|
136
87
|
// Custom field expressions reference dependent column IDs as plain strings.
|
|
137
88
|
// These columns may be hidden but still need Column generators for rendering.
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
return;
|
|
152
|
-
const createdColumns = newlyAddedColumns.reduce((acc, columnId) => {
|
|
153
|
-
const fieldDef = rsStore.getFieldDefById(columnId);
|
|
154
|
-
if (fieldDef) {
|
|
155
|
-
acc.push(new Column({ field: fieldDef }, rsInternal));
|
|
89
|
+
state.customFields?.forEach(cf => {
|
|
90
|
+
cf.expression.forEach(e => {
|
|
91
|
+
if (typeof e === 'string')
|
|
92
|
+
requiredColumnIds.add(e);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
const existingColumnIds = new Set(rsInternal.getView().columns?.map(col => col.field.id) ?? []);
|
|
96
|
+
const createdColumns = [...requiredColumnIds].reduce((acc, columnId) => {
|
|
97
|
+
if (!existingColumnIds.has(columnId)) {
|
|
98
|
+
const fieldDef = rsStore.getFieldDefById(columnId);
|
|
99
|
+
if (fieldDef) {
|
|
100
|
+
acc.push(new Column({ field: fieldDef }, rsInternal));
|
|
101
|
+
}
|
|
156
102
|
}
|
|
157
103
|
return acc;
|
|
158
104
|
}, []);
|
|
105
|
+
if (!createdColumns.length)
|
|
106
|
+
return;
|
|
159
107
|
rsInternal.getView().setProp({
|
|
160
108
|
columns: [...(rsInternal.getView().columns ?? []), ...createdColumns]
|
|
161
109
|
});
|
|
162
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Prepares {@link Column columns} for the view on initial load.
|
|
113
|
+
* Creates columns from visible/required {@link FieldDef fieldDefs} in a single pass,
|
|
114
|
+
* then delegates OOTB column setup and newly-visible column setup to their respective helpers.
|
|
115
|
+
*
|
|
116
|
+
* @param rsInternal - The internal RS object used to access the view and store.
|
|
117
|
+
*/
|
|
118
|
+
function prepareColumns([rsInternal, state]) {
|
|
119
|
+
const meta = rsInternal.getView().meta;
|
|
120
|
+
// build columns for visible/required fieldDefs.
|
|
121
|
+
const columns = meta.fieldDefs.reduce((acc, fieldDef) => {
|
|
122
|
+
if (shouldCreateColumnForField(meta, fieldDef)) {
|
|
123
|
+
acc.push(new Column({ field: fieldDef }, rsInternal));
|
|
124
|
+
}
|
|
125
|
+
return acc;
|
|
126
|
+
}, []);
|
|
127
|
+
// Set base columns first so subsequent addColumn calls append to the correct view.
|
|
128
|
+
rsInternal.getView().setProp({ columns });
|
|
129
|
+
prepareOOTBColumns(rsInternal);
|
|
130
|
+
prepareNewlyVisibleAndReferredColumns([rsInternal, state]);
|
|
131
|
+
}
|
|
163
132
|
/**
|
|
164
133
|
* Prepares {@link View.columns columns} for the view from {@link Meta.fieldDefs fieldDefs}.
|
|
165
134
|
*/
|
|
166
135
|
export default (rsInternal) => {
|
|
167
136
|
const memoizedPrepareColumns = withMemoization(prepareColumns);
|
|
168
137
|
const memoizedPrepareNewlyVisibleAndReferredColumns = withMemoization(prepareNewlyVisibleAndReferredColumns);
|
|
169
|
-
const memoizedPrepareOOTBColumns = withMemoization(prepareOOTBColumns);
|
|
170
138
|
return function execute(featureProps) {
|
|
171
139
|
const state = featureProps.getState();
|
|
172
|
-
memoizedPrepareColumns([rsInternal], [rsInternal.getView().meta]);
|
|
140
|
+
memoizedPrepareColumns([rsInternal, state], [rsInternal.getView().meta]);
|
|
173
141
|
memoizedPrepareNewlyVisibleAndReferredColumns([rsInternal, state], [state.visibleColumns, state.groups, state.customFields]);
|
|
174
|
-
memoizedPrepareOOTBColumns([rsInternal], [rsInternal.getView().meta]);
|
|
175
142
|
};
|
|
176
143
|
};
|
|
177
144
|
//# sourceMappingURL=prepareColumns.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareColumns.js","sourceRoot":"","sources":["../../../../../../src/core/features/uIFeatures/beforeRender/prepareColumns.ts"],"names":[],"mappings":"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","sourcesContent":["import type { OmitStrict } from '@pega/cosmos-react-core';\n\nimport {\n isRowActionFieldEnabled,\n isRowErrorFieldEnabled,\n isRowReorderFieldEnabled,\n isRowSelectFieldEnabled,\n withMemoization\n} from '../../../utils/util';\nimport type RsInternal from '../../../RsInternal';\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type View from '../../../generators/ViewGenerator';\nimport {\n REPEATING_STRUCTURE_TEMPLATES,\n type FieldDef,\n type Meta\n} from '../../../../../types/Meta.types';\nimport {\n rowActionColumnMeta,\n rowDragDropColumnMeta,\n rowErrorColumnMeta,\n rowSelectColumnMeta\n} from '../../../constants';\nimport type { ColumnConfig } from '../../../generators/ColumnGenerator.types';\nimport defaultTranslations from '../../../defaultTranslations';\nimport type { BeforeRenderFeatureProps } from '../../featureFactory';\nimport type { State } from '../../../../../types/State.types';\nimport Column from '../../../generators/ColumnGenerator';\n\nconst addFrozenColumnAtIndex = (\n rsInternal: RsInternal,\n field: FieldDef,\n options: OmitStrict<ColumnConfig, 'field'>,\n index: number\n) => {\n const { getView, getRsStateResolver } = rsInternal;\n const { getState } = getRsStateResolver();\n const addedColumn = getView().addColumn(\n // error column initially should be hidden and will be displayed only when there are errors in state, unless consumer needs to display it on load.\n field,\n options\n );\n if (!getState().freezeColumns?.includes(field.id)) {\n addedColumn.applyFreezeAtIndex(index);\n }\n};\n\nexport const isTranslationKey = (key: string): key is keyof typeof defaultTranslations => {\n return key in defaultTranslations;\n};\n\n/**\n * Returns true if a column should still be created for the given fieldDef\n * even when the field is not visible (`show = false`).\n *\n * This happens when the field is required by the current template configuration\n * (e.g., Timeline, Gallery, Map) or when it is marked as a row header.\n *\n * TODO: Refactor, move template-field resolution into the RS layer (e.g. `useRepeat`).\n */\nconst shouldCreateColumnForField = (meta: Meta, fieldDef: FieldDef): boolean => {\n if (fieldDef.isRowHeader) return true;\n\n if (fieldDef.filterPickList) return true;\n\n const template = meta.template;\n\n if (template === REPEATING_STRUCTURE_TEMPLATES.TIMELINE) {\n const { timelineFields = {} } = meta;\n\n const referenceNames = [\n timelineFields.title?.name,\n timelineFields.date?.name,\n timelineFields.content?.name,\n timelineFields.status?.name,\n timelineFields.icon?.name\n ].filter(Boolean);\n\n return referenceNames.includes(fieldDef.name);\n }\n\n if (template === REPEATING_STRUCTURE_TEMPLATES.GALLERY) {\n const { galleryConfig = {} } = meta;\n\n const referenceIds = [\n galleryConfig.header?.field,\n galleryConfig.heroImage?.source?.field\n ].filter(Boolean);\n\n return referenceIds.includes(fieldDef.id);\n }\n\n if (template === REPEATING_STRUCTURE_TEMPLATES.MAP) {\n const { mapFieldIds = {} } = meta;\n\n const referenceIds = [mapFieldIds.location, mapFieldIds.label, mapFieldIds.content].filter(\n Boolean\n );\n\n return referenceIds.includes(fieldDef.id);\n }\n\n return false;\n};\n\nconst prepareOOTBColumns = ([rsInternal]: [rsInternal: RsInternal]) => {\n const { getView } = rsInternal;\n const translate = rsInternal.getRsStore().translate;\n let ootColumnsIndex = 0;\n // Add error column.\n if (isRowErrorFieldEnabled(getView().meta)) {\n addFrozenColumnAtIndex(\n rsInternal,\n // Error column is added as a hidden column. Toggles based on state.errors.dataErrors\n {\n ...rowErrorColumnMeta.field,\n label: isTranslationKey(rowErrorColumnMeta.field.label)\n ? translate(rowErrorColumnMeta.field.label)\n : rowErrorColumnMeta.field.label,\n show: getView().meta.rowErrorField?.show ?? false\n },\n rowErrorColumnMeta.options,\n ootColumnsIndex\n );\n ootColumnsIndex += 1;\n }\n // Add row drag drop column.\n if (isRowReorderFieldEnabled(getView().meta)) {\n addFrozenColumnAtIndex(\n rsInternal,\n {\n ...rowDragDropColumnMeta.field,\n label: isTranslationKey(rowDragDropColumnMeta.field.label)\n ? translate(rowDragDropColumnMeta.field.label)\n : rowDragDropColumnMeta.field.label,\n show: getView().meta.rowReorderField?.show ?? true\n },\n rowDragDropColumnMeta.options,\n ootColumnsIndex\n );\n ootColumnsIndex += 1;\n }\n // Add selection column.\n if (isRowSelectFieldEnabled(getView().meta)) {\n addFrozenColumnAtIndex(\n rsInternal,\n {\n ...rowSelectColumnMeta.field,\n label: isTranslationKey(rowSelectColumnMeta.field.label)\n ? translate(rowSelectColumnMeta.field.label)\n : rowSelectColumnMeta.field.label\n },\n rowSelectColumnMeta.options,\n ootColumnsIndex\n );\n }\n\n // Add row action column.\n if (isRowActionFieldEnabled(getView().meta)) {\n getView().addColumn(\n {\n ...rowActionColumnMeta.field,\n label: isTranslationKey(rowActionColumnMeta.field.label)\n ? translate(rowActionColumnMeta.field.label)\n : rowActionColumnMeta.field.label\n },\n rowActionColumnMeta.options\n );\n }\n};\n\n/**\n * Prepares {@link Column columns} for the view on initial load.\n * Creates columns only for {@link FieldDef fieldDefs} that are visible or row headers.\n *\n * @param rsInternal - The internal RS object used to access the view and store.\n */\nfunction prepareColumns([rsInternal]: [rsInternal: RsInternal]) {\n const { fieldDefs } = rsInternal.getView().meta;\n\n const columns = fieldDefs\n .filter(\n fieldDef => fieldDef.show || shouldCreateColumnForField(rsInternal.getView().meta, fieldDef)\n )\n .map(fieldDef => new Column({ field: fieldDef }, rsInternal));\n\n rsInternal.getView().setProp({ columns });\n}\n\n/**\n * Prepares newly visible, grouped, and custom-field-dependent {@link Column columns} for the view.\n *\n * Runs on {@link State.visibleColumns visibleColumns}, {@link State.groups groups},\n * and {@link State.customFields customFields} state changes.\n * Finds column IDs that are present in `visibleColumns`, `groups`, or referenced in\n * `customFields` expressions but not yet in {@link View.columns view.columns},\n * creates a {@link Column} for each using the corresponding {@link FieldDef} from the store.\n *\n * @param rsInternal - The internal RS object used to access the view and store.\n * @param state - The current RS state containing `visibleColumns`, `groups`, and `customFields`.\n */\nexport function prepareNewlyVisibleAndReferredColumns([rsInternal, state]: [\n rsInternal: RsInternal,\n state: State\n]) {\n const rsStore = rsInternal.getRsStore();\n const groupColumnIds = state.groups?.map(group => group.columnId) ?? [];\n const groupAdditionalFieldIds =\n state.groups?.flatMap(group => group.additionalFields?.map(field => field.id) ?? []) ?? [];\n\n // Custom field expressions reference dependent column IDs as plain strings.\n // These columns may be hidden but still need Column generators for rendering.\n const customFieldDependentColumnIds =\n state.customFields?.flatMap(cf =>\n cf.expression.filter((e): e is string => typeof e === 'string')\n ) ?? [];\n\n // Grouped columns are also created for group headers and labels.\n const visibleAndGroupedColumns = [\n ...new Set([\n ...(state.visibleColumns ?? []),\n ...groupColumnIds,\n ...groupAdditionalFieldIds,\n ...customFieldDependentColumnIds\n ])\n ];\n\n // Finding columns that are newly added in visibleColumns and groups, which are not yet present in view.columns.\n const newlyAddedColumns = visibleAndGroupedColumns.filter(\n columnId => !rsInternal.getView().columns?.some(col => col.field.id === columnId)\n );\n\n if (!newlyAddedColumns.length) return;\n\n const createdColumns = newlyAddedColumns.reduce<Column[]>((acc, columnId) => {\n const fieldDef = rsStore.getFieldDefById(columnId);\n if (fieldDef) {\n acc.push(new Column({ field: fieldDef }, rsInternal));\n }\n return acc;\n }, []);\n\n rsInternal.getView().setProp({\n columns: [...(rsInternal.getView().columns ?? []), ...createdColumns]\n });\n}\n\n/**\n * Prepares {@link View.columns columns} for the view from {@link Meta.fieldDefs fieldDefs}.\n */\nexport default (rsInternal: RsInternal) => {\n const memoizedPrepareColumns = withMemoization(prepareColumns);\n const memoizedPrepareNewlyVisibleAndReferredColumns = withMemoization(\n prepareNewlyVisibleAndReferredColumns\n );\n const memoizedPrepareOOTBColumns = withMemoization(prepareOOTBColumns);\n return function execute(featureProps: BeforeRenderFeatureProps) {\n const state = featureProps.getState();\n memoizedPrepareColumns([rsInternal], [rsInternal.getView().meta]);\n memoizedPrepareNewlyVisibleAndReferredColumns(\n [rsInternal, state],\n [state.visibleColumns, state.groups, state.customFields]\n );\n memoizedPrepareOOTBColumns([rsInternal], [rsInternal.getView().meta]);\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"prepareColumns.js","sourceRoot":"","sources":["../../../../../../src/core/features/uIFeatures/beforeRender/prepareColumns.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,MAAM,MAAM,qCAAqC,CAAC;AAIzD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,UAAsB,EACtB,KAAe,EACf,OAA0C,EAC1C,KAAa,EACb,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,UAAU,CAAC;IACnD,MAAM,EAAE,QAAQ,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAC1C,MAAM,WAAW,GAAG,OAAO,EAAE,CAAC,SAAS;IACrC,kJAAkJ;IAClJ,KAAK,EACL,OAAO,CACR,CAAC;IACF,IAAI,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QAClD,WAAW,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;AACH,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,CAAC,UAAsB,EAAE,EAAE;IACpD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;IACvC,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC;IACpD,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,2EAA2E;IAC3E,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,sBAAsB,CACpB,UAAU,EACV;YACE,GAAG,kBAAkB,CAAC,KAAK;YAC3B,KAAK,EAAE,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;YAChE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,KAAK;SACxC,EACD,kBAAkB,CAAC,OAAO,EAC1B,SAAS,CACV,CAAC;QACF,SAAS,IAAI,CAAC,CAAC;IACjB,CAAC;IAED,4BAA4B;IAC5B,IAAI,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,sBAAsB,CACpB,UAAU,EACV;YACE,GAAG,qBAAqB,CAAC,KAAK;YAC9B,KAAK,EAAE,cAAc,CAAC,qBAAqB,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;YACnE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,IAAI;SACzC,EACD,qBAAqB,CAAC,OAAO,EAC7B,SAAS,CACV,CAAC;QACF,SAAS,IAAI,CAAC,CAAC;IACjB,CAAC;IAED,wBAAwB;IACxB,IAAI,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,sBAAsB,CACpB,UAAU,EACV;YACE,GAAG,mBAAmB,CAAC,KAAK;YAC5B,KAAK,EAAE,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;SAClE,EACD,mBAAmB,CAAC,OAAO,EAC3B,SAAS,CACV,CAAC;IACJ,CAAC;IAED,yBAAyB;IACzB,IAAI,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,UAAU,CAAC,OAAO,EAAE,CAAC,SAAS,CAC5B;YACE,GAAG,mBAAmB,CAAC,KAAK;YAC5B,KAAK,EAAE,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC;SAClE,EACD,mBAAmB,CAAC,OAAO,CAC5B,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qCAAqC,CAAC,CAAC,UAAU,EAAE,KAAK,CAGvE;IACC,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;IAExC,oFAAoF;IACpF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAS,KAAK,CAAC,cAAc,CAAC,CAAC;IAEhE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;QAC5B,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtC,iEAAiE;QACjE,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,8EAA8E;IAC9E,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE;QAC/B,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACxB,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAEhG,MAAM,cAAc,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC,MAAM,CAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;QAC/E,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,QAAQ,EAAE,CAAC;gBACb,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,CAAC,cAAc,CAAC,MAAM;QAAE,OAAO;IAEnC,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC;QAC3B,OAAO,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC;KACtE,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,CAAC,UAAU,EAAE,KAAK,CAAyC;IACjF,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;IAEvC,gDAAgD;IAChD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;QAChE,IAAI,0BAA0B,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC/C,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,mFAAmF;IACnF,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAE1C,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC/B,qCAAqC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,eAAe,CAAC,UAAsB,EAAE,EAAE;IACxC,MAAM,sBAAsB,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IAC/D,MAAM,6CAA6C,GAAG,eAAe,CACnE,qCAAqC,CACtC,CAAC;IACF,OAAO,SAAS,OAAO,CAAC,YAAsC;QAC5D,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;QACtC,sBAAsB,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACzE,6CAA6C,CAC3C,CAAC,UAAU,EAAE,KAAK,CAAC,EACnB,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CACzD,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { OmitStrict } from '@pega/cosmos-react-core';\n\nimport {\n isRowActionFieldEnabled,\n isRowErrorFieldEnabled,\n isRowReorderFieldEnabled,\n isRowSelectFieldEnabled,\n withMemoization,\n shouldCreateColumnForField,\n translateLabel\n} from '../../../utils/util';\nimport type RsInternal from '../../../RsInternal';\nimport {\n rowActionColumnMeta,\n rowDragDropColumnMeta,\n rowErrorColumnMeta,\n rowSelectColumnMeta\n} from '../../../constants';\nimport type { BeforeRenderFeatureProps } from '../../featureFactory';\nimport type { State } from '../../../../../types/State.types';\nimport Column from '../../../generators/ColumnGenerator';\nimport type { FieldDef } from '../../../../../types/Meta.types';\nimport type { ColumnConfig } from '../../../generators/ColumnGenerator.types';\n\n/**\n * Adds a column to the view at a frozen index.\n * If the column's field ID is not in the frozen-columns list, it is also frozen at the given index.\n *\n * @param rsInternal - The internal RS object.\n * @param field - The field definition for the column.\n * @param options - Column config options (excluding `field`).\n * @param index - The freeze index to apply.\n */\nexport const addFrozenColumnAtIndex = (\n rsInternal: RsInternal,\n field: FieldDef,\n options: OmitStrict<ColumnConfig, 'field'>,\n index: number\n) => {\n const { getView, getRsStateResolver } = rsInternal;\n const { getState } = getRsStateResolver();\n const addedColumn = getView().addColumn(\n // error column initially should be hidden and will be displayed only when there are errors in state, unless consumer needs to display it on load.\n field,\n options\n );\n if (!getState().freezeColumns?.includes(field.id)) {\n addedColumn.applyFreezeAtIndex(index);\n }\n};\n\n/**\n * Adds all OOTB columns (error, drag-drop, select, action) to the view.\n * Must be called after base columns have been committed via `setProp`.\n *\n * @param rsInternal - The internal RS object used to access the view and store.\n */\nconst prepareOOTBColumns = (rsInternal: RsInternal) => {\n const meta = rsInternal.getView().meta;\n const translate = rsInternal.getRsStore().translate;\n let ootbIndex = 0;\n\n // Add error column (initially hidden; toggled by state.errors.dataErrors).\n if (isRowErrorFieldEnabled(meta)) {\n addFrozenColumnAtIndex(\n rsInternal,\n {\n ...rowErrorColumnMeta.field,\n label: translateLabel(rowErrorColumnMeta.field.label, translate),\n show: meta.rowErrorField?.show ?? false\n },\n rowErrorColumnMeta.options,\n ootbIndex\n );\n ootbIndex += 1;\n }\n\n // Add row drag-drop column.\n if (isRowReorderFieldEnabled(meta)) {\n addFrozenColumnAtIndex(\n rsInternal,\n {\n ...rowDragDropColumnMeta.field,\n label: translateLabel(rowDragDropColumnMeta.field.label, translate),\n show: meta.rowReorderField?.show ?? true\n },\n rowDragDropColumnMeta.options,\n ootbIndex\n );\n ootbIndex += 1;\n }\n\n // Add selection column.\n if (isRowSelectFieldEnabled(meta)) {\n addFrozenColumnAtIndex(\n rsInternal,\n {\n ...rowSelectColumnMeta.field,\n label: translateLabel(rowSelectColumnMeta.field.label, translate)\n },\n rowSelectColumnMeta.options,\n ootbIndex\n );\n }\n\n // Add row action column.\n if (isRowActionFieldEnabled(meta)) {\n rsInternal.getView().addColumn(\n {\n ...rowActionColumnMeta.field,\n label: translateLabel(rowActionColumnMeta.field.label, translate)\n },\n rowActionColumnMeta.options\n );\n }\n};\n\n/**\n * Prepares newly visible, grouped, and custom-field-dependent {@link Column columns} for the view.\n *\n * Runs on {@link State.visibleColumns visibleColumns}, {@link State.groups groups},\n * and {@link State.customFields customFields} state changes.\n * Finds column IDs that are present in `visibleColumns`, `groups`, or referenced in\n * `customFields` expressions but not yet in {@link View.columns view.columns},\n * creates a {@link Column} for each using the corresponding {@link FieldDef} from the store.\n *\n * @param rsInternal - The internal RS object used to access the view and store.\n * @param state - The current RS state containing `visibleColumns`, `groups`, and `customFields`.\n */\nexport function prepareNewlyVisibleAndReferredColumns([rsInternal, state]: [\n rsInternal: RsInternal,\n state: State\n]) {\n const rsStore = rsInternal.getRsStore();\n\n // Build the full set of required column IDs in a single pass over all state slices.\n const requiredColumnIds = new Set<string>(state.visibleColumns);\n\n state.groups?.forEach(group => {\n requiredColumnIds.add(group.columnId);\n // Grouped columns are also created for group headers and labels.\n group.additionalFields?.forEach(field => requiredColumnIds.add(field.id));\n });\n\n // Custom field expressions reference dependent column IDs as plain strings.\n // These columns may be hidden but still need Column generators for rendering.\n state.customFields?.forEach(cf => {\n cf.expression.forEach(e => {\n if (typeof e === 'string') requiredColumnIds.add(e);\n });\n });\n\n const existingColumnIds = new Set(rsInternal.getView().columns?.map(col => col.field.id) ?? []);\n\n const createdColumns = [...requiredColumnIds].reduce<Column[]>((acc, columnId) => {\n if (!existingColumnIds.has(columnId)) {\n const fieldDef = rsStore.getFieldDefById(columnId);\n if (fieldDef) {\n acc.push(new Column({ field: fieldDef }, rsInternal));\n }\n }\n return acc;\n }, []);\n\n if (!createdColumns.length) return;\n\n rsInternal.getView().setProp({\n columns: [...(rsInternal.getView().columns ?? []), ...createdColumns]\n });\n}\n\n/**\n * Prepares {@link Column columns} for the view on initial load.\n * Creates columns from visible/required {@link FieldDef fieldDefs} in a single pass,\n * then delegates OOTB column setup and newly-visible column setup to their respective helpers.\n *\n * @param rsInternal - The internal RS object used to access the view and store.\n */\nfunction prepareColumns([rsInternal, state]: [rsInternal: RsInternal, state: State]) {\n const meta = rsInternal.getView().meta;\n\n // build columns for visible/required fieldDefs.\n const columns = meta.fieldDefs.reduce<Column[]>((acc, fieldDef) => {\n if (shouldCreateColumnForField(meta, fieldDef)) {\n acc.push(new Column({ field: fieldDef }, rsInternal));\n }\n return acc;\n }, []);\n\n // Set base columns first so subsequent addColumn calls append to the correct view.\n rsInternal.getView().setProp({ columns });\n\n prepareOOTBColumns(rsInternal);\n prepareNewlyVisibleAndReferredColumns([rsInternal, state]);\n}\n\n/**\n * Prepares {@link View.columns columns} for the view from {@link Meta.fieldDefs fieldDefs}.\n */\nexport default (rsInternal: RsInternal) => {\n const memoizedPrepareColumns = withMemoization(prepareColumns);\n const memoizedPrepareNewlyVisibleAndReferredColumns = withMemoization(\n prepareNewlyVisibleAndReferredColumns\n );\n return function execute(featureProps: BeforeRenderFeatureProps) {\n const state = featureProps.getState();\n memoizedPrepareColumns([rsInternal, state], [rsInternal.getView().meta]);\n memoizedPrepareNewlyVisibleAndReferredColumns(\n [rsInternal, state],\n [state.visibleColumns, state.groups, state.customFields]\n );\n };\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/features/uIFeatures/index.ts"],"names":[],"mappings":"AAuCA,OAAO,WAAW,MAAM,4BAA4B,CAAC;;;4EALhC,kEACpB;6BAnBI,kEAAsC;6BAyEqwG,kEAAsC;uBAf5zG,kEAG1B;;0BAvDoD,kEAChB;;uBAYxB,kEAAsC;6BAsDw+B,kEAAsC;;4BA3D5gC,kEACpC;8BA0Dw5L,kEAAsC;kCA9Bp8L,kEAEV;6BApCiC,kEAChB;2BAGgB,kEAC5B;2EA2Du8C,kEAAsC;yCAjDp+C,kEAAsC;+BAiD85K,kEAAsC;4BArDt/K,kEAAsC;kCAqDusT,kEAAsC;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/features/uIFeatures/index.ts"],"names":[],"mappings":"AAuCA,OAAO,WAAW,MAAM,4BAA4B,CAAC;;;4EALhC,kEACpB;6BAnBI,kEAAsC;6BAyEqwG,kEAAsC;uBAf5zG,kEAG1B;;0BAvDoD,kEAChB;;uBAYxB,kEAAsC;6BAsDw+B,kEAAsC;;4BA3D5gC,kEACpC;8BA0Dw5L,kEAAsC;kCA9Bp8L,kEAEV;6BApCiC,kEAChB;2BAGgB,kEAC5B;2EA2Du8C,kEAAsC;yCAjDp+C,kEAAsC;+BAiD85K,kEAAsC;4BArDt/K,kEAAsC;kCAqDusT,kEAAsC;;6EAA1oM,kEAAsC;gCA/D/oH,kEACpB;kCAR2C,kEAC1C;4BAkEY,kEAGE;kCApEN,kEAAsC;sCAQ/B,kEAC7B;+BADwD,kEAC5B;0EA2Dq8O,kEAAsC;wEAA7qI,kEAAsC;wCA5C73G,kEAEC;4BA8BG,kEAGR;6BArE8D,kEAC5B;sEAwBtB,kEACR;2BAoDK,kEAAsC;4BA/DxB,kEACpB;;uCA8Dm0B,kEAAsC;;;0BAAynD,sDAA0B;iCAAkrB,sDAA0B;yCA7DnqG,sDAC5B;;;AAaZ,wBA8CE"}
|
|
@@ -9,6 +9,7 @@ import type { DefaultConfigType } from '../config/config';
|
|
|
9
9
|
import type { RowData } from '../generators/RowGenerator.types';
|
|
10
10
|
import type Column from '../generators/ColumnGenerator';
|
|
11
11
|
import type RsInternal from '../RsInternal';
|
|
12
|
+
import defaultTranslations from '../defaultTranslations';
|
|
12
13
|
import type { FilterInfo, FilterInitializers, AddFilterParams, GenericObject, PassablePromise, DeepNonNullableArray, FunctionToBeMemoized, MemoizedFunction } from './util.types';
|
|
13
14
|
export declare const EXCLUDED_NUMERIC_TYPES: string[];
|
|
14
15
|
export declare const OOTB_COLUMNS: string[];
|
|
@@ -405,4 +406,22 @@ export declare function getVisibleColumnsFromHidden(meta: Meta, hiddenColumns: S
|
|
|
405
406
|
* @returns Array of visible column IDs.
|
|
406
407
|
*/
|
|
407
408
|
export declare function getVisibleColumnsFromFieldDefs(meta: Meta): string[];
|
|
409
|
+
export declare const isTranslationKey: (key: string) => key is keyof typeof defaultTranslations;
|
|
410
|
+
/**
|
|
411
|
+
* Translates a label if it is a known translation key, otherwise returns it as-is.
|
|
412
|
+
*
|
|
413
|
+
* @param label - The label string to translate.
|
|
414
|
+
* @param translate - The translation function from the RS store.
|
|
415
|
+
*/
|
|
416
|
+
export declare const translateLabel: (label: string, translate: (key: keyof typeof defaultTranslations) => string) => string;
|
|
417
|
+
/**
|
|
418
|
+
* Returns true if a column should still be created for the given fieldDef
|
|
419
|
+
* even when the field is not visible (`show = false`).
|
|
420
|
+
*
|
|
421
|
+
* This happens when the field is required by the current template configuration
|
|
422
|
+
* (e.g., Timeline, Gallery, Map) or when it is marked as a row header.
|
|
423
|
+
*
|
|
424
|
+
* TODO: Refactor, move template-field resolution into the RS layer (e.g. `useRepeat`).
|
|
425
|
+
*/
|
|
426
|
+
export declare const shouldCreateColumnForField: (meta: Meta, fieldDef: FieldDef) => boolean;
|
|
408
427
|
//# sourceMappingURL=util.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/util.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,sCAAsC,CAAC;AAa9C,OAAoB,EAAE,KAAK,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,KAAK,IAAI,MAAM,6BAA6B,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAe,MAAM,4BAA4B,CAAC;AAC7F,OAAO,KAAK,EAAE,MAAM,EAAkB,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC1F,OAAO,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/util.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,8 @@ import { hasProp } from '@pega/cosmos-react-core';
|
|
|
4
4
|
import { filterParams, comparatorMap } from '../config/filterConfig';
|
|
5
5
|
import { EXTERNAL_FILTERS, rowActionColumnMeta, rowDragDropColumnMeta, rowErrorColumnMeta, rowSelectColumnMeta, SELECTION_MODES, TEMPLATES } from '../constants';
|
|
6
6
|
import ActionTypes, {} from '../actions/actionConstants';
|
|
7
|
-
import { FieldType } from '../../../types/Meta.types';
|
|
7
|
+
import { FieldType, REPEATING_STRUCTURE_TEMPLATES } from '../../../types/Meta.types';
|
|
8
|
+
import defaultTranslations from '../defaultTranslations';
|
|
8
9
|
import evaluateConditionLocally from './condition-utils';
|
|
9
10
|
export const EXCLUDED_NUMERIC_TYPES = ['Currency'];
|
|
10
11
|
export const OOTB_COLUMNS = [
|
|
@@ -995,4 +996,51 @@ export function getVisibleColumnsFromHidden(meta, hiddenColumns) {
|
|
|
995
996
|
export function getVisibleColumnsFromFieldDefs(meta) {
|
|
996
997
|
return meta.fieldDefs.filter(fieldDef => fieldDef.show).map(fieldDef => fieldDef.id);
|
|
997
998
|
}
|
|
999
|
+
export const isTranslationKey = (key) => key in defaultTranslations;
|
|
1000
|
+
/**
|
|
1001
|
+
* Translates a label if it is a known translation key, otherwise returns it as-is.
|
|
1002
|
+
*
|
|
1003
|
+
* @param label - The label string to translate.
|
|
1004
|
+
* @param translate - The translation function from the RS store.
|
|
1005
|
+
*/
|
|
1006
|
+
export const translateLabel = (label, translate) => (isTranslationKey(label) ? translate(label) : label);
|
|
1007
|
+
/**
|
|
1008
|
+
* Returns true if a column should still be created for the given fieldDef
|
|
1009
|
+
* even when the field is not visible (`show = false`).
|
|
1010
|
+
*
|
|
1011
|
+
* This happens when the field is required by the current template configuration
|
|
1012
|
+
* (e.g., Timeline, Gallery, Map) or when it is marked as a row header.
|
|
1013
|
+
*
|
|
1014
|
+
* TODO: Refactor, move template-field resolution into the RS layer (e.g. `useRepeat`).
|
|
1015
|
+
*/
|
|
1016
|
+
export const shouldCreateColumnForField = (meta, fieldDef) => {
|
|
1017
|
+
if (fieldDef.show || fieldDef.isRowHeader || fieldDef.filterPickList)
|
|
1018
|
+
return true;
|
|
1019
|
+
const template = meta.template;
|
|
1020
|
+
if (template === REPEATING_STRUCTURE_TEMPLATES.TIMELINE) {
|
|
1021
|
+
const { timelineFields = {} } = meta;
|
|
1022
|
+
const referenceNames = [
|
|
1023
|
+
timelineFields.title?.name,
|
|
1024
|
+
timelineFields.date?.name,
|
|
1025
|
+
timelineFields.content?.name,
|
|
1026
|
+
timelineFields.status?.name,
|
|
1027
|
+
timelineFields.icon?.name
|
|
1028
|
+
].filter(Boolean);
|
|
1029
|
+
return referenceNames.includes(fieldDef.name);
|
|
1030
|
+
}
|
|
1031
|
+
if (template === REPEATING_STRUCTURE_TEMPLATES.GALLERY) {
|
|
1032
|
+
const { galleryConfig = {} } = meta;
|
|
1033
|
+
const referenceIds = [
|
|
1034
|
+
galleryConfig.header?.field,
|
|
1035
|
+
galleryConfig.heroImage?.source?.field
|
|
1036
|
+
].filter(Boolean);
|
|
1037
|
+
return referenceIds.includes(fieldDef.id);
|
|
1038
|
+
}
|
|
1039
|
+
if (template === REPEATING_STRUCTURE_TEMPLATES.MAP) {
|
|
1040
|
+
const { mapFieldIds = {} } = meta;
|
|
1041
|
+
const referenceIds = [mapFieldIds.location, mapFieldIds.label, mapFieldIds.content].filter(Boolean);
|
|
1042
|
+
return referenceIds.includes(fieldDef.id);
|
|
1043
|
+
}
|
|
1044
|
+
return false;
|
|
1045
|
+
};
|
|
998
1046
|
//# sourceMappingURL=util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/core/utils/util.ts"],"names":[],"mappings":"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","sourcesContent":["import fastDeepEqual from 'fast-deep-equal/es6';\n\nimport {\n splitConditionTree,\n type Condition,\n type LeafCondition\n} from '@pega/cosmos-react-condition-builder';\nimport { hasProp } from '@pega/cosmos-react-core';\n\nimport { filterParams, comparatorMap, type FilterConfig } from '../config/filterConfig';\nimport {\n EXTERNAL_FILTERS,\n rowActionColumnMeta,\n rowDragDropColumnMeta,\n rowErrorColumnMeta,\n rowSelectColumnMeta,\n SELECTION_MODES,\n TEMPLATES\n} from '../constants';\nimport ActionTypes, { type ActionType } from '../actions/actionConstants';\nimport type View from '../generators/ViewGenerator';\nimport type { State, Group, Personalization, CustomField } from '../../../types/State.types';\nimport type { Action, PaginateAction, PaginationPayload } from '../actions/actions.types';\nimport { FieldType, type FieldDef, type Meta, type StyleFormat } from '../../../types/Meta.types';\nimport type {\n SupportedConsumerPayloads,\n SupportedConsumerActionType,\n RefreshNotificationForConsumer\n} from '../generators/viewUtilityMethods';\nimport type { DefaultConfigType } from '../config/config';\nimport type { RowData } from '../generators/RowGenerator.types';\nimport type Column from '../generators/ColumnGenerator';\nimport type RsInternal from '../RsInternal';\n\nimport type {\n FeatureMap,\n FilterInfo,\n FilterInitializers,\n AddFilterParams,\n GenericObject,\n DefaultConfigKeys,\n DefaultFieldDefKeys,\n PassablePromise,\n DeepNonNullableArray,\n MemoizedFunctionParameters,\n FunctionToBeMemoized,\n MemoizedFunction\n} from './util.types';\nimport evaluateConditionLocally from './condition-utils';\n\nexport const EXCLUDED_NUMERIC_TYPES = ['Currency'];\nexport const OOTB_COLUMNS = [\n rowDragDropColumnMeta.field.id,\n rowErrorColumnMeta.field.id,\n rowActionColumnMeta.field.id,\n rowSelectColumnMeta.field.id\n];\n\nconst groupBySeparator = '||'; // To avoid any ambiguities\n\nconst UNSUPPORTED_OBJECT_TYPE_FIELD_ANALYTICAL_FEATURES = ['sort', 'filter', 'grouping'];\n\n/**\n * Creates an object mapping for each property in `propertiesArr` to a boolean flag indicating whether the feature is enabled.\n * The flag is derived from `fieldDefs`.\n * The flag is `true` if in any `fieldDef` the value of the property is true; otherwise, it is `false`.\n * @param propertiesArr Array of features which needs to be checked in the fieldDefs\n * @param fieldDefs Array of {@link FieldDef}.\n * @returns An object containing the key as feature from `propertiesArr` and value as boolean indicating the feature is enabled or not.\n */\nfunction getEnabledFeatures(propertiesArr: (keyof FieldDef)[], fieldDefs: FieldDef[]): FeatureMap {\n const featuresMap = {} as FeatureMap;\n propertiesArr.forEach(prop => {\n for (const element of fieldDefs) {\n const value = element[prop];\n if (value) {\n featuresMap[prop] = true;\n break;\n }\n }\n });\n return featuresMap;\n}\n\n/**\n * Memoizes a function, returning a memoized version that caches the result based on dependencies.\n *\n * The memoized function accepts two arguments: [arguments], [dependencies].\n * If dependencies are not provided explicitly, arguments are defaulted to dependencies.\n * If a compare function is passed as the last argument, it decides whether to return a memoized value or not.\n *\n * @param fn - The function to memoize.\n * @returns The memoized function.\n */\nexport function withMemoization<P extends any[], R>(\n fn: FunctionToBeMemoized<P, R>\n): MemoizedFunction<P, R> {\n let value: R;\n let before: any[];\n const sameAsBefore = (v: any, index: number) => {\n return v === before[index];\n };\n return function inner(\n this: ThisParameterType<FunctionToBeMemoized<P, R>>,\n ...args: MemoizedFunctionParameters<P>\n ) {\n // accepts two arguments ([arguments], [dependencies])\n // if dependencies are not provided explicitly, arguments are defaulted to dependencies\n const deps = args && (args[1] && typeof args[1] !== 'function' ? [...args[1]] : [...args[0]]);\n\n // if compare function is passed through, that will decide whether return a memoized value or not.\n const compareFunc = args && args[args.length - 1];\n if (compareFunc && typeof compareFunc === 'function') {\n if (!before || !compareFunc(before, deps)) value = fn.apply(this, [args[0]]);\n before = deps;\n } else if ((!deps || !deps.length) && !before) {\n before = [];\n value = fn.apply(this, [args[0]]);\n } else if (!before || deps.length !== before.length || !deps.every(sameAsBefore)) {\n before = deps;\n value = fn.apply(this, [args[0]]);\n }\n return value;\n };\n}\n\n/**\n * Picks specific properties from an object and returns a new object containing only those properties.\n * If the object is null or undefined, it returns undefined.\n *\n * @param obj - The source object from which properties are picked.\n * @param props - An array of property names to be picked from the object.\n * @returns A new object with only the picked properties, or `undefined` if the source object is null or undefined.\n */\nexport function pickProperties<T extends object, K extends keyof T>(\n obj: T | null | undefined,\n props: K[]\n): Pick<T, K> | undefined {\n if (!obj) {\n return undefined;\n }\n\n return props.reduce(\n (accumulator, prop) => {\n if (obj[prop] !== undefined) {\n accumulator[prop] = obj[prop];\n }\n return accumulator;\n },\n {} as Pick<T, K>\n );\n}\n\n// Storing the caching at module level so that all consumers of this function will get the cached values.\n// Since this function attaches the element on the document, it's assumed that the scrollbars styling is same on the document.\nlet previousWindowHeight = window.innerHeight;\nlet previousWindowWidth = window.innerWidth;\nlet cachedScrollBarWidth: number;\n\n/**\n * Returns the scrollbar width for a given browser/application.\n * @returns The scrollbar width in number.\n */\nexport function getScrollbarWidth(): number {\n if (\n previousWindowHeight === window.innerHeight &&\n previousWindowWidth === window.innerWidth &&\n cachedScrollBarWidth\n ) {\n return cachedScrollBarWidth;\n }\n\n // Creating invisible container\n const outer = document.createElement('div');\n outer.style.visibility = 'hidden';\n outer.style.overflow = 'scroll'; // forcing scrollbar to appear\n document.body.appendChild(outer);\n\n // Creating inner element and placing it in the container\n const inner = document.createElement('div');\n outer.appendChild(inner);\n\n // Calculating difference between container's full width and the child width\n const scrollbarWidth = outer.offsetWidth - inner.offsetWidth;\n\n // Removing temporary elements from the DOM\n outer.parentNode?.removeChild(outer);\n\n previousWindowHeight = window.innerHeight;\n previousWindowWidth = window.innerWidth;\n\n cachedScrollBarWidth = scrollbarWidth;\n return scrollbarWidth;\n}\n\n/**\n * Performs a deep comparison between two values to determine if they are equal.\n * A wrapper on fast-deep-equal\n *\n * @param x - First item to compare\n * @param y - Second item to compare\n * @returns Deep comparison result\n */\nexport function deepEqual(x: any, y: any): boolean {\n return fastDeepEqual(x, y);\n}\n\n/**\n * Creates a deep copy of an object or array.\n *\n * This function recursively copies all properties and elements from the source object or array to a new object or array.\n *\n * @param oldObj - The object or array to be copied.\n * @returns A deep copy of the input object or array.\n */\nexport function deepCopy<T>(oldObj: T): T {\n let newObj = oldObj;\n if (oldObj && typeof oldObj === 'object') {\n newObj = Array.isArray(oldObj) ? ([] as unknown as T) : ({} as T);\n Object.keys(oldObj).forEach(i => {\n (newObj as any)[i] = deepCopy((oldObj as any)[i]);\n });\n }\n return newObj;\n}\n\n/**\n * Checks if the provided value is a function.\n *\n * @param obj - The value to be checked.\n * @returns `true` if the value is a function, `false` otherwise.\n */\nexport function isFunction(obj: any): boolean {\n return typeof obj === 'function';\n}\n\n/**\n * Checks if the provided value is a plain object.\n *\n * This function returns `true` if the value is an object that is not a function or an array.\n *\n * @param obj - The value to be checked.\n * @returns - `true` if the value is a plain object, `false` otherwise.\n */\nexport function isObject(obj: unknown): boolean {\n return obj === Object(obj) && !(isFunction(obj) || Array.isArray(obj));\n}\n\n/**\n * Checks if the provided value is empty.\n *\n * The value is considered empty if it is:\n * - `null` or `undefined`\n * - An array or string with length 0\n * - An object with no own properties.\n *\n * @param value - The value to be checked.\n * @returns - `true` if the value is empty, `false` otherwise.\n */\nexport function isEmpty(value: any): boolean {\n return (\n // null or undefined\n value === null ||\n value === undefined ||\n ((Array.isArray(value) || typeof value === 'string') && value.length === 0) ||\n // is an Object and has no keys\n (value.constructor === Object && Object.keys(value).length === 0)\n );\n}\n\n/**\n * Removes empty values from an array.\n *\n * This function recursively filters out empty values from the array. Empty values include:\n * - `null` or `undefined`\n * - Empty strings or arrays\n * - Empty objects\n *\n * @param arr - The array on which the empty values needs to be removed.\n * @returns - A new array with empty values removed.\n */\nexport function removeEmptyValues<T>(arr: T[]): DeepNonNullableArray<T>[] {\n return arr\n .map(item => (Array.isArray(item) ? removeEmptyValues(item) : item))\n .filter(\n t => (Array.isArray(t) && t.length) || (!Array.isArray(t) && t)\n ) as DeepNonNullableArray<T>[];\n}\n\n/* Start : APIs specific to condition builder */\n\n/**\n * Retrieves an array of fields on which a filter is applied. If a comparator is provided, the function returns only the fields that have the specified comparator applied in the `filterExpression`.\n *\n * @param params - The parameters for the method.\n * @param params.filterExpression - The filter expression used to determine which fields are included. For more details, see {@link State.filterExpression}.\n * @param params.comparator - An optional comparator. If provided, the function will filter fields that have this comparator in the filter expression.\n *\n * @returns An array of field names on which the filter is applied. If a comparator is specified, it returns only the fields that use that comparator.\n */\nexport function getFilters({ filterExpression, comparator = null }: FilterInfo): string[] {\n const filters: string[] = [];\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) {\n filters.push(conditions[key].lhs.field);\n }\n } else {\n filters.push(conditions[key].lhs.field);\n }\n });\n return filters;\n}\n\n/**\n * Retrieves all filter conditions from the provided `filterExpression`. If a `comparator` is provided,\n * only the filter conditions that match the given comparator will be collected.\n *\n * @param params Method arguments object.\n * @param params.filterExpression The filterExpression.\n * @param params.comparator An optional comparator to filter conditions by. If not provided, all conditions will be collected.\n *\n * @returns An array of filter conditions that match the specified criteria.\n */\nexport function getFilterConditions({ filterExpression, comparator = null }: FilterInfo) {\n const filters: LeafCondition[] = [];\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) {\n filters.push(conditions[key]);\n }\n } else {\n filters.push(conditions[key]);\n }\n });\n return filters;\n}\n\n/**\n Retrieves the filter properties for a specified column from the {@link State.filterExpression filterExpression} state as an array.\n * The returned array includes:\n * - The input values associated with the filter for the specified column.\n * - The comparator configured for the filter of that column.\n * - The leaf condition for that column within the {@link State.filterExpression filterExpression}.\n * - The entire {@link State.filterExpression filterExpression} object from the state.\n * @param column The column for which filter information is to be retrieved.\n */\n// returning filter initializer values for any type of filter\nexport function getFilterInitializers(column: Column): FilterInitializers | [] {\n if (!column) return [];\n const filterExpression = column?.getFilterProperties()?.filterExpression!;\n const filters = getFilterConditions({ filterExpression });\n const filter = filters.find(f => f.lhs?.field === column.field.name);\n const fInput = filter\n ? (\n filter.rhs as {\n value: string | number;\n }\n )?.value || (filter.rhs as { values: string[] | number[] })?.values\n : [];\n const fValue = filter\n ? (Object.keys(comparatorMap) as (keyof FilterConfig['comparatorMap'])[]).find(\n key => comparatorMap[key] === filter.comparator\n )\n : null;\n return [fInput, fValue, filter, filterExpression];\n}\n\n/**\n * Determines if filter is applied on the given `column` in the given `filterExpression`.\n * @param column\n * @param filterExpression\n * @returns true if filter is applied; otherwise false.\n */\nexport function isFilterApplied(column: Column, filterExpression: Condition): boolean {\n if (!column.field.id) {\n return false;\n }\n\n const fields = getFilters({\n filterExpression\n });\n return fields.includes(column.field.name);\n}\n\n/* AND condition with filter expression */\n/**\n * Prepares a filter expression for a given `column`, `comparator`, and `input`.\n * Returns the same filter expression or appends it to the given `filterExpression`.\n *\n * @param param - Method argument object.\n * @param param.filterExpression - Existing filter expression to which the new condition may be appended.\n * @param param.column - Column on which the filter is to be applied.\n * @param param.comparator - Comparator for the filter expression (e.g., equals, greater than).\n * @param param.input - List of possible values for the column on which the filter expression should be prepared. It can be a single value, an array of values, or null.\n * @returns A new filter expression or the modified existing filter expression. Returns null if the input is invalid based on the comparator.\n */\nexport function addFilter({\n filterExpression,\n column,\n comparator,\n input\n}: AddFilterParams): Condition | null {\n const filter: { condition: LeafCondition } = {} as { condition: LeafCondition };\n\n // We might need to refactor the way we are managing filters with comparators\n // Comparator needs to categorized based on no of operand and type of operand it needs\n // Making this fix to resolve BUG-640981\n if (\n (input === '' ||\n input === undefined ||\n input === null ||\n Number.isNaN(input) ||\n (Array.isArray(input) && !input.length)) &&\n comparator !== comparatorMap.isNull &&\n comparator !== comparatorMap.isNotNull &&\n comparator !== comparatorMap.isTrue &&\n comparator !== comparatorMap.isFalse\n ) {\n return null;\n }\n\n if (input === null || input === undefined) {\n filter.condition = {\n comparator,\n lhs: { field: column.field.name }\n };\n } else {\n const rhsFieldName = Array.isArray(input) ? 'values' : 'value';\n filter.condition = {\n comparator,\n lhs: { field: column.field.name },\n rhs: { [rhsFieldName]: input } as { value: string | number } | { values: string[] | number[] }\n };\n }\n\n /* if filter expression has conditions or operators */\n if (filterExpression && Object.keys(filterExpression).length > 0) {\n return { AND: [filter, filterExpression] };\n }\n return filter;\n}\n\n/* End : APIs specific to condition builder */\n\n/**\n * Retrieves the visible fields in the current view by considering the hidden columns state.\n * This function also accounts for columns from custom fields that are visible.\n *\n * @param fieldDefs - The {@link Meta.fieldDefs fieldDefs}.\n * @param hiddenColumns - The list of {@link State.hiddenColumns hiddenColumns}.\n * @param customFields - The {@link State.customFields customFields}.\n * @returns The list of visible fields.\n */\nexport const getVisibileFields = (\n fieldDefs: FieldDef[] = [],\n hiddenColumns: State['hiddenColumns'] = [],\n customFields: State['customFields'] = []\n): FieldDef[] => {\n const fieldMap = fieldDefs.reduce<{ [key: string]: FieldDef }>((acc, field) => {\n acc[field.id] = field;\n return acc;\n }, {});\n const visibleFields = fieldDefs.filter(({ id }) => !hiddenColumns.includes(id));\n const fieldIdsFromCustomField = (customField: CustomField): string[] =>\n customField?.expression.filter(item => !Array.isArray(item)) as string[]; // taking all non template items\n const visibleUnderCustomFields = [\n ...new Set(\n customFields\n .filter(({ id }) => !hiddenColumns.includes(id)) // Only visible custom fields\n .map(field => fieldIdsFromCustomField(field))\n .flat() // flat the multiple custom field fieldIds\n ) // Getting unique fieldIds\n ]\n .filter(fieldId => hiddenColumns.includes(fieldId)) // taking only, which are hidden in state to avoid duplicates\n .map(fieldId => fieldMap[fieldId]);\n return [...visibleFields, ...visibleUnderCustomFields];\n};\n\n/**\n * Retrieves the data of the closest row to the `targetElement` from the view {@link View.data data}.\n *\n * This function is useful for scenarios where you need to determine the row data related to a specific DOM element.\n * It searches through the provided data and pagination options to find the row that is closest to the given target element.\n *\n * @param data - The data of the view containing all row entries.\n * @param paginationOptions - The {@link State.paginationOptions pagination options}\n * @param targetElement - The target element for which the closest row data is required.\n *\n * @returns - The data of the closest row element to the target element.\n */\nexport const getRowContextData = (\n data: RowData[],\n paginationOptions: NonNullable<State['paginationOptions']>,\n targetElement: HTMLElement\n): RowData => {\n // get nearest row to target element.\n const row = targetElement.closest('[role=\"row\"]');\n // use aria-rowindex as data-index is added for group header as well\n // which is misaligned with the data object indexes.\n const ariaRowIndex = Number(row?.getAttribute('aria-rowindex')) - 1;\n\n // get starting index in pagination option\n // TODO why reduce is required with initial value as null. This can be refactored.\n const offset = Object.values(paginationOptions).reduce<null | number>((acc, { startIndex }) => {\n if (acc === null || acc < startIndex) {\n return startIndex;\n }\n return acc;\n }, null);\n return data[ariaRowIndex - offset!];\n};\n\n/**\n * Compares two objects to determine if they are equal based on the specified properties.\n * If no properties are specified, it compares all properties.\n *\n * @param t1 - The first object to compare.\n * @param t2 - The second object to compare.\n * @param props - An optional array of property names to compare. If null, all properties are compared.\n * @returns A boolean indicating whether the objects are equal.\n */\nexport function compareObjects<T extends { [key in keyof T]: unknown }>(\n t1: T,\n t2: T,\n props: (keyof T)[] | null = null\n): boolean {\n if (!props && Object.keys(t1).length !== Object.keys(t2).length) return false;\n return (props || Object.keys(t1)).every(k => {\n const key = k as keyof T;\n const ty1 = Object.prototype.toString.call(t1[key]);\n const ty2 = Object.prototype.toString.call(t2[key]);\n if (ty1 !== ty2) return false;\n\n if (ty1 === '[object Array]')\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return compareArray(t1[key] as unknown[], t2[key] as unknown[], null);\n if (ty1 === '[object Object]') return compareObjects(t1[key], t2[key], null);\n return t2[key] === t1[key];\n });\n}\n\n/**\n * Compares two arrays for equality, considering nested arrays and objects.\n * If both arrays are equal, it returns true; otherwise, it returns false.\n *\n * @param t1 - The first array to compare.\n * @param t2 - The second array to compare.\n * @param props - Additional properties for comparison (currently unused).\n * @returns `true` if the arrays are equal, `false` otherwise.\n */\n// TODO props is never used.\nexport function compareArray<T extends unknown>(t1: T[], t2: T[], props = null): boolean {\n if (t1 === t2) return true;\n if (t1?.length !== t2?.length) return false;\n return t1?.every((val, i) => {\n const ty1 = Object.prototype.toString.call(val);\n const ty2 = Object.prototype.toString.call(t2?.[i]);\n if (ty1 === ty2) {\n if (ty1 === '[object Array]') return compareArray(val as any[], t2?.[i] as any[], props);\n if (ty1 === '[object Object]') return compareObjects(val, t2?.[i], props);\n return val === t2?.[i];\n }\n return false;\n });\n}\n\n/**\n * calculates the hash for the given string\n * @param string for which hash to be calculated\n * @returns calculated hash\n */\nexport function generateHash(string: string): number {\n let hash = 0;\n for (let charIdx = 0; charIdx < string.length; charIdx += 1) {\n // eslint-disable-next-line no-bitwise\n hash = (Math.imul(31, hash) + string.charCodeAt(charIdx)) | 0;\n }\n return hash;\n}\n\n/**\n * Updates the Meta settings based on the provided field definitions and default configuration.\n *\n * This function performs the following operations:\n *\n * - Computes the value for feature flags such as {@link Meta.freezeFields freezeFields} and {@link Meta.editable editable}\n * based on the values in `FieldDef`. If any of the `FieldDef` entries have the flag enabled, the flag is enabled for `Meta` as well.\n * - Sets the {@link Meta.locale locale} in `Meta` from the document's language attribute.\n * - Sets the values of other keys in `Meta` using {@link defaultConfig}, if they are not already set.\n *\n * @param meta - The RS meta object.\n * @param defaultConfig - The default configuration object used to set default values in `Meta`.\n */\nfunction updateMetaSettings(meta: Meta, defaultConfig: DefaultConfigType): void {\n // Deduce freezeField global setting from within the fields\n const featureMap = getEnabledFeatures(['freeze', 'editable'], meta.fieldDefs);\n if (featureMap.freeze) {\n meta.freezeFields = true;\n }\n\n if (featureMap.editable) {\n meta.editable = true;\n }\n\n // Setting locale value for localisation\n if (!meta.locale) {\n const htmlLang = document.documentElement.lang;\n meta.locale = htmlLang.split('-')[1] ? htmlLang : defaultConfig.locale;\n }\n const properties: DefaultConfigKeys[] = Object.keys(defaultConfig) as DefaultConfigKeys[];\n properties.forEach(key => {\n if (meta[key] === undefined || meta[key] === null) {\n // is null check required or consumers want that?\n // @ts-expect-error\n meta[key] = defaultConfig[key];\n }\n });\n}\n\nconst prepareDefaultFieldConfig = (\n defaultFieldConfig: NonNullable<DefaultConfigType['defaultFieldDef']>,\n field: FieldDef\n) => {\n return Object.fromEntries(\n Object.entries(defaultFieldConfig).map(([key, value]) => {\n // By default, sorting, filtering and grouping should be disabled for object type fields.\n if (UNSUPPORTED_OBJECT_TYPE_FIELD_ANALYTICAL_FEATURES.includes(key)) {\n value = field.type !== FieldType.OBJECT;\n }\n\n // By default, aggregation is supported only for number and currency type fields\n if (key === 'aggregation') {\n value = field.type === FieldType.NUMBER || field.type === FieldType.CURRENCY;\n }\n\n // By default, only text type fields are searchable via global search\n if (key === 'searchable') {\n value = field.type === FieldType.TEXT;\n }\n\n return [key, value];\n })\n );\n};\n\n/**\n * Normalizes the {@link FieldDef} with {@link defaultFieldDef defaultFieldDef config} if not already set.\n *\n * @param field The fieldDef object\n * @param defaultFieldDef The default config of the FieldDef.\n *\n * @returns The normalized fieldDef object with the updated configurations.\n */\nexport function normalizeFieldDef(\n field: FieldDef,\n defaultFieldDef: NonNullable<DefaultConfigType['defaultFieldDef']>\n): void {\n const properties: DefaultFieldDefKeys[] = Object.keys(defaultFieldDef) as DefaultFieldDefKeys[];\n field.idHash = generateHash(field.id);\n\n properties.forEach((prop: DefaultFieldDefKeys) => {\n // @ts-expect-error Type 'number | boolean' is not assignable to type 'undefined'. Type 'number' is not assignable to type 'undefined'. Check this.\n field[prop] = field[prop] ?? defaultFieldDef[prop];\n if (prop === 'autosize' && field.width) {\n field[prop] = false;\n }\n });\n\n // Assign filters to each field based on their types\n if (field.filterPickList) {\n field.filterParams = structuredClone(filterParams.pickList);\n // @ts-expect-error Property 'Date' does not exist on type filterParams. Even if there is a check ```field.type in filterParams```, typescript is still complaining.\n } else if (field.type in filterParams && filterParams[field.type]) {\n // @ts-expect-error Property 'Date' does not exist on type filterParams. Even if there is a check ```field.type in filterParams```, typescript is still complaining.\n field.filterParams = structuredClone(filterParams[field.type]);\n } else {\n field.filterParams = undefined;\n }\n}\n\n/**\n * Normalizes the RS meta with the {@link defaultConfig default configuration} if not already set:\n * - Updates the {@link Meta.minheight minHeight} option from the {@link defaultConfig}.\n * - Adds a comparatorMap to the meta.\n * - Updates keys of individual FieldDef with {@link DefaultConfigType.defaultFieldDef defaultFieldDef} from {@link defaultConfig}.\n * - Enables/Disables feature flags (e.g. {@link Meta.freezeFields freezeFields} and {@link Meta.editable editable}) in RS meta by considering the values of feature flags from fieldDef or its values in defaultConfig.\n *\n * @param _meta - The RS meta object.\n * @param defaultConfig - The default configuration object containing the default settings to be used.\n * @returns The normalized RS meta object with the updated configurations.\n */\nexport function normalizeMeta(\n _meta: Meta & { isPreset?: boolean },\n defaultConfig: DefaultConfigType\n): Meta {\n const { height, ...restMeta } = _meta;\n const meta = deepCopy<Meta>(restMeta);\n meta.height = { ...height };\n meta.comparatorMap = comparatorMap;\n meta.height.minHeight = meta.height.minHeight ?? defaultConfig.height.minHeight;\n\n // Handle if fieldDefs is null or undefined\n meta.fieldDefs = meta.fieldDefs ?? [];\n meta.fieldDefs.forEach((column: FieldDef) => {\n normalizeFieldDef(column, {\n ...prepareDefaultFieldConfig(defaultConfig.defaultFieldDef, column),\n /*\n TODO: Deprecation - The defaultFieldDef in meta is no longer necessary and is not utilized by any consumers.\n - Consumers should provide the exact fieldDef configuration instead of relying on explicit defaults in meta.\n - Only the in-house defaultFieldDef from `defaultConfig.defaultFieldDef` will be honored.\n */\n ...meta.defaultFieldDef\n });\n });\n updateMetaSettings(meta, defaultConfig);\n return meta;\n}\n\n/**\n * Removes entries from the given object that have null, undefined, or empty object as values.\n * This function mutates the original object by deleting properties that are either null, undefined,\n * or objects with does not have own properties.\n *\n * @param obj - The object from which empty entries should be removed.\n * @returns void\n */\nexport function removeEmptyValuesFromObject(obj: GenericObject): void {\n if (!obj) return;\n const propNames = Object.getOwnPropertyNames(obj);\n for (const element of propNames) {\n const propName = element;\n if (\n obj[propName] === null ||\n obj[propName] === undefined ||\n !Object.keys(obj[propName] as GenericObject).length\n ) {\n delete obj[propName];\n }\n }\n}\n\n/**\n * Retrieves the scrollable element of the virtualizer, i.e. parent container.\n * from the {@link View.virtualizeElements virtualizeElements} property of the provided {@link view} and,\n * if available, returns the parent container of the root virtualizer.\n * @param view The {@link View} object.\n * @returns The scrollable element, if it exists. Otherwise, returns undefined.\n */\nexport const getScrollerElem = (view: View): HTMLElement | undefined => {\n const { virtualizeElements } = view;\n let scrollerElem;\n if (virtualizeElements && !isEmpty(virtualizeElements?.rootVirtualiser)) {\n scrollerElem = virtualizeElements?.rootVirtualiser?.getParentContainer?.();\n }\n return scrollerElem;\n};\n\nexport const dateFunctionLabels = {\n YEARS: 'Year',\n QUARTERS: 'Quarter',\n MONTHS: 'Month',\n WEEKS: 'Week',\n DAYS: 'Day',\n HOURS: 'Hour',\n MINUTES: 'Minute',\n SECONDS: 'Second',\n MONTHS_OF_YEAR: 'Month of year',\n DAYS_OF_MONTH: 'Day of month',\n DAYS_OF_WEEK: 'Day of week',\n HOURS_OF_DAY: 'Hour of day'\n};\n\n/**\n * Retrieves the valid externalState keys from RS {@link Meta}.\n *\n * Supported external state keys:\n * - Value of {@link Meta.externalFilters externalFilters} in Meta.\n *\n * @param tableMeta RS Meta\n * @returns Array of valid externalState keys.\n */\nexport function getExternalStateKeys(tableMeta: Meta): string[] {\n const externalStateKeys: string[] = [];\n if (tableMeta[EXTERNAL_FILTERS]) {\n externalStateKeys.push(tableMeta[EXTERNAL_FILTERS]);\n }\n return externalStateKeys;\n}\n\n/**\n * Validates the payload for {@link ActionTypes.SET_IN_EXTERNAL_STATE setInExternalState} action.\n *\n * @param payload The payload for {@link ActionTypes.SET_IN_EXTERNAL_STATE setInExternalState} action.\n * @param externalStateKeys An array of valid {@link State.externalState external state} keys.\n *\n * @returns void\n *\n * @throws {Error} if validation fails.\n */\nfunction validateExternalStateAction(\n payload: NonNullable<State['externalState']>,\n externalStateKeys?: string[]\n): void {\n if (!isObject(payload)) {\n throw Error(\n `payload for action ${ActionTypes.SET_IN_EXTERNAL_STATE} should be of object type only.`\n );\n }\n const payloadKeys = Object.keys(payload);\n if (payloadKeys.length !== 1) {\n throw Error(\n `payload object for action ${ActionTypes.SET_IN_EXTERNAL_STATE} should contain exactly one key.`\n );\n }\n if (!externalStateKeys?.includes(payloadKeys[0])) {\n throw Error(\n `The key '${payloadKeys[0]}' in the payload object for action ${ActionTypes.SET_IN_EXTERNAL_STATE} is invalid.`\n );\n }\n}\n\nconst validateRefreshNotificationAction = (payload: RefreshNotificationForConsumer) => {\n const isValidPayload =\n isObject(payload) && hasProp(payload, 'message') && hasProp(payload, 'refreshActionLabel');\n\n if (!isValidPayload) {\n throw Error(\n `payload for action ${ActionTypes.NOTIFY_DATA_REFRESH} should be an object with 'message' and 'refreshActionLabel' properties.`\n );\n }\n};\n\n/**\n * Validates an action by ensuring that the provided payload is supported for the given action type.\n * This function checks if the action and payload match the supported actions.\n *\n * @param action - The action to be validated.\n * @param payload - The payload associated with the action. The payload must confirm to the expected structure for the given action.\n * @param externalStateKeys - An array of valid {@link State.externalState external state} keys.\n *\n * @returns void\n *\n * @throws {Error} if validation fails.\n */\nexport function validateAction<T extends SupportedConsumerActionType>(\n action: T,\n payload?: SupportedConsumerPayloads[T],\n externalStateKeys?: string[]\n): void {\n switch (action) {\n case ActionTypes.UPDATE_DEBUG_INFO:\n case ActionTypes.TOGGLE_REQUIRED:\n case ActionTypes.USER_CONFIRMATION_ACTION:\n if (!isObject(payload)) {\n throw Error(`payload for action ${action} should be of object type only!`);\n }\n break;\n\n case ActionTypes.TOGGLE_DISABLE_SELECTION:\n if (typeof payload !== 'boolean')\n throw Error(`payload for action ${action} should be of type boolean only!`);\n break;\n case ActionTypes.NOTIFY_DATA_REFRESH:\n validateRefreshNotificationAction(payload as RefreshNotificationForConsumer);\n break;\n case ActionTypes.UPDATE_SELECTED_ROWS:\n if (typeof payload !== 'undefined') {\n throw Error(`No payload is required for action ${action}`);\n }\n break;\n case ActionTypes.SET_IN_EXTERNAL_STATE:\n validateExternalStateAction(\n payload as NonNullable<State['externalState']>,\n externalStateKeys\n );\n break;\n case ActionTypes.SET_WARNING_MESSAGES:\n break;\n default:\n throw Error(`Action ${action} is not supported!`);\n }\n}\n\n/**\n * Retrieves the default preset ID from all personalizations.\n * @param stateAllPersonalization\n * @returns The id of the default preset if found, otherwise `undefined`.\n */\nexport function getDefaultPresetIdFromStatePersonalisation(\n stateAllPersonalization: Personalization['allPersonalizations'] = {}\n): string | undefined {\n return Object.keys(stateAllPersonalization).find(\n item => stateAllPersonalization[item].isDefaultPreset\n );\n}\n\n/** Determines if the given {@link array} contains any duplicate elements.\n * @param array The array to be checked for duplicate elements.\n * @returns Returns `true` if duplicates are found, otherwise returns `false`.\n */\nexport function hasDuplicates<T>(array?: T[]): boolean {\n return !!(array && new Set<T>(array).size !== array.length);\n}\n\n/**\n * Creates a passable promise, which is an array containing a promise object, and its corresponding resolve and reject functions.\n *\n * @returns An array where:\n * - The first element is the created promise.\n * - The second element is the resolve function for the promise.\n * - The third element is the reject function for the promise.\n */\nexport function passablePromise<T>(): PassablePromise<T> {\n let resolveRef!: PassablePromise<T>[1];\n let rejectRef!: PassablePromise<T>[2];\n const promise = new Promise<T>((resolve, reject) => {\n resolveRef = resolve;\n rejectRef = reject;\n });\n return [promise, resolveRef, rejectRef];\n}\n\n/**\n * Determines if the filter criteria has changed in the latest state compared to the previous state.\n *\n * This function checks the following state keys to determine changes:\n * - {@link State.filterExpression filterExpression}\n * - {@link State.search search}\n * - The value of {@link Meta.externalFilters external filters} in {@link State.externalState externalState}\n *\n * @param meta - The RS meta object.\n * @param previousState - The previous state object to compare against.\n * @param latestState - The latest state object to check for changes.\n * @returns Returns true if the filter criteria has changed; otherwise, returns false.\n */\nexport function isFilterCriteriaChanged(\n meta: Meta,\n previousState: State,\n latestState: State\n): boolean {\n const { filterExpression, search: { query } = {}, externalState } = latestState;\n const {\n filterExpression: previousFilterExpression,\n search: { query: previousQuery } = {},\n externalState: previousExternalState\n } = previousState;\n\n const searchChanged = () => query !== previousQuery;\n const filterExpressionChanged = () => !deepEqual(previousFilterExpression, filterExpression);\n const externalFilterChanged = () =>\n meta?.externalFilters &&\n !deepEqual(\n previousExternalState?.[meta?.externalFilters],\n externalState?.[meta?.externalFilters]\n );\n\n return !!(searchChanged() || filterExpressionChanged() || externalFilterChanged());\n}\n\n/**\n * Calculates the overlapping area from given {@link previousIndexes} and {@link newIndexes}.\n * @param previousIndexes\n * @param newIndexes\n * @returns A number indicating the overlapping area.\n */\nexport function getOverlappingIndexes(\n previousIndexes: PaginationPayload = {} as PaginationPayload,\n newIndexes: PaginationPayload = {} as PaginationPayload\n): number {\n const { startIndex: previousStartIndex, endIndex: previousEndIndex } = previousIndexes;\n const { startIndex: latestStartIndex, endIndex: latestEndIndex } = newIndexes;\n\n if (previousEndIndex < latestStartIndex || latestEndIndex < previousStartIndex) {\n return 0;\n }\n\n const overlapStartIndex = Math.max(previousStartIndex, latestStartIndex);\n const overlapEndIndex = Math.min(previousEndIndex, latestEndIndex);\n const overlapArea = overlapEndIndex - overlapStartIndex;\n\n if (overlapArea <= 0) {\n return 0;\n }\n\n return overlapArea;\n}\n\n/**\n * Determines whether the given {@link action} already exists in {@link latestActions} by comparing its type and payload.\n * @param action\n * @param latestActions\n * @returns true if the {@link action} exists in the {@link latestActions} otherwise false.\n */\n// TODO This is some what same as isStaleAction. Revisit both the methods.\nexport function isSameActionPresent(\n action: Action,\n latestActions: Map<ActionType, Action>\n): boolean {\n const { type: actionType } = action;\n const existingAction = latestActions.get(actionType);\n return (\n !!existingAction &&\n 'payload' in action &&\n 'payload' in existingAction &&\n deepEqual(existingAction.payload, action.payload)\n );\n}\n\n/**\n * Removes actions from the {@link latestActions} that have already been executed and are present in the {@link executedActionsQueue}.\n * This function ensures that only pending actions remain in the {@link latestActions}.\n * @param latestActions\n * @param executedActionsQueue\n */\nexport function clearProcessedActionsFromLatestActions(\n latestActions: Map<ActionType, Action>,\n executedActionsQueue: Action[]\n): void {\n executedActionsQueue.forEach(executedAction => {\n if (isSameActionPresent(executedAction, latestActions)) {\n latestActions.delete(executedAction.type);\n }\n });\n}\n\n/**\n * Determines whether the given {@link action} already exists in {@link latestActions} by comparing its type and payload.\n * @returns\n * - false if {@link action} does not already exists.\n * - false if {@link action} already exists and payload matches\n * - true if {@link action} already exists but payload does not match.\n */\n// TODO revisit this method again. It is not checking only for stale actions.\nexport function isStaleAction(action: Action, latestActions: Map<ActionType, Action>): boolean {\n const { type: actionType } = action;\n const existingAction = latestActions.get(actionType);\n return (\n !!existingAction &&\n 'payload' in action &&\n 'payload' in existingAction &&\n // TODO why ! is added in front of deepEqual. Ideally for an existing action if the payload is exactly same then it should be marked as stale.\n !deepEqual(existingAction.payload, action.payload)\n );\n}\n\n/**\n * Determines if the overlapping area of pagination indexes between the old and new pagination payloads in current queue is less than 50%.\n * This function helps determine if a significant portion of the pagination area has changed due to recent actions.\n *\n * For detailed usage and examples, refer [pagination-action-optimizations.md](../../../docs/pagination-action-optimizations.md).\n * @param latestActions - A map of the latest actions being executed in the queue, which may include pagination actions.\n * @param previousExecutedActionQueue - The queue of previously executed actions.\n * @returns Returns true if the overlapping area is less than 50%, otherwise returns false.\n */\nexport function isSignificantPaginationOverlap(\n latestActions: Map<ActionType, Action>,\n previousExecutedActionQueue: Action[]\n): boolean {\n const lastExecutedPaginationActionIndex = previousExecutedActionQueue\n .map(action => action.type)\n .lastIndexOf(ActionTypes.PAGINATE);\n if (!latestActions.has(ActionTypes.PAGINATE) || lastExecutedPaginationActionIndex < 0)\n return false;\n\n const lastExecutedPaginationPayload = (\n previousExecutedActionQueue[lastExecutedPaginationActionIndex] as PaginateAction\n ).payload;\n const latestPaginatePayload = (latestActions.get(ActionTypes.PAGINATE) as PaginateAction).payload;\n\n const overlappingIndexes = getOverlappingIndexes(\n lastExecutedPaginationPayload,\n latestPaginatePayload\n );\n const { startIndex, endIndex } = latestPaginatePayload;\n // if the api response matches at least 50% with the latest pagination size, we can use that to display some rows until the next set of rows arrive\n return !(overlappingIndexes >= (endIndex - startIndex) * 0.5);\n}\n\n/**\n * Returns a unique key for a given group.\n * @param group\n */\nexport const getGroupKey = (group: Group): string => {\n if (group.dateFunction) {\n return `${group.columnId}${groupBySeparator}${group.dateFunction}`;\n }\n\n if (group.customFunction) {\n return `${group.columnId}${groupBySeparator}${group.customFunction.type}${groupBySeparator}${group.customFunction.id}`;\n }\n return group.columnId;\n};\n\n/**\n * Returns {@link Group group information} from {@link Group groups} based on {@link groupBy} key\n * @param groupBy - unique key for a given group\n * @param groups - groups info from table state\n * @returns matched group\n */\nexport const getGroupFromKey = (groupBy: string, groups: State['groups']): Group | undefined => {\n return groups?.find(group => {\n return getGroupKey(group) === groupBy;\n });\n};\n\n/**\n * Checks if the column widths have been calculated.\n *\n * @returns True if the column widths have been calculated; otherwise, false.\n */\nexport const areColumnWidthsCalculated = (columnWidths: State['columnWidths']): boolean => {\n if (!columnWidths || isEmpty(columnWidths)) return false;\n const keys = Object.keys(columnWidths);\n // TODO why only rowDragDropcolumn is excluded from OOTB columns set, why not other OOTB columns ?\n return !(keys.length === 1 && keys[0] === rowDragDropColumnMeta.field.id);\n};\n\n// TODO: temporary method, till meta.dragHandle is completely removed(currently deprecated).\nexport const isRowReorderFieldEnabled = (meta: Meta): boolean => {\n return meta.dragHandle || !!meta.rowReorderField;\n};\n\n/**\n * Determines whether the row reorder field is visible.\n *\n * @param meta - View meta containing row reorder field configuration.\n * @returns `true` if the row reorder field is visible; otherwise falls back to the deprecated `dragHandle`.\n */\nexport const isRowReorderFieldVisible = (meta: Meta): boolean => {\n return meta.rowReorderField ? !!meta.rowReorderField.show : !!meta.dragHandle;\n};\n\n/**\n * Determines whether the row error field is visible.\n *\n * @param meta - View meta containing row error field configuration.\n * @returns `true` if the row error field is visible; otherwise falls back to the deprecated `showErrorField`.\n */\nexport const isRowErrorFieldVisible = (meta: Meta): boolean => {\n return meta.rowErrorField ? !!meta.rowErrorField.show : !!meta.showErrorField;\n};\n\n// TODO: temporary method, till meta.showErrorField is completely removed(currently deprecated).\nexport const isRowErrorFieldEnabled = (meta: Meta): boolean => {\n return meta.showErrorField || !!meta.rowErrorField;\n};\n\n/**\n * Returns the {@link StyleFormat} for a given {@link styleFormatId} from {@link View.styleFormats}\n * @param styleFormatId\n * @param styleFormats\n * @returns StyleFormat or `undefined`\n */\nconst getStyleFormat = (\n styleFormatId: string,\n styleFormats: NonNullable<View['styleFormats']>\n): StyleFormat | undefined => {\n return styleFormats.find(styleFormat => styleFormat.id === styleFormatId);\n};\n\n/**\n * Evaluates the style format applicable to a cell based on {@link Column.getExecutionContext current execution context} and {@link Column.conditionalStyleFormats conditionalStyleFormats}\n * @param column Column on which styles need to be evaluated.\n * @param rsInternal RsInternal object\n * @returns - {@link StyleFormat} or `undefined\n */\nexport const evaluateStyleFormatForCell = (\n column: Column,\n rsInternal: RsInternal\n): StyleFormat | undefined => {\n const { conditionalStyleFormats } = column;\n const { getRsProps, getRsStateResolver, getView } = rsInternal;\n const { apiContext } = getRsProps();\n const { meta } = getView();\n const { getState } = getRsStateResolver();\n const data = column.getExecutionContext()?.getValue?.();\n\n if (!data || !conditionalStyleFormats) return;\n\n const firstMatchingStyleFormat = conditionalStyleFormats.find(({ condition }) =>\n apiContext.evaluateCondition\n ? apiContext.evaluateCondition(getState(), meta, { condition, data })\n : evaluateConditionLocally(meta, { condition, data })\n );\n\n return (\n firstMatchingStyleFormat &&\n getStyleFormat(firstMatchingStyleFormat.styleFormatId, column.parent.styleFormats!)\n );\n};\n\nexport const isRowSelectFieldEnabled = (meta: Meta): boolean => {\n const { selectionMode, template } = meta;\n return !!(\n selectionMode &&\n SELECTION_MODES[selectionMode] &&\n !(template === TEMPLATES.GALLERY && selectionMode === SELECTION_MODES.multi_on_hover) &&\n template !== TEMPLATES.TIMELINE\n );\n};\n\nexport const isRowActionFieldEnabled = (meta: Meta): boolean => {\n return !!meta.editing || !!meta.deleting;\n};\n\nexport const isFreezingEnabled = (meta: Meta): boolean => {\n return (\n meta.freezeFields ||\n isRowErrorFieldEnabled(meta) ||\n isRowReorderFieldEnabled(meta) ||\n isRowSelectFieldEnabled(meta)\n );\n};\n\n/**\n * Derives visible column IDs from fieldDefs by excluding hidden columns.\n *\n * @param meta - View meta containing fieldDefs.\n * @param hiddenColumns - Array of hidden column IDs.\n * @returns Array of visible column IDs.\n */\nexport function getVisibleColumnsFromHidden(\n meta: Meta,\n hiddenColumns: State['hiddenColumns']\n): string[] {\n return meta.fieldDefs\n .filter(fieldDef => !hiddenColumns?.includes(fieldDef.id))\n .map(fieldDef => fieldDef.id);\n}\n\n/**\n * Derives visible column IDs from fieldDefs where show is true.\n *\n * @param meta - View meta containing fieldDefs.\n * @returns Array of visible column IDs.\n */\nexport function getVisibleColumnsFromFieldDefs(meta: Meta): string[] {\n return meta.fieldDefs.filter(fieldDef => fieldDef.show).map(fieldDef => fieldDef.id);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/core/utils/util.ts"],"names":[],"mappings":"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","sourcesContent":["import fastDeepEqual from 'fast-deep-equal/es6';\n\nimport {\n splitConditionTree,\n type Condition,\n type LeafCondition\n} from '@pega/cosmos-react-condition-builder';\nimport { hasProp } from '@pega/cosmos-react-core';\n\nimport { filterParams, comparatorMap, type FilterConfig } from '../config/filterConfig';\nimport {\n EXTERNAL_FILTERS,\n rowActionColumnMeta,\n rowDragDropColumnMeta,\n rowErrorColumnMeta,\n rowSelectColumnMeta,\n SELECTION_MODES,\n TEMPLATES\n} from '../constants';\nimport ActionTypes, { type ActionType } from '../actions/actionConstants';\nimport type View from '../generators/ViewGenerator';\nimport type { State, Group, Personalization, CustomField } from '../../../types/State.types';\nimport type { Action, PaginateAction, PaginationPayload } from '../actions/actions.types';\nimport {\n FieldType,\n REPEATING_STRUCTURE_TEMPLATES,\n type FieldDef,\n type Meta,\n type StyleFormat\n} from '../../../types/Meta.types';\nimport type {\n SupportedConsumerPayloads,\n SupportedConsumerActionType,\n RefreshNotificationForConsumer\n} from '../generators/viewUtilityMethods';\nimport type { DefaultConfigType } from '../config/config';\nimport type { RowData } from '../generators/RowGenerator.types';\nimport type Column from '../generators/ColumnGenerator';\nimport type RsInternal from '../RsInternal';\nimport defaultTranslations from '../defaultTranslations';\n\nimport evaluateConditionLocally from './condition-utils';\nimport type {\n FeatureMap,\n FilterInfo,\n FilterInitializers,\n AddFilterParams,\n GenericObject,\n DefaultConfigKeys,\n DefaultFieldDefKeys,\n PassablePromise,\n DeepNonNullableArray,\n MemoizedFunctionParameters,\n FunctionToBeMemoized,\n MemoizedFunction\n} from './util.types';\n\nexport const EXCLUDED_NUMERIC_TYPES = ['Currency'];\nexport const OOTB_COLUMNS = [\n rowDragDropColumnMeta.field.id,\n rowErrorColumnMeta.field.id,\n rowActionColumnMeta.field.id,\n rowSelectColumnMeta.field.id\n];\n\nconst groupBySeparator = '||'; // To avoid any ambiguities\n\nconst UNSUPPORTED_OBJECT_TYPE_FIELD_ANALYTICAL_FEATURES = ['sort', 'filter', 'grouping'];\n\n/**\n * Creates an object mapping for each property in `propertiesArr` to a boolean flag indicating whether the feature is enabled.\n * The flag is derived from `fieldDefs`.\n * The flag is `true` if in any `fieldDef` the value of the property is true; otherwise, it is `false`.\n * @param propertiesArr Array of features which needs to be checked in the fieldDefs\n * @param fieldDefs Array of {@link FieldDef}.\n * @returns An object containing the key as feature from `propertiesArr` and value as boolean indicating the feature is enabled or not.\n */\nfunction getEnabledFeatures(propertiesArr: (keyof FieldDef)[], fieldDefs: FieldDef[]): FeatureMap {\n const featuresMap = {} as FeatureMap;\n propertiesArr.forEach(prop => {\n for (const element of fieldDefs) {\n const value = element[prop];\n if (value) {\n featuresMap[prop] = true;\n break;\n }\n }\n });\n return featuresMap;\n}\n\n/**\n * Memoizes a function, returning a memoized version that caches the result based on dependencies.\n *\n * The memoized function accepts two arguments: [arguments], [dependencies].\n * If dependencies are not provided explicitly, arguments are defaulted to dependencies.\n * If a compare function is passed as the last argument, it decides whether to return a memoized value or not.\n *\n * @param fn - The function to memoize.\n * @returns The memoized function.\n */\nexport function withMemoization<P extends any[], R>(\n fn: FunctionToBeMemoized<P, R>\n): MemoizedFunction<P, R> {\n let value: R;\n let before: any[];\n const sameAsBefore = (v: any, index: number) => {\n return v === before[index];\n };\n return function inner(\n this: ThisParameterType<FunctionToBeMemoized<P, R>>,\n ...args: MemoizedFunctionParameters<P>\n ) {\n // accepts two arguments ([arguments], [dependencies])\n // if dependencies are not provided explicitly, arguments are defaulted to dependencies\n const deps = args && (args[1] && typeof args[1] !== 'function' ? [...args[1]] : [...args[0]]);\n\n // if compare function is passed through, that will decide whether return a memoized value or not.\n const compareFunc = args && args[args.length - 1];\n if (compareFunc && typeof compareFunc === 'function') {\n if (!before || !compareFunc(before, deps)) value = fn.apply(this, [args[0]]);\n before = deps;\n } else if ((!deps || !deps.length) && !before) {\n before = [];\n value = fn.apply(this, [args[0]]);\n } else if (!before || deps.length !== before.length || !deps.every(sameAsBefore)) {\n before = deps;\n value = fn.apply(this, [args[0]]);\n }\n return value;\n };\n}\n\n/**\n * Picks specific properties from an object and returns a new object containing only those properties.\n * If the object is null or undefined, it returns undefined.\n *\n * @param obj - The source object from which properties are picked.\n * @param props - An array of property names to be picked from the object.\n * @returns A new object with only the picked properties, or `undefined` if the source object is null or undefined.\n */\nexport function pickProperties<T extends object, K extends keyof T>(\n obj: T | null | undefined,\n props: K[]\n): Pick<T, K> | undefined {\n if (!obj) {\n return undefined;\n }\n\n return props.reduce(\n (accumulator, prop) => {\n if (obj[prop] !== undefined) {\n accumulator[prop] = obj[prop];\n }\n return accumulator;\n },\n {} as Pick<T, K>\n );\n}\n\n// Storing the caching at module level so that all consumers of this function will get the cached values.\n// Since this function attaches the element on the document, it's assumed that the scrollbars styling is same on the document.\nlet previousWindowHeight = window.innerHeight;\nlet previousWindowWidth = window.innerWidth;\nlet cachedScrollBarWidth: number;\n\n/**\n * Returns the scrollbar width for a given browser/application.\n * @returns The scrollbar width in number.\n */\nexport function getScrollbarWidth(): number {\n if (\n previousWindowHeight === window.innerHeight &&\n previousWindowWidth === window.innerWidth &&\n cachedScrollBarWidth\n ) {\n return cachedScrollBarWidth;\n }\n\n // Creating invisible container\n const outer = document.createElement('div');\n outer.style.visibility = 'hidden';\n outer.style.overflow = 'scroll'; // forcing scrollbar to appear\n document.body.appendChild(outer);\n\n // Creating inner element and placing it in the container\n const inner = document.createElement('div');\n outer.appendChild(inner);\n\n // Calculating difference between container's full width and the child width\n const scrollbarWidth = outer.offsetWidth - inner.offsetWidth;\n\n // Removing temporary elements from the DOM\n outer.parentNode?.removeChild(outer);\n\n previousWindowHeight = window.innerHeight;\n previousWindowWidth = window.innerWidth;\n\n cachedScrollBarWidth = scrollbarWidth;\n return scrollbarWidth;\n}\n\n/**\n * Performs a deep comparison between two values to determine if they are equal.\n * A wrapper on fast-deep-equal\n *\n * @param x - First item to compare\n * @param y - Second item to compare\n * @returns Deep comparison result\n */\nexport function deepEqual(x: any, y: any): boolean {\n return fastDeepEqual(x, y);\n}\n\n/**\n * Creates a deep copy of an object or array.\n *\n * This function recursively copies all properties and elements from the source object or array to a new object or array.\n *\n * @param oldObj - The object or array to be copied.\n * @returns A deep copy of the input object or array.\n */\nexport function deepCopy<T>(oldObj: T): T {\n let newObj = oldObj;\n if (oldObj && typeof oldObj === 'object') {\n newObj = Array.isArray(oldObj) ? ([] as unknown as T) : ({} as T);\n Object.keys(oldObj).forEach(i => {\n (newObj as any)[i] = deepCopy((oldObj as any)[i]);\n });\n }\n return newObj;\n}\n\n/**\n * Checks if the provided value is a function.\n *\n * @param obj - The value to be checked.\n * @returns `true` if the value is a function, `false` otherwise.\n */\nexport function isFunction(obj: any): boolean {\n return typeof obj === 'function';\n}\n\n/**\n * Checks if the provided value is a plain object.\n *\n * This function returns `true` if the value is an object that is not a function or an array.\n *\n * @param obj - The value to be checked.\n * @returns - `true` if the value is a plain object, `false` otherwise.\n */\nexport function isObject(obj: unknown): boolean {\n return obj === Object(obj) && !(isFunction(obj) || Array.isArray(obj));\n}\n\n/**\n * Checks if the provided value is empty.\n *\n * The value is considered empty if it is:\n * - `null` or `undefined`\n * - An array or string with length 0\n * - An object with no own properties.\n *\n * @param value - The value to be checked.\n * @returns - `true` if the value is empty, `false` otherwise.\n */\nexport function isEmpty(value: any): boolean {\n return (\n // null or undefined\n value === null ||\n value === undefined ||\n ((Array.isArray(value) || typeof value === 'string') && value.length === 0) ||\n // is an Object and has no keys\n (value.constructor === Object && Object.keys(value).length === 0)\n );\n}\n\n/**\n * Removes empty values from an array.\n *\n * This function recursively filters out empty values from the array. Empty values include:\n * - `null` or `undefined`\n * - Empty strings or arrays\n * - Empty objects\n *\n * @param arr - The array on which the empty values needs to be removed.\n * @returns - A new array with empty values removed.\n */\nexport function removeEmptyValues<T>(arr: T[]): DeepNonNullableArray<T>[] {\n return arr\n .map(item => (Array.isArray(item) ? removeEmptyValues(item) : item))\n .filter(\n t => (Array.isArray(t) && t.length) || (!Array.isArray(t) && t)\n ) as DeepNonNullableArray<T>[];\n}\n\n/* Start : APIs specific to condition builder */\n\n/**\n * Retrieves an array of fields on which a filter is applied. If a comparator is provided, the function returns only the fields that have the specified comparator applied in the `filterExpression`.\n *\n * @param params - The parameters for the method.\n * @param params.filterExpression - The filter expression used to determine which fields are included. For more details, see {@link State.filterExpression}.\n * @param params.comparator - An optional comparator. If provided, the function will filter fields that have this comparator in the filter expression.\n *\n * @returns An array of field names on which the filter is applied. If a comparator is specified, it returns only the fields that use that comparator.\n */\nexport function getFilters({ filterExpression, comparator = null }: FilterInfo): string[] {\n const filters: string[] = [];\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) {\n filters.push(conditions[key].lhs.field);\n }\n } else {\n filters.push(conditions[key].lhs.field);\n }\n });\n return filters;\n}\n\n/**\n * Retrieves all filter conditions from the provided `filterExpression`. If a `comparator` is provided,\n * only the filter conditions that match the given comparator will be collected.\n *\n * @param params Method arguments object.\n * @param params.filterExpression The filterExpression.\n * @param params.comparator An optional comparator to filter conditions by. If not provided, all conditions will be collected.\n *\n * @returns An array of filter conditions that match the specified criteria.\n */\nexport function getFilterConditions({ filterExpression, comparator = null }: FilterInfo) {\n const filters: LeafCondition[] = [];\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) {\n filters.push(conditions[key]);\n }\n } else {\n filters.push(conditions[key]);\n }\n });\n return filters;\n}\n\n/**\n Retrieves the filter properties for a specified column from the {@link State.filterExpression filterExpression} state as an array.\n * The returned array includes:\n * - The input values associated with the filter for the specified column.\n * - The comparator configured for the filter of that column.\n * - The leaf condition for that column within the {@link State.filterExpression filterExpression}.\n * - The entire {@link State.filterExpression filterExpression} object from the state.\n * @param column The column for which filter information is to be retrieved.\n */\n// returning filter initializer values for any type of filter\nexport function getFilterInitializers(column: Column): FilterInitializers | [] {\n if (!column) return [];\n const filterExpression = column?.getFilterProperties()?.filterExpression!;\n const filters = getFilterConditions({ filterExpression });\n const filter = filters.find(f => f.lhs?.field === column.field.name);\n const fInput = filter\n ? (\n filter.rhs as {\n value: string | number;\n }\n )?.value || (filter.rhs as { values: string[] | number[] })?.values\n : [];\n const fValue = filter\n ? (Object.keys(comparatorMap) as (keyof FilterConfig['comparatorMap'])[]).find(\n key => comparatorMap[key] === filter.comparator\n )\n : null;\n return [fInput, fValue, filter, filterExpression];\n}\n\n/**\n * Determines if filter is applied on the given `column` in the given `filterExpression`.\n * @param column\n * @param filterExpression\n * @returns true if filter is applied; otherwise false.\n */\nexport function isFilterApplied(column: Column, filterExpression: Condition): boolean {\n if (!column.field.id) {\n return false;\n }\n\n const fields = getFilters({\n filterExpression\n });\n return fields.includes(column.field.name);\n}\n\n/* AND condition with filter expression */\n/**\n * Prepares a filter expression for a given `column`, `comparator`, and `input`.\n * Returns the same filter expression or appends it to the given `filterExpression`.\n *\n * @param param - Method argument object.\n * @param param.filterExpression - Existing filter expression to which the new condition may be appended.\n * @param param.column - Column on which the filter is to be applied.\n * @param param.comparator - Comparator for the filter expression (e.g., equals, greater than).\n * @param param.input - List of possible values for the column on which the filter expression should be prepared. It can be a single value, an array of values, or null.\n * @returns A new filter expression or the modified existing filter expression. Returns null if the input is invalid based on the comparator.\n */\nexport function addFilter({\n filterExpression,\n column,\n comparator,\n input\n}: AddFilterParams): Condition | null {\n const filter: { condition: LeafCondition } = {} as { condition: LeafCondition };\n\n // We might need to refactor the way we are managing filters with comparators\n // Comparator needs to categorized based on no of operand and type of operand it needs\n // Making this fix to resolve BUG-640981\n if (\n (input === '' ||\n input === undefined ||\n input === null ||\n Number.isNaN(input) ||\n (Array.isArray(input) && !input.length)) &&\n comparator !== comparatorMap.isNull &&\n comparator !== comparatorMap.isNotNull &&\n comparator !== comparatorMap.isTrue &&\n comparator !== comparatorMap.isFalse\n ) {\n return null;\n }\n\n if (input === null || input === undefined) {\n filter.condition = {\n comparator,\n lhs: { field: column.field.name }\n };\n } else {\n const rhsFieldName = Array.isArray(input) ? 'values' : 'value';\n filter.condition = {\n comparator,\n lhs: { field: column.field.name },\n rhs: { [rhsFieldName]: input } as { value: string | number } | { values: string[] | number[] }\n };\n }\n\n /* if filter expression has conditions or operators */\n if (filterExpression && Object.keys(filterExpression).length > 0) {\n return { AND: [filter, filterExpression] };\n }\n return filter;\n}\n\n/* End : APIs specific to condition builder */\n\n/**\n * Retrieves the visible fields in the current view by considering the hidden columns state.\n * This function also accounts for columns from custom fields that are visible.\n *\n * @param fieldDefs - The {@link Meta.fieldDefs fieldDefs}.\n * @param hiddenColumns - The list of {@link State.hiddenColumns hiddenColumns}.\n * @param customFields - The {@link State.customFields customFields}.\n * @returns The list of visible fields.\n */\nexport const getVisibileFields = (\n fieldDefs: FieldDef[] = [],\n hiddenColumns: State['hiddenColumns'] = [],\n customFields: State['customFields'] = []\n): FieldDef[] => {\n const fieldMap = fieldDefs.reduce<{ [key: string]: FieldDef }>((acc, field) => {\n acc[field.id] = field;\n return acc;\n }, {});\n const visibleFields = fieldDefs.filter(({ id }) => !hiddenColumns.includes(id));\n const fieldIdsFromCustomField = (customField: CustomField): string[] =>\n customField?.expression.filter(item => !Array.isArray(item)) as string[]; // taking all non template items\n const visibleUnderCustomFields = [\n ...new Set(\n customFields\n .filter(({ id }) => !hiddenColumns.includes(id)) // Only visible custom fields\n .map(field => fieldIdsFromCustomField(field))\n .flat() // flat the multiple custom field fieldIds\n ) // Getting unique fieldIds\n ]\n .filter(fieldId => hiddenColumns.includes(fieldId)) // taking only, which are hidden in state to avoid duplicates\n .map(fieldId => fieldMap[fieldId]);\n return [...visibleFields, ...visibleUnderCustomFields];\n};\n\n/**\n * Retrieves the data of the closest row to the `targetElement` from the view {@link View.data data}.\n *\n * This function is useful for scenarios where you need to determine the row data related to a specific DOM element.\n * It searches through the provided data and pagination options to find the row that is closest to the given target element.\n *\n * @param data - The data of the view containing all row entries.\n * @param paginationOptions - The {@link State.paginationOptions pagination options}\n * @param targetElement - The target element for which the closest row data is required.\n *\n * @returns - The data of the closest row element to the target element.\n */\nexport const getRowContextData = (\n data: RowData[],\n paginationOptions: NonNullable<State['paginationOptions']>,\n targetElement: HTMLElement\n): RowData => {\n // get nearest row to target element.\n const row = targetElement.closest('[role=\"row\"]');\n // use aria-rowindex as data-index is added for group header as well\n // which is misaligned with the data object indexes.\n const ariaRowIndex = Number(row?.getAttribute('aria-rowindex')) - 1;\n\n // get starting index in pagination option\n // TODO why reduce is required with initial value as null. This can be refactored.\n const offset = Object.values(paginationOptions).reduce<null | number>((acc, { startIndex }) => {\n if (acc === null || acc < startIndex) {\n return startIndex;\n }\n return acc;\n }, null);\n return data[ariaRowIndex - offset!];\n};\n\n/**\n * Compares two objects to determine if they are equal based on the specified properties.\n * If no properties are specified, it compares all properties.\n *\n * @param t1 - The first object to compare.\n * @param t2 - The second object to compare.\n * @param props - An optional array of property names to compare. If null, all properties are compared.\n * @returns A boolean indicating whether the objects are equal.\n */\nexport function compareObjects<T extends { [key in keyof T]: unknown }>(\n t1: T,\n t2: T,\n props: (keyof T)[] | null = null\n): boolean {\n if (!props && Object.keys(t1).length !== Object.keys(t2).length) return false;\n return (props || Object.keys(t1)).every(k => {\n const key = k as keyof T;\n const ty1 = Object.prototype.toString.call(t1[key]);\n const ty2 = Object.prototype.toString.call(t2[key]);\n if (ty1 !== ty2) return false;\n\n if (ty1 === '[object Array]')\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return compareArray(t1[key] as unknown[], t2[key] as unknown[], null);\n if (ty1 === '[object Object]') return compareObjects(t1[key], t2[key], null);\n return t2[key] === t1[key];\n });\n}\n\n/**\n * Compares two arrays for equality, considering nested arrays and objects.\n * If both arrays are equal, it returns true; otherwise, it returns false.\n *\n * @param t1 - The first array to compare.\n * @param t2 - The second array to compare.\n * @param props - Additional properties for comparison (currently unused).\n * @returns `true` if the arrays are equal, `false` otherwise.\n */\n// TODO props is never used.\nexport function compareArray<T extends unknown>(t1: T[], t2: T[], props = null): boolean {\n if (t1 === t2) return true;\n if (t1?.length !== t2?.length) return false;\n return t1?.every((val, i) => {\n const ty1 = Object.prototype.toString.call(val);\n const ty2 = Object.prototype.toString.call(t2?.[i]);\n if (ty1 === ty2) {\n if (ty1 === '[object Array]') return compareArray(val as any[], t2?.[i] as any[], props);\n if (ty1 === '[object Object]') return compareObjects(val, t2?.[i], props);\n return val === t2?.[i];\n }\n return false;\n });\n}\n\n/**\n * calculates the hash for the given string\n * @param string for which hash to be calculated\n * @returns calculated hash\n */\nexport function generateHash(string: string): number {\n let hash = 0;\n for (let charIdx = 0; charIdx < string.length; charIdx += 1) {\n // eslint-disable-next-line no-bitwise\n hash = (Math.imul(31, hash) + string.charCodeAt(charIdx)) | 0;\n }\n return hash;\n}\n\n/**\n * Updates the Meta settings based on the provided field definitions and default configuration.\n *\n * This function performs the following operations:\n *\n * - Computes the value for feature flags such as {@link Meta.freezeFields freezeFields} and {@link Meta.editable editable}\n * based on the values in `FieldDef`. If any of the `FieldDef` entries have the flag enabled, the flag is enabled for `Meta` as well.\n * - Sets the {@link Meta.locale locale} in `Meta` from the document's language attribute.\n * - Sets the values of other keys in `Meta` using {@link defaultConfig}, if they are not already set.\n *\n * @param meta - The RS meta object.\n * @param defaultConfig - The default configuration object used to set default values in `Meta`.\n */\nfunction updateMetaSettings(meta: Meta, defaultConfig: DefaultConfigType): void {\n // Deduce freezeField global setting from within the fields\n const featureMap = getEnabledFeatures(['freeze', 'editable'], meta.fieldDefs);\n if (featureMap.freeze) {\n meta.freezeFields = true;\n }\n\n if (featureMap.editable) {\n meta.editable = true;\n }\n\n // Setting locale value for localisation\n if (!meta.locale) {\n const htmlLang = document.documentElement.lang;\n meta.locale = htmlLang.split('-')[1] ? htmlLang : defaultConfig.locale;\n }\n const properties: DefaultConfigKeys[] = Object.keys(defaultConfig) as DefaultConfigKeys[];\n properties.forEach(key => {\n if (meta[key] === undefined || meta[key] === null) {\n // is null check required or consumers want that?\n // @ts-expect-error\n meta[key] = defaultConfig[key];\n }\n });\n}\n\nconst prepareDefaultFieldConfig = (\n defaultFieldConfig: NonNullable<DefaultConfigType['defaultFieldDef']>,\n field: FieldDef\n) => {\n return Object.fromEntries(\n Object.entries(defaultFieldConfig).map(([key, value]) => {\n // By default, sorting, filtering and grouping should be disabled for object type fields.\n if (UNSUPPORTED_OBJECT_TYPE_FIELD_ANALYTICAL_FEATURES.includes(key)) {\n value = field.type !== FieldType.OBJECT;\n }\n\n // By default, aggregation is supported only for number and currency type fields\n if (key === 'aggregation') {\n value = field.type === FieldType.NUMBER || field.type === FieldType.CURRENCY;\n }\n\n // By default, only text type fields are searchable via global search\n if (key === 'searchable') {\n value = field.type === FieldType.TEXT;\n }\n\n return [key, value];\n })\n );\n};\n\n/**\n * Normalizes the {@link FieldDef} with {@link defaultFieldDef defaultFieldDef config} if not already set.\n *\n * @param field The fieldDef object\n * @param defaultFieldDef The default config of the FieldDef.\n *\n * @returns The normalized fieldDef object with the updated configurations.\n */\nexport function normalizeFieldDef(\n field: FieldDef,\n defaultFieldDef: NonNullable<DefaultConfigType['defaultFieldDef']>\n): void {\n const properties: DefaultFieldDefKeys[] = Object.keys(defaultFieldDef) as DefaultFieldDefKeys[];\n field.idHash = generateHash(field.id);\n\n properties.forEach((prop: DefaultFieldDefKeys) => {\n // @ts-expect-error Type 'number | boolean' is not assignable to type 'undefined'. Type 'number' is not assignable to type 'undefined'. Check this.\n field[prop] = field[prop] ?? defaultFieldDef[prop];\n if (prop === 'autosize' && field.width) {\n field[prop] = false;\n }\n });\n\n // Assign filters to each field based on their types\n if (field.filterPickList) {\n field.filterParams = structuredClone(filterParams.pickList);\n // @ts-expect-error Property 'Date' does not exist on type filterParams. Even if there is a check ```field.type in filterParams```, typescript is still complaining.\n } else if (field.type in filterParams && filterParams[field.type]) {\n // @ts-expect-error Property 'Date' does not exist on type filterParams. Even if there is a check ```field.type in filterParams```, typescript is still complaining.\n field.filterParams = structuredClone(filterParams[field.type]);\n } else {\n field.filterParams = undefined;\n }\n}\n\n/**\n * Normalizes the RS meta with the {@link defaultConfig default configuration} if not already set:\n * - Updates the {@link Meta.minheight minHeight} option from the {@link defaultConfig}.\n * - Adds a comparatorMap to the meta.\n * - Updates keys of individual FieldDef with {@link DefaultConfigType.defaultFieldDef defaultFieldDef} from {@link defaultConfig}.\n * - Enables/Disables feature flags (e.g. {@link Meta.freezeFields freezeFields} and {@link Meta.editable editable}) in RS meta by considering the values of feature flags from fieldDef or its values in defaultConfig.\n *\n * @param _meta - The RS meta object.\n * @param defaultConfig - The default configuration object containing the default settings to be used.\n * @returns The normalized RS meta object with the updated configurations.\n */\nexport function normalizeMeta(\n _meta: Meta & { isPreset?: boolean },\n defaultConfig: DefaultConfigType\n): Meta {\n const { height, ...restMeta } = _meta;\n const meta = deepCopy<Meta>(restMeta);\n meta.height = { ...height };\n meta.comparatorMap = comparatorMap;\n meta.height.minHeight = meta.height.minHeight ?? defaultConfig.height.minHeight;\n\n // Handle if fieldDefs is null or undefined\n meta.fieldDefs = meta.fieldDefs ?? [];\n meta.fieldDefs.forEach((column: FieldDef) => {\n normalizeFieldDef(column, {\n ...prepareDefaultFieldConfig(defaultConfig.defaultFieldDef, column),\n /*\n TODO: Deprecation - The defaultFieldDef in meta is no longer necessary and is not utilized by any consumers.\n - Consumers should provide the exact fieldDef configuration instead of relying on explicit defaults in meta.\n - Only the in-house defaultFieldDef from `defaultConfig.defaultFieldDef` will be honored.\n */\n ...meta.defaultFieldDef\n });\n });\n updateMetaSettings(meta, defaultConfig);\n return meta;\n}\n\n/**\n * Removes entries from the given object that have null, undefined, or empty object as values.\n * This function mutates the original object by deleting properties that are either null, undefined,\n * or objects with does not have own properties.\n *\n * @param obj - The object from which empty entries should be removed.\n * @returns void\n */\nexport function removeEmptyValuesFromObject(obj: GenericObject): void {\n if (!obj) return;\n const propNames = Object.getOwnPropertyNames(obj);\n for (const element of propNames) {\n const propName = element;\n if (\n obj[propName] === null ||\n obj[propName] === undefined ||\n !Object.keys(obj[propName] as GenericObject).length\n ) {\n delete obj[propName];\n }\n }\n}\n\n/**\n * Retrieves the scrollable element of the virtualizer, i.e. parent container.\n * from the {@link View.virtualizeElements virtualizeElements} property of the provided {@link view} and,\n * if available, returns the parent container of the root virtualizer.\n * @param view The {@link View} object.\n * @returns The scrollable element, if it exists. Otherwise, returns undefined.\n */\nexport const getScrollerElem = (view: View): HTMLElement | undefined => {\n const { virtualizeElements } = view;\n let scrollerElem;\n if (virtualizeElements && !isEmpty(virtualizeElements?.rootVirtualiser)) {\n scrollerElem = virtualizeElements?.rootVirtualiser?.getParentContainer?.();\n }\n return scrollerElem;\n};\n\nexport const dateFunctionLabels = {\n YEARS: 'Year',\n QUARTERS: 'Quarter',\n MONTHS: 'Month',\n WEEKS: 'Week',\n DAYS: 'Day',\n HOURS: 'Hour',\n MINUTES: 'Minute',\n SECONDS: 'Second',\n MONTHS_OF_YEAR: 'Month of year',\n DAYS_OF_MONTH: 'Day of month',\n DAYS_OF_WEEK: 'Day of week',\n HOURS_OF_DAY: 'Hour of day'\n};\n\n/**\n * Retrieves the valid externalState keys from RS {@link Meta}.\n *\n * Supported external state keys:\n * - Value of {@link Meta.externalFilters externalFilters} in Meta.\n *\n * @param tableMeta RS Meta\n * @returns Array of valid externalState keys.\n */\nexport function getExternalStateKeys(tableMeta: Meta): string[] {\n const externalStateKeys: string[] = [];\n if (tableMeta[EXTERNAL_FILTERS]) {\n externalStateKeys.push(tableMeta[EXTERNAL_FILTERS]);\n }\n return externalStateKeys;\n}\n\n/**\n * Validates the payload for {@link ActionTypes.SET_IN_EXTERNAL_STATE setInExternalState} action.\n *\n * @param payload The payload for {@link ActionTypes.SET_IN_EXTERNAL_STATE setInExternalState} action.\n * @param externalStateKeys An array of valid {@link State.externalState external state} keys.\n *\n * @returns void\n *\n * @throws {Error} if validation fails.\n */\nfunction validateExternalStateAction(\n payload: NonNullable<State['externalState']>,\n externalStateKeys?: string[]\n): void {\n if (!isObject(payload)) {\n throw Error(\n `payload for action ${ActionTypes.SET_IN_EXTERNAL_STATE} should be of object type only.`\n );\n }\n const payloadKeys = Object.keys(payload);\n if (payloadKeys.length !== 1) {\n throw Error(\n `payload object for action ${ActionTypes.SET_IN_EXTERNAL_STATE} should contain exactly one key.`\n );\n }\n if (!externalStateKeys?.includes(payloadKeys[0])) {\n throw Error(\n `The key '${payloadKeys[0]}' in the payload object for action ${ActionTypes.SET_IN_EXTERNAL_STATE} is invalid.`\n );\n }\n}\n\nconst validateRefreshNotificationAction = (payload: RefreshNotificationForConsumer) => {\n const isValidPayload =\n isObject(payload) && hasProp(payload, 'message') && hasProp(payload, 'refreshActionLabel');\n\n if (!isValidPayload) {\n throw Error(\n `payload for action ${ActionTypes.NOTIFY_DATA_REFRESH} should be an object with 'message' and 'refreshActionLabel' properties.`\n );\n }\n};\n\n/**\n * Validates an action by ensuring that the provided payload is supported for the given action type.\n * This function checks if the action and payload match the supported actions.\n *\n * @param action - The action to be validated.\n * @param payload - The payload associated with the action. The payload must confirm to the expected structure for the given action.\n * @param externalStateKeys - An array of valid {@link State.externalState external state} keys.\n *\n * @returns void\n *\n * @throws {Error} if validation fails.\n */\nexport function validateAction<T extends SupportedConsumerActionType>(\n action: T,\n payload?: SupportedConsumerPayloads[T],\n externalStateKeys?: string[]\n): void {\n switch (action) {\n case ActionTypes.UPDATE_DEBUG_INFO:\n case ActionTypes.TOGGLE_REQUIRED:\n case ActionTypes.USER_CONFIRMATION_ACTION:\n if (!isObject(payload)) {\n throw Error(`payload for action ${action} should be of object type only!`);\n }\n break;\n\n case ActionTypes.TOGGLE_DISABLE_SELECTION:\n if (typeof payload !== 'boolean')\n throw Error(`payload for action ${action} should be of type boolean only!`);\n break;\n case ActionTypes.NOTIFY_DATA_REFRESH:\n validateRefreshNotificationAction(payload as RefreshNotificationForConsumer);\n break;\n case ActionTypes.UPDATE_SELECTED_ROWS:\n if (typeof payload !== 'undefined') {\n throw Error(`No payload is required for action ${action}`);\n }\n break;\n case ActionTypes.SET_IN_EXTERNAL_STATE:\n validateExternalStateAction(\n payload as NonNullable<State['externalState']>,\n externalStateKeys\n );\n break;\n case ActionTypes.SET_WARNING_MESSAGES:\n break;\n default:\n throw Error(`Action ${action} is not supported!`);\n }\n}\n\n/**\n * Retrieves the default preset ID from all personalizations.\n * @param stateAllPersonalization\n * @returns The id of the default preset if found, otherwise `undefined`.\n */\nexport function getDefaultPresetIdFromStatePersonalisation(\n stateAllPersonalization: Personalization['allPersonalizations'] = {}\n): string | undefined {\n return Object.keys(stateAllPersonalization).find(\n item => stateAllPersonalization[item].isDefaultPreset\n );\n}\n\n/** Determines if the given {@link array} contains any duplicate elements.\n * @param array The array to be checked for duplicate elements.\n * @returns Returns `true` if duplicates are found, otherwise returns `false`.\n */\nexport function hasDuplicates<T>(array?: T[]): boolean {\n return !!(array && new Set<T>(array).size !== array.length);\n}\n\n/**\n * Creates a passable promise, which is an array containing a promise object, and its corresponding resolve and reject functions.\n *\n * @returns An array where:\n * - The first element is the created promise.\n * - The second element is the resolve function for the promise.\n * - The third element is the reject function for the promise.\n */\nexport function passablePromise<T>(): PassablePromise<T> {\n let resolveRef!: PassablePromise<T>[1];\n let rejectRef!: PassablePromise<T>[2];\n const promise = new Promise<T>((resolve, reject) => {\n resolveRef = resolve;\n rejectRef = reject;\n });\n return [promise, resolveRef, rejectRef];\n}\n\n/**\n * Determines if the filter criteria has changed in the latest state compared to the previous state.\n *\n * This function checks the following state keys to determine changes:\n * - {@link State.filterExpression filterExpression}\n * - {@link State.search search}\n * - The value of {@link Meta.externalFilters external filters} in {@link State.externalState externalState}\n *\n * @param meta - The RS meta object.\n * @param previousState - The previous state object to compare against.\n * @param latestState - The latest state object to check for changes.\n * @returns Returns true if the filter criteria has changed; otherwise, returns false.\n */\nexport function isFilterCriteriaChanged(\n meta: Meta,\n previousState: State,\n latestState: State\n): boolean {\n const { filterExpression, search: { query } = {}, externalState } = latestState;\n const {\n filterExpression: previousFilterExpression,\n search: { query: previousQuery } = {},\n externalState: previousExternalState\n } = previousState;\n\n const searchChanged = () => query !== previousQuery;\n const filterExpressionChanged = () => !deepEqual(previousFilterExpression, filterExpression);\n const externalFilterChanged = () =>\n meta?.externalFilters &&\n !deepEqual(\n previousExternalState?.[meta?.externalFilters],\n externalState?.[meta?.externalFilters]\n );\n\n return !!(searchChanged() || filterExpressionChanged() || externalFilterChanged());\n}\n\n/**\n * Calculates the overlapping area from given {@link previousIndexes} and {@link newIndexes}.\n * @param previousIndexes\n * @param newIndexes\n * @returns A number indicating the overlapping area.\n */\nexport function getOverlappingIndexes(\n previousIndexes: PaginationPayload = {} as PaginationPayload,\n newIndexes: PaginationPayload = {} as PaginationPayload\n): number {\n const { startIndex: previousStartIndex, endIndex: previousEndIndex } = previousIndexes;\n const { startIndex: latestStartIndex, endIndex: latestEndIndex } = newIndexes;\n\n if (previousEndIndex < latestStartIndex || latestEndIndex < previousStartIndex) {\n return 0;\n }\n\n const overlapStartIndex = Math.max(previousStartIndex, latestStartIndex);\n const overlapEndIndex = Math.min(previousEndIndex, latestEndIndex);\n const overlapArea = overlapEndIndex - overlapStartIndex;\n\n if (overlapArea <= 0) {\n return 0;\n }\n\n return overlapArea;\n}\n\n/**\n * Determines whether the given {@link action} already exists in {@link latestActions} by comparing its type and payload.\n * @param action\n * @param latestActions\n * @returns true if the {@link action} exists in the {@link latestActions} otherwise false.\n */\n// TODO This is some what same as isStaleAction. Revisit both the methods.\nexport function isSameActionPresent(\n action: Action,\n latestActions: Map<ActionType, Action>\n): boolean {\n const { type: actionType } = action;\n const existingAction = latestActions.get(actionType);\n return (\n !!existingAction &&\n 'payload' in action &&\n 'payload' in existingAction &&\n deepEqual(existingAction.payload, action.payload)\n );\n}\n\n/**\n * Removes actions from the {@link latestActions} that have already been executed and are present in the {@link executedActionsQueue}.\n * This function ensures that only pending actions remain in the {@link latestActions}.\n * @param latestActions\n * @param executedActionsQueue\n */\nexport function clearProcessedActionsFromLatestActions(\n latestActions: Map<ActionType, Action>,\n executedActionsQueue: Action[]\n): void {\n executedActionsQueue.forEach(executedAction => {\n if (isSameActionPresent(executedAction, latestActions)) {\n latestActions.delete(executedAction.type);\n }\n });\n}\n\n/**\n * Determines whether the given {@link action} already exists in {@link latestActions} by comparing its type and payload.\n * @returns\n * - false if {@link action} does not already exists.\n * - false if {@link action} already exists and payload matches\n * - true if {@link action} already exists but payload does not match.\n */\n// TODO revisit this method again. It is not checking only for stale actions.\nexport function isStaleAction(action: Action, latestActions: Map<ActionType, Action>): boolean {\n const { type: actionType } = action;\n const existingAction = latestActions.get(actionType);\n return (\n !!existingAction &&\n 'payload' in action &&\n 'payload' in existingAction &&\n // TODO why ! is added in front of deepEqual. Ideally for an existing action if the payload is exactly same then it should be marked as stale.\n !deepEqual(existingAction.payload, action.payload)\n );\n}\n\n/**\n * Determines if the overlapping area of pagination indexes between the old and new pagination payloads in current queue is less than 50%.\n * This function helps determine if a significant portion of the pagination area has changed due to recent actions.\n *\n * For detailed usage and examples, refer [pagination-action-optimizations.md](../../../docs/pagination-action-optimizations.md).\n * @param latestActions - A map of the latest actions being executed in the queue, which may include pagination actions.\n * @param previousExecutedActionQueue - The queue of previously executed actions.\n * @returns Returns true if the overlapping area is less than 50%, otherwise returns false.\n */\nexport function isSignificantPaginationOverlap(\n latestActions: Map<ActionType, Action>,\n previousExecutedActionQueue: Action[]\n): boolean {\n const lastExecutedPaginationActionIndex = previousExecutedActionQueue\n .map(action => action.type)\n .lastIndexOf(ActionTypes.PAGINATE);\n if (!latestActions.has(ActionTypes.PAGINATE) || lastExecutedPaginationActionIndex < 0)\n return false;\n\n const lastExecutedPaginationPayload = (\n previousExecutedActionQueue[lastExecutedPaginationActionIndex] as PaginateAction\n ).payload;\n const latestPaginatePayload = (latestActions.get(ActionTypes.PAGINATE) as PaginateAction).payload;\n\n const overlappingIndexes = getOverlappingIndexes(\n lastExecutedPaginationPayload,\n latestPaginatePayload\n );\n const { startIndex, endIndex } = latestPaginatePayload;\n // if the api response matches at least 50% with the latest pagination size, we can use that to display some rows until the next set of rows arrive\n return !(overlappingIndexes >= (endIndex - startIndex) * 0.5);\n}\n\n/**\n * Returns a unique key for a given group.\n * @param group\n */\nexport const getGroupKey = (group: Group): string => {\n if (group.dateFunction) {\n return `${group.columnId}${groupBySeparator}${group.dateFunction}`;\n }\n\n if (group.customFunction) {\n return `${group.columnId}${groupBySeparator}${group.customFunction.type}${groupBySeparator}${group.customFunction.id}`;\n }\n return group.columnId;\n};\n\n/**\n * Returns {@link Group group information} from {@link Group groups} based on {@link groupBy} key\n * @param groupBy - unique key for a given group\n * @param groups - groups info from table state\n * @returns matched group\n */\nexport const getGroupFromKey = (groupBy: string, groups: State['groups']): Group | undefined => {\n return groups?.find(group => {\n return getGroupKey(group) === groupBy;\n });\n};\n\n/**\n * Checks if the column widths have been calculated.\n *\n * @returns True if the column widths have been calculated; otherwise, false.\n */\nexport const areColumnWidthsCalculated = (columnWidths: State['columnWidths']): boolean => {\n if (!columnWidths || isEmpty(columnWidths)) return false;\n const keys = Object.keys(columnWidths);\n // TODO why only rowDragDropcolumn is excluded from OOTB columns set, why not other OOTB columns ?\n return !(keys.length === 1 && keys[0] === rowDragDropColumnMeta.field.id);\n};\n\n// TODO: temporary method, till meta.dragHandle is completely removed(currently deprecated).\nexport const isRowReorderFieldEnabled = (meta: Meta): boolean => {\n return meta.dragHandle || !!meta.rowReorderField;\n};\n\n/**\n * Determines whether the row reorder field is visible.\n *\n * @param meta - View meta containing row reorder field configuration.\n * @returns `true` if the row reorder field is visible; otherwise falls back to the deprecated `dragHandle`.\n */\nexport const isRowReorderFieldVisible = (meta: Meta): boolean => {\n return meta.rowReorderField ? !!meta.rowReorderField.show : !!meta.dragHandle;\n};\n\n/**\n * Determines whether the row error field is visible.\n *\n * @param meta - View meta containing row error field configuration.\n * @returns `true` if the row error field is visible; otherwise falls back to the deprecated `showErrorField`.\n */\nexport const isRowErrorFieldVisible = (meta: Meta): boolean => {\n return meta.rowErrorField ? !!meta.rowErrorField.show : !!meta.showErrorField;\n};\n\n// TODO: temporary method, till meta.showErrorField is completely removed(currently deprecated).\nexport const isRowErrorFieldEnabled = (meta: Meta): boolean => {\n return meta.showErrorField || !!meta.rowErrorField;\n};\n\n/**\n * Returns the {@link StyleFormat} for a given {@link styleFormatId} from {@link View.styleFormats}\n * @param styleFormatId\n * @param styleFormats\n * @returns StyleFormat or `undefined`\n */\nconst getStyleFormat = (\n styleFormatId: string,\n styleFormats: NonNullable<View['styleFormats']>\n): StyleFormat | undefined => {\n return styleFormats.find(styleFormat => styleFormat.id === styleFormatId);\n};\n\n/**\n * Evaluates the style format applicable to a cell based on {@link Column.getExecutionContext current execution context} and {@link Column.conditionalStyleFormats conditionalStyleFormats}\n * @param column Column on which styles need to be evaluated.\n * @param rsInternal RsInternal object\n * @returns - {@link StyleFormat} or `undefined\n */\nexport const evaluateStyleFormatForCell = (\n column: Column,\n rsInternal: RsInternal\n): StyleFormat | undefined => {\n const { conditionalStyleFormats } = column;\n const { getRsProps, getRsStateResolver, getView } = rsInternal;\n const { apiContext } = getRsProps();\n const { meta } = getView();\n const { getState } = getRsStateResolver();\n const data = column.getExecutionContext()?.getValue?.();\n\n if (!data || !conditionalStyleFormats) return;\n\n const firstMatchingStyleFormat = conditionalStyleFormats.find(({ condition }) =>\n apiContext.evaluateCondition\n ? apiContext.evaluateCondition(getState(), meta, { condition, data })\n : evaluateConditionLocally(meta, { condition, data })\n );\n\n return (\n firstMatchingStyleFormat &&\n getStyleFormat(firstMatchingStyleFormat.styleFormatId, column.parent.styleFormats!)\n );\n};\n\nexport const isRowSelectFieldEnabled = (meta: Meta): boolean => {\n const { selectionMode, template } = meta;\n return !!(\n selectionMode &&\n SELECTION_MODES[selectionMode] &&\n !(template === TEMPLATES.GALLERY && selectionMode === SELECTION_MODES.multi_on_hover) &&\n template !== TEMPLATES.TIMELINE\n );\n};\n\nexport const isRowActionFieldEnabled = (meta: Meta): boolean => {\n return !!meta.editing || !!meta.deleting;\n};\n\nexport const isFreezingEnabled = (meta: Meta): boolean => {\n return (\n meta.freezeFields ||\n isRowErrorFieldEnabled(meta) ||\n isRowReorderFieldEnabled(meta) ||\n isRowSelectFieldEnabled(meta)\n );\n};\n\n/**\n * Derives visible column IDs from fieldDefs by excluding hidden columns.\n *\n * @param meta - View meta containing fieldDefs.\n * @param hiddenColumns - Array of hidden column IDs.\n * @returns Array of visible column IDs.\n */\nexport function getVisibleColumnsFromHidden(\n meta: Meta,\n hiddenColumns: State['hiddenColumns']\n): string[] {\n return meta.fieldDefs\n .filter(fieldDef => !hiddenColumns?.includes(fieldDef.id))\n .map(fieldDef => fieldDef.id);\n}\n\n/**\n * Derives visible column IDs from fieldDefs where show is true.\n *\n * @param meta - View meta containing fieldDefs.\n * @returns Array of visible column IDs.\n */\nexport function getVisibleColumnsFromFieldDefs(meta: Meta): string[] {\n return meta.fieldDefs.filter(fieldDef => fieldDef.show).map(fieldDef => fieldDef.id);\n}\n\nexport const isTranslationKey = (key: string): key is keyof typeof defaultTranslations =>\n key in defaultTranslations;\n\n/**\n * Translates a label if it is a known translation key, otherwise returns it as-is.\n *\n * @param label - The label string to translate.\n * @param translate - The translation function from the RS store.\n */\nexport const translateLabel = (\n label: string,\n translate: (key: keyof typeof defaultTranslations) => string\n): string => (isTranslationKey(label) ? translate(label) : label);\n\n/**\n * Returns true if a column should still be created for the given fieldDef\n * even when the field is not visible (`show = false`).\n *\n * This happens when the field is required by the current template configuration\n * (e.g., Timeline, Gallery, Map) or when it is marked as a row header.\n *\n * TODO: Refactor, move template-field resolution into the RS layer (e.g. `useRepeat`).\n */\nexport const shouldCreateColumnForField = (meta: Meta, fieldDef: FieldDef): boolean => {\n if (fieldDef.show || fieldDef.isRowHeader || fieldDef.filterPickList) return true;\n\n const template = meta.template;\n\n if (template === REPEATING_STRUCTURE_TEMPLATES.TIMELINE) {\n const { timelineFields = {} } = meta;\n\n const referenceNames = [\n timelineFields.title?.name,\n timelineFields.date?.name,\n timelineFields.content?.name,\n timelineFields.status?.name,\n timelineFields.icon?.name\n ].filter(Boolean);\n\n return referenceNames.includes(fieldDef.name);\n }\n\n if (template === REPEATING_STRUCTURE_TEMPLATES.GALLERY) {\n const { galleryConfig = {} } = meta;\n\n const referenceIds = [\n galleryConfig.header?.field,\n galleryConfig.heroImage?.source?.field\n ].filter(Boolean);\n\n return referenceIds.includes(fieldDef.id);\n }\n\n if (template === REPEATING_STRUCTURE_TEMPLATES.MAP) {\n const { mapFieldIds = {} } = meta;\n\n const referenceIds = [mapFieldIds.location, mapFieldIds.label, mapFieldIds.content].filter(\n Boolean\n );\n\n return referenceIds.includes(fieldDef.id);\n }\n\n return false;\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pega/lists-core",
|
|
3
|
-
"version": "9.0.0-build.29.
|
|
3
|
+
"version": "9.0.0-build.29.12",
|
|
4
4
|
"description": "Core headless UI library that the users can use to write their own UI and create repeating structures like table, gallery, timeline etc.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"author": "Pegasystems",
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
"build": "tsc -b tsconfig.build.json"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@pega/cosmos-react-condition-builder": "9.0.0-build.29.
|
|
18
|
-
"@pega/cosmos-react-core": "9.0.0-build.29.
|
|
17
|
+
"@pega/cosmos-react-condition-builder": "9.0.0-build.29.12",
|
|
18
|
+
"@pega/cosmos-react-core": "9.0.0-build.29.12",
|
|
19
19
|
"@types/lodash-es": "^4.17.12",
|
|
20
20
|
"dayjs": "^1.11.13",
|
|
21
21
|
"fast-deep-equal": "^3.1.3",
|