import { ScrollView, View } from '@tarojs/components' import type { ReactNode } from 'react' import React, { memo, useMemo, useState } from 'react' import LoadingCard from '../loadingCard' import style from './index.module.scss' import DotLoading from '@/components/dotLoading' import Empty from '@/components/empty' import { SEARCH_EMPTY_IMAGE } from '@/common/constant' export type StatusParam = 0 | 1 | 2 | 3 interface Params { styleObj?: React.CSSProperties selfonScrollToLower?: () => void enableLoadMoreStatus?: boolean safeAreaInsetBottom?: boolean moreStatus?: boolean statusMore?: StatusParam // 0:数据从无到有加载数据,1,没有任何数据, 2:下拉加载,3:下拉没有数据 children?: ReactNode lowerThresholdNum?: number selfOnScrollToUpper?: () => void selfOnScroll?: (val: any) => void selfOnRefresherPulling?: () => void selfOnRefresherRefresh?: () => void selfOnRefresherRestore?: () => void selfOnRefresherAbort?: () => void paddingBottom?: number refresherTriggered?: boolean refresherEnabled?: boolean enableBackToTop?: boolean emptySlot?: React.ReactNode moreText?: string loadingText?: string noMoreText?: string } const InfiniteScroll = ({ styleObj, selfonScrollToLower, selfOnScrollToUpper, selfOnScroll, selfOnRefresherPulling, selfOnRefresherRefresh, selfOnRefresherRestore, selfOnRefresherAbort, safeAreaInsetBottom = true, enableLoadMoreStatus = true, children, lowerThresholdNum = 5, paddingBottom = 0, refresherTriggered = false, refresherEnabled = false, moreStatus = true, statusMore = 0, enableBackToTop = true, emptySlot, }: Params) => { const scrollToLower = () => { selfonScrollToLower?.() } const scrollToUpper = () => { selfOnScrollToUpper?.() } const scroll = (e) => { selfOnScroll?.(e) } const refresherPulling = () => { selfOnRefresherPulling?.() } const refresherRefresh = () => { selfOnRefresherRefresh?.() } const refresherRestore = () => { selfOnRefresherRestore?.() } const refresherAbort = () => { selfOnRefresherAbort?.() } // 返回顶部 const scrollTop = useMemo(() => { if (statusMore == 0) { return 0.1 } }, [statusMore]) const component = () => { if (enableLoadMoreStatus) { if (!moreStatus) { return ( {children} ) } else { return ( <> {(statusMore == 2 || statusMore == 3) && ( {children} {statusMore == 2 ? ( 加载中 ) : ( 没有更多数据了 )} )} {statusMore == 0 && } {statusMore == 1 && (emptySlot || )} ) } } else { return ( {children} ) } } return ( <> scrollToLower()} onScrollToUpper={() => scrollToUpper()} onScroll={e => scroll(e)} lowerThreshold={lowerThresholdNum} refresherEnabled={refresherEnabled} refresherTriggered={refresherTriggered} onRefresherPulling={() => refresherPulling()} onRefresherRefresh={() => refresherRefresh()} onRefresherRestore={() => refresherRestore()} onRefresherAbort={() => refresherAbort()} refresherBackground="#F8F8F8" enableBackToTop={enableBackToTop} scrollTop={scrollTop} > {component()} {safeAreaInsetBottom && } ) } export default memo( InfiniteScroll, )