//@ts-nocheck import EventEmitter from 'events'; import { indexOf, isEmpty, length, map, pluck, range } from 'ramda'; import { FC, useCallback, useContext, useEffect, useMemo, useRef } from 'react'; import { ListRange, Virtuoso, VirtuosoHandle } from 'react-virtuoso'; import { EventBusContext } from '../EventBus'; import { sortedFilesSelector, useFileListStore } from '../states/files'; import { useZoomState } from '../states/zoom'; export const ContinuationView: FC = () => { const files = useFileListStore(sortedFilesSelector()); const { currentZoom: zoom, viewWidth, viewHeight } = useZoomState(); const updateActives = useFileListStore.use.updateActiveFiles(); const fileCount = useMemo(() => length(files), [files]); const ebus = useContext(EventBusContext); const virtualListRef = useRef(null); const handleOnRenderAction = useCallback( ({ startIndex, endIndex }: ListRange) => { updateActives(map(i => files[i].filename, range(startIndex, endIndex + 1))); }, [files] ); const maxImageWidth = useMemo(() => Math.floor(viewWidth * (zoom / 100)), [viewWidth, zoom]); useEffect(() => { ebus?.addListener('navigate_offset', ({ filename }) => { let index = indexOf(filename, pluck('filename', files)); virtualListRef.current?.scrollToIndex({ index, align: 'start' }); }); ebus?.addListener('reset_views', () => { virtualListRef.current?.scrollTo({ top: 0 }); }); return () => { ebus?.removeAllListeners('navigate_offset'); ebus?.removeAllListeners('reset_views'); }; }, [files]); return (
{!isEmpty(files) && ( files[index].id} rangeChanged={handleOnRenderAction} itemContent={index => (
)} /> )}
); };