@pega/lists-core 9.0.0-build.29.3 → 9.0.0-build.29.5
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/afterRender/columnSizing/autoSize.js +1 -1
- package/lib/src/core/features/uIFeatures/afterRender/columnSizing/autoSize.js.map +1 -1
- package/lib/src/core/features/uIFeatures/afterRender/columnSizing/index.d.ts +1 -1
- package/lib/src/core/features/uIFeatures/afterRender/columnSizing/index.d.ts.map +1 -1
- package/lib/src/core/features/uIFeatures/afterRender/columnSizing/index.js +59 -30
- package/lib/src/core/features/uIFeatures/afterRender/columnSizing/index.js.map +1 -1
- package/lib/src/core/features/uIFeatures/index.d.ts.map +1 -1
- package/lib/src/core/reducers/personalizationReducer.d.ts +1 -1
- package/package.json +3 -3
|
@@ -51,7 +51,7 @@ export function autoSizeOfColumn(col, domContainer, forceAutoSize = false) {
|
|
|
51
51
|
*/
|
|
52
52
|
export function autoSizeOfColumns(columns, domContainer, reset) {
|
|
53
53
|
const columnAutoSizes = {};
|
|
54
|
-
const visibleColumns = columns
|
|
54
|
+
const visibleColumns = columns.filter(col => !col.hidden);
|
|
55
55
|
// Set CSS variables for all columns that need auto-sizing first (single batch write)
|
|
56
56
|
visibleColumns.forEach(column => {
|
|
57
57
|
domContainer.style.setProperty(`--col-width-${column.field.idHash}`, MAX_CONTENT);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoSize.js","sourceRoot":"","sources":["../../../../../../../src/core/features/uIFeatures/afterRender/columnSizing/autoSize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAM5D;;;;;;;GAOG;AAEH,MAAM,WAAW,GAAG,aAAa,CAAC;AAClC,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,SAAS,oBAAoB,CAC3B,MAAc,EACd,YAA+C,EAC/C,aAAa,GAAG,KAAK;IAErB,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,+CAA+C;QAC/C,MAAM,iBAAiB,GAAG,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACxD,IAAI,iBAAiB,EAAE,CAAC;YACtB,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACvB,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAC1B,YAAY,CAAC,gBAAgB,CAAc,iBAAiB,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CACjF,CAAC;IAEF,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;QACnC,IAAI,SAAS,GAAG,eAAe,EAAE,CAAC;YAChC,eAAe,GAAG,SAAS,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,oEAAoE;IACpE,MAAM,cAAc,GAAG,eAAe,GAAG,eAAe,CAAC;IAEzD,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ;QACpE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ;QACvB,CAAC,CAAC,cAAc,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,GAAW,EACX,YAA+C,EAC/C,aAAa,GAAG,KAAK;IAErB,qDAAqD;IACrD,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC;IAE/E,MAAM,WAAW,GAAG,oBAAoB,CAAC,GAAG,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IAE3E,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC;IAE3F,OAAO,WAAW,CAAC;AACrB,CAAC;AACD;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAiB,EACjB,YAA+C,EAC/C,KAAe;IAEf,MAAM,eAAe,GAAgC,EAAE,CAAC;IAExD,MAAM,cAAc,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"autoSize.js","sourceRoot":"","sources":["../../../../../../../src/core/features/uIFeatures/afterRender/columnSizing/autoSize.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ColumnResizePayload } from '../../../../actions/actions.types';\nimport { rowSelectColumnMeta } from '../../../../constants';\nimport type Column from '../../../../generators/ColumnGenerator';\nimport type View from '../../../../generators/ViewGenerator';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport type { FieldDef } from '../../../../../../types/Meta.types';\n\n/**\n * Calculates the width of column based on their content size. If a column already has a width specified in {@link FieldDef.width} or through {@link column.getPersonalizedWidth personalization}, then that width will be honored over content size width.\n *\n * @param column - A column object representing column in the view.\n * @param domContainer - The HTML element that acts as the container for RS.\n * @param forceAutoSize - A boolean flag that indicates whether to force a recalculation of column widths.\n * @returns column width in pixels.\n */\n\nconst MAX_CONTENT = 'max-content';\nconst ROUNDING_BUFFER = 1;\nfunction calculateColumnWidth(\n column: Column,\n domContainer: NonNullable<View['domContainer']>,\n forceAutoSize = false\n) {\n if (!forceAutoSize) {\n // This will be executed in case of reset width\n const personalizedWidth = column.getPersonalizedWidth();\n if (personalizedWidth) {\n return personalizedWidth;\n }\n if (column.field.width) {\n return column.field.width;\n }\n }\n\n const cellsList = Array.from(\n domContainer.querySelectorAll<HTMLElement>(`[data-col-id=\"${column.field.id}\"]`)\n );\n\n let maxContentWidth = 0;\n cellsList.forEach(cell => {\n const cellWidth = cell.offsetWidth;\n if (cellWidth > maxContentWidth) {\n maxContentWidth = cellWidth;\n }\n });\n\n /* buffer to prevent content clipping due to offsetWidth rounding */\n const maxColumnWidth = maxContentWidth + ROUNDING_BUFFER;\n\n return column.field.maxWidth && maxColumnWidth > column.field.maxWidth\n ? column.field.maxWidth\n : maxColumnWidth;\n}\n\nexport function autoSizeOfColumn(\n col: Column,\n domContainer: NonNullable<View['domContainer']>,\n forceAutoSize = false\n): number {\n // Set to max-content to measure actual content width\n domContainer.style.setProperty(`--col-width-${col.field.idHash}`, MAX_CONTENT);\n\n const columnWidth = calculateColumnWidth(col, domContainer, forceAutoSize);\n\n domContainer.style.setProperty(`--col-width-${col.field.idHash}`, `${col.currentWidth}px`);\n\n return columnWidth;\n}\n/**\n * Calculates the width of columns based on their content size. If a column already has a width specified in {@link FieldDef.width} or through {@link column.getPersonalizedWidth personalization}, then that width will be honored over content size width.\n *\n * @param columns - An array of `Column` objects representing the columns in the view.\n * @param domContainer - The HTML element that acts as the container for RS.\n * @param reset - A boolean flag that indicates whether to force a recalculation of column widths.\n * @returns An object containing width for each column.\n */\nexport function autoSizeOfColumns(\n columns: Column[],\n domContainer: NonNullable<View['domContainer']>,\n reset?: boolean\n) {\n const columnAutoSizes: ColumnResizePayload['data'] = {};\n\n const visibleColumns = columns.filter(col => !col.hidden);\n\n // Set CSS variables for all columns that need auto-sizing first (single batch write)\n visibleColumns.forEach(column => {\n domContainer.style.setProperty(`--col-width-${column.field.idHash}`, MAX_CONTENT);\n });\n domContainer.setAttribute('data-content-size-measuring', 'true');\n\n // Now calculate widths for all columns (each does its own DOM reading in batch context)\n visibleColumns.forEach(column => {\n if (!(column.currentWidth && reset === undefined)) {\n // always calculate the content based width for row selection column because it's width will change depending on if grouping is applied or not.\n const forceAutosize = column.field.id === rowSelectColumnMeta.field.id || !reset;\n const columnWidth = calculateColumnWidth(column, domContainer, forceAutosize);\n\n columnAutoSizes[column.field.id] = columnWidth;\n }\n });\n\n domContainer.removeAttribute('data-content-size-measuring');\n // Reset CSS variables back to original widths for columns that had max-content set\n visibleColumns.forEach(column => {\n if (column.currentWidth) {\n domContainer.style.setProperty(\n `--col-width-${column.field.idHash}`,\n `${column.currentWidth}px`\n );\n }\n });\n\n return columnAutoSizes;\n}\n"]}
|
|
@@ -4,7 +4,7 @@ import type { FeatureProps } from '../../../featureFactory';
|
|
|
4
4
|
* Executes the autosizing feature on all the columns. It dispatches an action that updates {@link State.columnWidths} slice with the calculated widths for all the columns.
|
|
5
5
|
* @param param featureProps
|
|
6
6
|
*/
|
|
7
|
-
export declare function runColumnSizing([{
|
|
7
|
+
export declare function runColumnSizing([{ getView, getRsStore, dispatch }]: [
|
|
8
8
|
featureProps: OmitStrict<FeatureProps, 'getOriginalState' | 'getRsProps'>
|
|
9
9
|
]): void;
|
|
10
10
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/features/uIFeatures/afterRender/columnSizing/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAU1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/features/uIFeatures/afterRender/columnSizing/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAU1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAyE5D;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE;IACnE,YAAY,EAAE,UAAU,CAAC,YAAY,EAAE,kBAAkB,GAAG,YAAY,CAAC;CAC1E,QAkCA;AAWD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;+BAQuB,cAAc,YAAY;AAPpD,wBAwFE"}
|
|
@@ -37,7 +37,8 @@ const checkDomContainerHasDataRows = (domContainer) => {
|
|
|
37
37
|
* Autosizes the first visual column to account for the expand/collapse button
|
|
38
38
|
* introduced by grouping.
|
|
39
39
|
*/
|
|
40
|
-
function autoSizeFirstVisualColumn([
|
|
40
|
+
function autoSizeFirstVisualColumn([featureProps]) {
|
|
41
|
+
const { getView, dispatch } = featureProps;
|
|
41
42
|
const { columns = [], getDomContainer } = getView();
|
|
42
43
|
const firstVisualCol = columns.find(c => c.isFirstVisualColumn);
|
|
43
44
|
const domContainer = getDomContainer();
|
|
@@ -48,18 +49,20 @@ function autoSizeFirstVisualColumn([{ getView, dispatch }]) {
|
|
|
48
49
|
/**
|
|
49
50
|
* Runs autosizing on out-of-the-box (OOTB) action columns in the view.
|
|
50
51
|
*/
|
|
51
|
-
const autosizeOotbActionColumns = ([
|
|
52
|
-
const {
|
|
52
|
+
const autosizeOotbActionColumns = ([featureProps]) => {
|
|
53
|
+
const { getView, dispatch } = featureProps;
|
|
54
|
+
const { columns = [], getDomContainer } = getView();
|
|
53
55
|
const ootbColumns = columns?.filter(col => OOTB_COLUMNS.includes(col.field.id));
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
const domContainer = getDomContainer();
|
|
57
|
+
if (ootbColumns.length && domContainer) {
|
|
58
|
+
dispatch(actionColumnsAutoSize(ootbColumns, domContainer, true));
|
|
56
59
|
}
|
|
57
60
|
};
|
|
58
61
|
/**
|
|
59
62
|
* Executes the autosizing feature on all the columns. It dispatches an action that updates {@link State.columnWidths} slice with the calculated widths for all the columns.
|
|
60
63
|
* @param param featureProps
|
|
61
64
|
*/
|
|
62
|
-
export function runColumnSizing([{
|
|
65
|
+
export function runColumnSizing([{ getView, getRsStore, dispatch }]) {
|
|
63
66
|
const { columns = [], getDomContainer, meta } = getView();
|
|
64
67
|
if (meta.template !== TEMPLATES.TABLE)
|
|
65
68
|
return;
|
|
@@ -75,30 +78,6 @@ export function runColumnSizing([{ getState, getView, getRsStore, dispatch }]) {
|
|
|
75
78
|
}
|
|
76
79
|
return;
|
|
77
80
|
}
|
|
78
|
-
/**
|
|
79
|
-
* If one of the table's ancestors is in a hidden state, the autosize calculations will not function correctly
|
|
80
|
-
* since the domContainer's offsetWidth will be 0. To address this scenario, a resize observer is attached for this use case.
|
|
81
|
-
* It triggers autosize whenever the offsetWidth of the domContainer increases from 0 once the ancestors are
|
|
82
|
-
* made visible. */
|
|
83
|
-
if (domContainer?.offsetWidth === 0) {
|
|
84
|
-
const observer = new ResizeObserver(entries => {
|
|
85
|
-
for (const entry of entries) {
|
|
86
|
-
if (entry.contentRect.width > 0) {
|
|
87
|
-
runColumnSizing([
|
|
88
|
-
{
|
|
89
|
-
getState,
|
|
90
|
-
getView,
|
|
91
|
-
getRsStore,
|
|
92
|
-
dispatch
|
|
93
|
-
}
|
|
94
|
-
]);
|
|
95
|
-
observer.unobserve(entry.target);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
observer.observe(domContainer);
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
81
|
rsStore.autosizeTriggered = true;
|
|
103
82
|
// skipping column animation on next run if column size changed after personalization change or delete
|
|
104
83
|
rsStore.skipColumnAnimationOnNextRun = true;
|
|
@@ -150,10 +129,60 @@ export default () => {
|
|
|
150
129
|
const memoizedResetAutosizeStatus = withMemoization(resetAutosizeStatus);
|
|
151
130
|
const memoizedAutosizeFirstVisualColumn = withMemoization(autoSizeFirstVisualColumn);
|
|
152
131
|
const memoizedAutosizeOotbActionColumns = withMemoization(autosizeOotbActionColumns);
|
|
132
|
+
let domContainerResizeObserver = null;
|
|
133
|
+
let observedDomContainer = null;
|
|
153
134
|
return function execute(featureProps) {
|
|
154
135
|
const state = featureProps.getState();
|
|
155
136
|
// AutoSize by default
|
|
156
137
|
memoizedResetAutosizeStatus([featureProps], [state.personalization?.active, state.refresh, state.hiddenColumns, state.customFields]);
|
|
138
|
+
/**
|
|
139
|
+
* If one of the table's ancestors is in a hidden state, the autosize calculations will not
|
|
140
|
+
* function correctly since the domContainer's offsetWidth will be 0. A single ResizeObserver
|
|
141
|
+
* is attached here (once per hidden period) and fires all sizing functions as soon as the
|
|
142
|
+
* container gains width.
|
|
143
|
+
*
|
|
144
|
+
* The memoized versions are called intentionally so their dependency arrays are initialized
|
|
145
|
+
* with the current state values. If the raw functions were called instead, the memoized
|
|
146
|
+
* wrappers would still have no recorded deps and would re-run on the very next `execute`
|
|
147
|
+
* cycle, causing each sizing function to fire twice.
|
|
148
|
+
*
|
|
149
|
+
* Any function that performs sizing calculations should be called within this observer callback.
|
|
150
|
+
*/
|
|
151
|
+
const domContainer = featureProps.getView().getDomContainer();
|
|
152
|
+
if (domContainer && domContainer.offsetWidth === 0) {
|
|
153
|
+
if (domContainerResizeObserver && observedDomContainer !== domContainer) {
|
|
154
|
+
// The DOM container was replaced while the observer was still pending (e.g. component remount).
|
|
155
|
+
domContainerResizeObserver.disconnect();
|
|
156
|
+
domContainerResizeObserver = null;
|
|
157
|
+
observedDomContainer = null;
|
|
158
|
+
}
|
|
159
|
+
if (!domContainerResizeObserver) {
|
|
160
|
+
domContainerResizeObserver = new ResizeObserver(entries => {
|
|
161
|
+
for (const entry of entries) {
|
|
162
|
+
if (entry.contentRect.width > 0) {
|
|
163
|
+
const currentState = featureProps.getState();
|
|
164
|
+
memoizedRunColumnSizing([featureProps], [
|
|
165
|
+
currentState.personalization?.active,
|
|
166
|
+
featureProps.getView().rows,
|
|
167
|
+
featureProps.getRsStore().autosizeTriggered,
|
|
168
|
+
currentState.refresh,
|
|
169
|
+
currentState.visibleColumns,
|
|
170
|
+
currentState.forceUpdateFeatures?.forceCalculateAutoWidth
|
|
171
|
+
]);
|
|
172
|
+
memoizedAutosizeFirstVisualColumn([featureProps], [currentState.groups, currentState.responsive?.sm]);
|
|
173
|
+
memoizedAutosizeOotbActionColumns([featureProps], [currentState.selectedHeightOption]);
|
|
174
|
+
domContainerResizeObserver?.unobserve(entry.target);
|
|
175
|
+
domContainerResizeObserver = null;
|
|
176
|
+
observedDomContainer = null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
domContainerResizeObserver.observe(domContainer);
|
|
181
|
+
observedDomContainer = domContainer;
|
|
182
|
+
}
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
// These are still needed as the Resize observer will work only once but we need to run sizing on user operations as well
|
|
157
186
|
memoizedRunColumnSizing([featureProps], [
|
|
158
187
|
state.personalization?.active,
|
|
159
188
|
featureProps.getView().rows,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/core/features/uIFeatures/afterRender/columnSizing/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { OmitStrict } from '@pega/cosmos-react-core';\n\nimport {\n actionColumnResize,\n actionColumnsAutoSize,\n actionColumnAutoSize,\n actionForceUpdate\n} from '../../../../actions/actions';\nimport { TEMPLATES } from '../../../../constants';\nimport { OOTB_COLUMNS, withMemoization } from '../../../../utils/util';\nimport type { FeatureProps } from '../../../featureFactory';\nimport type View from '../../../../generators/ViewGenerator';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport type { State } from '../../../../../../types/State.types';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport type RsStore from '../../../../RsStore';\n\nimport { autoSizeOfColumns } from './autoSize';\n\n/*\n * If columnWidths are undefined, there is no active personalization invloved in the current view\n * So triggering auto column sizing, which depends on column content.\n * in case of nested groupings, skipping group headers from being counted as a row\n */\n/**\n * Checks if {@link View.domContainer dom container} has any rows with visible cells.\n * @param columns\n * @param domContainer\n * @returns true if dom container has any rows available, otherwise false.\n */\nconst checkDomContainerHasAnyRows = (\n columns: NonNullable<View['columns']>,\n domContainer: View['domContainer']\n) => {\n for (const column of columns) {\n if (!column.hidden) {\n const cells = domContainer\n ? domContainer.querySelectorAll(`[data-col-id=\"${column.field.id}\"]`)\n : [];\n if (cells.length > 1) {\n return true;\n }\n }\n }\n return false;\n};\n\n/**\n * Checks if any data rows are available in dom container. It does not includes grouped rows.\n * @returns true if data rows are available, otherwise false.\n */\nconst checkDomContainerHasDataRows = (domContainer: View['domContainer']) => {\n return !!(domContainer && domContainer.querySelectorAll('.row[aria-rowindex]').length);\n};\n\n/**\n * Autosizes the first visual column to account for the expand/collapse button\n * introduced by grouping.\n */\n\nfunction autoSizeFirstVisualColumn([{ getView, dispatch }]: [featureProps: FeatureProps]) {\n const { columns = [], getDomContainer } = getView();\n const firstVisualCol = columns.find(c => c.isFirstVisualColumn);\n const domContainer = getDomContainer();\n if (firstVisualCol && domContainer) {\n dispatch(actionColumnAutoSize(firstVisualCol, domContainer, true));\n }\n}\n\n/**\n * Runs autosizing on out-of-the-box (OOTB) action columns in the view.\n */\nconst autosizeOotbActionColumns = ([{ getView, dispatch }]: [featureProps: FeatureProps]) => {\n const { columns = [] } = getView();\n const ootbColumns = columns?.filter(col => OOTB_COLUMNS.includes(col.field.id));\n if (ootbColumns.length) {\n dispatch(actionColumnsAutoSize(ootbColumns, getView().getDomContainer()!, true));\n }\n};\n\n/**\n * Executes the autosizing feature on all the columns. It dispatches an action that updates {@link State.columnWidths} slice with the calculated widths for all the columns.\n * @param param featureProps\n */\nexport function runColumnSizing([{ getState, getView, getRsStore, dispatch }]: [\n featureProps: OmitStrict<FeatureProps, 'getOriginalState' | 'getRsProps'>\n]) {\n const { columns = [], getDomContainer, meta } = getView();\n\n if (meta.template !== TEMPLATES.TABLE) return;\n\n const rsStore = getRsStore();\n const domContainer = getDomContainer();\n const runColumnSizingOnRowsAvailable =\n !rsStore.columnSizingTriggerdOnRowsAvailable && checkDomContainerHasDataRows(domContainer);\n\n // if there is no group/data row to size in DOM, don't run column sizing\n if (\n !checkDomContainerHasAnyRows(columns, domContainer) ||\n (rsStore.autosizeTriggered && !runColumnSizingOnRowsAvailable)\n ) {\n // if in current render cycle the rows were not painted, check for autosizing in next cycle\n if (!rsStore.autosizeTriggered) {\n dispatch(actionForceUpdate(false, { forceCalculateAutoWidth: true }));\n }\n return;\n }\n\n /**\n * If one of the table's ancestors is in a hidden state, the autosize calculations will not function correctly\n * since the domContainer's offsetWidth will be 0. To address this scenario, a resize observer is attached for this use case.\n * It triggers autosize whenever the offsetWidth of the domContainer increases from 0 once the ancestors are\n * made visible. */\n if (domContainer?.offsetWidth === 0) {\n const observer = new ResizeObserver(entries => {\n for (const entry of entries) {\n if (entry.contentRect.width > 0) {\n runColumnSizing([\n {\n getState,\n getView,\n getRsStore,\n dispatch\n }\n ]);\n observer.unobserve(entry.target);\n }\n }\n });\n observer.observe(domContainer);\n return;\n }\n\n rsStore.autosizeTriggered = true;\n // skipping column animation on next run if column size changed after personalization change or delete\n rsStore.skipColumnAnimationOnNextRun = true;\n\n if (runColumnSizingOnRowsAvailable) {\n // Fresh column sizing will run only once for a view when the rows are loaded for the first time in DOM\n rsStore.columnSizingTriggerdOnRowsAvailable = true;\n dispatch(actionColumnsAutoSize(columns, domContainer!, true));\n } else {\n // Incremental column sizing on show/hide of columns or table refresh or on view change with grouping applied\n dispatch(actionColumnResize(autoSizeOfColumns(columns, domContainer!)));\n }\n}\n\n/**\n * It resets the {@link RsStore.autosizeTriggered autosize status} on RsStore.\n * @param param featureProps\n */\nfunction resetAutosizeStatus([{ getRsStore }]: [featureProps: FeatureProps]) {\n // This parent flag checks if any type of sizing is triggered on the table including table header/groups/rows.\n getRsStore().autosizeTriggered = false;\n}\n\n/**\n * Manages the autosizing feature of columns in the view. This includes the following actions:\n * 1. **Executing Autosize for All Columns**:\n *\n * This action is triggered when any of the following properties change:\n * - {@link State.personalization.active}\n * - {@link View.rows}\n * - {@link RsStore.autosizeTriggered}\n * - {@link State.refresh}\n * - {@link State.hiddenColumns}\n * - {@link State.forceUpdateFeatures.forceCalculateAutoWidth}\n * 2. **Resetting Autosize Status**:\n *\n * This action is triggered when any of the following properties change:\n * - {@link State.personalization.active}\n * - {@link State.refresh}\n * - {@link State.hiddenColumns}\n * - {@link State.customFields}\n *\n * 3. **Executing Autosize on First Visual Column**:\n *\n * This action is triggered when any of the following properties change:\n * - {@link State.groups}\n * - {@link State.responsive.sm}\n */\nexport default () => {\n const memoizedRunColumnSizing = withMemoization(runColumnSizing);\n const memoizedResetAutosizeStatus = withMemoization(resetAutosizeStatus);\n const memoizedAutosizeFirstVisualColumn = withMemoization(autoSizeFirstVisualColumn);\n const memoizedAutosizeOotbActionColumns = withMemoization(autosizeOotbActionColumns);\n return function execute(featureProps: FeatureProps) {\n const state = featureProps.getState();\n // AutoSize by default\n memoizedResetAutosizeStatus(\n [featureProps],\n [state.personalization?.active, state.refresh, state.hiddenColumns, state.customFields]\n );\n memoizedRunColumnSizing(\n [featureProps],\n [\n state.personalization?.active,\n featureProps.getView().rows,\n featureProps.getRsStore().autosizeTriggered,\n state.refresh,\n state.visibleColumns,\n state.forceUpdateFeatures?.forceCalculateAutoWidth\n ]\n );\n memoizedAutosizeFirstVisualColumn([featureProps], [state.groups, state.responsive?.sm]);\n memoizedAutosizeOotbActionColumns([featureProps], [state.selectedHeightOption]);\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/core/features/uIFeatures/afterRender/columnSizing/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { OmitStrict } from '@pega/cosmos-react-core';\n\nimport {\n actionColumnResize,\n actionColumnsAutoSize,\n actionColumnAutoSize,\n actionForceUpdate\n} from '../../../../actions/actions';\nimport { TEMPLATES } from '../../../../constants';\nimport { OOTB_COLUMNS, withMemoization } from '../../../../utils/util';\nimport type { FeatureProps } from '../../../featureFactory';\nimport type View from '../../../../generators/ViewGenerator';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport type { State } from '../../../../../../types/State.types';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport type RsStore from '../../../../RsStore';\n\nimport { autoSizeOfColumns } from './autoSize';\n\n/*\n * If columnWidths are undefined, there is no active personalization invloved in the current view\n * So triggering auto column sizing, which depends on column content.\n * in case of nested groupings, skipping group headers from being counted as a row\n */\n/**\n * Checks if {@link View.domContainer dom container} has any rows with visible cells.\n * @param columns\n * @param domContainer\n * @returns true if dom container has any rows available, otherwise false.\n */\nconst checkDomContainerHasAnyRows = (\n columns: NonNullable<View['columns']>,\n domContainer: View['domContainer']\n) => {\n for (const column of columns) {\n if (!column.hidden) {\n const cells = domContainer\n ? domContainer.querySelectorAll(`[data-col-id=\"${column.field.id}\"]`)\n : [];\n if (cells.length > 1) {\n return true;\n }\n }\n }\n return false;\n};\n\n/**\n * Checks if any data rows are available in dom container. It does not includes grouped rows.\n * @returns true if data rows are available, otherwise false.\n */\nconst checkDomContainerHasDataRows = (domContainer: View['domContainer']) => {\n return !!(domContainer && domContainer.querySelectorAll('.row[aria-rowindex]').length);\n};\n\n/**\n * Autosizes the first visual column to account for the expand/collapse button\n * introduced by grouping.\n */\n\nfunction autoSizeFirstVisualColumn([featureProps]: [featureProps: FeatureProps]) {\n const { getView, dispatch } = featureProps;\n const { columns = [], getDomContainer } = getView();\n const firstVisualCol = columns.find(c => c.isFirstVisualColumn);\n const domContainer = getDomContainer();\n if (firstVisualCol && domContainer) {\n dispatch(actionColumnAutoSize(firstVisualCol, domContainer, true));\n }\n}\n\n/**\n * Runs autosizing on out-of-the-box (OOTB) action columns in the view.\n */\nconst autosizeOotbActionColumns = ([featureProps]: [featureProps: FeatureProps]) => {\n const { getView, dispatch } = featureProps;\n const { columns = [], getDomContainer } = getView();\n const ootbColumns = columns?.filter(col => OOTB_COLUMNS.includes(col.field.id));\n const domContainer = getDomContainer();\n if (ootbColumns.length && domContainer) {\n dispatch(actionColumnsAutoSize(ootbColumns, domContainer, true));\n }\n};\n\n/**\n * Executes the autosizing feature on all the columns. It dispatches an action that updates {@link State.columnWidths} slice with the calculated widths for all the columns.\n * @param param featureProps\n */\nexport function runColumnSizing([{ getView, getRsStore, dispatch }]: [\n featureProps: OmitStrict<FeatureProps, 'getOriginalState' | 'getRsProps'>\n]) {\n const { columns = [], getDomContainer, meta } = getView();\n\n if (meta.template !== TEMPLATES.TABLE) return;\n\n const rsStore = getRsStore();\n const domContainer = getDomContainer();\n const runColumnSizingOnRowsAvailable =\n !rsStore.columnSizingTriggerdOnRowsAvailable && checkDomContainerHasDataRows(domContainer);\n\n // if there is no group/data row to size in DOM, don't run column sizing\n if (\n !checkDomContainerHasAnyRows(columns, domContainer) ||\n (rsStore.autosizeTriggered && !runColumnSizingOnRowsAvailable)\n ) {\n // if in current render cycle the rows were not painted, check for autosizing in next cycle\n if (!rsStore.autosizeTriggered) {\n dispatch(actionForceUpdate(false, { forceCalculateAutoWidth: true }));\n }\n return;\n }\n\n rsStore.autosizeTriggered = true;\n // skipping column animation on next run if column size changed after personalization change or delete\n rsStore.skipColumnAnimationOnNextRun = true;\n\n if (runColumnSizingOnRowsAvailable) {\n // Fresh column sizing will run only once for a view when the rows are loaded for the first time in DOM\n rsStore.columnSizingTriggerdOnRowsAvailable = true;\n dispatch(actionColumnsAutoSize(columns, domContainer!, true));\n } else {\n // Incremental column sizing on show/hide of columns or table refresh or on view change with grouping applied\n dispatch(actionColumnResize(autoSizeOfColumns(columns, domContainer!)));\n }\n}\n\n/**\n * It resets the {@link RsStore.autosizeTriggered autosize status} on RsStore.\n * @param param featureProps\n */\nfunction resetAutosizeStatus([{ getRsStore }]: [featureProps: FeatureProps]) {\n // This parent flag checks if any type of sizing is triggered on the table including table header/groups/rows.\n getRsStore().autosizeTriggered = false;\n}\n\n/**\n * Manages the autosizing feature of columns in the view. This includes the following actions:\n * 1. **Executing Autosize for All Columns**:\n *\n * This action is triggered when any of the following properties change:\n * - {@link State.personalization.active}\n * - {@link View.rows}\n * - {@link RsStore.autosizeTriggered}\n * - {@link State.refresh}\n * - {@link State.hiddenColumns}\n * - {@link State.forceUpdateFeatures.forceCalculateAutoWidth}\n * 2. **Resetting Autosize Status**:\n *\n * This action is triggered when any of the following properties change:\n * - {@link State.personalization.active}\n * - {@link State.refresh}\n * - {@link State.hiddenColumns}\n * - {@link State.customFields}\n *\n * 3. **Executing Autosize on First Visual Column**:\n *\n * This action is triggered when any of the following properties change:\n * - {@link State.groups}\n * - {@link State.responsive.sm}\n */\nexport default () => {\n const memoizedRunColumnSizing = withMemoization(runColumnSizing);\n const memoizedResetAutosizeStatus = withMemoization(resetAutosizeStatus);\n const memoizedAutosizeFirstVisualColumn = withMemoization(autoSizeFirstVisualColumn);\n const memoizedAutosizeOotbActionColumns = withMemoization(autosizeOotbActionColumns);\n let domContainerResizeObserver: ResizeObserver | null = null;\n let observedDomContainer: Element | null = null;\n return function execute(featureProps: FeatureProps) {\n const state = featureProps.getState();\n // AutoSize by default\n memoizedResetAutosizeStatus(\n [featureProps],\n [state.personalization?.active, state.refresh, state.hiddenColumns, state.customFields]\n );\n\n /**\n * If one of the table's ancestors is in a hidden state, the autosize calculations will not\n * function correctly since the domContainer's offsetWidth will be 0. A single ResizeObserver\n * is attached here (once per hidden period) and fires all sizing functions as soon as the\n * container gains width.\n *\n * The memoized versions are called intentionally so their dependency arrays are initialized\n * with the current state values. If the raw functions were called instead, the memoized\n * wrappers would still have no recorded deps and would re-run on the very next `execute`\n * cycle, causing each sizing function to fire twice.\n *\n * Any function that performs sizing calculations should be called within this observer callback.\n */\n const domContainer = featureProps.getView().getDomContainer();\n if (domContainer && domContainer.offsetWidth === 0) {\n if (domContainerResizeObserver && observedDomContainer !== domContainer) {\n // The DOM container was replaced while the observer was still pending (e.g. component remount).\n domContainerResizeObserver.disconnect();\n domContainerResizeObserver = null;\n observedDomContainer = null;\n }\n\n if (!domContainerResizeObserver) {\n domContainerResizeObserver = new ResizeObserver(entries => {\n for (const entry of entries) {\n if (entry.contentRect.width > 0) {\n const currentState = featureProps.getState();\n memoizedRunColumnSizing(\n [featureProps],\n [\n currentState.personalization?.active,\n featureProps.getView().rows,\n featureProps.getRsStore().autosizeTriggered,\n currentState.refresh,\n currentState.visibleColumns,\n currentState.forceUpdateFeatures?.forceCalculateAutoWidth\n ]\n );\n memoizedAutosizeFirstVisualColumn(\n [featureProps],\n [currentState.groups, currentState.responsive?.sm]\n );\n memoizedAutosizeOotbActionColumns(\n [featureProps],\n [currentState.selectedHeightOption]\n );\n domContainerResizeObserver?.unobserve(entry.target);\n domContainerResizeObserver = null;\n observedDomContainer = null;\n }\n }\n });\n domContainerResizeObserver.observe(domContainer);\n observedDomContainer = domContainer;\n }\n return;\n }\n\n // These are still needed as the Resize observer will work only once but we need to run sizing on user operations as well\n memoizedRunColumnSizing(\n [featureProps],\n [\n state.personalization?.active,\n featureProps.getView().rows,\n featureProps.getRsStore().autosizeTriggered,\n state.refresh,\n state.visibleColumns,\n state.forceUpdateFeatures?.forceCalculateAutoWidth\n ]\n );\n memoizedAutosizeFirstVisualColumn([featureProps], [state.groups, state.responsive?.sm]);\n memoizedAutosizeOotbActionColumns([featureProps], [state.selectedHeightOption]);\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;;6EAAlgJ,kEAAsC;gCA/DvxK,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;
|
|
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;;6EAAlgJ,kEAAsC;gCA/DvxK,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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { State } from '../../../types/State.types';
|
|
2
2
|
import type { Action } from '../actions/actions.types';
|
|
3
3
|
import type RsInternal from '../RsInternal';
|
|
4
|
-
export declare const personalizationProps: ("template" | "version" | "groups" | "showHeaderIcons" | "filterExpression" | "hiddenColumns" | "customFields" | "externalState" | "sortingOrder" | "freezeColumns" | "columnWidths" | "colOrder" | "aggregationInfo" | "hierarchicalGroup" | "renderFormatter" | "visibleColumns" | "
|
|
4
|
+
export declare const personalizationProps: ("template" | "version" | "groups" | "showHeaderIcons" | "filterExpression" | "hiddenColumns" | "customFields" | "externalState" | "sortingOrder" | "freezeColumns" | "columnWidths" | "colOrder" | "aggregationInfo" | "hierarchicalGroup" | "renderFormatter" | "visibleColumns" | "galleryLayout" | "presetId" | "selectedHeightOption" | "_groupsSnapshot" | "columnAlias" | "allGroupsExpanded")[];
|
|
5
5
|
export default function personalizationReducer(state: State, action: Action, { getView }: RsInternal): State;
|
|
6
6
|
//# sourceMappingURL=personalizationReducer.d.ts.map
|
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.5",
|
|
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.5",
|
|
18
|
+
"@pega/cosmos-react-core": "9.0.0-build.29.5",
|
|
19
19
|
"@types/lodash-es": "^4.17.12",
|
|
20
20
|
"dayjs": "^1.11.13",
|
|
21
21
|
"fast-deep-equal": "^3.1.3",
|