feat(view):更新跳转功能。

This commit is contained in:
徐涛
2023-03-08 17:10:15 +08:00
parent 9ea4433933
commit cd077b5d29
2 changed files with 32 additions and 4 deletions

View File

@@ -1,7 +1,9 @@
import { Box, Stack } from '@mantine/core';
import { useVirtualizer } from '@tanstack/react-virtual';
import { filter, isEmpty, length, map, pluck } from 'ramda';
import { FC, useLayoutEffect, useMemo, useRef } from 'react';
import EventEmitter from 'events';
import { filter, indexOf, isEmpty, length, map, pluck } from 'ramda';
import { FC, useContext, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
import { EventBusContext } from '../EventBus';
import { useFileListStore } from '../states/files';
import { useZoomState } from '../states/zoom';
import { withinRange } from '../utils/offset_func';
@@ -13,6 +15,7 @@ export const ContinuationView: FC = () => {
const updateActives = useFileListStore.use.updateActiveFiles();
const fileCount = useMemo(() => length(files), [files]);
const parentRef = useRef();
const ebus = useContext<EventEmitter>(EventBusContext);
const virtualizer = useVirtualizer({
count: fileCount,
getScrollElement: () => parentRef.current,
@@ -20,6 +23,17 @@ export const ContinuationView: FC = () => {
});
const items = virtualizer.getVirtualItems();
useEffect(() => {
ebus?.addListener('navigate_offset', ({ filename }) => {
let index = indexOf(filename, pluck('filename', files));
virtualizer.scrollToIndex(index);
});
return () => {
ebus?.removeAllListeners('navigate_offset');
};
}, [ebus, files, virtualizer]);
useLayoutEffect(() => {
let rangeStart = virtualizer.scrollOffset;
let rangeEnd = virtualizer.scrollOffset + viewHeight;