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,
)