1234567891011121314151617181920212223242526272829303132333435363738 |
- import type {RefObject} from 'react';
- import {useCallback} from 'react';
- import type {CellMeasurerCache, List} from 'react-virtualized';
- import useVirtualListDimensionChange from 'sentry/views/replays/detail/useVirtualListDimensionChange';
- type Opts = {
- cache: CellMeasurerCache;
- expandPathsRef: RefObject<Map<number, Set<string>>>;
- listRef: RefObject<List>;
- };
- export type OnExpandCallback = (
- path: string,
- expandedState: Record<string, boolean>
- ) => void;
- export default function useVirtualizedInspector({cache, listRef, expandPathsRef}: Opts) {
- const {handleDimensionChange} = useVirtualListDimensionChange({cache, listRef});
- return {
- expandPaths: expandPathsRef.current,
- handleDimensionChange: useCallback(
- (index: number, path: string, expandedState: Record<string, boolean>) => {
- const rowState = expandPathsRef.current?.get(index) || new Set();
- if (expandedState[path]) {
- rowState.add(path);
- } else {
- // Collapsed, i.e. its default state, so no need to store state
- rowState.delete(path);
- }
- expandPathsRef.current?.set(index, rowState);
- handleDimensionChange(index);
- },
- [expandPathsRef, handleDimensionChange]
- ),
- };
- }
|