@fluentui/react-virtualizer 9.0.0-alpha.22 → 9.0.0-alpha.23
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/CHANGELOG.json +40 -1
- package/CHANGELOG.md +15 -2
- package/dist/index.d.ts +59 -7
- package/lib/components/Virtualizer/Virtualizer.types.js.map +1 -1
- package/lib/components/Virtualizer/renderVirtualizer.js.map +1 -1
- package/lib/components/Virtualizer/useVirtualizer.js +83 -13
- package/lib/components/Virtualizer/useVirtualizer.js.map +1 -1
- package/lib/components/VirtualizerScrollView/VirtualizerScrollView.js.map +1 -1
- package/lib/components/VirtualizerScrollView/VirtualizerScrollView.types.js.map +1 -1
- package/lib/components/VirtualizerScrollView/renderVirtualizerScrollView.js.map +1 -1
- package/lib/components/VirtualizerScrollView/useVirtualizerScrollView.js +39 -3
- package/lib/components/VirtualizerScrollView/useVirtualizerScrollView.js.map +1 -1
- package/lib/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.js.map +1 -1
- package/lib/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.types.js.map +1 -1
- package/lib/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamic.js +43 -5
- package/lib/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamic.js.map +1 -1
- package/lib/hooks/useResizeObserverRef.js +2 -0
- package/lib/hooks/useResizeObserverRef.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/utilities/ImperativeScrolling/imperativeScrolling.js +32 -0
- package/lib/utilities/ImperativeScrolling/imperativeScrolling.js.map +1 -0
- package/lib/utilities/ImperativeScrolling/imperativeScrolling.types.js +1 -0
- package/lib/utilities/ImperativeScrolling/imperativeScrolling.types.js.map +1 -0
- package/lib/utilities/ImperativeScrolling/imperativeScrollingDynamic.js +45 -0
- package/lib/utilities/ImperativeScrolling/imperativeScrollingDynamic.js.map +1 -0
- package/lib/utilities/ImperativeScrolling/index.js +3 -0
- package/lib/utilities/ImperativeScrolling/index.js.map +1 -0
- package/lib/utilities/index.js +1 -0
- package/lib/utilities/index.js.map +1 -1
- package/lib-commonjs/components/Virtualizer/useVirtualizer.js +83 -13
- package/lib-commonjs/components/Virtualizer/useVirtualizer.js.map +1 -1
- package/lib-commonjs/components/VirtualizerScrollView/useVirtualizerScrollView.js +38 -3
- package/lib-commonjs/components/VirtualizerScrollView/useVirtualizerScrollView.js.map +1 -1
- package/lib-commonjs/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamic.js +41 -4
- package/lib-commonjs/components/VirtualizerScrollViewDynamic/useVirtualizerScrollViewDynamic.js.map +1 -1
- package/lib-commonjs/hooks/useResizeObserverRef.js +2 -0
- package/lib-commonjs/hooks/useResizeObserverRef.js.map +1 -1
- package/lib-commonjs/index.js +2 -0
- package/lib-commonjs/index.js.map +1 -1
- package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrolling.js +40 -0
- package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrolling.js.map +1 -0
- package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrolling.types.js +4 -0
- package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrolling.types.js.map +1 -0
- package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrollingDynamic.js +53 -0
- package/lib-commonjs/utilities/ImperativeScrolling/imperativeScrollingDynamic.js.map +1 -0
- package/lib-commonjs/utilities/ImperativeScrolling/index.js +8 -0
- package/lib-commonjs/utilities/ImperativeScrolling/index.js.map +1 -0
- package/lib-commonjs/utilities/index.js +1 -0
- package/lib-commonjs/utilities/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -2,19 +2,55 @@ import * as React from 'react';
|
|
|
2
2
|
import { resolveShorthand, useMergedRefs } from '@fluentui/react-utilities';
|
|
3
3
|
import { useVirtualizer_unstable } from '../Virtualizer/useVirtualizer';
|
|
4
4
|
import { useStaticVirtualizerMeasure } from '../../Hooks';
|
|
5
|
+
import { useImperativeHandle } from 'react';
|
|
6
|
+
import { scrollToItemStatic } from '../../Utilities';
|
|
5
7
|
export function useVirtualizerScrollView_unstable(props) {
|
|
8
|
+
const { imperativeRef , itemSize , numItems , axis ='vertical' , reversed } = props;
|
|
6
9
|
var _props_axis;
|
|
7
10
|
const { virtualizerLength , bufferItems , bufferSize , scrollRef } = useStaticVirtualizerMeasure({
|
|
8
11
|
defaultItemSize: props.itemSize,
|
|
9
12
|
direction: (_props_axis = props.axis) !== null && _props_axis !== void 0 ? _props_axis : 'vertical'
|
|
10
13
|
});
|
|
11
|
-
const
|
|
14
|
+
const scrollViewRef = useMergedRefs(React.useRef(null), scrollRef);
|
|
15
|
+
const imperativeVirtualizerRef = React.useRef(null);
|
|
16
|
+
const scrollCallbackRef = React.useRef(null);
|
|
17
|
+
useImperativeHandle(imperativeRef, ()=>{
|
|
18
|
+
return {
|
|
19
|
+
scrollTo (index, behavior = 'auto', callback) {
|
|
20
|
+
var _imperativeVirtualizerRef_current;
|
|
21
|
+
scrollCallbackRef.current = callback !== null && callback !== void 0 ? callback : null;
|
|
22
|
+
(_imperativeVirtualizerRef_current = imperativeVirtualizerRef.current) === null || _imperativeVirtualizerRef_current === void 0 ? void 0 : _imperativeVirtualizerRef_current.setFlaggedIndex(index);
|
|
23
|
+
scrollToItemStatic({
|
|
24
|
+
index,
|
|
25
|
+
itemSize,
|
|
26
|
+
totalItems: numItems,
|
|
27
|
+
scrollViewRef,
|
|
28
|
+
axis,
|
|
29
|
+
reversed,
|
|
30
|
+
behavior
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}, [
|
|
35
|
+
axis,
|
|
36
|
+
scrollViewRef,
|
|
37
|
+
itemSize,
|
|
38
|
+
numItems,
|
|
39
|
+
reversed
|
|
40
|
+
]);
|
|
41
|
+
const handleRenderedIndex = (index)=>{
|
|
42
|
+
if (scrollCallbackRef.current) {
|
|
43
|
+
scrollCallbackRef.current(index);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
12
46
|
const virtualizerState = useVirtualizer_unstable({
|
|
13
47
|
...props,
|
|
14
48
|
virtualizerLength,
|
|
15
49
|
bufferItems,
|
|
16
50
|
bufferSize,
|
|
17
|
-
scrollViewRef
|
|
51
|
+
scrollViewRef,
|
|
52
|
+
onRenderedFlaggedIndex: handleRenderedIndex,
|
|
53
|
+
imperativeVirtualizerRef
|
|
18
54
|
});
|
|
19
55
|
return {
|
|
20
56
|
...virtualizerState,
|
|
@@ -25,7 +61,7 @@ export function useVirtualizerScrollView_unstable(props) {
|
|
|
25
61
|
container: resolveShorthand(props.container, {
|
|
26
62
|
required: true,
|
|
27
63
|
defaultProps: {
|
|
28
|
-
ref:
|
|
64
|
+
ref: scrollViewRef
|
|
29
65
|
}
|
|
30
66
|
})
|
|
31
67
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useVirtualizerScrollView.ts"],"sourcesContent":["import * as React from 'react';\nimport { resolveShorthand, useMergedRefs } from '@fluentui/react-utilities';\nimport { useVirtualizer_unstable } from '../Virtualizer/useVirtualizer';\nimport { VirtualizerScrollViewProps, VirtualizerScrollViewState } from './VirtualizerScrollView.types';\nimport { useStaticVirtualizerMeasure } from '../../Hooks';\n\nexport function useVirtualizerScrollView_unstable(props: VirtualizerScrollViewProps): VirtualizerScrollViewState {\n const { virtualizerLength, bufferItems, bufferSize, scrollRef } = useStaticVirtualizerMeasure({\n defaultItemSize: props.itemSize,\n direction: props.axis ?? 'vertical',\n });\n\n const
|
|
1
|
+
{"version":3,"sources":["useVirtualizerScrollView.ts"],"sourcesContent":["import * as React from 'react';\nimport { resolveShorthand, useMergedRefs } from '@fluentui/react-utilities';\nimport { useVirtualizer_unstable } from '../Virtualizer/useVirtualizer';\nimport type { VirtualizerScrollViewProps, VirtualizerScrollViewState } from './VirtualizerScrollView.types';\nimport { useStaticVirtualizerMeasure } from '../../Hooks';\nimport { useImperativeHandle } from 'react';\nimport { scrollToItemStatic } from '../../Utilities';\nimport type { VirtualizerDataRef } from '../Virtualizer/Virtualizer.types';\n\nexport function useVirtualizerScrollView_unstable(props: VirtualizerScrollViewProps): VirtualizerScrollViewState {\n const { imperativeRef, itemSize, numItems, axis = 'vertical', reversed } = props;\n const { virtualizerLength, bufferItems, bufferSize, scrollRef } = useStaticVirtualizerMeasure({\n defaultItemSize: props.itemSize,\n direction: props.axis ?? 'vertical',\n });\n\n const scrollViewRef = useMergedRefs(React.useRef<HTMLDivElement>(null), scrollRef) as React.RefObject<HTMLDivElement>;\n const imperativeVirtualizerRef = React.useRef<VirtualizerDataRef | null>(null);\n const scrollCallbackRef = React.useRef<null | ((index: number) => void)>(null);\n\n useImperativeHandle(\n imperativeRef,\n () => {\n return {\n scrollTo(index: number, behavior = 'auto', callback: ((index: number) => void) | undefined) {\n scrollCallbackRef.current = callback ?? null;\n imperativeVirtualizerRef.current?.setFlaggedIndex(index);\n scrollToItemStatic({\n index,\n itemSize,\n totalItems: numItems,\n scrollViewRef,\n axis,\n reversed,\n behavior,\n });\n },\n };\n },\n [axis, scrollViewRef, itemSize, numItems, reversed],\n );\n\n const handleRenderedIndex = (index: number) => {\n if (scrollCallbackRef.current) {\n scrollCallbackRef.current(index);\n }\n };\n\n const virtualizerState = useVirtualizer_unstable({\n ...props,\n virtualizerLength,\n bufferItems,\n bufferSize,\n scrollViewRef,\n onRenderedFlaggedIndex: handleRenderedIndex,\n imperativeVirtualizerRef,\n });\n\n return {\n ...virtualizerState,\n components: {\n ...virtualizerState.components,\n container: 'div',\n },\n container: resolveShorthand(props.container, {\n required: true,\n defaultProps: {\n ref: scrollViewRef as React.RefObject<HTMLDivElement>,\n },\n }),\n };\n}\n"],"names":["React","resolveShorthand","useMergedRefs","useVirtualizer_unstable","useStaticVirtualizerMeasure","useImperativeHandle","scrollToItemStatic","useVirtualizerScrollView_unstable","props","imperativeRef","itemSize","numItems","axis","reversed","virtualizerLength","bufferItems","bufferSize","scrollRef","defaultItemSize","direction","scrollViewRef","useRef","imperativeVirtualizerRef","scrollCallbackRef","scrollTo","index","behavior","callback","current","setFlaggedIndex","totalItems","handleRenderedIndex","virtualizerState","onRenderedFlaggedIndex","components","container","required","defaultProps","ref"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,gBAAgB,EAAEC,aAAa,QAAQ,4BAA4B;AAC5E,SAASC,uBAAuB,QAAQ,gCAAgC;AAExE,SAASC,2BAA2B,QAAQ,cAAc;AAC1D,SAASC,mBAAmB,QAAQ,QAAQ;AAC5C,SAASC,kBAAkB,QAAQ,kBAAkB;AAGrD,OAAO,SAASC,kCAAkCC,KAAiC,EAA8B;IAC/G,MAAM,EAAEC,cAAa,EAAEC,SAAQ,EAAEC,SAAQ,EAAEC,MAAO,WAAU,EAAEC,SAAQ,EAAE,GAAGL;QAG9DA;IAFb,MAAM,EAAEM,kBAAiB,EAAEC,YAAW,EAAEC,WAAU,EAAEC,UAAS,EAAE,GAAGb,4BAA4B;QAC5Fc,iBAAiBV,MAAME,QAAQ;QAC/BS,WAAWX,CAAAA,cAAAA,MAAMI,IAAI,cAAVJ,yBAAAA,cAAc,UAAU;IACrC;IAEA,MAAMY,gBAAgBlB,cAAcF,MAAMqB,MAAM,CAAiB,IAAI,GAAGJ;IACxE,MAAMK,2BAA2BtB,MAAMqB,MAAM,CAA4B,IAAI;IAC7E,MAAME,oBAAoBvB,MAAMqB,MAAM,CAAmC,IAAI;IAE7EhB,oBACEI,eACA,IAAM;QACJ,OAAO;YACLe,UAASC,KAAa,EAAEC,WAAW,MAAM,EAAEC,QAA+C,EAAE;oBAE1FL;gBADAC,kBAAkBK,OAAO,GAAGD,qBAAAA,sBAAAA,WAAY,IAAI;gBAC5CL,CAAAA,oCAAAA,yBAAyBM,OAAO,cAAhCN,+CAAAA,KAAAA,IAAAA,kCAAkCO,gBAAgBJ;gBAClDnB,mBAAmB;oBACjBmB;oBACAf;oBACAoB,YAAYnB;oBACZS;oBACAR;oBACAC;oBACAa;gBACF;YACF;QACF;IACF,GACA;QAACd;QAAMQ;QAAeV;QAAUC;QAAUE;KAAS;IAGrD,MAAMkB,sBAAsB,CAACN,QAAkB;QAC7C,IAAIF,kBAAkBK,OAAO,EAAE;YAC7BL,kBAAkBK,OAAO,CAACH;QAC5B,CAAC;IACH;IAEA,MAAMO,mBAAmB7B,wBAAwB;QAC/C,GAAGK,KAAK;QACRM;QACAC;QACAC;QACAI;QACAa,wBAAwBF;QACxBT;IACF;IAEA,OAAO;QACL,GAAGU,gBAAgB;QACnBE,YAAY;YACV,GAAGF,iBAAiBE,UAAU;YAC9BC,WAAW;QACb;QACAA,WAAWlC,iBAAiBO,MAAM2B,SAAS,EAAE;YAC3CC,UAAU,IAAI;YACdC,cAAc;gBACZC,KAAKlB;YACP;QACF;IACF;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["VirtualizerScrollViewDynamic.ts"],"sourcesContent":["import { VirtualizerScrollViewDynamicProps } from './VirtualizerScrollViewDynamic.types';\nimport { useVirtualizerScrollViewDynamic_unstable } from './useVirtualizerScrollViewDynamic';\nimport { renderVirtualizerScrollViewDynamic_unstable } from './renderVirtualizerScrollViewDynamic';\nimport { useVirtualizerScrollViewDynamicStyles_unstable } from './useVirtualizerScrollViewDynamicStyles.styles';\nimport * as React from 'react';\nimport { VirtualizerContextProps } from '../../Utilities';\n\n/**\n * Virtualizer ScrollView\n */\n\nexport const VirtualizerScrollViewDynamic: React.FC<VirtualizerScrollViewDynamicProps> = (\n props: VirtualizerScrollViewDynamicProps,\n context: React.Context<VirtualizerContextProps>,\n) => {\n const state = useVirtualizerScrollViewDynamic_unstable(props);\n\n useVirtualizerScrollViewDynamicStyles_unstable(state);\n\n return renderVirtualizerScrollViewDynamic_unstable(state);\n};\n\nVirtualizerScrollViewDynamic.displayName = 'VirtualizerScrollViewDynamic';\n"],"names":["useVirtualizerScrollViewDynamic_unstable","renderVirtualizerScrollViewDynamic_unstable","useVirtualizerScrollViewDynamicStyles_unstable","React","VirtualizerScrollViewDynamic","props","context","state","displayName"],"mappings":"AACA,SAASA,wCAAwC,QAAQ,oCAAoC;AAC7F,SAASC,2CAA2C,QAAQ,uCAAuC;AACnG,SAASC,8CAA8C,QAAQ,iDAAiD;AAChH,YAAYC,WAAW,QAAQ;AAG/B;;CAEC,GAED,OAAO,MAAMC,+BAA4E,CACvFC,OACAC,UACG;IACH,MAAMC,QAAQP,yCAAyCK;IAEvDH,+CAA+CK;IAE/C,OAAON,4CAA4CM;AACrD,EAAE;AAEFH,6BAA6BI,WAAW,GAAG"}
|
|
1
|
+
{"version":3,"sources":["VirtualizerScrollViewDynamic.ts"],"sourcesContent":["import type { VirtualizerScrollViewDynamicProps } from './VirtualizerScrollViewDynamic.types';\nimport { useVirtualizerScrollViewDynamic_unstable } from './useVirtualizerScrollViewDynamic';\nimport { renderVirtualizerScrollViewDynamic_unstable } from './renderVirtualizerScrollViewDynamic';\nimport { useVirtualizerScrollViewDynamicStyles_unstable } from './useVirtualizerScrollViewDynamicStyles.styles';\nimport * as React from 'react';\nimport type { VirtualizerContextProps } from '../../Utilities';\n\n/**\n * Virtualizer ScrollView\n */\n\nexport const VirtualizerScrollViewDynamic: React.FC<VirtualizerScrollViewDynamicProps> = (\n props: VirtualizerScrollViewDynamicProps,\n context: React.Context<VirtualizerContextProps>,\n) => {\n const state = useVirtualizerScrollViewDynamic_unstable(props);\n\n useVirtualizerScrollViewDynamicStyles_unstable(state);\n\n return renderVirtualizerScrollViewDynamic_unstable(state);\n};\n\nVirtualizerScrollViewDynamic.displayName = 'VirtualizerScrollViewDynamic';\n"],"names":["useVirtualizerScrollViewDynamic_unstable","renderVirtualizerScrollViewDynamic_unstable","useVirtualizerScrollViewDynamicStyles_unstable","React","VirtualizerScrollViewDynamic","props","context","state","displayName"],"mappings":"AACA,SAASA,wCAAwC,QAAQ,oCAAoC;AAC7F,SAASC,2CAA2C,QAAQ,uCAAuC;AACnG,SAASC,8CAA8C,QAAQ,iDAAiD;AAChH,YAAYC,WAAW,QAAQ;AAG/B;;CAEC,GAED,OAAO,MAAMC,+BAA4E,CACvFC,OACAC,UACG;IACH,MAAMC,QAAQP,yCAAyCK;IAEvDH,+CAA+CK;IAE/C,OAAON,4CAA4CM;AACrD,EAAE;AAEFH,6BAA6BI,WAAW,GAAG"}
|
package/lib/components/VirtualizerScrollViewDynamic/VirtualizerScrollViewDynamic.types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["VirtualizerScrollViewDynamic.types.ts"],"sourcesContent":["import { ComponentProps, ComponentState } from '@fluentui/react-utilities';\nimport {\n VirtualizerConfigProps,\n VirtualizerConfigState,\n VirtualizerChildRenderFunction,\n} from '../Virtualizer/Virtualizer.types';\n\nimport { VirtualizerScrollViewSlots } from '../VirtualizerScrollView/VirtualizerScrollView.types';\n\nexport type VirtualizerScrollViewDynamicSlots = VirtualizerScrollViewSlots;\n\nexport type VirtualizerScrollViewDynamicProps = ComponentProps<Partial<VirtualizerScrollViewDynamicSlots>> &\n Partial<Omit<VirtualizerConfigProps, 'itemSize' | 'numItems' | 'getItemSize' | 'children'>> & {\n /**\n * Set as the minimum item size.\n * Axis: 'vertical' = Height\n * Axis: 'horizontal' = Width\n */\n itemSize: number;\n /**\n * Callback for acquiring size of individual items\n * @param index - the index of the requested size's child\n */\n getItemSize: (index: number) => number;\n /**\n * The total number of items to be virtualized.\n */\n numItems: number;\n /**\n * Child render function.\n * Iteratively called to return current virtualizer DOM children.\n * Will act as a row or column indexer depending on Virtualizer settings.\n */\n children: VirtualizerChildRenderFunction;\n };\n\nexport type VirtualizerScrollViewDynamicState = ComponentState<VirtualizerScrollViewDynamicSlots> &\n VirtualizerConfigState;\n"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"sources":["VirtualizerScrollViewDynamic.types.ts"],"sourcesContent":["import type { ComponentProps, ComponentState } from '@fluentui/react-utilities';\nimport type {\n VirtualizerConfigProps,\n VirtualizerConfigState,\n VirtualizerChildRenderFunction,\n} from '../Virtualizer/Virtualizer.types';\n\nimport type { VirtualizerScrollViewSlots } from '../VirtualizerScrollView/VirtualizerScrollView.types';\nimport type { RefObject } from 'react';\nimport type { ScrollToInterface } from '../../Utilities';\n\nexport type VirtualizerScrollViewDynamicSlots = VirtualizerScrollViewSlots;\n\nexport type VirtualizerScrollViewDynamicProps = ComponentProps<Partial<VirtualizerScrollViewDynamicSlots>> &\n Partial<Omit<VirtualizerConfigProps, 'itemSize' | 'numItems' | 'getItemSize' | 'children' | 'flagIndex'>> & {\n /**\n * Set as the minimum item size.\n * Axis: 'vertical' = Height\n * Axis: 'horizontal' = Width\n */\n itemSize: number;\n /**\n * Callback for acquiring size of individual items\n * @param index - the index of the requested size's child\n */\n getItemSize: (index: number) => number;\n /**\n * The total number of items to be virtualized.\n */\n numItems: number;\n /**\n * Child render function.\n * Iteratively called to return current virtualizer DOM children.\n * Will act as a row or column indexer depending on Virtualizer settings.\n */\n children: VirtualizerChildRenderFunction;\n /**\n * Imperative ref contains our scrollTo index functionality for user control.\n */\n imperativeRef?: RefObject<ScrollToInterface>;\n };\n\nexport type VirtualizerScrollViewDynamicState = ComponentState<VirtualizerScrollViewDynamicSlots> &\n VirtualizerConfigState;\n"],"names":[],"mappings":"AAAA,WA2CyB"}
|
|
@@ -2,9 +2,11 @@ import * as React from 'react';
|
|
|
2
2
|
import { resolveShorthand, useMergedRefs } from '@fluentui/react-utilities';
|
|
3
3
|
import { useVirtualizer_unstable } from '../Virtualizer/useVirtualizer';
|
|
4
4
|
import { useDynamicVirtualizerMeasure } from '../../Hooks';
|
|
5
|
-
import { useVirtualizerContextState_unstable } from '../../Utilities';
|
|
5
|
+
import { useVirtualizerContextState_unstable, scrollToItemDynamic } from '../../Utilities';
|
|
6
|
+
import { useImperativeHandle } from 'react';
|
|
6
7
|
export function useVirtualizerScrollViewDynamic_unstable(props) {
|
|
7
8
|
const contextState = useVirtualizerContextState_unstable(props.virtualizerContext);
|
|
9
|
+
const { imperativeRef , axis ='vertical' , reversed , imperativeVirtualizerRef } = props;
|
|
8
10
|
var _props_axis, _contextState_contextIndex;
|
|
9
11
|
const { virtualizerLength , bufferItems , bufferSize , scrollRef } = useDynamicVirtualizerMeasure({
|
|
10
12
|
defaultItemSize: props.itemSize,
|
|
@@ -13,14 +15,50 @@ export function useVirtualizerScrollViewDynamic_unstable(props) {
|
|
|
13
15
|
currentIndex: (_contextState_contextIndex = contextState === null || contextState === void 0 ? void 0 : contextState.contextIndex) !== null && _contextState_contextIndex !== void 0 ? _contextState_contextIndex : 0,
|
|
14
16
|
numItems: props.numItems
|
|
15
17
|
});
|
|
16
|
-
const
|
|
18
|
+
const scrollViewRef = useMergedRefs(React.useRef(null), scrollRef);
|
|
19
|
+
const scrollCallbackRef = React.useRef(null);
|
|
20
|
+
const _imperativeVirtualizerRef = useMergedRefs(React.useRef(null), imperativeVirtualizerRef);
|
|
21
|
+
useImperativeHandle(imperativeRef, ()=>{
|
|
22
|
+
return {
|
|
23
|
+
scrollTo (index, behavior = 'auto', callback) {
|
|
24
|
+
scrollCallbackRef.current = callback !== null && callback !== void 0 ? callback : null;
|
|
25
|
+
if (_imperativeVirtualizerRef.current) {
|
|
26
|
+
var _imperativeVirtualizerRef_current;
|
|
27
|
+
const progressiveSizes = _imperativeVirtualizerRef.current.progressiveSizes.current;
|
|
28
|
+
const totalSize = progressiveSizes && (progressiveSizes === null || progressiveSizes === void 0 ? void 0 : progressiveSizes.length) > 0 ? progressiveSizes[Math.max(progressiveSizes.length - 1, 0)] : 0;
|
|
29
|
+
_imperativeVirtualizerRef.current.setFlaggedIndex(index);
|
|
30
|
+
scrollToItemDynamic({
|
|
31
|
+
index,
|
|
32
|
+
itemSizes: (_imperativeVirtualizerRef_current = _imperativeVirtualizerRef.current) === null || _imperativeVirtualizerRef_current === void 0 ? void 0 : _imperativeVirtualizerRef_current.nodeSizes,
|
|
33
|
+
totalSize,
|
|
34
|
+
scrollViewRef,
|
|
35
|
+
axis,
|
|
36
|
+
reversed,
|
|
37
|
+
behavior
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}, [
|
|
43
|
+
axis,
|
|
44
|
+
scrollViewRef,
|
|
45
|
+
reversed,
|
|
46
|
+
_imperativeVirtualizerRef
|
|
47
|
+
]);
|
|
48
|
+
const handleRenderedIndex = (index)=>{
|
|
49
|
+
if (scrollCallbackRef.current) {
|
|
50
|
+
scrollCallbackRef.current(index);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
17
53
|
const virtualizerState = useVirtualizer_unstable({
|
|
18
54
|
...props,
|
|
19
55
|
virtualizerLength,
|
|
20
56
|
bufferItems,
|
|
21
57
|
bufferSize,
|
|
22
|
-
scrollViewRef
|
|
23
|
-
virtualizerContext: contextState
|
|
58
|
+
scrollViewRef,
|
|
59
|
+
virtualizerContext: contextState,
|
|
60
|
+
imperativeVirtualizerRef: _imperativeVirtualizerRef,
|
|
61
|
+
onRenderedFlaggedIndex: handleRenderedIndex
|
|
24
62
|
});
|
|
25
63
|
return {
|
|
26
64
|
...virtualizerState,
|
|
@@ -31,7 +69,7 @@ export function useVirtualizerScrollViewDynamic_unstable(props) {
|
|
|
31
69
|
container: resolveShorthand(props.container, {
|
|
32
70
|
required: true,
|
|
33
71
|
defaultProps: {
|
|
34
|
-
ref:
|
|
72
|
+
ref: scrollViewRef
|
|
35
73
|
}
|
|
36
74
|
})
|
|
37
75
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useVirtualizerScrollViewDynamic.ts"],"sourcesContent":["import * as React from 'react';\nimport { resolveShorthand, useMergedRefs } from '@fluentui/react-utilities';\nimport { useVirtualizer_unstable } from '../Virtualizer/useVirtualizer';\nimport {\n VirtualizerScrollViewDynamicProps,\n VirtualizerScrollViewDynamicState,\n} from './VirtualizerScrollViewDynamic.types';\nimport { useDynamicVirtualizerMeasure } from '../../Hooks';\nimport { useVirtualizerContextState_unstable } from '../../Utilities';\n\nexport function useVirtualizerScrollViewDynamic_unstable(\n props: VirtualizerScrollViewDynamicProps,\n): VirtualizerScrollViewDynamicState {\n const contextState = useVirtualizerContextState_unstable(props.virtualizerContext);\n\n const { virtualizerLength, bufferItems, bufferSize, scrollRef } = useDynamicVirtualizerMeasure({\n defaultItemSize: props.itemSize,\n direction: props.axis ?? 'vertical',\n getItemSize: props.getItemSize,\n currentIndex: contextState?.contextIndex ?? 0,\n numItems: props.numItems,\n });\n\n const
|
|
1
|
+
{"version":3,"sources":["useVirtualizerScrollViewDynamic.ts"],"sourcesContent":["import * as React from 'react';\nimport { resolveShorthand, useMergedRefs } from '@fluentui/react-utilities';\nimport { useVirtualizer_unstable } from '../Virtualizer/useVirtualizer';\nimport type {\n VirtualizerScrollViewDynamicProps,\n VirtualizerScrollViewDynamicState,\n} from './VirtualizerScrollViewDynamic.types';\nimport { useDynamicVirtualizerMeasure } from '../../Hooks';\nimport { useVirtualizerContextState_unstable, scrollToItemDynamic } from '../../Utilities';\nimport type { VirtualizerDataRef } from '../Virtualizer/Virtualizer.types';\nimport { useImperativeHandle } from 'react';\n\nexport function useVirtualizerScrollViewDynamic_unstable(\n props: VirtualizerScrollViewDynamicProps,\n): VirtualizerScrollViewDynamicState {\n const contextState = useVirtualizerContextState_unstable(props.virtualizerContext);\n const { imperativeRef, axis = 'vertical', reversed, imperativeVirtualizerRef } = props;\n\n const { virtualizerLength, bufferItems, bufferSize, scrollRef } = useDynamicVirtualizerMeasure({\n defaultItemSize: props.itemSize,\n direction: props.axis ?? 'vertical',\n getItemSize: props.getItemSize,\n currentIndex: contextState?.contextIndex ?? 0,\n numItems: props.numItems,\n });\n\n const scrollViewRef = useMergedRefs(React.useRef<HTMLDivElement>(null), scrollRef) as React.RefObject<HTMLDivElement>;\n const scrollCallbackRef = React.useRef<null | ((index: number) => void)>(null);\n\n const _imperativeVirtualizerRef = useMergedRefs(React.useRef<VirtualizerDataRef>(null), imperativeVirtualizerRef);\n\n useImperativeHandle(\n imperativeRef,\n () => {\n return {\n scrollTo(index: number, behavior = 'auto', callback: undefined | ((index: number) => void)) {\n scrollCallbackRef.current = callback ?? null;\n if (_imperativeVirtualizerRef.current) {\n const progressiveSizes = _imperativeVirtualizerRef.current.progressiveSizes.current;\n const totalSize =\n progressiveSizes && progressiveSizes?.length > 0\n ? progressiveSizes[Math.max(progressiveSizes.length - 1, 0)]\n : 0;\n\n _imperativeVirtualizerRef.current.setFlaggedIndex(index);\n scrollToItemDynamic({\n index,\n itemSizes: _imperativeVirtualizerRef.current?.nodeSizes,\n totalSize,\n scrollViewRef,\n axis,\n reversed,\n behavior,\n });\n }\n },\n };\n },\n [axis, scrollViewRef, reversed, _imperativeVirtualizerRef],\n );\n\n const handleRenderedIndex = (index: number) => {\n if (scrollCallbackRef.current) {\n scrollCallbackRef.current(index);\n }\n };\n\n const virtualizerState = useVirtualizer_unstable({\n ...props,\n virtualizerLength,\n bufferItems,\n bufferSize,\n scrollViewRef,\n virtualizerContext: contextState,\n imperativeVirtualizerRef: _imperativeVirtualizerRef,\n onRenderedFlaggedIndex: handleRenderedIndex,\n });\n\n return {\n ...virtualizerState,\n components: {\n ...virtualizerState.components,\n container: 'div',\n },\n container: resolveShorthand(props.container, {\n required: true,\n defaultProps: {\n ref: scrollViewRef,\n },\n }),\n };\n}\n"],"names":["React","resolveShorthand","useMergedRefs","useVirtualizer_unstable","useDynamicVirtualizerMeasure","useVirtualizerContextState_unstable","scrollToItemDynamic","useImperativeHandle","useVirtualizerScrollViewDynamic_unstable","props","contextState","virtualizerContext","imperativeRef","axis","reversed","imperativeVirtualizerRef","virtualizerLength","bufferItems","bufferSize","scrollRef","defaultItemSize","itemSize","direction","getItemSize","currentIndex","contextIndex","numItems","scrollViewRef","useRef","scrollCallbackRef","_imperativeVirtualizerRef","scrollTo","index","behavior","callback","current","progressiveSizes","totalSize","length","Math","max","setFlaggedIndex","itemSizes","nodeSizes","handleRenderedIndex","virtualizerState","onRenderedFlaggedIndex","components","container","required","defaultProps","ref"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,gBAAgB,EAAEC,aAAa,QAAQ,4BAA4B;AAC5E,SAASC,uBAAuB,QAAQ,gCAAgC;AAKxE,SAASC,4BAA4B,QAAQ,cAAc;AAC3D,SAASC,mCAAmC,EAAEC,mBAAmB,QAAQ,kBAAkB;AAE3F,SAASC,mBAAmB,QAAQ,QAAQ;AAE5C,OAAO,SAASC,yCACdC,KAAwC,EACL;IACnC,MAAMC,eAAeL,oCAAoCI,MAAME,kBAAkB;IACjF,MAAM,EAAEC,cAAa,EAAEC,MAAO,WAAU,EAAEC,SAAQ,EAAEC,yBAAwB,EAAE,GAAGN;QAIpEA,aAEGC;IAJhB,MAAM,EAAEM,kBAAiB,EAAEC,YAAW,EAAEC,WAAU,EAAEC,UAAS,EAAE,GAAGf,6BAA6B;QAC7FgB,iBAAiBX,MAAMY,QAAQ;QAC/BC,WAAWb,CAAAA,cAAAA,MAAMI,IAAI,cAAVJ,yBAAAA,cAAc,UAAU;QACnCc,aAAad,MAAMc,WAAW;QAC9BC,cAAcd,CAAAA,6BAAAA,yBAAAA,0BAAAA,KAAAA,IAAAA,aAAce,YAAY,cAA1Bf,wCAAAA,6BAA8B,CAAC;QAC7CgB,UAAUjB,MAAMiB,QAAQ;IAC1B;IAEA,MAAMC,gBAAgBzB,cAAcF,MAAM4B,MAAM,CAAiB,IAAI,GAAGT;IACxE,MAAMU,oBAAoB7B,MAAM4B,MAAM,CAAmC,IAAI;IAE7E,MAAME,4BAA4B5B,cAAcF,MAAM4B,MAAM,CAAqB,IAAI,GAAGb;IAExFR,oBACEK,eACA,IAAM;QACJ,OAAO;YACLmB,UAASC,KAAa,EAAEC,WAAW,MAAM,EAAEC,QAA+C,EAAE;gBAC1FL,kBAAkBM,OAAO,GAAGD,qBAAAA,sBAAAA,WAAY,IAAI;gBAC5C,IAAIJ,0BAA0BK,OAAO,EAAE;wBAUxBL;oBATb,MAAMM,mBAAmBN,0BAA0BK,OAAO,CAACC,gBAAgB,CAACD,OAAO;oBACnF,MAAME,YACJD,oBAAoBA,CAAAA,6BAAAA,8BAAAA,KAAAA,IAAAA,iBAAkBE,MAAM,AAAD,IAAI,IAC3CF,gBAAgB,CAACG,KAAKC,GAAG,CAACJ,iBAAiBE,MAAM,GAAG,GAAG,GAAG,GAC1D,CAAC;oBAEPR,0BAA0BK,OAAO,CAACM,eAAe,CAACT;oBAClD1B,oBAAoB;wBAClB0B;wBACAU,WAAWZ,CAAAA,oCAAAA,0BAA0BK,OAAO,cAAjCL,+CAAAA,KAAAA,IAAAA,kCAAmCa,SAAS;wBACvDN;wBACAV;wBACAd;wBACAC;wBACAmB;oBACF;gBACF,CAAC;YACH;QACF;IACF,GACA;QAACpB;QAAMc;QAAeb;QAAUgB;KAA0B;IAG5D,MAAMc,sBAAsB,CAACZ,QAAkB;QAC7C,IAAIH,kBAAkBM,OAAO,EAAE;YAC7BN,kBAAkBM,OAAO,CAACH;QAC5B,CAAC;IACH;IAEA,MAAMa,mBAAmB1C,wBAAwB;QAC/C,GAAGM,KAAK;QACRO;QACAC;QACAC;QACAS;QACAhB,oBAAoBD;QACpBK,0BAA0Be;QAC1BgB,wBAAwBF;IAC1B;IAEA,OAAO;QACL,GAAGC,gBAAgB;QACnBE,YAAY;YACV,GAAGF,iBAAiBE,UAAU;YAC9BC,WAAW;QACb;QACAA,WAAW/C,iBAAiBQ,MAAMuC,SAAS,EAAE;YAC3CC,UAAU,IAAI;YACdC,cAAc;gBACZC,KAAKxB;YACP;QACF;IACF;AACF,CAAC"}
|
|
@@ -13,6 +13,7 @@ import { canUseDOM } from '@fluentui/react-utilities';
|
|
|
13
13
|
const [resizeObserver, setResizeObserver] = React.useState(()=>canUseDOM() ? new ResizeObserver(handleResize) : undefined);
|
|
14
14
|
React.useEffect(()=>{
|
|
15
15
|
// Update our state when resizeCallback changes
|
|
16
|
+
container.current = null;
|
|
16
17
|
resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();
|
|
17
18
|
setResizeObserver(canUseDOM() ? new ResizeObserver(handleResize) : undefined);
|
|
18
19
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -21,6 +22,7 @@ import { canUseDOM } from '@fluentui/react-utilities';
|
|
|
21
22
|
]);
|
|
22
23
|
React.useEffect(()=>{
|
|
23
24
|
return ()=>{
|
|
25
|
+
container.current = null;
|
|
24
26
|
resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();
|
|
25
27
|
};
|
|
26
28
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useResizeObserverRef.ts"],"sourcesContent":["import * as React from 'react';\nimport { debounce } from '../utilities/debounce';\nimport { canUseDOM } from '@fluentui/react-utilities';\nimport { ResizeCallbackWithRef } from './hooks.types';\n\n/**\n * useResizeObserverRef_unstable simplifies resize observer connection and ensures debounce/cleanup\n */\nexport const useResizeObserverRef_unstable = (resizeCallback: ResizeCallbackWithRef) => {\n const container = React.useRef<HTMLElement | null>(null);\n // the handler for resize observer\n const handleResize = debounce((entries: ResizeObserverEntry[], observer: ResizeObserver) => {\n resizeCallback(entries, observer, container);\n });\n\n // Keep the reference of ResizeObserver in the state, as it should live through renders\n const [resizeObserver, setResizeObserver] = React.useState(() =>\n canUseDOM() ? new ResizeObserver(handleResize) : undefined,\n );\n\n React.useEffect(() => {\n // Update our state when resizeCallback changes\n resizeObserver?.disconnect();\n setResizeObserver(canUseDOM() ? new ResizeObserver(handleResize) : undefined);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [resizeCallback]);\n\n React.useEffect(() => {\n return () => {\n resizeObserver?.disconnect();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const scrollRef = React.useCallback(\n (instance: HTMLElement | HTMLDivElement | null) => {\n if (container.current !== instance) {\n if (container.current) {\n resizeObserver?.unobserve(container.current);\n }\n\n container.current = instance;\n if (container.current) {\n resizeObserver?.observe(container.current);\n }\n }\n },\n [resizeObserver],\n );\n\n return scrollRef;\n};\n"],"names":["React","debounce","canUseDOM","useResizeObserverRef_unstable","resizeCallback","container","useRef","handleResize","entries","observer","resizeObserver","setResizeObserver","useState","ResizeObserver","undefined","useEffect","disconnect","scrollRef","useCallback","instance","
|
|
1
|
+
{"version":3,"sources":["useResizeObserverRef.ts"],"sourcesContent":["import * as React from 'react';\nimport { debounce } from '../utilities/debounce';\nimport { canUseDOM } from '@fluentui/react-utilities';\nimport { ResizeCallbackWithRef } from './hooks.types';\n\n/**\n * useResizeObserverRef_unstable simplifies resize observer connection and ensures debounce/cleanup\n */\nexport const useResizeObserverRef_unstable = (resizeCallback: ResizeCallbackWithRef) => {\n const container = React.useRef<HTMLElement | null>(null);\n // the handler for resize observer\n const handleResize = debounce((entries: ResizeObserverEntry[], observer: ResizeObserver) => {\n resizeCallback(entries, observer, container);\n });\n\n // Keep the reference of ResizeObserver in the state, as it should live through renders\n const [resizeObserver, setResizeObserver] = React.useState(() =>\n canUseDOM() ? new ResizeObserver(handleResize) : undefined,\n );\n\n React.useEffect(() => {\n // Update our state when resizeCallback changes\n container.current = null;\n resizeObserver?.disconnect();\n setResizeObserver(canUseDOM() ? new ResizeObserver(handleResize) : undefined);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [resizeCallback]);\n\n React.useEffect(() => {\n return () => {\n container.current = null;\n resizeObserver?.disconnect();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const scrollRef = React.useCallback(\n (instance: HTMLElement | HTMLDivElement | null) => {\n if (container.current !== instance) {\n if (container.current) {\n resizeObserver?.unobserve(container.current);\n }\n\n container.current = instance;\n if (container.current) {\n resizeObserver?.observe(container.current);\n }\n }\n },\n [resizeObserver],\n );\n\n return scrollRef;\n};\n"],"names":["React","debounce","canUseDOM","useResizeObserverRef_unstable","resizeCallback","container","useRef","handleResize","entries","observer","resizeObserver","setResizeObserver","useState","ResizeObserver","undefined","useEffect","current","disconnect","scrollRef","useCallback","instance","unobserve","observe"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,QAAQ,QAAQ,wBAAwB;AACjD,SAASC,SAAS,QAAQ,4BAA4B;AAGtD;;CAEC,GACD,OAAO,MAAMC,gCAAgC,CAACC,iBAA0C;IACtF,MAAMC,YAAYL,MAAMM,MAAM,CAAqB,IAAI;IACvD,kCAAkC;IAClC,MAAMC,eAAeN,SAAS,CAACO,SAAgCC,WAA6B;QAC1FL,eAAeI,SAASC,UAAUJ;IACpC;IAEA,uFAAuF;IACvF,MAAM,CAACK,gBAAgBC,kBAAkB,GAAGX,MAAMY,QAAQ,CAAC,IACzDV,cAAc,IAAIW,eAAeN,gBAAgBO,SAAS;IAG5Dd,MAAMe,SAAS,CAAC,IAAM;QACpB,+CAA+C;QAC/CV,UAAUW,OAAO,GAAG,IAAI;QACxBN,2BAAAA,4BAAAA,KAAAA,IAAAA,eAAgBO,UAAU;QAC1BN,kBAAkBT,cAAc,IAAIW,eAAeN,gBAAgBO,SAAS;IAC5E,uDAAuD;IACzD,GAAG;QAACV;KAAe;IAEnBJ,MAAMe,SAAS,CAAC,IAAM;QACpB,OAAO,IAAM;YACXV,UAAUW,OAAO,GAAG,IAAI;YACxBN,2BAAAA,4BAAAA,KAAAA,IAAAA,eAAgBO,UAAU;QAC5B;IACA,uDAAuD;IACzD,GAAG,EAAE;IAEL,MAAMC,YAAYlB,MAAMmB,WAAW,CACjC,CAACC,WAAkD;QACjD,IAAIf,UAAUW,OAAO,KAAKI,UAAU;YAClC,IAAIf,UAAUW,OAAO,EAAE;gBACrBN,2BAAAA,4BAAAA,KAAAA,IAAAA,eAAgBW,SAAS,CAAChB,UAAUW,OAAO;YAC7C,CAAC;YAEDX,UAAUW,OAAO,GAAGI;YACpB,IAAIf,UAAUW,OAAO,EAAE;gBACrBN,2BAAAA,4BAAAA,KAAAA,IAAAA,eAAgBY,OAAO,CAACjB,UAAUW,OAAO;YAC3C,CAAC;QACH,CAAC;IACH,GACA;QAACN;KAAe;IAGlB,OAAOQ;AACT,EAAE"}
|
package/lib/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { Virtualizer, virtualizerClassNames, useVirtualizer_unstable, renderVirtualizer_unstable, useVirtualizerStyles_unstable } from './Virtualizer';
|
|
2
2
|
export { useIntersectionObserver, useStaticVirtualizerMeasure, useDynamicVirtualizerMeasure, useResizeObserverRef_unstable } from './Hooks';
|
|
3
|
-
export { VirtualizerContextProvider, useVirtualizerContext_unstable } from './Utilities';
|
|
3
|
+
export { VirtualizerContextProvider, useVirtualizerContext_unstable, scrollToItemStatic, scrollToItemDynamic } from './Utilities';
|
|
4
4
|
export { VirtualizerScrollView, virtualizerScrollViewClassNames, useVirtualizerScrollView_unstable, renderVirtualizerScrollView_unstable, useVirtualizerScrollViewStyles_unstable } from './VirtualizerScrollView';
|
|
5
5
|
export { VirtualizerScrollViewDynamic, virtualizerScrollViewDynamicClassNames, useVirtualizerScrollViewDynamic_unstable, renderVirtualizerScrollViewDynamic_unstable, useVirtualizerScrollViewDynamicStyles_unstable } from './VirtualizerScrollViewDynamic';
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"sourcesContent":["export {\n Virtualizer,\n virtualizerClassNames,\n useVirtualizer_unstable,\n renderVirtualizer_unstable,\n useVirtualizerStyles_unstable,\n} from './Virtualizer';\nexport type {\n VirtualizerProps,\n VirtualizerState,\n VirtualizerSlots,\n VirtualizerChildRenderFunction,\n} from './Virtualizer';\n\nexport {\n useIntersectionObserver,\n useStaticVirtualizerMeasure,\n useDynamicVirtualizerMeasure,\n useResizeObserverRef_unstable,\n} from './Hooks';\n\nexport type { ResizeCallbackWithRef, VirtualizerMeasureDynamicProps, VirtualizerMeasureProps } from './Hooks';\n\nexport {
|
|
1
|
+
{"version":3,"sources":["index.ts"],"sourcesContent":["export {\n Virtualizer,\n virtualizerClassNames,\n useVirtualizer_unstable,\n renderVirtualizer_unstable,\n useVirtualizerStyles_unstable,\n} from './Virtualizer';\n\nexport type {\n VirtualizerProps,\n VirtualizerState,\n VirtualizerSlots,\n VirtualizerChildRenderFunction,\n VirtualizerDataRef,\n} from './Virtualizer';\n\nexport {\n useIntersectionObserver,\n useStaticVirtualizerMeasure,\n useDynamicVirtualizerMeasure,\n useResizeObserverRef_unstable,\n} from './Hooks';\n\nexport type { ResizeCallbackWithRef, VirtualizerMeasureDynamicProps, VirtualizerMeasureProps } from './Hooks';\n\nexport type { ScrollToItemDynamicParams, ScrollToItemStaticParams, ScrollToInterface } from './Utilities';\n\nexport {\n VirtualizerContextProvider,\n useVirtualizerContext_unstable,\n scrollToItemStatic,\n scrollToItemDynamic,\n} from './Utilities';\n\nexport type { VirtualizerContextProps } from './Utilities';\n\nexport {\n VirtualizerScrollView,\n virtualizerScrollViewClassNames,\n useVirtualizerScrollView_unstable,\n renderVirtualizerScrollView_unstable,\n useVirtualizerScrollViewStyles_unstable,\n} from './VirtualizerScrollView';\n\nexport type {\n VirtualizerScrollViewProps,\n VirtualizerScrollViewState,\n VirtualizerScrollViewSlots,\n} from './VirtualizerScrollView';\n\nexport {\n VirtualizerScrollViewDynamic,\n virtualizerScrollViewDynamicClassNames,\n useVirtualizerScrollViewDynamic_unstable,\n renderVirtualizerScrollViewDynamic_unstable,\n useVirtualizerScrollViewDynamicStyles_unstable,\n} from './VirtualizerScrollViewDynamic';\n\nexport type {\n VirtualizerScrollViewDynamicProps,\n VirtualizerScrollViewDynamicState,\n VirtualizerScrollViewDynamicSlots,\n} from './VirtualizerScrollViewDynamic';\n"],"names":["Virtualizer","virtualizerClassNames","useVirtualizer_unstable","renderVirtualizer_unstable","useVirtualizerStyles_unstable","useIntersectionObserver","useStaticVirtualizerMeasure","useDynamicVirtualizerMeasure","useResizeObserverRef_unstable","VirtualizerContextProvider","useVirtualizerContext_unstable","scrollToItemStatic","scrollToItemDynamic","VirtualizerScrollView","virtualizerScrollViewClassNames","useVirtualizerScrollView_unstable","renderVirtualizerScrollView_unstable","useVirtualizerScrollViewStyles_unstable","VirtualizerScrollViewDynamic","virtualizerScrollViewDynamicClassNames","useVirtualizerScrollViewDynamic_unstable","renderVirtualizerScrollViewDynamic_unstable","useVirtualizerScrollViewDynamicStyles_unstable"],"mappings":"AAAA,SACEA,WAAW,EACXC,qBAAqB,EACrBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,6BAA6B,QACxB,gBAAgB;AAUvB,SACEC,uBAAuB,EACvBC,2BAA2B,EAC3BC,4BAA4B,EAC5BC,6BAA6B,QACxB,UAAU;AAMjB,SACEC,0BAA0B,EAC1BC,8BAA8B,EAC9BC,kBAAkB,EAClBC,mBAAmB,QACd,cAAc;AAIrB,SACEC,qBAAqB,EACrBC,+BAA+B,EAC/BC,iCAAiC,EACjCC,oCAAoC,EACpCC,uCAAuC,QAClC,0BAA0B;AAQjC,SACEC,4BAA4B,EAC5BC,sCAAsC,EACtCC,wCAAwC,EACxCC,2CAA2C,EAC3CC,8CAA8C,QACzC,iCAAiC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export const scrollToItemStatic = (params)=>{
|
|
2
|
+
const { index , itemSize , totalItems , scrollViewRef , axis ='vertical' , reversed =false , behavior ='auto' } = params;
|
|
3
|
+
if (axis === 'horizontal') {
|
|
4
|
+
if (reversed) {
|
|
5
|
+
var _scrollViewRef_current;
|
|
6
|
+
(_scrollViewRef_current = scrollViewRef.current) === null || _scrollViewRef_current === void 0 ? void 0 : _scrollViewRef_current.scrollTo({
|
|
7
|
+
left: totalItems * itemSize - itemSize * index,
|
|
8
|
+
behavior
|
|
9
|
+
});
|
|
10
|
+
} else {
|
|
11
|
+
var _scrollViewRef_current1;
|
|
12
|
+
(_scrollViewRef_current1 = scrollViewRef.current) === null || _scrollViewRef_current1 === void 0 ? void 0 : _scrollViewRef_current1.scrollTo({
|
|
13
|
+
left: itemSize * index,
|
|
14
|
+
behavior
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
} else {
|
|
18
|
+
if (reversed) {
|
|
19
|
+
var _scrollViewRef_current2;
|
|
20
|
+
(_scrollViewRef_current2 = scrollViewRef.current) === null || _scrollViewRef_current2 === void 0 ? void 0 : _scrollViewRef_current2.scrollTo({
|
|
21
|
+
top: totalItems * itemSize - itemSize * index,
|
|
22
|
+
behavior
|
|
23
|
+
});
|
|
24
|
+
} else {
|
|
25
|
+
var _scrollViewRef_current3;
|
|
26
|
+
(_scrollViewRef_current3 = scrollViewRef.current) === null || _scrollViewRef_current3 === void 0 ? void 0 : _scrollViewRef_current3.scrollTo({
|
|
27
|
+
top: itemSize * index,
|
|
28
|
+
behavior
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["imperativeScrolling.ts"],"sourcesContent":["import { ScrollToItemStaticParams } from './imperativeScrolling.types';\n\nexport const scrollToItemStatic = (params: ScrollToItemStaticParams) => {\n const { index, itemSize, totalItems, scrollViewRef, axis = 'vertical', reversed = false, behavior = 'auto' } = params;\n\n if (axis === 'horizontal') {\n if (reversed) {\n scrollViewRef.current?.scrollTo({\n left: totalItems * itemSize - itemSize * index,\n behavior,\n });\n } else {\n scrollViewRef.current?.scrollTo({\n left: itemSize * index,\n behavior,\n });\n }\n } else {\n if (reversed) {\n scrollViewRef.current?.scrollTo({\n top: totalItems * itemSize - itemSize * index,\n behavior,\n });\n } else {\n scrollViewRef.current?.scrollTo({\n top: itemSize * index,\n behavior,\n });\n }\n }\n};\n"],"names":["scrollToItemStatic","params","index","itemSize","totalItems","scrollViewRef","axis","reversed","behavior","current","scrollTo","left","top"],"mappings":"AAEA,OAAO,MAAMA,qBAAqB,CAACC,SAAqC;IACtE,MAAM,EAAEC,MAAK,EAAEC,SAAQ,EAAEC,WAAU,EAAEC,cAAa,EAAEC,MAAO,WAAU,EAAEC,UAAW,KAAK,CAAA,EAAEC,UAAW,OAAM,EAAE,GAAGP;IAE/G,IAAIK,SAAS,cAAc;QACzB,IAAIC,UAAU;gBACZF;YAAAA,CAAAA,yBAAAA,cAAcI,OAAO,cAArBJ,oCAAAA,KAAAA,IAAAA,uBAAuBK,SAAS;gBAC9BC,MAAMP,aAAaD,WAAWA,WAAWD;gBACzCM;YACF;QACF,OAAO;gBACLH;YAAAA,CAAAA,0BAAAA,cAAcI,OAAO,cAArBJ,qCAAAA,KAAAA,IAAAA,wBAAuBK,SAAS;gBAC9BC,MAAMR,WAAWD;gBACjBM;YACF;QACF,CAAC;IACH,OAAO;QACL,IAAID,UAAU;gBACZF;YAAAA,CAAAA,0BAAAA,cAAcI,OAAO,cAArBJ,qCAAAA,KAAAA,IAAAA,wBAAuBK,SAAS;gBAC9BE,KAAKR,aAAaD,WAAWA,WAAWD;gBACxCM;YACF;QACF,OAAO;gBACLH;YAAAA,CAAAA,0BAAAA,cAAcI,OAAO,cAArBJ,qCAAAA,KAAAA,IAAAA,wBAAuBK,SAAS;gBAC9BE,KAAKT,WAAWD;gBAChBM;YACF;QACF,CAAC;IACH,CAAC;AACH,EAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["imperativeScrolling.types.ts"],"sourcesContent":["import type { RefObject } from 'react';\n\nexport type ScrollToItemStaticParams = {\n index: number;\n itemSize: number;\n totalItems: number;\n scrollViewRef: RefObject<HTMLDivElement>;\n axis?: 'horizontal' | 'vertical';\n reversed?: boolean;\n behavior?: ScrollBehavior;\n};\n\nexport type ScrollToItemDynamicParams = {\n index: number;\n itemSizes: RefObject<number[]>;\n totalSize: number;\n scrollViewRef: RefObject<HTMLDivElement>;\n axis?: 'horizontal' | 'vertical';\n reversed?: boolean;\n behavior?: ScrollBehavior;\n};\n\nexport type ScrollToInterface = {\n scrollTo: (index: number, behavior?: ScrollBehavior, callback?: (index: number) => void) => void;\n};\n"],"names":[],"mappings":"AAAA,WAwBE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export const scrollToItemDynamic = (params)=>{
|
|
2
|
+
const { index , itemSizes , totalSize , scrollViewRef , axis ='vertical' , reversed =false , behavior ='auto' } = params;
|
|
3
|
+
if (!itemSizes.current) {
|
|
4
|
+
return;
|
|
5
|
+
}
|
|
6
|
+
if (itemSizes.current === null || itemSizes.current.length < index) {
|
|
7
|
+
// null check - abort
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
let itemDepth = 0;
|
|
11
|
+
for(let i = 0; i < index; i++){
|
|
12
|
+
if (i < index) {
|
|
13
|
+
itemDepth += itemSizes.current[i];
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
if (axis === 'horizontal') {
|
|
17
|
+
if (reversed) {
|
|
18
|
+
var _scrollViewRef_current;
|
|
19
|
+
(_scrollViewRef_current = scrollViewRef.current) === null || _scrollViewRef_current === void 0 ? void 0 : _scrollViewRef_current.scrollTo({
|
|
20
|
+
left: totalSize - itemDepth,
|
|
21
|
+
behavior
|
|
22
|
+
});
|
|
23
|
+
} else {
|
|
24
|
+
var _scrollViewRef_current1;
|
|
25
|
+
(_scrollViewRef_current1 = scrollViewRef.current) === null || _scrollViewRef_current1 === void 0 ? void 0 : _scrollViewRef_current1.scrollTo({
|
|
26
|
+
left: itemDepth,
|
|
27
|
+
behavior
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
if (reversed) {
|
|
32
|
+
var _scrollViewRef_current2;
|
|
33
|
+
(_scrollViewRef_current2 = scrollViewRef.current) === null || _scrollViewRef_current2 === void 0 ? void 0 : _scrollViewRef_current2.scrollTo({
|
|
34
|
+
top: totalSize - itemDepth,
|
|
35
|
+
behavior
|
|
36
|
+
});
|
|
37
|
+
} else {
|
|
38
|
+
var _scrollViewRef_current3;
|
|
39
|
+
(_scrollViewRef_current3 = scrollViewRef.current) === null || _scrollViewRef_current3 === void 0 ? void 0 : _scrollViewRef_current3.scrollTo({
|
|
40
|
+
top: itemDepth,
|
|
41
|
+
behavior
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["imperativeScrollingDynamic.ts"],"sourcesContent":["import { ScrollToItemDynamicParams } from './imperativeScrolling.types';\n\nexport const scrollToItemDynamic = (params: ScrollToItemDynamicParams) => {\n const { index, itemSizes, totalSize, scrollViewRef, axis = 'vertical', reversed = false, behavior = 'auto' } = params;\n if (!itemSizes.current) {\n return;\n }\n\n if (itemSizes.current === null || itemSizes.current.length < index) {\n // null check - abort\n return;\n }\n\n let itemDepth = 0;\n for (let i = 0; i < index; i++) {\n if (i < index) {\n itemDepth += itemSizes.current[i];\n }\n }\n\n if (axis === 'horizontal') {\n if (reversed) {\n scrollViewRef.current?.scrollTo({\n left: totalSize - itemDepth,\n behavior,\n });\n } else {\n scrollViewRef.current?.scrollTo({\n left: itemDepth,\n behavior,\n });\n }\n } else {\n if (reversed) {\n scrollViewRef.current?.scrollTo({\n top: totalSize - itemDepth,\n behavior,\n });\n } else {\n scrollViewRef.current?.scrollTo({\n top: itemDepth,\n behavior,\n });\n }\n }\n};\n"],"names":["scrollToItemDynamic","params","index","itemSizes","totalSize","scrollViewRef","axis","reversed","behavior","current","length","itemDepth","i","scrollTo","left","top"],"mappings":"AAEA,OAAO,MAAMA,sBAAsB,CAACC,SAAsC;IACxE,MAAM,EAAEC,MAAK,EAAEC,UAAS,EAAEC,UAAS,EAAEC,cAAa,EAAEC,MAAO,WAAU,EAAEC,UAAW,KAAK,CAAA,EAAEC,UAAW,OAAM,EAAE,GAAGP;IAC/G,IAAI,CAACE,UAAUM,OAAO,EAAE;QACtB;IACF,CAAC;IAED,IAAIN,UAAUM,OAAO,KAAK,IAAI,IAAIN,UAAUM,OAAO,CAACC,MAAM,GAAGR,OAAO;QAClE,qBAAqB;QACrB;IACF,CAAC;IAED,IAAIS,YAAY;IAChB,IAAK,IAAIC,IAAI,GAAGA,IAAIV,OAAOU,IAAK;QAC9B,IAAIA,IAAIV,OAAO;YACbS,aAAaR,UAAUM,OAAO,CAACG,EAAE;QACnC,CAAC;IACH;IAEA,IAAIN,SAAS,cAAc;QACzB,IAAIC,UAAU;gBACZF;YAAAA,CAAAA,yBAAAA,cAAcI,OAAO,cAArBJ,oCAAAA,KAAAA,IAAAA,uBAAuBQ,SAAS;gBAC9BC,MAAMV,YAAYO;gBAClBH;YACF;QACF,OAAO;gBACLH;YAAAA,CAAAA,0BAAAA,cAAcI,OAAO,cAArBJ,qCAAAA,KAAAA,IAAAA,wBAAuBQ,SAAS;gBAC9BC,MAAMH;gBACNH;YACF;QACF,CAAC;IACH,OAAO;QACL,IAAID,UAAU;gBACZF;YAAAA,CAAAA,0BAAAA,cAAcI,OAAO,cAArBJ,qCAAAA,KAAAA,IAAAA,wBAAuBQ,SAAS;gBAC9BE,KAAKX,YAAYO;gBACjBH;YACF;QACF,OAAO;gBACLH;YAAAA,CAAAA,0BAAAA,cAAcI,OAAO,cAArBJ,qCAAAA,KAAAA,IAAAA,wBAAuBQ,SAAS;gBAC9BE,KAAKJ;gBACLH;YACF;QACF,CAAC;IACH,CAAC;AACH,EAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["index.ts"],"sourcesContent":["export * from './imperativeScrolling';\nexport * from './imperativeScrolling.types';\nexport * from './imperativeScrollingDynamic';\n"],"names":[],"mappings":"AAAA,cAAc,wBAAwB;AACtC,cAAc,8BAA8B;AAC5C,cAAc,+BAA+B"}
|
package/lib/utilities/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"sourcesContent":["export * from './VirtualizerContext';\n"],"names":[],"mappings":"AAAA,cAAc,uBAAuB"}
|
|
1
|
+
{"version":3,"sources":["index.ts"],"sourcesContent":["export * from './VirtualizerContext';\nexport * from './ImperativeScrolling';\n"],"names":[],"mappings":"AAAA,cAAc,uBAAuB;AACrC,cAAc,wBAAwB"}
|
|
@@ -6,15 +6,16 @@ Object.defineProperty(exports, "useVirtualizer_unstable", {
|
|
|
6
6
|
enumerable: true,
|
|
7
7
|
get: ()=>useVirtualizer_unstable
|
|
8
8
|
});
|
|
9
|
-
const _useIntersectionObserver = require("../../hooks/useIntersectionObserver");
|
|
10
9
|
const _react = require("react");
|
|
10
|
+
const _useIntersectionObserver = require("../../hooks/useIntersectionObserver");
|
|
11
11
|
const _reactUtilities = require("@fluentui/react-utilities");
|
|
12
12
|
const _reactDom = require("react-dom");
|
|
13
13
|
const _utilities = require("../../Utilities");
|
|
14
14
|
const _renderVirtualizer = require("./renderVirtualizer");
|
|
15
15
|
function useVirtualizer_unstable(props) {
|
|
16
|
-
const { itemSize , numItems , virtualizerLength , children: renderChild , getItemSize , bufferItems =Math.round(virtualizerLength / 4.0) , bufferSize =Math.floor(bufferItems / 2.0) * itemSize , scrollViewRef , axis ='vertical' , reversed =false , virtualizerContext } = props;
|
|
16
|
+
const { itemSize , numItems , virtualizerLength , children: renderChild , getItemSize , bufferItems =Math.round(virtualizerLength / 4.0) , bufferSize =Math.floor(bufferItems / 2.0) * itemSize , scrollViewRef , axis ='vertical' , reversed =false , virtualizerContext , onRenderedFlaggedIndex , imperativeVirtualizerRef } = props;
|
|
17
17
|
/* The context is optional, it's useful for injecting additional index logic, or performing uniform state updates*/ const _virtualizerContext = (0, _utilities.useVirtualizerContextState_unstable)(virtualizerContext);
|
|
18
|
+
const flaggedIndex = (0, _react.useRef)(null);
|
|
18
19
|
const actualIndex = _virtualizerContext.contextIndex;
|
|
19
20
|
const setActualIndex = _virtualizerContext.setContextIndex;
|
|
20
21
|
// Store ref to before padding element
|
|
@@ -50,6 +51,34 @@ function useVirtualizer_unstable(props) {
|
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
53
|
};
|
|
54
|
+
const [isScrolling, setIsScrolling] = (0, _react.useState)(false);
|
|
55
|
+
const scrollTimer = (0, _react.useRef)();
|
|
56
|
+
const scrollCounter = (0, _react.useRef)(0);
|
|
57
|
+
const initializeScrollingTimer = ()=>{
|
|
58
|
+
/*
|
|
59
|
+
* This can be considered the 'velocity' required to start 'isScrolling'
|
|
60
|
+
* INIT_SCROLL_FLAG_REQ: Number of renders required to activate isScrolling
|
|
61
|
+
* INIT_SCROLL_FLAG_DELAY: Amount of time (ms) before current number of renders is reset
|
|
62
|
+
* - Maybe we should let users customize these in the future.
|
|
63
|
+
*/ const INIT_SCROLL_FLAG_REQ = 10;
|
|
64
|
+
const INIT_SCROLL_FLAG_DELAY = 100;
|
|
65
|
+
scrollCounter.current++;
|
|
66
|
+
if (scrollCounter.current >= INIT_SCROLL_FLAG_REQ) {
|
|
67
|
+
setIsScrolling(true);
|
|
68
|
+
}
|
|
69
|
+
if (scrollTimer.current) {
|
|
70
|
+
clearTimeout(scrollTimer.current);
|
|
71
|
+
}
|
|
72
|
+
scrollTimer.current = setTimeout(()=>{
|
|
73
|
+
setIsScrolling(false);
|
|
74
|
+
scrollCounter.current = 0;
|
|
75
|
+
}, INIT_SCROLL_FLAG_DELAY);
|
|
76
|
+
};
|
|
77
|
+
(0, _react.useEffect)(()=>{
|
|
78
|
+
initializeScrollingTimer();
|
|
79
|
+
}, [
|
|
80
|
+
actualIndex
|
|
81
|
+
]);
|
|
53
82
|
const batchUpdateNewIndex = (index)=>{
|
|
54
83
|
// Local updates
|
|
55
84
|
updateChildRows(index);
|
|
@@ -174,14 +203,18 @@ function useVirtualizer_unstable(props) {
|
|
|
174
203
|
}
|
|
175
204
|
return getIndexFromSizeArray(scrollPos);
|
|
176
205
|
};
|
|
177
|
-
const calculateTotalSize = ()=>{
|
|
206
|
+
const calculateTotalSize = (0, _react.useCallback)(()=>{
|
|
178
207
|
if (!getItemSize) {
|
|
179
208
|
return itemSize * numItems;
|
|
180
209
|
}
|
|
181
210
|
// Time for custom size calcs
|
|
182
211
|
return childProgressiveSizes.current[numItems - 1];
|
|
183
|
-
}
|
|
184
|
-
|
|
212
|
+
}, [
|
|
213
|
+
getItemSize,
|
|
214
|
+
itemSize,
|
|
215
|
+
numItems
|
|
216
|
+
]);
|
|
217
|
+
const calculateBefore = (0, _react.useCallback)(()=>{
|
|
185
218
|
const currentIndex = Math.min(actualIndex, numItems);
|
|
186
219
|
if (!getItemSize) {
|
|
187
220
|
// The missing items from before virtualization starts height
|
|
@@ -192,8 +225,13 @@ function useVirtualizer_unstable(props) {
|
|
|
192
225
|
}
|
|
193
226
|
// Time for custom size calcs
|
|
194
227
|
return childProgressiveSizes.current[currentIndex - 1];
|
|
195
|
-
}
|
|
196
|
-
|
|
228
|
+
}, [
|
|
229
|
+
actualIndex,
|
|
230
|
+
getItemSize,
|
|
231
|
+
itemSize,
|
|
232
|
+
numItems
|
|
233
|
+
]);
|
|
234
|
+
const calculateAfter = (0, _react.useCallback)(()=>{
|
|
197
235
|
if (numItems === 0) {
|
|
198
236
|
return 0;
|
|
199
237
|
}
|
|
@@ -205,20 +243,28 @@ function useVirtualizer_unstable(props) {
|
|
|
205
243
|
}
|
|
206
244
|
// Time for custom size calcs
|
|
207
245
|
return childProgressiveSizes.current[numItems - 1] - childProgressiveSizes.current[lastItemIndex];
|
|
208
|
-
}
|
|
246
|
+
}, [
|
|
247
|
+
actualIndex,
|
|
248
|
+
getItemSize,
|
|
249
|
+
itemSize,
|
|
250
|
+
numItems,
|
|
251
|
+
virtualizerLength
|
|
252
|
+
]);
|
|
209
253
|
const updateChildRows = (0, _react.useCallback)((newIndex)=>{
|
|
210
254
|
if (numItems === 0) {
|
|
211
|
-
/* Nothing to virtualize */ return
|
|
212
|
-
}
|
|
213
|
-
if (childArray.current.length !== numItems) {
|
|
214
|
-
childArray.current = new Array(virtualizerLength);
|
|
255
|
+
/* Nothing to virtualize */ return;
|
|
215
256
|
}
|
|
257
|
+
/*
|
|
258
|
+
We reset the array every time to ensure children are re-rendered
|
|
259
|
+
This function should only be called when update is nessecary
|
|
260
|
+
*/ childArray.current = new Array(virtualizerLength);
|
|
216
261
|
const _actualIndex = Math.max(newIndex, 0);
|
|
217
262
|
const end = Math.min(_actualIndex + virtualizerLength, numItems);
|
|
218
263
|
for(let i = _actualIndex; i < end; i++){
|
|
219
|
-
childArray.current[i - _actualIndex] = (0, _renderVirtualizer.renderVirtualizerChildPlaceholder)(renderChild(i), i);
|
|
264
|
+
childArray.current[i - _actualIndex] = (0, _renderVirtualizer.renderVirtualizerChildPlaceholder)(renderChild(i, isScrolling), i);
|
|
220
265
|
}
|
|
221
266
|
}, [
|
|
267
|
+
isScrolling,
|
|
222
268
|
numItems,
|
|
223
269
|
renderChild,
|
|
224
270
|
virtualizerLength
|
|
@@ -286,6 +332,16 @@ function useVirtualizer_unstable(props) {
|
|
|
286
332
|
populateSizeArrays();
|
|
287
333
|
}
|
|
288
334
|
};
|
|
335
|
+
(0, _react.useImperativeHandle)(imperativeVirtualizerRef, ()=>{
|
|
336
|
+
return {
|
|
337
|
+
progressiveSizes: childProgressiveSizes,
|
|
338
|
+
nodeSizes: childSizes,
|
|
339
|
+
setFlaggedIndex: (index)=>flaggedIndex.current = index
|
|
340
|
+
};
|
|
341
|
+
}, [
|
|
342
|
+
childProgressiveSizes,
|
|
343
|
+
childSizes
|
|
344
|
+
]);
|
|
289
345
|
// Initialization on mount - update array index to 0 (ready state).
|
|
290
346
|
// Only fire on mount (no deps).
|
|
291
347
|
(0, _react.useEffect)(()=>{
|
|
@@ -313,6 +369,20 @@ function useVirtualizer_unstable(props) {
|
|
|
313
369
|
}, [
|
|
314
370
|
getItemSize
|
|
315
371
|
]);
|
|
372
|
+
// Effect to check flag index on updates
|
|
373
|
+
(0, _react.useEffect)(()=>{
|
|
374
|
+
if (!onRenderedFlaggedIndex || flaggedIndex.current === null) {
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
if (actualIndex <= flaggedIndex.current && actualIndex + virtualizerLength >= flaggedIndex.current) {
|
|
378
|
+
onRenderedFlaggedIndex(flaggedIndex.current);
|
|
379
|
+
flaggedIndex.current = null;
|
|
380
|
+
}
|
|
381
|
+
}, [
|
|
382
|
+
actualIndex,
|
|
383
|
+
onRenderedFlaggedIndex,
|
|
384
|
+
virtualizerLength
|
|
385
|
+
]);
|
|
316
386
|
// Ensure we have run through and updated the whole size list array at least once.
|
|
317
387
|
initializeSizeArray();
|
|
318
388
|
if (getItemSize && (numItems !== childSizes.current.length || numItems !== childProgressiveSizes.current.length)) {
|