1 line
60 KiB
JSON
1 line
60 KiB
JSON
{"ast":null,"code":"import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"style\"];\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { useForkRef, unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/material/utils';\nimport { useGridApiContext } from '../../utils/useGridApiContext';\nimport { useGridRootProps } from '../../utils/useGridRootProps';\nimport { useGridSelector } from '../../utils/useGridSelector';\nimport { gridVisibleColumnDefinitionsSelector, gridColumnsTotalWidthSelector, gridColumnPositionsSelector } from '../columns/gridColumnsSelector';\nimport { gridDensityRowHeightSelector } from '../density/densitySelector';\nimport { gridFocusCellSelector, gridTabIndexCellSelector } from '../focus/gridFocusStateSelector';\nimport { gridEditRowsStateSelector } from '../editRows/gridEditRowsSelector';\nimport { useGridVisibleRows } from '../../utils/useGridVisibleRows';\nimport { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';\nimport { clamp } from '../../../utils/utils';\nimport { selectedIdsLookupSelector } from '../selection/gridSelectionSelector';\nimport { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';\nimport { getFirstNonSpannedColumnToRender } from '../columns/gridColumnsUtils'; // Uses binary search to avoid looping through all possible positions\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function binarySearch(offset, positions, sliceStart = 0, sliceEnd = positions.length) {\n if (positions.length <= 0) {\n return -1;\n }\n if (sliceStart >= sliceEnd) {\n return sliceStart;\n }\n const pivot = sliceStart + Math.floor((sliceEnd - sliceStart) / 2);\n const itemOffset = positions[pivot];\n return offset <= itemOffset ? binarySearch(offset, positions, sliceStart, pivot) : binarySearch(offset, positions, pivot + 1, sliceEnd);\n}\nfunction exponentialSearch(offset, positions, index) {\n let interval = 1;\n while (index < positions.length && positions[index] < offset) {\n index += interval;\n interval *= 2;\n }\n return binarySearch(offset, positions, Math.floor(index / 2), Math.min(index, positions.length));\n}\nexport const getRenderableIndexes = ({\n firstIndex,\n lastIndex,\n buffer,\n minFirstIndex,\n maxLastIndex\n}) => {\n return [clamp(firstIndex - buffer, minFirstIndex, maxLastIndex), clamp(lastIndex + buffer, minFirstIndex, maxLastIndex)];\n};\nconst areRenderContextsEqual = (context1, context2) => {\n if (context1 === context2) {\n return true;\n }\n return context1.firstRowIndex === context2.firstRowIndex && context1.lastRowIndex === context2.lastRowIndex && context1.firstColumnIndex === context2.firstColumnIndex && context1.lastColumnIndex === context2.lastColumnIndex;\n};\nexport const useGridVirtualScroller = props => {\n var _currentPage$range3, _currentPage$range4;\n const apiRef = useGridApiContext();\n const rootProps = useGridRootProps();\n const visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);\n const {\n ref,\n disableVirtualization,\n onRenderZonePositioning,\n renderZoneMinColumnIndex = 0,\n renderZoneMaxColumnIndex = visibleColumns.length,\n getRowProps\n } = props;\n const columnPositions = useGridSelector(apiRef, gridColumnPositionsSelector);\n const columnsTotalWidth = useGridSelector(apiRef, gridColumnsTotalWidthSelector);\n const rowHeight = useGridSelector(apiRef, gridDensityRowHeightSelector);\n const cellFocus = useGridSelector(apiRef, gridFocusCellSelector);\n const cellTabIndex = useGridSelector(apiRef, gridTabIndexCellSelector);\n const rowsMeta = useGridSelector(apiRef, gridRowsMetaSelector);\n const editRowsState = useGridSelector(apiRef, gridEditRowsStateSelector);\n const selectedRowsLookup = useGridSelector(apiRef, selectedIdsLookupSelector);\n const currentPage = useGridVisibleRows(apiRef, rootProps);\n const renderZoneRef = React.useRef(null);\n const rootRef = React.useRef(null);\n const handleRef = useForkRef(ref, rootRef);\n const [renderContext, setRenderContext] = React.useState(null);\n const prevRenderContext = React.useRef(renderContext);\n const scrollPosition = React.useRef({\n top: 0,\n left: 0\n });\n const [containerDimensions, setContainerDimensions] = React.useState({\n width: null,\n height: null\n });\n const prevTotalWidth = React.useRef(columnsTotalWidth);\n const getNearestIndexToRender = React.useCallback(offset => {\n var _currentPage$range, _currentPage$range2;\n const lastMeasuredIndexRelativeToAllRows = apiRef.current.unstable_getLastMeasuredRowIndex();\n let allRowsMeasured = lastMeasuredIndexRelativeToAllRows === Infinity;\n if ((_currentPage$range = currentPage.range) != null && _currentPage$range.lastRowIndex && !allRowsMeasured) {\n // Check if all rows in this page are already measured\n allRowsMeasured = lastMeasuredIndexRelativeToAllRows >= currentPage.range.lastRowIndex;\n }\n const lastMeasuredIndexRelativeToCurrentPage = clamp(lastMeasuredIndexRelativeToAllRows - (((_currentPage$range2 = currentPage.range) == null ? void 0 : _currentPage$range2.firstRowIndex) || 0), 0, rowsMeta.positions.length);\n if (allRowsMeasured || rowsMeta.positions[lastMeasuredIndexRelativeToCurrentPage] >= offset) {\n // If all rows were measured (when no row has \"auto\" as height) or all rows before the offset\n // were measured, then use a binary search because it's faster.\n return binarySearch(offset, rowsMeta.positions);\n } // Otherwise, use an exponential search.\n // If rows have \"auto\" as height, their positions will be based on estimated heights.\n // In this case, we can skip several steps until we find a position higher than the offset.\n // Inspired by https://github.com/bvaughn/react-virtualized/blob/master/source/Grid/utils/CellSizeAndPositionManager.js\n\n return exponentialSearch(offset, rowsMeta.positions, lastMeasuredIndexRelativeToCurrentPage);\n }, [apiRef, (_currentPage$range3 = currentPage.range) == null ? void 0 : _currentPage$range3.firstRowIndex, (_currentPage$range4 = currentPage.range) == null ? void 0 : _currentPage$range4.lastRowIndex, rowsMeta.positions]);\n const computeRenderContext = React.useCallback(() => {\n if (disableVirtualization) {\n return {\n firstRowIndex: 0,\n lastRowIndex: currentPage.rows.length,\n firstColumnIndex: 0,\n lastColumnIndex: visibleColumns.length\n };\n }\n const {\n top,\n left\n } = scrollPosition.current; // Clamp the value because the search may return an index out of bounds.\n // In the last index, this is not needed because Array.slice doesn't include it.\n\n const firstRowIndex = Math.min(getNearestIndexToRender(top), rowsMeta.positions.length - 1);\n const lastRowIndex = rootProps.autoHeight ? firstRowIndex + currentPage.rows.length : getNearestIndexToRender(top + containerDimensions.height);\n let hasRowWithAutoHeight = false;\n let firstColumnIndex = 0;\n let lastColumnIndex = columnPositions.length;\n const [firstRowToRender, lastRowToRender] = getRenderableIndexes({\n firstIndex: firstRowIndex,\n lastIndex: lastRowIndex,\n minFirstIndex: 0,\n maxLastIndex: currentPage.rows.length,\n buffer: rootProps.rowBuffer\n });\n for (let i = firstRowToRender; i < lastRowToRender && !hasRowWithAutoHeight; i += 1) {\n const row = currentPage.rows[i];\n hasRowWithAutoHeight = apiRef.current.unstable_rowHasAutoHeight(row.id);\n }\n if (!hasRowWithAutoHeight) {\n firstColumnIndex = binarySearch(left, columnPositions);\n lastColumnIndex = binarySearch(left + containerDimensions.width, columnPositions);\n }\n return {\n firstRowIndex,\n lastRowIndex,\n firstColumnIndex,\n lastColumnIndex\n };\n }, [disableVirtualization, getNearestIndexToRender, rowsMeta.positions.length, rootProps.autoHeight, rootProps.rowBuffer, currentPage.rows, columnPositions, visibleColumns.length, apiRef, containerDimensions]);\n useEnhancedEffect(() => {\n if (disableVirtualization) {\n renderZoneRef.current.style.transform = `translate3d(0px, 0px, 0px)`;\n } else {\n // TODO a scroll reset should not be necessary\n rootRef.current.scrollLeft = 0;\n rootRef.current.scrollTop = 0;\n }\n }, [disableVirtualization]);\n useEnhancedEffect(() => {\n setContainerDimensions({\n width: rootRef.current.clientWidth,\n height: rootRef.current.clientHeight\n });\n }, [rowsMeta.currentPageTotalHeight]);\n const handleResize = React.useCallback(params => {\n setContainerDimensions({\n width: params.width,\n height: params.height\n });\n }, []);\n useGridApiEventHandler(apiRef, 'resize', handleResize);\n const updateRenderZonePosition = React.useCallback(nextRenderContext => {\n const [firstRowToRender, lastRowToRender] = getRenderableIndexes({\n firstIndex: nextRenderContext.firstRowIndex,\n lastIndex: nextRenderContext.lastRowIndex,\n minFirstIndex: 0,\n maxLastIndex: currentPage.rows.length,\n buffer: rootProps.rowBuffer\n });\n const [initialFirstColumnToRender] = getRenderableIndexes({\n firstIndex: nextRenderContext.firstColumnIndex,\n lastIndex: nextRenderContext.lastColumnIndex,\n minFirstIndex: renderZoneMinColumnIndex,\n maxLastIndex: renderZoneMaxColumnIndex,\n buffer: rootProps.columnBuffer\n });\n const firstColumnToRender = getFirstNonSpannedColumnToRender({\n firstColumnToRender: initialFirstColumnToRender,\n apiRef,\n firstRowToRender,\n lastRowToRender,\n visibleRows: currentPage.rows\n });\n const top = gridRowsMetaSelector(apiRef.current.state).positions[firstRowToRender];\n const left = gridColumnPositionsSelector(apiRef)[firstColumnToRender]; // Call directly the selector because it might be outdated when this method is called\n\n renderZoneRef.current.style.transform = `translate3d(${left}px, ${top}px, 0px)`;\n if (typeof onRenderZonePositioning === 'function') {\n onRenderZonePositioning({\n top,\n left\n });\n }\n }, [apiRef, currentPage.rows, onRenderZonePositioning, renderZoneMinColumnIndex, renderZoneMaxColumnIndex, rootProps.columnBuffer, rootProps.rowBuffer]);\n const updateRenderContext = React.useCallback(nextRenderContext => {\n if (prevRenderContext.current && areRenderContextsEqual(nextRenderContext, prevRenderContext.current)) {\n updateRenderZonePosition(nextRenderContext);\n return;\n }\n setRenderContext(nextRenderContext);\n updateRenderZonePosition(nextRenderContext);\n const [firstRowToRender, lastRowToRender] = getRenderableIndexes({\n firstIndex: nextRenderContext.firstRowIndex,\n lastIndex: nextRenderContext.lastRowIndex,\n minFirstIndex: 0,\n maxLastIndex: currentPage.rows.length,\n buffer: rootProps.rowBuffer\n });\n apiRef.current.publishEvent('renderedRowsIntervalChange', {\n firstRowToRender,\n lastRowToRender\n });\n prevRenderContext.current = nextRenderContext;\n }, [apiRef, setRenderContext, prevRenderContext, currentPage.rows.length, rootProps.rowBuffer, updateRenderZonePosition]);\n useEnhancedEffect(() => {\n if (containerDimensions.width == null) {\n return;\n }\n const initialRenderContext = computeRenderContext();\n updateRenderContext(initialRenderContext);\n const {\n top,\n left\n } = scrollPosition.current;\n const params = {\n top,\n left,\n renderContext: initialRenderContext\n };\n apiRef.current.publishEvent('rowsScroll', params);\n }, [apiRef, computeRenderContext, containerDimensions.width, updateRenderContext]);\n const handleScroll = event => {\n const {\n scrollTop,\n scrollLeft\n } = event.currentTarget;\n scrollPosition.current.top = scrollTop;\n scrollPosition.current.left = scrollLeft; // On iOS and macOS, negative offsets are possible when swiping past the start\n\n if (scrollLeft < 0 || scrollTop < 0 || !prevRenderContext.current) {\n return;\n } // When virtualization is disabled, the context never changes during scroll\n\n const nextRenderContext = disableVirtualization ? prevRenderContext.current : computeRenderContext();\n const topRowsScrolledSincePreviousRender = Math.abs(nextRenderContext.firstRowIndex - prevRenderContext.current.firstRowIndex);\n const bottomRowsScrolledSincePreviousRender = Math.abs(nextRenderContext.lastRowIndex - prevRenderContext.current.lastRowIndex);\n const topColumnsScrolledSincePreviousRender = Math.abs(nextRenderContext.firstColumnIndex - prevRenderContext.current.firstColumnIndex);\n const bottomColumnsScrolledSincePreviousRender = Math.abs(nextRenderContext.lastColumnIndex - prevRenderContext.current.lastColumnIndex);\n const shouldSetState = topRowsScrolledSincePreviousRender >= rootProps.rowThreshold || bottomRowsScrolledSincePreviousRender >= rootProps.rowThreshold || topColumnsScrolledSincePreviousRender >= rootProps.columnThreshold || bottomColumnsScrolledSincePreviousRender >= rootProps.columnThreshold || prevTotalWidth.current !== columnsTotalWidth; // TODO v6: rename event to a wider name, it's not only fired for row scrolling\n\n apiRef.current.publishEvent('rowsScroll', {\n top: scrollTop,\n left: scrollLeft,\n renderContext: shouldSetState ? nextRenderContext : prevRenderContext.current\n }, event);\n if (shouldSetState) {\n // Prevents batching render context changes\n ReactDOM.flushSync(() => {\n updateRenderContext(nextRenderContext);\n });\n prevTotalWidth.current = columnsTotalWidth;\n }\n };\n const handleWheel = event => {\n apiRef.current.publishEvent('virtualScrollerWheel', {}, event);\n };\n const handleTouchMove = event => {\n apiRef.current.publishEvent('virtualScrollerTouchMove', {}, event);\n };\n const getRows = (params = {\n renderContext\n }) => {\n const {\n renderContext: nextRenderContext,\n minFirstColumn = renderZoneMinColumnIndex,\n maxLastColumn = renderZoneMaxColumnIndex,\n availableSpace = containerDimensions.width,\n rowIndexOffset = 0,\n position = 'center'\n } = params;\n if (!nextRenderContext || availableSpace == null) {\n return null;\n }\n const rowBuffer = !disableVirtualization ? rootProps.rowBuffer : 0;\n const columnBuffer = !disableVirtualization ? rootProps.columnBuffer : 0;\n const [firstRowToRender, lastRowToRender] = getRenderableIndexes({\n firstIndex: nextRenderContext.firstRowIndex,\n lastIndex: nextRenderContext.lastRowIndex,\n minFirstIndex: 0,\n maxLastIndex: currentPage.rows.length,\n buffer: rowBuffer\n });\n const renderedRows = [];\n if (params.rows) {\n params.rows.forEach(row => {\n renderedRows.push(row);\n apiRef.current.unstable_calculateColSpan({\n rowId: row.id,\n minFirstColumn,\n maxLastColumn,\n columns: visibleColumns\n });\n });\n } else {\n if (!currentPage.range) {\n return null;\n }\n for (let i = firstRowToRender; i < lastRowToRender; i += 1) {\n const row = currentPage.rows[i];\n renderedRows.push(row);\n apiRef.current.unstable_calculateColSpan({\n rowId: row.id,\n minFirstColumn,\n maxLastColumn,\n columns: visibleColumns\n });\n }\n }\n const [initialFirstColumnToRender, lastColumnToRender] = getRenderableIndexes({\n firstIndex: nextRenderContext.firstColumnIndex,\n lastIndex: nextRenderContext.lastColumnIndex,\n minFirstIndex: minFirstColumn,\n maxLastIndex: maxLastColumn,\n buffer: columnBuffer\n });\n const firstColumnToRender = getFirstNonSpannedColumnToRender({\n firstColumnToRender: initialFirstColumnToRender,\n apiRef,\n firstRowToRender,\n lastRowToRender,\n visibleRows: currentPage.rows\n });\n const renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);\n const rows = [];\n for (let i = 0; i < renderedRows.length; i += 1) {\n var _currentPage$range5, _rootProps$components;\n const {\n id,\n model\n } = renderedRows[i];\n const lastVisibleRowIndex = firstRowToRender + i === currentPage.rows.length - 1;\n const baseRowHeight = !apiRef.current.unstable_rowHasAutoHeight(id) ? apiRef.current.unstable_getRowHeight(id) : 'auto';\n let isSelected;\n if (selectedRowsLookup[id] == null) {\n isSelected = false;\n } else {\n isSelected = apiRef.current.isRowSelectable(id);\n }\n rows.push(/*#__PURE__*/_jsx(rootProps.components.Row, _extends({\n row: model,\n rowId: id,\n rowHeight: baseRowHeight,\n cellFocus: cellFocus // TODO move to inside the row\n ,\n\n cellTabIndex: cellTabIndex // TODO move to inside the row\n ,\n\n editRowsState: editRowsState // TODO move to inside the row\n ,\n\n renderedColumns: renderedColumns,\n visibleColumns: visibleColumns,\n firstColumnToRender: firstColumnToRender,\n lastColumnToRender: lastColumnToRender,\n selected: isSelected,\n index: rowIndexOffset + ((currentPage == null ? void 0 : (_currentPage$range5 = currentPage.range) == null ? void 0 : _currentPage$range5.firstRowIndex) || 0) + firstRowToRender + i,\n containerWidth: availableSpace,\n isLastVisible: lastVisibleRowIndex,\n position: position\n }, typeof getRowProps === 'function' ? getRowProps(id, model) : {}, (_rootProps$components = rootProps.componentsProps) == null ? void 0 : _rootProps$components.row), id));\n }\n return rows;\n };\n const needsHorizontalScrollbar = containerDimensions.width && columnsTotalWidth > containerDimensions.width;\n const contentSize = React.useMemo(() => {\n // In cases where the columns exceed the available width,\n // the horizontal scrollbar should be shown even when there're no rows.\n // Keeping 1px as minimum height ensures that the scrollbar will visible if necessary.\n const height = Math.max(rowsMeta.currentPageTotalHeight, 1);\n let shouldExtendContent = false;\n if (rootRef != null && rootRef.current && height <= (rootRef == null ? void 0 : rootRef.current.clientHeight)) {\n shouldExtendContent = true;\n }\n const size = {\n width: needsHorizontalScrollbar ? columnsTotalWidth : 'auto',\n height,\n minHeight: shouldExtendContent ? '100%' : 'auto'\n };\n if (rootProps.autoHeight && currentPage.rows.length === 0) {\n size.height = 2 * rowHeight; // Give room to show the overlay when there's no row.\n }\n return size;\n }, [rootRef, columnsTotalWidth, rowsMeta.currentPageTotalHeight, currentPage.rows.length, needsHorizontalScrollbar, rootProps.autoHeight, rowHeight]);\n React.useEffect(() => {\n apiRef.current.publishEvent('virtualScrollerContentSizeChange');\n }, [apiRef, contentSize]);\n if (rootProps.autoHeight && currentPage.rows.length === 0) {\n contentSize.height = 2 * rowHeight; // Give room to show the overlay when there no rows.\n }\n const rootStyle = {};\n if (!needsHorizontalScrollbar) {\n rootStyle.overflowX = 'hidden';\n }\n if (rootProps.autoHeight) {\n rootStyle.overflowY = 'hidden';\n }\n const getRenderContext = React.useCallback(() => {\n return prevRenderContext.current;\n }, []);\n apiRef.current.unstable_getRenderContext = getRenderContext;\n return {\n renderContext,\n updateRenderZonePosition,\n getRows,\n getRootProps: (_ref = {}) => {\n let {\n style = {}\n } = _ref,\n other = _objectWithoutPropertiesLoose(_ref, _excluded);\n return _extends({\n ref: handleRef,\n onScroll: handleScroll,\n onWheel: handleWheel,\n onTouchMove: handleTouchMove,\n style: _extends({}, style, rootStyle)\n }, other);\n },\n getContentProps: ({\n style = {}\n } = {}) => ({\n style: _extends({}, style, contentSize)\n }),\n getRenderZoneProps: () => ({\n ref: renderZoneRef\n })\n };\n};","map":{"version":3,"names":["_objectWithoutPropertiesLoose","_extends","_excluded","React","ReactDOM","useForkRef","unstable_useEnhancedEffect","useEnhancedEffect","useGridApiContext","useGridRootProps","useGridSelector","gridVisibleColumnDefinitionsSelector","gridColumnsTotalWidthSelector","gridColumnPositionsSelector","gridDensityRowHeightSelector","gridFocusCellSelector","gridTabIndexCellSelector","gridEditRowsStateSelector","useGridVisibleRows","useGridApiEventHandler","clamp","selectedIdsLookupSelector","gridRowsMetaSelector","getFirstNonSpannedColumnToRender","jsx","_jsx","binarySearch","offset","positions","sliceStart","sliceEnd","length","pivot","Math","floor","itemOffset","exponentialSearch","index","interval","min","getRenderableIndexes","firstIndex","lastIndex","buffer","minFirstIndex","maxLastIndex","areRenderContextsEqual","context1","context2","firstRowIndex","lastRowIndex","firstColumnIndex","lastColumnIndex","useGridVirtualScroller","props","_currentPage$range3","_currentPage$range4","apiRef","rootProps","visibleColumns","ref","disableVirtualization","onRenderZonePositioning","renderZoneMinColumnIndex","renderZoneMaxColumnIndex","getRowProps","columnPositions","columnsTotalWidth","rowHeight","cellFocus","cellTabIndex","rowsMeta","editRowsState","selectedRowsLookup","currentPage","renderZoneRef","useRef","rootRef","handleRef","renderContext","setRenderContext","useState","prevRenderContext","scrollPosition","top","left","containerDimensions","setContainerDimensions","width","height","prevTotalWidth","getNearestIndexToRender","useCallback","_currentPage$range","_currentPage$range2","lastMeasuredIndexRelativeToAllRows","current","unstable_getLastMeasuredRowIndex","allRowsMeasured","Infinity","range","lastMeasuredIndexRelativeToCurrentPage","computeRenderContext","rows","autoHeight","hasRowWithAutoHeight","firstRowToRender","lastRowToRender","rowBuffer","i","row","unstable_rowHasAutoHeight","id","style","transform","scrollLeft","scrollTop","clientWidth","clientHeight","currentPageTotalHeight","handleResize","params","updateRenderZonePosition","nextRenderContext","initialFirstColumnToRender","columnBuffer","firstColumnToRender","visibleRows","state","updateRenderContext","publishEvent","initialRenderContext","handleScroll","event","currentTarget","topRowsScrolledSincePreviousRender","abs","bottomRowsScrolledSincePreviousRender","topColumnsScrolledSincePreviousRender","bottomColumnsScrolledSincePreviousRender","shouldSetState","rowThreshold","columnThreshold","flushSync","handleWheel","handleTouchMove","getRows","minFirstColumn","maxLastColumn","availableSpace","rowIndexOffset","position","renderedRows","forEach","push","unstable_calculateColSpan","rowId","columns","lastColumnToRender","renderedColumns","slice","_currentPage$range5","_rootProps$components","model","lastVisibleRowIndex","baseRowHeight","unstable_getRowHeight","isSelected","isRowSelectable","components","Row","selected","containerWidth","isLastVisible","componentsProps","needsHorizontalScrollbar","contentSize","useMemo","max","shouldExtendContent","size","minHeight","useEffect","rootStyle","overflowX","overflowY","getRenderContext","unstable_getRenderContext","getRootProps","_ref","other","onScroll","onWheel","onTouchMove","getContentProps","getRenderZoneProps"],"sources":["/home/gnx/Desktop/ETB/ETB-FrontEnd/node_modules/@mui/x-data-grid/hooks/features/virtualization/useGridVirtualScroller.js"],"sourcesContent":["import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"style\"];\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { useForkRef, unstable_useEnhancedEffect as useEnhancedEffect } from '@mui/material/utils';\nimport { useGridApiContext } from '../../utils/useGridApiContext';\nimport { useGridRootProps } from '../../utils/useGridRootProps';\nimport { useGridSelector } from '../../utils/useGridSelector';\nimport { gridVisibleColumnDefinitionsSelector, gridColumnsTotalWidthSelector, gridColumnPositionsSelector } from '../columns/gridColumnsSelector';\nimport { gridDensityRowHeightSelector } from '../density/densitySelector';\nimport { gridFocusCellSelector, gridTabIndexCellSelector } from '../focus/gridFocusStateSelector';\nimport { gridEditRowsStateSelector } from '../editRows/gridEditRowsSelector';\nimport { useGridVisibleRows } from '../../utils/useGridVisibleRows';\nimport { useGridApiEventHandler } from '../../utils/useGridApiEventHandler';\nimport { clamp } from '../../../utils/utils';\nimport { selectedIdsLookupSelector } from '../selection/gridSelectionSelector';\nimport { gridRowsMetaSelector } from '../rows/gridRowsMetaSelector';\nimport { getFirstNonSpannedColumnToRender } from '../columns/gridColumnsUtils'; // Uses binary search to avoid looping through all possible positions\n\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function binarySearch(offset, positions, sliceStart = 0, sliceEnd = positions.length) {\n if (positions.length <= 0) {\n return -1;\n }\n\n if (sliceStart >= sliceEnd) {\n return sliceStart;\n }\n\n const pivot = sliceStart + Math.floor((sliceEnd - sliceStart) / 2);\n const itemOffset = positions[pivot];\n return offset <= itemOffset ? binarySearch(offset, positions, sliceStart, pivot) : binarySearch(offset, positions, pivot + 1, sliceEnd);\n}\n\nfunction exponentialSearch(offset, positions, index) {\n let interval = 1;\n\n while (index < positions.length && positions[index] < offset) {\n index += interval;\n interval *= 2;\n }\n\n return binarySearch(offset, positions, Math.floor(index / 2), Math.min(index, positions.length));\n}\n\nexport const getRenderableIndexes = ({\n firstIndex,\n lastIndex,\n buffer,\n minFirstIndex,\n maxLastIndex\n}) => {\n return [clamp(firstIndex - buffer, minFirstIndex, maxLastIndex), clamp(lastIndex + buffer, minFirstIndex, maxLastIndex)];\n};\n\nconst areRenderContextsEqual = (context1, context2) => {\n if (context1 === context2) {\n return true;\n }\n\n return context1.firstRowIndex === context2.firstRowIndex && context1.lastRowIndex === context2.lastRowIndex && context1.firstColumnIndex === context2.firstColumnIndex && context1.lastColumnIndex === context2.lastColumnIndex;\n};\n\nexport const useGridVirtualScroller = props => {\n var _currentPage$range3, _currentPage$range4;\n\n const apiRef = useGridApiContext();\n const rootProps = useGridRootProps();\n const visibleColumns = useGridSelector(apiRef, gridVisibleColumnDefinitionsSelector);\n const {\n ref,\n disableVirtualization,\n onRenderZonePositioning,\n renderZoneMinColumnIndex = 0,\n renderZoneMaxColumnIndex = visibleColumns.length,\n getRowProps\n } = props;\n const columnPositions = useGridSelector(apiRef, gridColumnPositionsSelector);\n const columnsTotalWidth = useGridSelector(apiRef, gridColumnsTotalWidthSelector);\n const rowHeight = useGridSelector(apiRef, gridDensityRowHeightSelector);\n const cellFocus = useGridSelector(apiRef, gridFocusCellSelector);\n const cellTabIndex = useGridSelector(apiRef, gridTabIndexCellSelector);\n const rowsMeta = useGridSelector(apiRef, gridRowsMetaSelector);\n const editRowsState = useGridSelector(apiRef, gridEditRowsStateSelector);\n const selectedRowsLookup = useGridSelector(apiRef, selectedIdsLookupSelector);\n const currentPage = useGridVisibleRows(apiRef, rootProps);\n const renderZoneRef = React.useRef(null);\n const rootRef = React.useRef(null);\n const handleRef = useForkRef(ref, rootRef);\n const [renderContext, setRenderContext] = React.useState(null);\n const prevRenderContext = React.useRef(renderContext);\n const scrollPosition = React.useRef({\n top: 0,\n left: 0\n });\n const [containerDimensions, setContainerDimensions] = React.useState({\n width: null,\n height: null\n });\n const prevTotalWidth = React.useRef(columnsTotalWidth);\n const getNearestIndexToRender = React.useCallback(offset => {\n var _currentPage$range, _currentPage$range2;\n\n const lastMeasuredIndexRelativeToAllRows = apiRef.current.unstable_getLastMeasuredRowIndex();\n let allRowsMeasured = lastMeasuredIndexRelativeToAllRows === Infinity;\n\n if ((_currentPage$range = currentPage.range) != null && _currentPage$range.lastRowIndex && !allRowsMeasured) {\n // Check if all rows in this page are already measured\n allRowsMeasured = lastMeasuredIndexRelativeToAllRows >= currentPage.range.lastRowIndex;\n }\n\n const lastMeasuredIndexRelativeToCurrentPage = clamp(lastMeasuredIndexRelativeToAllRows - (((_currentPage$range2 = currentPage.range) == null ? void 0 : _currentPage$range2.firstRowIndex) || 0), 0, rowsMeta.positions.length);\n\n if (allRowsMeasured || rowsMeta.positions[lastMeasuredIndexRelativeToCurrentPage] >= offset) {\n // If all rows were measured (when no row has \"auto\" as height) or all rows before the offset\n // were measured, then use a binary search because it's faster.\n return binarySearch(offset, rowsMeta.positions);\n } // Otherwise, use an exponential search.\n // If rows have \"auto\" as height, their positions will be based on estimated heights.\n // In this case, we can skip several steps until we find a position higher than the offset.\n // Inspired by https://github.com/bvaughn/react-virtualized/blob/master/source/Grid/utils/CellSizeAndPositionManager.js\n\n\n return exponentialSearch(offset, rowsMeta.positions, lastMeasuredIndexRelativeToCurrentPage);\n }, [apiRef, (_currentPage$range3 = currentPage.range) == null ? void 0 : _currentPage$range3.firstRowIndex, (_currentPage$range4 = currentPage.range) == null ? void 0 : _currentPage$range4.lastRowIndex, rowsMeta.positions]);\n const computeRenderContext = React.useCallback(() => {\n if (disableVirtualization) {\n return {\n firstRowIndex: 0,\n lastRowIndex: currentPage.rows.length,\n firstColumnIndex: 0,\n lastColumnIndex: visibleColumns.length\n };\n }\n\n const {\n top,\n left\n } = scrollPosition.current; // Clamp the value because the search may return an index out of bounds.\n // In the last index, this is not needed because Array.slice doesn't include it.\n\n const firstRowIndex = Math.min(getNearestIndexToRender(top), rowsMeta.positions.length - 1);\n const lastRowIndex = rootProps.autoHeight ? firstRowIndex + currentPage.rows.length : getNearestIndexToRender(top + containerDimensions.height);\n let hasRowWithAutoHeight = false;\n let firstColumnIndex = 0;\n let lastColumnIndex = columnPositions.length;\n const [firstRowToRender, lastRowToRender] = getRenderableIndexes({\n firstIndex: firstRowIndex,\n lastIndex: lastRowIndex,\n minFirstIndex: 0,\n maxLastIndex: currentPage.rows.length,\n buffer: rootProps.rowBuffer\n });\n\n for (let i = firstRowToRender; i < lastRowToRender && !hasRowWithAutoHeight; i += 1) {\n const row = currentPage.rows[i];\n hasRowWithAutoHeight = apiRef.current.unstable_rowHasAutoHeight(row.id);\n }\n\n if (!hasRowWithAutoHeight) {\n firstColumnIndex = binarySearch(left, columnPositions);\n lastColumnIndex = binarySearch(left + containerDimensions.width, columnPositions);\n }\n\n return {\n firstRowIndex,\n lastRowIndex,\n firstColumnIndex,\n lastColumnIndex\n };\n }, [disableVirtualization, getNearestIndexToRender, rowsMeta.positions.length, rootProps.autoHeight, rootProps.rowBuffer, currentPage.rows, columnPositions, visibleColumns.length, apiRef, containerDimensions]);\n useEnhancedEffect(() => {\n if (disableVirtualization) {\n renderZoneRef.current.style.transform = `translate3d(0px, 0px, 0px)`;\n } else {\n // TODO a scroll reset should not be necessary\n rootRef.current.scrollLeft = 0;\n rootRef.current.scrollTop = 0;\n }\n }, [disableVirtualization]);\n useEnhancedEffect(() => {\n setContainerDimensions({\n width: rootRef.current.clientWidth,\n height: rootRef.current.clientHeight\n });\n }, [rowsMeta.currentPageTotalHeight]);\n const handleResize = React.useCallback(params => {\n setContainerDimensions({\n width: params.width,\n height: params.height\n });\n }, []);\n useGridApiEventHandler(apiRef, 'resize', handleResize);\n const updateRenderZonePosition = React.useCallback(nextRenderContext => {\n const [firstRowToRender, lastRowToRender] = getRenderableIndexes({\n firstIndex: nextRenderContext.firstRowIndex,\n lastIndex: nextRenderContext.lastRowIndex,\n minFirstIndex: 0,\n maxLastIndex: currentPage.rows.length,\n buffer: rootProps.rowBuffer\n });\n const [initialFirstColumnToRender] = getRenderableIndexes({\n firstIndex: nextRenderContext.firstColumnIndex,\n lastIndex: nextRenderContext.lastColumnIndex,\n minFirstIndex: renderZoneMinColumnIndex,\n maxLastIndex: renderZoneMaxColumnIndex,\n buffer: rootProps.columnBuffer\n });\n const firstColumnToRender = getFirstNonSpannedColumnToRender({\n firstColumnToRender: initialFirstColumnToRender,\n apiRef,\n firstRowToRender,\n lastRowToRender,\n visibleRows: currentPage.rows\n });\n const top = gridRowsMetaSelector(apiRef.current.state).positions[firstRowToRender];\n const left = gridColumnPositionsSelector(apiRef)[firstColumnToRender]; // Call directly the selector because it might be outdated when this method is called\n\n renderZoneRef.current.style.transform = `translate3d(${left}px, ${top}px, 0px)`;\n\n if (typeof onRenderZonePositioning === 'function') {\n onRenderZonePositioning({\n top,\n left\n });\n }\n }, [apiRef, currentPage.rows, onRenderZonePositioning, renderZoneMinColumnIndex, renderZoneMaxColumnIndex, rootProps.columnBuffer, rootProps.rowBuffer]);\n const updateRenderContext = React.useCallback(nextRenderContext => {\n if (prevRenderContext.current && areRenderContextsEqual(nextRenderContext, prevRenderContext.current)) {\n updateRenderZonePosition(nextRenderContext);\n return;\n }\n\n setRenderContext(nextRenderContext);\n updateRenderZonePosition(nextRenderContext);\n const [firstRowToRender, lastRowToRender] = getRenderableIndexes({\n firstIndex: nextRenderContext.firstRowIndex,\n lastIndex: nextRenderContext.lastRowIndex,\n minFirstIndex: 0,\n maxLastIndex: currentPage.rows.length,\n buffer: rootProps.rowBuffer\n });\n apiRef.current.publishEvent('renderedRowsIntervalChange', {\n firstRowToRender,\n lastRowToRender\n });\n prevRenderContext.current = nextRenderContext;\n }, [apiRef, setRenderContext, prevRenderContext, currentPage.rows.length, rootProps.rowBuffer, updateRenderZonePosition]);\n useEnhancedEffect(() => {\n if (containerDimensions.width == null) {\n return;\n }\n\n const initialRenderContext = computeRenderContext();\n updateRenderContext(initialRenderContext);\n const {\n top,\n left\n } = scrollPosition.current;\n const params = {\n top,\n left,\n renderContext: initialRenderContext\n };\n apiRef.current.publishEvent('rowsScroll', params);\n }, [apiRef, computeRenderContext, containerDimensions.width, updateRenderContext]);\n\n const handleScroll = event => {\n const {\n scrollTop,\n scrollLeft\n } = event.currentTarget;\n scrollPosition.current.top = scrollTop;\n scrollPosition.current.left = scrollLeft; // On iOS and macOS, negative offsets are possible when swiping past the start\n\n if (scrollLeft < 0 || scrollTop < 0 || !prevRenderContext.current) {\n return;\n } // When virtualization is disabled, the context never changes during scroll\n\n\n const nextRenderContext = disableVirtualization ? prevRenderContext.current : computeRenderContext();\n const topRowsScrolledSincePreviousRender = Math.abs(nextRenderContext.firstRowIndex - prevRenderContext.current.firstRowIndex);\n const bottomRowsScrolledSincePreviousRender = Math.abs(nextRenderContext.lastRowIndex - prevRenderContext.current.lastRowIndex);\n const topColumnsScrolledSincePreviousRender = Math.abs(nextRenderContext.firstColumnIndex - prevRenderContext.current.firstColumnIndex);\n const bottomColumnsScrolledSincePreviousRender = Math.abs(nextRenderContext.lastColumnIndex - prevRenderContext.current.lastColumnIndex);\n const shouldSetState = topRowsScrolledSincePreviousRender >= rootProps.rowThreshold || bottomRowsScrolledSincePreviousRender >= rootProps.rowThreshold || topColumnsScrolledSincePreviousRender >= rootProps.columnThreshold || bottomColumnsScrolledSincePreviousRender >= rootProps.columnThreshold || prevTotalWidth.current !== columnsTotalWidth; // TODO v6: rename event to a wider name, it's not only fired for row scrolling\n\n apiRef.current.publishEvent('rowsScroll', {\n top: scrollTop,\n left: scrollLeft,\n renderContext: shouldSetState ? nextRenderContext : prevRenderContext.current\n }, event);\n\n if (shouldSetState) {\n // Prevents batching render context changes\n ReactDOM.flushSync(() => {\n updateRenderContext(nextRenderContext);\n });\n prevTotalWidth.current = columnsTotalWidth;\n }\n };\n\n const handleWheel = event => {\n apiRef.current.publishEvent('virtualScrollerWheel', {}, event);\n };\n\n const handleTouchMove = event => {\n apiRef.current.publishEvent('virtualScrollerTouchMove', {}, event);\n };\n\n const getRows = (params = {\n renderContext\n }) => {\n const {\n renderContext: nextRenderContext,\n minFirstColumn = renderZoneMinColumnIndex,\n maxLastColumn = renderZoneMaxColumnIndex,\n availableSpace = containerDimensions.width,\n rowIndexOffset = 0,\n position = 'center'\n } = params;\n\n if (!nextRenderContext || availableSpace == null) {\n return null;\n }\n\n const rowBuffer = !disableVirtualization ? rootProps.rowBuffer : 0;\n const columnBuffer = !disableVirtualization ? rootProps.columnBuffer : 0;\n const [firstRowToRender, lastRowToRender] = getRenderableIndexes({\n firstIndex: nextRenderContext.firstRowIndex,\n lastIndex: nextRenderContext.lastRowIndex,\n minFirstIndex: 0,\n maxLastIndex: currentPage.rows.length,\n buffer: rowBuffer\n });\n const renderedRows = [];\n\n if (params.rows) {\n params.rows.forEach(row => {\n renderedRows.push(row);\n apiRef.current.unstable_calculateColSpan({\n rowId: row.id,\n minFirstColumn,\n maxLastColumn,\n columns: visibleColumns\n });\n });\n } else {\n if (!currentPage.range) {\n return null;\n }\n\n for (let i = firstRowToRender; i < lastRowToRender; i += 1) {\n const row = currentPage.rows[i];\n renderedRows.push(row);\n apiRef.current.unstable_calculateColSpan({\n rowId: row.id,\n minFirstColumn,\n maxLastColumn,\n columns: visibleColumns\n });\n }\n }\n\n const [initialFirstColumnToRender, lastColumnToRender] = getRenderableIndexes({\n firstIndex: nextRenderContext.firstColumnIndex,\n lastIndex: nextRenderContext.lastColumnIndex,\n minFirstIndex: minFirstColumn,\n maxLastIndex: maxLastColumn,\n buffer: columnBuffer\n });\n const firstColumnToRender = getFirstNonSpannedColumnToRender({\n firstColumnToRender: initialFirstColumnToRender,\n apiRef,\n firstRowToRender,\n lastRowToRender,\n visibleRows: currentPage.rows\n });\n const renderedColumns = visibleColumns.slice(firstColumnToRender, lastColumnToRender);\n const rows = [];\n\n for (let i = 0; i < renderedRows.length; i += 1) {\n var _currentPage$range5, _rootProps$components;\n\n const {\n id,\n model\n } = renderedRows[i];\n const lastVisibleRowIndex = firstRowToRender + i === currentPage.rows.length - 1;\n const baseRowHeight = !apiRef.current.unstable_rowHasAutoHeight(id) ? apiRef.current.unstable_getRowHeight(id) : 'auto';\n let isSelected;\n\n if (selectedRowsLookup[id] == null) {\n isSelected = false;\n } else {\n isSelected = apiRef.current.isRowSelectable(id);\n }\n\n rows.push( /*#__PURE__*/_jsx(rootProps.components.Row, _extends({\n row: model,\n rowId: id,\n rowHeight: baseRowHeight,\n cellFocus: cellFocus // TODO move to inside the row\n ,\n cellTabIndex: cellTabIndex // TODO move to inside the row\n ,\n editRowsState: editRowsState // TODO move to inside the row\n ,\n renderedColumns: renderedColumns,\n visibleColumns: visibleColumns,\n firstColumnToRender: firstColumnToRender,\n lastColumnToRender: lastColumnToRender,\n selected: isSelected,\n index: rowIndexOffset + ((currentPage == null ? void 0 : (_currentPage$range5 = currentPage.range) == null ? void 0 : _currentPage$range5.firstRowIndex) || 0) + firstRowToRender + i,\n containerWidth: availableSpace,\n isLastVisible: lastVisibleRowIndex,\n position: position\n }, typeof getRowProps === 'function' ? getRowProps(id, model) : {}, (_rootProps$components = rootProps.componentsProps) == null ? void 0 : _rootProps$components.row), id));\n }\n\n return rows;\n };\n\n const needsHorizontalScrollbar = containerDimensions.width && columnsTotalWidth > containerDimensions.width;\n const contentSize = React.useMemo(() => {\n // In cases where the columns exceed the available width,\n // the horizontal scrollbar should be shown even when there're no rows.\n // Keeping 1px as minimum height ensures that the scrollbar will visible if necessary.\n const height = Math.max(rowsMeta.currentPageTotalHeight, 1);\n let shouldExtendContent = false;\n\n if (rootRef != null && rootRef.current && height <= (rootRef == null ? void 0 : rootRef.current.clientHeight)) {\n shouldExtendContent = true;\n }\n\n const size = {\n width: needsHorizontalScrollbar ? columnsTotalWidth : 'auto',\n height,\n minHeight: shouldExtendContent ? '100%' : 'auto'\n };\n\n if (rootProps.autoHeight && currentPage.rows.length === 0) {\n size.height = 2 * rowHeight; // Give room to show the overlay when there's no row.\n }\n\n return size;\n }, [rootRef, columnsTotalWidth, rowsMeta.currentPageTotalHeight, currentPage.rows.length, needsHorizontalScrollbar, rootProps.autoHeight, rowHeight]);\n React.useEffect(() => {\n apiRef.current.publishEvent('virtualScrollerContentSizeChange');\n }, [apiRef, contentSize]);\n\n if (rootProps.autoHeight && currentPage.rows.length === 0) {\n contentSize.height = 2 * rowHeight; // Give room to show the overlay when there no rows.\n }\n\n const rootStyle = {};\n\n if (!needsHorizontalScrollbar) {\n rootStyle.overflowX = 'hidden';\n }\n\n if (rootProps.autoHeight) {\n rootStyle.overflowY = 'hidden';\n }\n\n const getRenderContext = React.useCallback(() => {\n return prevRenderContext.current;\n }, []);\n apiRef.current.unstable_getRenderContext = getRenderContext;\n return {\n renderContext,\n updateRenderZonePosition,\n getRows,\n getRootProps: (_ref = {}) => {\n let {\n style = {}\n } = _ref,\n other = _objectWithoutPropertiesLoose(_ref, _excluded);\n\n return _extends({\n ref: handleRef,\n onScroll: handleScroll,\n onWheel: handleWheel,\n onTouchMove: handleTouchMove,\n style: _extends({}, style, rootStyle)\n }, other);\n },\n getContentProps: ({\n style = {}\n } = {}) => ({\n style: _extends({}, style, contentSize)\n }),\n getRenderZoneProps: () => ({\n ref: renderZoneRef\n })\n };\n};"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} |