mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-10-30 14:49:14 +00:00
47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import type {MouseEvent, RefObject} from 'react';
|
|
import {useCallback} from 'react';
|
|
import type {CellMeasurerCache, List} from 'react-virtualized';
|
|
|
|
import useVirtualListDimentionChange from 'sentry/views/replays/detail/useVirtualListDimentionChange';
|
|
|
|
type Opts = {
|
|
cache: CellMeasurerCache;
|
|
expandPathsRef: RefObject<Map<number, Set<string>>>;
|
|
listRef: RefObject<List>;
|
|
};
|
|
|
|
export type OnDimensionChange = (
|
|
index: number,
|
|
path: string,
|
|
expandedState: Record<string, boolean>,
|
|
event: MouseEvent<HTMLDivElement>
|
|
) => void;
|
|
|
|
export default function useVirtualizedInspector({cache, listRef, expandPathsRef}: Opts) {
|
|
const {handleDimensionChange} = useVirtualListDimentionChange({cache, listRef});
|
|
|
|
return {
|
|
expandPaths: expandPathsRef.current,
|
|
handleDimensionChange: useCallback(
|
|
(
|
|
index: number,
|
|
path: string,
|
|
expandedState: Record<string, boolean>,
|
|
event: MouseEvent<HTMLDivElement>
|
|
) => {
|
|
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);
|
|
event.stopPropagation();
|
|
},
|
|
[expandPathsRef, handleDimensionChange]
|
|
),
|
|
};
|
|
}
|