'use client'; "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "useVirtualizerScrollViewDynamic_unstable", { enumerable: true, get: function() { return useVirtualizerScrollViewDynamic_unstable; } }); const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard"); const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react")); const _reactutilities = require("@fluentui/react-utilities"); const _useVirtualizer = require("../Virtualizer/useVirtualizer"); const _Hooks = require("../../Hooks"); const _Utilities = require("../../Utilities"); const _useMeasureList = require("../../hooks/useMeasureList"); const _useDynamicPagination = require("../../hooks/useDynamicPagination"); function useVirtualizerScrollViewDynamic_unstable(props) { 'use no memo'; var _imperativeVirtualizerRef_current; const contextState = (0, _Utilities.useVirtualizerContextState_unstable)(props.virtualizerContext); const { imperativeRef, axis = 'vertical', reversed, imperativeVirtualizerRef, enablePagination = false, bufferItems: _bufferItems, bufferSize: _bufferSize } = props; let sizeTrackingArray = _react.useRef(new Array(props.numItems).fill(props.itemSize)); // This lets us trigger updates when a size change occurs. const [sizeUpdateCount, setSizeUpdateCount] = _react.useState(0); const getChildSizeAuto = _react.useCallback((index)=>{ if (sizeTrackingArray.current.length <= index || sizeTrackingArray.current[index] <= 0) { // Default size for initial state or untracked return props.itemSize; } /* Required to be defined prior to our measure function * we use a sizing array ref that we will update post-render */ return sizeTrackingArray.current[index]; }, [ sizeTrackingArray, props.itemSize, sizeUpdateCount ]); var _props_axis, _props_getItemSize; const { virtualizerLength, bufferItems, bufferSize, scrollRef, containerSizeRef, updateScrollPosition } = (0, _Hooks.useDynamicVirtualizerMeasure)({ defaultItemSize: props.itemSize, direction: (_props_axis = props.axis) !== null && _props_axis !== void 0 ? _props_axis : 'vertical', getItemSize: (_props_getItemSize = props.getItemSize) !== null && _props_getItemSize !== void 0 ? _props_getItemSize : getChildSizeAuto, virtualizerContext: contextState, numItems: props.numItems, bufferItems: _bufferItems, bufferSize: _bufferSize }); const _imperativeVirtualizerRef = (0, _reactutilities.useMergedRefs)(_react.useRef(null), imperativeVirtualizerRef); var _contextState_contextIndex; const paginationRef = (0, _useDynamicPagination.useDynamicVirtualizerPagination)({ axis, progressiveItemSizes: (_imperativeVirtualizerRef_current = _imperativeVirtualizerRef.current) === null || _imperativeVirtualizerRef_current === void 0 ? void 0 : _imperativeVirtualizerRef_current.progressiveSizes, virtualizerLength, currentIndex: (_contextState_contextIndex = contextState === null || contextState === void 0 ? void 0 : contextState.contextIndex) !== null && _contextState_contextIndex !== void 0 ? _contextState_contextIndex : 0 }, enablePagination); // Store the virtualizer length as a ref for imperative ref access const virtualizerLengthRef = _react.useRef(virtualizerLength); if (virtualizerLengthRef.current !== virtualizerLength) { virtualizerLengthRef.current = virtualizerLength; } const scrollViewRef = (0, _reactutilities.useMergedRefs)(props.scrollViewRef, scrollRef, paginationRef); const scrollCallbackRef = _react.useRef(null); _react.useImperativeHandle(imperativeRef, ()=>{ var _imperativeVirtualizerRef_current; return { scrollTo (index, behavior = 'auto', callback) { scrollCallbackRef.current = callback !== null && callback !== void 0 ? callback : null; if (_imperativeVirtualizerRef.current) { var _imperativeVirtualizerRef_current; const progressiveSizes = _imperativeVirtualizerRef.current.progressiveSizes.current; const totalSize = progressiveSizes && (progressiveSizes === null || progressiveSizes === void 0 ? void 0 : progressiveSizes.length) > 0 ? progressiveSizes[Math.max(progressiveSizes.length - 1, 0)] : 0; _imperativeVirtualizerRef.current.setFlaggedIndex(index); (0, _Utilities.scrollToItemDynamic)({ index, itemSizes: (_imperativeVirtualizerRef_current = _imperativeVirtualizerRef.current) === null || _imperativeVirtualizerRef_current === void 0 ? void 0 : _imperativeVirtualizerRef_current.nodeSizes, totalSize, scrollViewRef: scrollViewRef, axis, reversed, behavior }); } }, currentIndex: (_imperativeVirtualizerRef_current = _imperativeVirtualizerRef.current) === null || _imperativeVirtualizerRef_current === void 0 ? void 0 : _imperativeVirtualizerRef_current.currentIndex, virtualizerLength: virtualizerLengthRef }; }, [ axis, scrollViewRef, reversed, _imperativeVirtualizerRef ]); const handleRenderedIndex = (index)=>{ if (scrollCallbackRef.current) { scrollCallbackRef.current(index); } }; var _props_getItemSize1; const virtualizerState = (0, _useVirtualizer.useVirtualizer_unstable)({ ...props, getItemSize: (_props_getItemSize1 = props.getItemSize) !== null && _props_getItemSize1 !== void 0 ? _props_getItemSize1 : getChildSizeAuto, virtualizerLength, bufferItems, bufferSize, virtualizerContext: contextState, imperativeVirtualizerRef: _imperativeVirtualizerRef, onRenderedFlaggedIndex: handleRenderedIndex, containerSizeRef, scrollViewRef, updateScrollPosition }); const measureObject = (0, _useMeasureList.useMeasureList)(virtualizerState.virtualizerStartIndex, virtualizerLength, props.numItems, props.itemSize); if (enablePagination && measureObject.sizeUpdateCount !== sizeUpdateCount) { /* This enables us to let callback know that the sizes have been updated triggers a re-render but is only required on pagination (else index change handles) */ setSizeUpdateCount(measureObject.sizeUpdateCount); } if (axis === 'horizontal') { sizeTrackingArray = measureObject.widthArray; } else { sizeTrackingArray = measureObject.heightArray; } if (!props.getItemSize) { // Auto-measuring is required _react.Children.map(virtualizerState.virtualizedChildren, (child, index)=>{ if (/*#__PURE__*/ _react.isValidElement(child)) { virtualizerState.virtualizedChildren[index] = /*#__PURE__*/ _react.createElement(child.type, { ...child.props, key: child.key, ref: (element)=>{ if (child.hasOwnProperty('ref')) { // We must access this from the child directly, not props (forward ref). // eslint-disable-next-line @typescript-eslint/no-explicit-any const localRef = child === null || child === void 0 ? void 0 : child.ref; if (typeof localRef === 'function') { localRef(element); } else if (localRef) { localRef.current = element; } } // Call the auto-measure ref attachment. measureObject.createIndexedRef(index)(element); } }); } }); } return { ...virtualizerState, components: { ...virtualizerState.components, container: 'div' }, container: _reactutilities.slot.always(props.container, { defaultProps: { ref: scrollViewRef }, elementType: 'div' }) }; }