@pega/lists-core 9.15.1 → 9.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/src/core/features/uIFeatures/afterRender/columnSizing/index.d.ts.map +1 -1
- package/lib/src/core/features/uIFeatures/afterRender/columnSizing/index.js +3 -4
- 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/personalizationDirtyReducer.d.ts.map +1 -1
- package/lib/src/core/reducers/personalizationDirtyReducer.js +18 -3
- package/lib/src/core/reducers/personalizationDirtyReducer.js.map +1 -1
- package/package.json +3 -3
|
@@ -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;AAuE5D;;;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,GAAG,gBAAgB,CAAC;CAC7F,QAgCA;AAWD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;+BAQuB,cAAc,YAAY;AAPpD,wBAsGE"}
|
|
@@ -34,8 +34,7 @@ const checkDomContainerHasDataRows = (domContainer) => {
|
|
|
34
34
|
return !!(domContainer && domContainer.querySelectorAll('.row[aria-rowindex]').length);
|
|
35
35
|
};
|
|
36
36
|
/**
|
|
37
|
-
* Autosizes the first visual column to account
|
|
38
|
-
* introduced by grouping.
|
|
37
|
+
* Autosizes the first visual column to account meta fields like expand collapse button
|
|
39
38
|
*/
|
|
40
39
|
function autoSizeFirstVisualColumn([featureProps]) {
|
|
41
40
|
const { getView, dispatch } = featureProps;
|
|
@@ -178,7 +177,7 @@ export default () => {
|
|
|
178
177
|
currentState.visibleColumns,
|
|
179
178
|
currentState.forceUpdateFeatures?.forceCalculateAutoWidth
|
|
180
179
|
]);
|
|
181
|
-
memoizedAutosizeFirstVisualColumn([featureProps], [currentState.groups, currentState.responsive?.sm]);
|
|
180
|
+
memoizedAutosizeFirstVisualColumn([featureProps], [currentState.groups, currentState.responsive?.sm, currentState.colOrder?.[0]]);
|
|
182
181
|
memoizedAutosizeOotbActionColumns([featureProps], [currentState.selectedHeightOption]);
|
|
183
182
|
domContainerResizeObserver?.unobserve(entry.target);
|
|
184
183
|
domContainerResizeObserver = null;
|
|
@@ -200,7 +199,7 @@ export default () => {
|
|
|
200
199
|
state.visibleColumns,
|
|
201
200
|
state.forceUpdateFeatures?.forceCalculateAutoWidth
|
|
202
201
|
]);
|
|
203
|
-
memoizedAutosizeFirstVisualColumn([featureProps], [state.groups, state.responsive?.sm]);
|
|
202
|
+
memoizedAutosizeFirstVisualColumn([featureProps], [state.groups, state.responsive?.sm, state.colOrder?.[0]]);
|
|
204
203
|
memoizedAutosizeOotbActionColumns([featureProps], [state.selectedHeightOption]);
|
|
205
204
|
};
|
|
206
205
|
};
|
|
@@ -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([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' | 'browserContext'>\n]) {\n const { columns = [], getDomContainer } = getView();\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 /**\n * Column sizing is Table-only. When template switches away from Table, clear any pending observer.\n * This prevents an observer created in a previous hidden-Table render from firing late and\n * triggering sizing work against the current non-Table template\n */\n if (featureProps.getView().template !== TEMPLATES.TABLE) {\n domContainerResizeObserver?.disconnect();\n domContainerResizeObserver = null;\n observedDomContainer = null;\n return;\n }\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
|
+
{"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 meta fields like expand collapse button\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' | 'browserContext'>\n]) {\n const { columns = [], getDomContainer } = getView();\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 /**\n * Column sizing is Table-only. When template switches away from Table, clear any pending observer.\n * This prevents an observer created in a previous hidden-Table render from firing late and\n * triggering sizing work against the current non-Table template\n */\n if (featureProps.getView().template !== TEMPLATES.TABLE) {\n domContainerResizeObserver?.disconnect();\n domContainerResizeObserver = null;\n observedDomContainer = null;\n return;\n }\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, currentState.colOrder?.[0]]\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(\n [featureProps],\n [state.groups, state.responsive?.sm, state.colOrder?.[0]]\n );\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":"AAsCA,OAAO,WAAW,MAAM,4BAA4B,CAAC;;;4EAJZ,kEAClB;6BAnBlB,kEAAsC;6BAuE01G,kEAAsC;uBARr6G,kEAEM;;0BA3DwC,kEAChB;;uBAYF,kEACR;6BAmD2mC,kEAAsC;;4BAzDvnC,kEACpC;8BAwD4wM,kEAAsC;kCAzB9zM,kEAEH;6BAvCgC,kEAChB;2BAGgB,kEAC5B;2EAyDu0D,kEAAsC;yCA9Cn2D,kEAEG;+BA4C+qL,kEAAsC;4BAnDrsL,kEACd;kCAkD+4T,kEAAsC;;6EAA/1L,kEAAsC;gCA7D9mI,kEACpB;kCAR2C,kEAC1C;4BAmEmF,kEAAsC;kCAlEjH,kEAAsC;sCAQ/B,kEAC7B;+BADwD,kEAC5B;0EAyDg1P,kEAAsC;wEAA78I,kEAAsC;4BALx+G,kEACO;6BAxEmD,kEAC5B;sEAwBU,kEACd;2BAkDsF,kEAAsC;4BA7DnI,kEACpB;;uCA4D86B,kEAAsC;;;0BAAotD,sDAA0B;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/features/uIFeatures/index.ts"],"names":[],"mappings":"AAsCA,OAAO,WAAW,MAAM,4BAA4B,CAAC;;;4EAJZ,kEAClB;6BAnBlB,kEAAsC;6BAuE01G,kEAAsC;uBARr6G,kEAEM;;0BA3DwC,kEAChB;;uBAYF,kEACR;6BAmD2mC,kEAAsC;;4BAzDvnC,kEACpC;8BAwD4wM,kEAAsC;kCAzB9zM,kEAEH;6BAvCgC,kEAChB;2BAGgB,kEAC5B;2EAyDu0D,kEAAsC;yCA9Cn2D,kEAEG;+BA4C+qL,kEAAsC;4BAnDrsL,kEACd;kCAkD+4T,kEAAsC;;6EAA/1L,kEAAsC;gCA7D9mI,kEACpB;kCAR2C,kEAC1C;4BAmEmF,kEAAsC;kCAlEjH,kEAAsC;sCAQ/B,kEAC7B;+BADwD,kEAC5B;0EAyDg1P,kEAAsC;wEAA78I,kEAAsC;4BALx+G,kEACO;6BAxEmD,kEAC5B;sEAwBU,kEACd;2BAkDsF,kEAAsC;4BA7DnI,kEACpB;;uCA4D86B,kEAAsC;;;0BAAotD,sDAA0B;iCAA+hB,sDAA0B;yCA3DttG,sDAC5B;;;AAYZ,wBA6CE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personalizationDirtyReducer.d.ts","sourceRoot":"","sources":["../../../../src/core/reducers/personalizationDirtyReducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"personalizationDirtyReducer.d.ts","sourceRoot":"","sources":["../../../../src/core/reducers/personalizationDirtyReducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAqEvD,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAC5C,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,EACf,EAAE,OAAO,EAAE,EAAE,UAAU,GACtB,KAAK,CA2BP"}
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import { pickProperties, deepEqual } from '../utils/util';
|
|
2
2
|
import { personalizationProps } from './personalizationReducer';
|
|
3
3
|
import { getCurrentVersionedState } from './versioning';
|
|
4
|
-
function
|
|
4
|
+
function excludeAutoManagedWidths(comparable, autoManagedWidthColumnIds) {
|
|
5
|
+
if (!autoManagedWidthColumnIds.length || !comparable.columnWidths) {
|
|
6
|
+
return comparable;
|
|
7
|
+
}
|
|
8
|
+
const columnWidths = { ...comparable.columnWidths };
|
|
9
|
+
autoManagedWidthColumnIds.forEach(id => {
|
|
10
|
+
delete columnWidths[id];
|
|
11
|
+
});
|
|
12
|
+
return { ...comparable, columnWidths };
|
|
13
|
+
}
|
|
14
|
+
function markStateDirty(state, isPreset, autoManagedWidthColumnIds) {
|
|
5
15
|
const pickedState = pickProperties(state, personalizationProps) ?? {};
|
|
6
16
|
const personalizationKey = state.personalization.active;
|
|
7
17
|
const personalizedState = getCurrentVersionedState(state.personalization.allPersonalizations?.[personalizationKey]?.personalizationState) || {};
|
|
@@ -9,7 +19,7 @@ function markStateDirty(state, isPreset) {
|
|
|
9
19
|
// since 'visibleColumns' is a newly introduced state slice and older personalization data does not have it.
|
|
10
20
|
const { visibleColumns: CurrentVisible, ...comparableCurrentState } = pickedState;
|
|
11
21
|
const { visibleColumns: SavedVisible, ...comparableSavedState } = pickProperties(personalizedState, personalizationProps) ?? {};
|
|
12
|
-
const isStateDirty = !deepEqual(comparableCurrentState, comparableSavedState);
|
|
22
|
+
const isStateDirty = !deepEqual(excludeAutoManagedWidths(comparableCurrentState, autoManagedWidthColumnIds), excludeAutoManagedWidths(comparableSavedState, autoManagedWidthColumnIds));
|
|
13
23
|
const isStateMarkedDirty = state.personalization.dirty;
|
|
14
24
|
// markStateDirtyIfValid
|
|
15
25
|
if (!isPreset && isStateDirty && !isStateMarkedDirty) {
|
|
@@ -43,7 +53,12 @@ export default function personalizationReducer(state, _action, { getView }) {
|
|
|
43
53
|
const isPreset = !!state.personalization?.allPersonalizations?.[activePersonalization]?.isPreset ||
|
|
44
54
|
(state.personalization?.active === 'APP_DEFAULT' && !enableAppDefault);
|
|
45
55
|
if (activePersonalization) {
|
|
46
|
-
|
|
56
|
+
// The first visual column's width is auto-managed (grouping chevron, meta fields), so
|
|
57
|
+
// it is excluded from the dirty comparison to avoid false "unsaved changes" prompts.
|
|
58
|
+
const firstVisualColumnId = getView().columns?.find(column => column.isFirstVisualColumn)?.field
|
|
59
|
+
?.id;
|
|
60
|
+
const autoManagedWidthColumnIds = firstVisualColumnId ? [firstVisualColumnId] : [];
|
|
61
|
+
return markStateDirty(state, isPreset, autoManagedWidthColumnIds);
|
|
47
62
|
}
|
|
48
63
|
return state;
|
|
49
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"personalizationDirtyReducer.js","sourceRoot":"","sources":["../../../../src/core/reducers/personalizationDirtyReducer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAExD,SAAS,
|
|
1
|
+
{"version":3,"file":"personalizationDirtyReducer.js","sourceRoot":"","sources":["../../../../src/core/reducers/personalizationDirtyReducer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { State } from '../../../types/State.types';\nimport type RsInternal from '../RsInternal';\nimport type { Action } from '../actions/actions.types';\nimport { pickProperties, deepEqual } from '../utils/util';\n\nimport { personalizationProps } from './personalizationReducer';\nimport { getCurrentVersionedState } from './versioning';\n\nfunction excludeAutoManagedWidths<T extends { columnWidths?: State['columnWidths'] }>(\n comparable: T,\n autoManagedWidthColumnIds: string[]\n): T {\n if (!autoManagedWidthColumnIds.length || !comparable.columnWidths) {\n return comparable;\n }\n\n const columnWidths = { ...comparable.columnWidths };\n autoManagedWidthColumnIds.forEach(id => {\n delete columnWidths[id];\n });\n return { ...comparable, columnWidths };\n}\n\nfunction markStateDirty(\n state: State,\n isPreset: boolean,\n autoManagedWidthColumnIds: string[]\n): State {\n const pickedState = pickProperties(state, personalizationProps) ?? {};\n const personalizationKey = state.personalization!.active;\n const personalizedState =\n getCurrentVersionedState(\n state.personalization!.allPersonalizations?.[personalizationKey]?.personalizationState\n ) || {};\n\n // Compares two state objects for deep equality while excluding `visibleColumns`,\n // since 'visibleColumns' is a newly introduced state slice and older personalization data does not have it.\n const { visibleColumns: CurrentVisible, ...comparableCurrentState } = pickedState;\n const { visibleColumns: SavedVisible, ...comparableSavedState } =\n pickProperties(personalizedState, personalizationProps) ?? {};\n\n const isStateDirty = !deepEqual(\n excludeAutoManagedWidths(comparableCurrentState, autoManagedWidthColumnIds),\n excludeAutoManagedWidths(comparableSavedState, autoManagedWidthColumnIds)\n );\n\n const isStateMarkedDirty = state.personalization!.dirty;\n\n // markStateDirtyIfValid\n if (!isPreset && isStateDirty && !isStateMarkedDirty) {\n return {\n ...state,\n personalization: {\n ...state.personalization!,\n dirty: true\n }\n };\n }\n if ((isPreset || !isStateDirty) && isStateMarkedDirty) {\n return {\n ...state,\n personalization: {\n ...state.personalization!,\n dirty: false\n }\n };\n }\n\n return state;\n}\n\nexport default function personalizationReducer(\n state: State,\n _action: Action,\n { getView }: RsInternal\n): State {\n // All other dispatched actions which might have caused state changes\n // see means to see or check object reference before creating newState\n // As some dispatched actions might have just bailed out with same state\n\n const activePersonalization = state.personalization?.active!;\n const {\n meta: { enableAppDefault }\n } = getView();\n\n // APP default view cannot be modified in runtime, i.e enableAppDefault = false. Treat it as preset\n // APP default view modification is allowed/enabled only in preview mode, i.e enableAppDefault = true. Treat it as personalized view\n\n const isPreset =\n !!state.personalization?.allPersonalizations?.[activePersonalization]?.isPreset ||\n (state.personalization?.active === 'APP_DEFAULT' && !enableAppDefault);\n\n if (activePersonalization) {\n // The first visual column's width is auto-managed (grouping chevron, meta fields), so\n // it is excluded from the dirty comparison to avoid false \"unsaved changes\" prompts.\n const firstVisualColumnId = getView().columns?.find(column => column.isFirstVisualColumn)?.field\n ?.id;\n const autoManagedWidthColumnIds = firstVisualColumnId ? [firstVisualColumnId] : [];\n return markStateDirty(state, isPreset, autoManagedWidthColumnIds);\n }\n\n return state;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pega/lists-core",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.16.1",
|
|
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.
|
|
18
|
-
"@pega/cosmos-react-core": "9.
|
|
17
|
+
"@pega/cosmos-react-condition-builder": "9.16.1",
|
|
18
|
+
"@pega/cosmos-react-core": "9.16.1",
|
|
19
19
|
"@types/lodash-es": "^4.17.12",
|
|
20
20
|
"dayjs": "^1.11.13",
|
|
21
21
|
"fast-deep-equal": "^3.1.3",
|