import React from 'react'; import { Virtuoso } from 'react-virtuoso'; import PullToRefresh from 'soapbox/components/pull-to-refresh'; // import { useSettings } from 'soapbox/hooks'; import { Spinner, Text } from './ui'; const List = React.forwardRef((props: any, ref: React.ForwardedRef) => { const { context, ...rest } = props; return
; }); interface IScrollableList { scrollKey?: string, onLoadMore?: () => void, isLoading?: boolean, showLoading?: boolean, hasMore?: boolean, prepend?: React.ReactElement, alwaysPrepend?: boolean, emptyMessage?: React.ReactNode, children: Iterable, onScrollToTop?: () => void, onScroll?: () => void, placeholderComponent?: React.ComponentType, placeholderCount?: number, onRefresh?: () => Promise, className?: string, } const ScrollableList: React.FC = ({ prepend = null, children, isLoading, emptyMessage, showLoading, onRefresh, onScroll, onScrollToTop, onLoadMore, className, placeholderComponent: Placeholder, placeholderCount = 0, }) => { // const settings = useSettings(); // const autoload = settings.get('autoloadMore'); const showPlaceholder = showLoading && Placeholder && placeholderCount > 0; const renderItem = (_i: number, element: JSX.Element) => { if (showPlaceholder) { return ; } else { return element; } }; return ( isScrolling && onScroll && onScroll()} itemContent={renderItem} context={{ listClassName: className, }} components={{ Header: () => prepend, ScrollSeekPlaceholder: Placeholder as any, EmptyPlaceholder: () => isLoading ? ( ) : ( {emptyMessage} ), List, }} /> ); }; export default ScrollableList;