@pega/lists-react 9.0.0-build.28.7 → 9.0.0-build.29.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.
|
@@ -81,7 +81,7 @@ export function getCurrentEstimation(rContainer, includeRowsOnly = false) {
|
|
|
81
81
|
return acc + o.height;
|
|
82
82
|
}, 0);
|
|
83
83
|
const averageRowHeight = rowCount > 0 ? height / rowCount : 0;
|
|
84
|
-
const rowContainerHeight = rContainer.
|
|
84
|
+
const rowContainerHeight = Math.ceil(rContainer.getBoundingClientRect().height) || 0;
|
|
85
85
|
return { itemCount, rowContainerHeight, averageNumberOfItemsInARow, averageRowHeight };
|
|
86
86
|
}
|
|
87
87
|
// Calculate top which needs to set on row container when component rerender.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utility.js","sourceRoot":"","sources":["../../../../Core/Components/Virtualise/utility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,2CAA2C;AAC3C,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAEtC,MAAM,UAAU,4BAA4B,CAAC,gBAAwB;IACnE,OAAO,gBAAgB,GAAG,wBAAwB,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,gBAAgB,CAAC;AACnG,CAAC;AAED,0DAA0D;AAC1D,+CAA+C;AAC/C,MAAM,UAAU,4BAA4B,CAC1C,gBAA2D,EAC3D,eAA0D;IAE1D,8FAA8F;IAC9F,gEAAgE;IAChE,OAAO,CACL,eAAe;QACf,gBAAgB;QAChB,CAAC,CAAC,eAAe,CAAC,UAAU,KAAK,gBAAgB,CAAC,UAAU;YAC1D,eAAe,CAAC,QAAQ,KAAK,gBAAgB,CAAC,QAAQ,CAAC;YACvD,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,CAC5E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,gBAAwB,EACxB,EAAkC,EAClC,UAA0B,EAC1B,YAAqB;IAErB,MAAM,uBAAuB,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC;IACnE,iDAAiD;IACjD,uEAAuE;IACvE,MAAM,eAAe,GACnB,YAAY,IAAI,UAAU,CAAC,iBAAiB,GAAG,CAAC;QAC9C,CAAC,CAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAiB,CAAC,YAAY;QACxD,CAAC,CAAC,CAAC,CAAC;IACR,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAC3C,OAAO,CACL,gBAAgB;QAChB,EAAE,CAAC,UAAU,CAAC,iBAAiB,KAAK,gBAAgB;QACpD,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC;YACvD,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,MAAM,GAAG,cAAc,CAAC;YAC3D,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC;gBACnD,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,GAAG,GAAG,eAAe,CAAC;YAC3D,EAAE,CAAC,UAAU,CAAC,iBAAiB,KAAK,CAAC,CAAC,CACzC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAe;IACzC,MAAM,gBAAgB,GAElB,EAAE,CAAC;IACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAClB,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAClD,8GAA8G;QAC9G,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACvE,IAAI,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YAC9C,IAAI,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;gBACpE,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;YAClE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG;gBACnC,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,YAAY,CAAC,MAAM;gBAC3B,mBAAmB;aACpB,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,oDAAoD;AACpD,2CAA2C;AAC3C,MAAM,UAAU,oBAAoB,CAAC,UAA0B,EAAE,eAAe,GAAG,KAAK;IACtF,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,qBAAqB,GAAG,eAAe;QAC3C,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC5D,CAAC,CAAC,kBAAkB,CAAC;IAEvB,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,IAAI,CAAC,CAAC;IACpD,uKAAuK;IACvK,6EAA6E;IAC7E,oFAAoF;IACpF,gGAAgG;IAChG,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,CACrD,CAAC,GAAW,EAAE,CAAkD,EAAE,EAAE;QAClE,IAAI,CAAC,CAAC,mBAAmB,EAAE,CAAC;YAC1B,OAAO,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;QACvB,CAAC;QACD,OAAO,GAAG,GAAG,CAAC,CAAC;IACjB,CAAC,EACD,CAAC,CACF,CAAC;IACF,MAAM,0BAA0B,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,CACnD,CAAC,GAAW,EAAE,CAAkE,EAAE,EAAE;QAClF,IAAI,CAAC,CAAC,mBAAmB,EAAE,CAAC;YAC1B,OAAO,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;QAClC,CAAC;QACD,OAAO,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;IACxB,CAAC,EACD,CAAC,CACF,CAAC;IACF,MAAM,gBAAgB,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,kBAAkB,GAAG,UAAU,CAAC,YAAY,IAAI,CAAC,CAAC;IACxD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,CAAC;AACzF,CAAC;AAED,6EAA6E;AAC7E,sEAAsE;AACtE,SAAS,YAAY,CACnB,EAWC,EACD,SAAiB;IAEjB,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,KAAK,CAAC,EAAE,CAAC;QACjD,0EAA0E;QAC1E,MAAM,0BAA0B,GAC9B,SAAS,GAAG,CAAC,EAAE,CAAC,iBAAiB,CAAC,SAAS,GAAG,EAAE,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;QACzF,kEAAkE;QAElE,MAAM,yBAAyB,GAAG,0BAA0B,GAAG,CAAC,CAAC;QACjE,sCAAsC;QAEtC,MAAM,iBAAiB,GAAG,yBAAyB,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC;QACxF,MAAM,uBAAuB,GAC3B,CAAC,iBAAiB,GAAG,EAAE,CAAC,iBAAiB,CAAC,0BAA0B,CAAC;YACrE,EAAE,CAAC,iBAAiB,CAAC,gBAAgB,CAAC;QACxC,mCAAmC;QACnC,GAAG,GAAG,SAAS,GAAG,uBAAuB,CAAC;QAC1C,IAAI,GAAG,GAAG,CAAC;YAAE,GAAG,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,iCAAiC,CACxC,EAqBC,EACD,WAAmB;IAEnB,sFAAsF;IACtF,8DAA8D;IAC9D,gEAAgE;IAChE,IAAI,YAAY,GAAG,WAAW,CAAC;IAC/B,MAAM,EAAE,uBAAuB,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC;IAC9D,+EAA+E;IAC/E,MAAM,iBAAiB,GAAG,eAAe,KAAK,CAAC,CAAC;IAChD,IAAI,uBAAuB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAClD,MAAM,mBAAmB,GAAG,EAAE,CAAC,UAAU,CAAC,aAAa,CACrD,gBAAgB,EAAE,CAAC,KAAK,CAAC,eAAe,IAAI,CAC7C,CAAC;QACF,IAAI,mBAAmB,EAAE,CAAC;YACxB,0EAA0E;YAC1E,MAAM,mBAAmB,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC;YACtF,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,qBAAqB,EAAE,CAAC;YACvE,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAC,GAAG,mBAAmB,CAAC;YACnF,YAAY,GAAG,WAAW,GAAG,GAAG,CAAC;QACnC,CAAC;IACH,CAAC;IACD,uFAAuF;IACvF,+EAA+E;IAC/E,8DAA8D;IAC9D,gDAAgD;IAChD,oEAAoE;IACpE,8FAA8F;IAC9F,oGAAoG;IACpG,+EAA+E;IAC/E,IAAI,YAAY,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC;QAAE,YAAY,GAAG,CAAC,CAAC;IACzE,IAAI,YAAY,KAAK,WAAW;QAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,YAAY,IAAI,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,EAqBC,EACD,gBAAwB,EACxB,KAA6B,EAC7B,UAA0B,EAC1B,SAAiB;IAEjB,uEAAuE;IACvE,gEAAgE;IAChE,yCAAyC;IACzC,IACE,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,GAAG,gBAAgB,CAAC;QACjF,uDAAuD;QACvD,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,GAAG,CAAC,GAAG,gBAAgB;QACjD,uDAAuD;QACvD,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,IAAI,gBAAgB,EACzE,CAAC;QACD,kGAAkG;QAClG,oFAAoF;QACpF,0BAA0B;QAC1B,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC7C,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC;QAChC,qEAAqE;QACrE,uCAAuC;QACvC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,gBAAgB;YAAE,UAAU,CAAC,SAAS,GAAG,CAAC,CAAC;QAE9E,qEAAqE;QACrE,+EAA+E;QAC/E,qCAAqC;QACrC,gFAAgF;IAClF,CAAC;SAAM;IACL,uDAAuD;IACvD,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,GAAG,CAAC,IAAI,gBAAgB;QAChD,uDAAuD;QACvD,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,GAAG,CAAC,IAAI,gBAAgB,EAClD,CAAC;QACD,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC1C,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACxC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;QACrC,iCAAiC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,oBAAoB,CAClC,KAA+C,EAC/C,UAAuB;IAEvB,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;QACxC,CAAiB,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,UAAuB;IAC9D,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC,qBAAqB,EAAE,CAAC;IAEtE,IAAI,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACxD,IAAI,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QACpD,qBAAqB,IAAI,iBAAiB,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,qBAAqB,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAAkC,EAClC,YAA6B;IAE7B,IAAI,CAAC,KAAK;QAAE,OAAO,YAAY,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxE,OAAO,GAAG,KAAK,IAAI,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,KAAK,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,aAA0C;IACrE,IAAI,CAAC,aAAa;QAAE,OAAO,MAAM,CAAC;IAClC,OAAO,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;AAClF,CAAC","sourcesContent":["import { getScrollbarWidth } from 'pega-repeating-structures-core';\n\nimport { StickyGroupHeader } from './Pagination';\n\n// TODO: in future, take this count in meta\nconst MAX_SCROLLABLE_ROW_COUNT = 5000;\n\nexport function getRecordCountForLayoutPaint(totalRecordCount: number) {\n return totalRecordCount > MAX_SCROLLABLE_ROW_COUNT ? MAX_SCROLLABLE_ROW_COUNT : totalRecordCount;\n}\n\n// State should be communicated back from consumer to know\n// if pagination last request completed or not.\nexport function isPaginationRequestCompleted(\n requestedIndexes?: { startIndex: number; endIndex: number },\n receivedIndexes?: { startIndex: number; endIndex: number }\n) {\n // this is required when there is a pagination request which is raised just to update consumer\n // about updated index though pagination is really not required.\n return (\n receivedIndexes &&\n requestedIndexes &&\n ((receivedIndexes.startIndex === requestedIndexes.startIndex &&\n receivedIndexes.endIndex === requestedIndexes.endIndex) ||\n (Object.keys(requestedIndexes).length === 0 && receivedIndexes.endIndex))\n );\n}\n\nexport function isViewNotFilled(\n totalRecordCount: number,\n vi: { rContainer: HTMLDivElement },\n pContainer: HTMLDivElement,\n renderHeader: boolean\n) {\n const parentContainerPosition = pContainer.getBoundingClientRect();\n // This is required to accommodate header height.\n // TODO: Need to find a better solution to pull out header out of this.\n const headerRowHeight =\n renderHeader && pContainer.childElementCount > 1\n ? (pContainer.childNodes[0] as HTMLElement).offsetHeight\n : 0;\n const scrollbarWidth = getScrollbarWidth();\n return (\n totalRecordCount &&\n vi.rContainer.childElementCount !== totalRecordCount &&\n (Math.floor(vi.rContainer.getBoundingClientRect().bottom) <\n Math.floor(parentContainerPosition.bottom - scrollbarWidth) ||\n Math.floor(vi.rContainer.getBoundingClientRect().top) >\n Math.floor(parentContainerPosition.top + headerRowHeight) ||\n vi.rContainer.childElementCount === 0)\n );\n}\n\nfunction getItemCountPerRow(rows: Element[]) {\n const itemsCountPerRow: {\n [key: string]: { count: number; height: number; isStickyGroupHeader: boolean };\n } = {};\n rows.forEach(item => {\n const itemBoundary = item.getBoundingClientRect();\n // isStickyGroupHeader flag helps in including the overlapped sticky-group-header for getting correct averages\n const isStickyGroupHeader = item.classList.contains(StickyGroupHeader);\n if (itemsCountPerRow[itemBoundary.top]) {\n itemsCountPerRow[itemBoundary.top].count += 1;\n if (itemsCountPerRow[itemBoundary.top].height < itemBoundary.height) {\n itemsCountPerRow[itemBoundary.top].height = itemBoundary.height;\n }\n } else {\n itemsCountPerRow[itemBoundary.top] = {\n count: 1,\n height: itemBoundary.height,\n isStickyGroupHeader\n };\n }\n });\n return itemsCountPerRow;\n}\n\n// Based on row container size, get estimated count,\n// average height and no of items in a row.\nexport function getCurrentEstimation(rContainer: HTMLDivElement, includeRowsOnly = false) {\n const rContainerChildren = Array.from(rContainer.children || []);\n const filteredRowsContainer = includeRowsOnly\n ? rContainerChildren.filter(r => r.hasAttribute('data-key'))\n : rContainerChildren;\n\n const itemsCountPerRow = getItemCountPerRow(filteredRowsContainer);\n const itemCount = filteredRowsContainer.length || 0;\n // TODO FIXME: #virtualizer Remove dependency on sticky-group-header class and try to make the key of ItemsCountPerRow unique which will work for overlapping scenarios\n // BUG-740809 handling the rowCount in case of overlapped sticky-group-header\n // If we have sticky-group-headers, add overlapped sticky-group-headers to rowCount.\n // So, that averageNumberOfItemsInARow will be 1 for grid. That's why adding the complete count.\n const rowCount = Object.values(itemsCountPerRow).reduce(\n (acc: number, o: { isStickyGroupHeader: boolean; count: number }) => {\n if (o.isStickyGroupHeader) {\n return acc + o.count;\n }\n return acc + 1;\n },\n 0\n );\n const averageNumberOfItemsInARow = rowCount > 0 ? itemCount / rowCount : 0;\n const height = Object.values(itemsCountPerRow).reduce(\n (acc: number, o: { isStickyGroupHeader: boolean; height: number; count: number }) => {\n if (o.isStickyGroupHeader) {\n return acc + o.height * o.count;\n }\n return acc + o.height;\n },\n 0\n );\n const averageRowHeight = rowCount > 0 ? height / rowCount : 0;\n const rowContainerHeight = rContainer.offsetHeight || 0;\n return { itemCount, rowContainerHeight, averageNumberOfItemsInARow, averageRowHeight };\n}\n\n// Calculate top which needs to set on row container when component rerender.\n// component can rerender many times though pagination is in progress.\nfunction calculateTop(\n vi: {\n rContainer: HTMLDivElement;\n pInfo?: {\n view?: { startIndex: number; endIndex: number };\n };\n currentEstimation: {\n itemCount: number;\n rowContainerHeight: number;\n averageNumberOfItemsInARow: number;\n averageRowHeight: number;\n };\n },\n scrollTop: number\n) {\n let top = 0;\n if (vi.pInfo && vi.pInfo?.view?.startIndex !== 0) {\n // slide row container for current view based on previous estimated value.\n const estimatedNoOfItemsPushedUp =\n scrollTop * (vi.currentEstimation.itemCount / vi.currentEstimation.rowContainerHeight);\n // estimated start view index of current view based on scroll top.\n\n const estimatedStartIndexInView = estimatedNoOfItemsPushedUp + 1;\n // estimated number of buffer records.\n\n const noOfBufferRecords = estimatedStartIndexInView - (vi.pInfo?.view?.startIndex ?? 0);\n const noOfBufferRecordsHeight =\n (noOfBufferRecords / vi.currentEstimation.averageNumberOfItemsInARow) *\n vi.currentEstimation.averageRowHeight;\n // calculated top of row container.\n top = scrollTop - noOfBufferRecordsHeight;\n if (top < 0) top = 0;\n }\n return top;\n}\n\nfunction adjustTopRowContainerToAvoidDrift(\n vi: {\n rContainer: HTMLDivElement;\n pInfo: {\n view: { startIndex: number; endIndex: number };\n currentEstimation: {\n itemCount: number;\n rowContainerHeight: number;\n averageNumberOfItemsInARow: number;\n averageRowHeight: number;\n };\n existingItemBoundingBox: { y: number };\n currentRowIndex: number;\n bufferNewCords: { top: number };\n bufferOldCords: { top: number };\n };\n currentEstimation: {\n itemCount: number;\n rowContainerHeight: number;\n averageNumberOfItemsInARow: number;\n averageRowHeight: number;\n };\n },\n existingTop: number\n) {\n // Adjust top if element was viewable when user stop scrolling and pagination trigger.\n // existing item should be viewable are at time of calculation\n // as we allow user to scroll even pagination request triggered.\n let effectiveTop = existingTop;\n const { existingItemBoundingBox, currentRowIndex } = vi.pInfo;\n // As safari does elastic scroll, we need this check to avoid any space on top.\n const safariIsFirstItem = currentRowIndex === 0;\n if (existingItemBoundingBox && !safariIsFirstItem) {\n const currentRowIndexItem = vi.rContainer.querySelector(\n `[data-index='${vi.pInfo.currentRowIndex}']`\n );\n if (currentRowIndexItem) {\n // scrollNodeTopChange - change in scroll while pagination is in progress.\n const scrollNodeTopChange = vi.pInfo.bufferNewCords.top - vi.pInfo.bufferOldCords.top;\n const newItemBoundingBox = currentRowIndexItem.getBoundingClientRect();\n const top = newItemBoundingBox.y - existingItemBoundingBox.y - scrollNodeTopChange;\n effectiveTop = existingTop - top;\n }\n }\n // As of now, we are making top to zero if it goes in negative, which is not right way.\n // -ve is possible value for it as scroll top is just approximation. Check when\n // gallery view gives you 0 to index result after some scroll.\n // scroll top is 0 as it is top row index based.\n // TODO: can go negative as bottom to top paint strategy is pending.\n // This check and expression is not required after that. This will be handled in next release.\n // Gallery issue wil also be handled in that. As of for first attempt we have to either scroll more.\n // or make buffer size more in that to avoid 0 to index number in next repaint.\n if (effectiveTop < 0 && vi.pInfo.view.startIndex === 0) effectiveTop = 0;\n if (effectiveTop !== existingTop) vi.rContainer.style.top = `${effectiveTop}px`;\n}\n\nexport function updateRowContainerTop(\n vi: {\n rContainer: HTMLDivElement;\n pInfo: {\n view: { startIndex: number; endIndex: number };\n currentEstimation: {\n itemCount: number;\n rowContainerHeight: number;\n averageNumberOfItemsInARow: number;\n averageRowHeight: number;\n };\n existingItemBoundingBox: { y: number };\n currentRowIndex: number;\n bufferNewCords: { top: number };\n bufferOldCords: { top: number };\n };\n currentEstimation: {\n itemCount: number;\n rowContainerHeight: number;\n averageNumberOfItemsInARow: number;\n averageRowHeight: number;\n };\n },\n totalRecordCount: number,\n state: { [key: string]: any },\n pContainer: HTMLDivElement,\n scrollTop: number\n) {\n // if you get last record , put row container to bottom always to Avoid\n // any space left because of estimation otherwise calculate top.\n // if next rerender you get less records,\n if (\n (vi.pInfo?.view?.startIndex === 0 && vi.pInfo?.view?.endIndex < totalRecordCount) ||\n // eslint-disable-next-line no-unsafe-optional-chaining\n vi.pInfo?.view?.startIndex + 1 > totalRecordCount ||\n // eslint-disable-next-line no-unsafe-optional-chaining\n vi.pInfo?.view?.endIndex - vi.pInfo?.view?.startIndex >= totalRecordCount\n ) {\n // This is a case when you scroll to top or say after filter your items count reduce to such level\n // it doesn't fit in current start and end index and put container top and fill view\n // will consider if empty.\n vi.rContainer.style.removeProperty('bottom');\n vi.rContainer.style.top = '0px';\n // Any action which makes indexes out of range to total record count,\n // scroll to top as a default behavior.\n if (vi.pInfo.view.startIndex + 1 > totalRecordCount) pContainer.scrollTop = 0;\n\n // commenting below line as it can cause white space on top sometime.\n // Commenting this line might cause a small flicker only when you reach at top.\n // We will solve this in 8.6 release.\n // else if (vi.pInfo?.topRowIndex > 0) adjustTopRowContainerToAvoidDrift(vi, 0);\n } else if (\n // eslint-disable-next-line no-unsafe-optional-chaining\n vi.pInfo?.view?.endIndex + 1 >= totalRecordCount &&\n // eslint-disable-next-line no-unsafe-optional-chaining\n vi.pInfo?.view?.startIndex + 1 <= totalRecordCount\n ) {\n vi.rContainer.style.removeProperty('top');\n vi.rContainer.style.bottom = '0px';\n } else {\n vi.rContainer.style.removeProperty('bottom');\n const top = calculateTop(vi, scrollTop);\n vi.rContainer.style.top = `${top}px`;\n adjustTopRowContainerToAvoidDrift(vi, top);\n }\n}\n\n// index attrs required to estimate next set.\nexport function setAttributesOnItems(\n state: { startIndex: number; endIndex: number },\n rContainer: HTMLElement\n) {\n rContainer.childNodes.forEach((r, index) => {\n (r as HTMLElement).setAttribute('data-index', `${state.startIndex + index}`);\n });\n}\n\nexport function getPContainerClientWidth(pContainer: HTMLElement) {\n if (!pContainer) return;\n\n const { width: pContainerWidth } = pContainer.getBoundingClientRect();\n\n let pContainerClientWidth = Math.floor(pContainerWidth);\n if (pContainer.offsetWidth > pContainer.clientWidth) {\n pContainerClientWidth -= getScrollbarWidth();\n }\n return pContainerClientWidth;\n}\n\nexport function getValueWithUnit(\n value: string | number | undefined,\n defaultValue: string | number\n): string | number {\n if (!value) return defaultValue;\n if (!value.toString().includes('px') && !value.toString().includes('%')) {\n return `${value}px`;\n }\n return `${value}`;\n}\n\nexport function getMaxHeight(viewMaxHeight: number | string | undefined): string {\n if (!viewMaxHeight) return 'none';\n return typeof viewMaxHeight === 'number' ? `${viewMaxHeight}px` : viewMaxHeight;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"utility.js","sourceRoot":"","sources":["../../../../Core/Components/Virtualise/utility.ts"],"names":[],"mappings":"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","sourcesContent":["import { getScrollbarWidth } from 'pega-repeating-structures-core';\n\nimport { StickyGroupHeader } from './Pagination';\n\n// TODO: in future, take this count in meta\nconst MAX_SCROLLABLE_ROW_COUNT = 5000;\n\nexport function getRecordCountForLayoutPaint(totalRecordCount: number) {\n return totalRecordCount > MAX_SCROLLABLE_ROW_COUNT ? MAX_SCROLLABLE_ROW_COUNT : totalRecordCount;\n}\n\n// State should be communicated back from consumer to know\n// if pagination last request completed or not.\nexport function isPaginationRequestCompleted(\n requestedIndexes?: { startIndex: number; endIndex: number },\n receivedIndexes?: { startIndex: number; endIndex: number }\n) {\n // this is required when there is a pagination request which is raised just to update consumer\n // about updated index though pagination is really not required.\n return (\n receivedIndexes &&\n requestedIndexes &&\n ((receivedIndexes.startIndex === requestedIndexes.startIndex &&\n receivedIndexes.endIndex === requestedIndexes.endIndex) ||\n (Object.keys(requestedIndexes).length === 0 && receivedIndexes.endIndex))\n );\n}\n\nexport function isViewNotFilled(\n totalRecordCount: number,\n vi: { rContainer: HTMLDivElement },\n pContainer: HTMLDivElement,\n renderHeader: boolean\n) {\n const parentContainerPosition = pContainer.getBoundingClientRect();\n // This is required to accommodate header height.\n // TODO: Need to find a better solution to pull out header out of this.\n const headerRowHeight =\n renderHeader && pContainer.childElementCount > 1\n ? (pContainer.childNodes[0] as HTMLElement).offsetHeight\n : 0;\n const scrollbarWidth = getScrollbarWidth();\n return (\n totalRecordCount &&\n vi.rContainer.childElementCount !== totalRecordCount &&\n (Math.floor(vi.rContainer.getBoundingClientRect().bottom) <\n Math.floor(parentContainerPosition.bottom - scrollbarWidth) ||\n Math.floor(vi.rContainer.getBoundingClientRect().top) >\n Math.floor(parentContainerPosition.top + headerRowHeight) ||\n vi.rContainer.childElementCount === 0)\n );\n}\n\nfunction getItemCountPerRow(rows: Element[]) {\n const itemsCountPerRow: {\n [key: string]: { count: number; height: number; isStickyGroupHeader: boolean };\n } = {};\n rows.forEach(item => {\n const itemBoundary = item.getBoundingClientRect();\n // isStickyGroupHeader flag helps in including the overlapped sticky-group-header for getting correct averages\n const isStickyGroupHeader = item.classList.contains(StickyGroupHeader);\n if (itemsCountPerRow[itemBoundary.top]) {\n itemsCountPerRow[itemBoundary.top].count += 1;\n if (itemsCountPerRow[itemBoundary.top].height < itemBoundary.height) {\n itemsCountPerRow[itemBoundary.top].height = itemBoundary.height;\n }\n } else {\n itemsCountPerRow[itemBoundary.top] = {\n count: 1,\n height: itemBoundary.height,\n isStickyGroupHeader\n };\n }\n });\n return itemsCountPerRow;\n}\n\n// Based on row container size, get estimated count,\n// average height and no of items in a row.\nexport function getCurrentEstimation(rContainer: HTMLDivElement, includeRowsOnly = false) {\n const rContainerChildren = Array.from(rContainer.children || []);\n const filteredRowsContainer = includeRowsOnly\n ? rContainerChildren.filter(r => r.hasAttribute('data-key'))\n : rContainerChildren;\n\n const itemsCountPerRow = getItemCountPerRow(filteredRowsContainer);\n const itemCount = filteredRowsContainer.length || 0;\n // TODO FIXME: #virtualizer Remove dependency on sticky-group-header class and try to make the key of ItemsCountPerRow unique which will work for overlapping scenarios\n // BUG-740809 handling the rowCount in case of overlapped sticky-group-header\n // If we have sticky-group-headers, add overlapped sticky-group-headers to rowCount.\n // So, that averageNumberOfItemsInARow will be 1 for grid. That's why adding the complete count.\n const rowCount = Object.values(itemsCountPerRow).reduce(\n (acc: number, o: { isStickyGroupHeader: boolean; count: number }) => {\n if (o.isStickyGroupHeader) {\n return acc + o.count;\n }\n return acc + 1;\n },\n 0\n );\n const averageNumberOfItemsInARow = rowCount > 0 ? itemCount / rowCount : 0;\n const height = Object.values(itemsCountPerRow).reduce(\n (acc: number, o: { isStickyGroupHeader: boolean; height: number; count: number }) => {\n if (o.isStickyGroupHeader) {\n return acc + o.height * o.count;\n }\n return acc + o.height;\n },\n 0\n );\n const averageRowHeight = rowCount > 0 ? height / rowCount : 0;\n const rowContainerHeight = Math.ceil(rContainer.getBoundingClientRect().height) || 0;\n return { itemCount, rowContainerHeight, averageNumberOfItemsInARow, averageRowHeight };\n}\n\n// Calculate top which needs to set on row container when component rerender.\n// component can rerender many times though pagination is in progress.\nfunction calculateTop(\n vi: {\n rContainer: HTMLDivElement;\n pInfo?: {\n view?: { startIndex: number; endIndex: number };\n };\n currentEstimation: {\n itemCount: number;\n rowContainerHeight: number;\n averageNumberOfItemsInARow: number;\n averageRowHeight: number;\n };\n },\n scrollTop: number\n) {\n let top = 0;\n if (vi.pInfo && vi.pInfo?.view?.startIndex !== 0) {\n // slide row container for current view based on previous estimated value.\n const estimatedNoOfItemsPushedUp =\n scrollTop * (vi.currentEstimation.itemCount / vi.currentEstimation.rowContainerHeight);\n // estimated start view index of current view based on scroll top.\n\n const estimatedStartIndexInView = estimatedNoOfItemsPushedUp + 1;\n // estimated number of buffer records.\n\n const noOfBufferRecords = estimatedStartIndexInView - (vi.pInfo?.view?.startIndex ?? 0);\n const noOfBufferRecordsHeight =\n (noOfBufferRecords / vi.currentEstimation.averageNumberOfItemsInARow) *\n vi.currentEstimation.averageRowHeight;\n // calculated top of row container.\n top = scrollTop - noOfBufferRecordsHeight;\n if (top < 0) top = 0;\n }\n return top;\n}\n\nfunction adjustTopRowContainerToAvoidDrift(\n vi: {\n rContainer: HTMLDivElement;\n pInfo: {\n view: { startIndex: number; endIndex: number };\n currentEstimation: {\n itemCount: number;\n rowContainerHeight: number;\n averageNumberOfItemsInARow: number;\n averageRowHeight: number;\n };\n existingItemBoundingBox: { y: number };\n currentRowIndex: number;\n bufferNewCords: { top: number };\n bufferOldCords: { top: number };\n };\n currentEstimation: {\n itemCount: number;\n rowContainerHeight: number;\n averageNumberOfItemsInARow: number;\n averageRowHeight: number;\n };\n },\n existingTop: number\n) {\n // Adjust top if element was viewable when user stop scrolling and pagination trigger.\n // existing item should be viewable are at time of calculation\n // as we allow user to scroll even pagination request triggered.\n let effectiveTop = existingTop;\n const { existingItemBoundingBox, currentRowIndex } = vi.pInfo;\n // As safari does elastic scroll, we need this check to avoid any space on top.\n const safariIsFirstItem = currentRowIndex === 0;\n if (existingItemBoundingBox && !safariIsFirstItem) {\n const currentRowIndexItem = vi.rContainer.querySelector(\n `[data-index='${vi.pInfo.currentRowIndex}']`\n );\n if (currentRowIndexItem) {\n // scrollNodeTopChange - change in scroll while pagination is in progress.\n const scrollNodeTopChange = vi.pInfo.bufferNewCords.top - vi.pInfo.bufferOldCords.top;\n const newItemBoundingBox = currentRowIndexItem.getBoundingClientRect();\n const top = newItemBoundingBox.y - existingItemBoundingBox.y - scrollNodeTopChange;\n effectiveTop = existingTop - top;\n }\n }\n // As of now, we are making top to zero if it goes in negative, which is not right way.\n // -ve is possible value for it as scroll top is just approximation. Check when\n // gallery view gives you 0 to index result after some scroll.\n // scroll top is 0 as it is top row index based.\n // TODO: can go negative as bottom to top paint strategy is pending.\n // This check and expression is not required after that. This will be handled in next release.\n // Gallery issue wil also be handled in that. As of for first attempt we have to either scroll more.\n // or make buffer size more in that to avoid 0 to index number in next repaint.\n if (effectiveTop < 0 && vi.pInfo.view.startIndex === 0) effectiveTop = 0;\n if (effectiveTop !== existingTop) vi.rContainer.style.top = `${effectiveTop}px`;\n}\n\nexport function updateRowContainerTop(\n vi: {\n rContainer: HTMLDivElement;\n pInfo: {\n view: { startIndex: number; endIndex: number };\n currentEstimation: {\n itemCount: number;\n rowContainerHeight: number;\n averageNumberOfItemsInARow: number;\n averageRowHeight: number;\n };\n existingItemBoundingBox: { y: number };\n currentRowIndex: number;\n bufferNewCords: { top: number };\n bufferOldCords: { top: number };\n };\n currentEstimation: {\n itemCount: number;\n rowContainerHeight: number;\n averageNumberOfItemsInARow: number;\n averageRowHeight: number;\n };\n },\n totalRecordCount: number,\n state: { [key: string]: any },\n pContainer: HTMLDivElement,\n scrollTop: number\n) {\n // if you get last record , put row container to bottom always to Avoid\n // any space left because of estimation otherwise calculate top.\n // if next rerender you get less records,\n if (\n (vi.pInfo?.view?.startIndex === 0 && vi.pInfo?.view?.endIndex < totalRecordCount) ||\n // eslint-disable-next-line no-unsafe-optional-chaining\n vi.pInfo?.view?.startIndex + 1 > totalRecordCount ||\n // eslint-disable-next-line no-unsafe-optional-chaining\n vi.pInfo?.view?.endIndex - vi.pInfo?.view?.startIndex >= totalRecordCount\n ) {\n // This is a case when you scroll to top or say after filter your items count reduce to such level\n // it doesn't fit in current start and end index and put container top and fill view\n // will consider if empty.\n vi.rContainer.style.removeProperty('bottom');\n vi.rContainer.style.top = '0px';\n // Any action which makes indexes out of range to total record count,\n // scroll to top as a default behavior.\n if (vi.pInfo.view.startIndex + 1 > totalRecordCount) pContainer.scrollTop = 0;\n\n // commenting below line as it can cause white space on top sometime.\n // Commenting this line might cause a small flicker only when you reach at top.\n // We will solve this in 8.6 release.\n // else if (vi.pInfo?.topRowIndex > 0) adjustTopRowContainerToAvoidDrift(vi, 0);\n } else if (\n // eslint-disable-next-line no-unsafe-optional-chaining\n vi.pInfo?.view?.endIndex + 1 >= totalRecordCount &&\n // eslint-disable-next-line no-unsafe-optional-chaining\n vi.pInfo?.view?.startIndex + 1 <= totalRecordCount\n ) {\n vi.rContainer.style.removeProperty('top');\n vi.rContainer.style.bottom = '0px';\n } else {\n vi.rContainer.style.removeProperty('bottom');\n const top = calculateTop(vi, scrollTop);\n vi.rContainer.style.top = `${top}px`;\n adjustTopRowContainerToAvoidDrift(vi, top);\n }\n}\n\n// index attrs required to estimate next set.\nexport function setAttributesOnItems(\n state: { startIndex: number; endIndex: number },\n rContainer: HTMLElement\n) {\n rContainer.childNodes.forEach((r, index) => {\n (r as HTMLElement).setAttribute('data-index', `${state.startIndex + index}`);\n });\n}\n\nexport function getPContainerClientWidth(pContainer: HTMLElement) {\n if (!pContainer) return;\n\n const { width: pContainerWidth } = pContainer.getBoundingClientRect();\n\n let pContainerClientWidth = Math.floor(pContainerWidth);\n if (pContainer.offsetWidth > pContainer.clientWidth) {\n pContainerClientWidth -= getScrollbarWidth();\n }\n return pContainerClientWidth;\n}\n\nexport function getValueWithUnit(\n value: string | number | undefined,\n defaultValue: string | number\n): string | number {\n if (!value) return defaultValue;\n if (!value.toString().includes('px') && !value.toString().includes('%')) {\n return `${value}px`;\n }\n return `${value}`;\n}\n\nexport function getMaxHeight(viewMaxHeight: number | string | undefined): string {\n if (!viewMaxHeight) return 'none';\n return typeof viewMaxHeight === 'number' ? `${viewMaxHeight}px` : viewMaxHeight;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pega/lists-react",
|
|
3
|
-
"version": "9.0.0-build.
|
|
3
|
+
"version": "9.0.0-build.29.1",
|
|
4
4
|
"description": "Repeating view structures such as Table, Gallery(Repeating layouts), Kanban etc.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"author": "Pegasystems",
|
|
@@ -14,17 +14,17 @@
|
|
|
14
14
|
"build": "tsc -b tsconfig.build.json"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@pega/cosmos-react-condition-builder": "9.0.0-build.
|
|
18
|
-
"@pega/cosmos-react-core": "9.0.0-build.
|
|
19
|
-
"@pega/cosmos-react-rte": "9.0.0-build.
|
|
17
|
+
"@pega/cosmos-react-condition-builder": "9.0.0-build.29.1",
|
|
18
|
+
"@pega/cosmos-react-core": "9.0.0-build.29.1",
|
|
19
|
+
"@pega/cosmos-react-rte": "9.0.0-build.29.1",
|
|
20
20
|
"@types/lodash-es": "^4.17.12",
|
|
21
21
|
"@types/react": "^17.0.62 || ^18.3.3",
|
|
22
22
|
"@types/react-dom": "^17.0.20 || ^18.3.0",
|
|
23
23
|
"dayjs": "^1.11.13",
|
|
24
24
|
"fast-deep-equal": "^3.1.3",
|
|
25
25
|
"lodash-es": "^4.18.1",
|
|
26
|
-
"pega-repeating-structures-core": "npm:@pega/lists-core@9.0.0-build.
|
|
27
|
-
"pega-ui-list-data-apis": "npm:@pega/lists-core-utils@9.0.0-build.
|
|
26
|
+
"pega-repeating-structures-core": "npm:@pega/lists-core@9.0.0-build.29.1",
|
|
27
|
+
"pega-ui-list-data-apis": "npm:@pega/lists-core-utils@9.0.0-build.29.1",
|
|
28
28
|
"polished": "^4.1.0",
|
|
29
29
|
"prop-types": "^15.8.1",
|
|
30
30
|
"react": "^17.0.0 || ^18.0.0",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"@testing-library/react": "^16.0.0",
|
|
43
43
|
"@testing-library/user-event": "^14.6.1",
|
|
44
44
|
"jest-axe": "^8.0.0",
|
|
45
|
-
"srs-utils": "9.0.0-build.
|
|
45
|
+
"srs-utils": "9.0.0-build.29.1",
|
|
46
46
|
"typescript": "~5.9.3"
|
|
47
47
|
}
|
|
48
48
|
}
|