import { ScrollView, View } from '@tarojs/components' import React, { memo, ReactNode, useEffect, useRef, useState } from 'react' import styles from './index.module.scss' import classnames from 'classnames' import Taro, { useReady } from '@tarojs/taro' import InfiniteScroll, { StatusParam } from '../infiniteScroll' import LoadingCard from '../loadingCard' import ProductClass from '@/pages/index/components/productClass' type Params = { list?: any[] defaultValue?: number | string children?: ReactNode height?: string heightItem?: number sideBarOnClick?: (val: any) => void refresherTriggered?: true | false selfOnRefresherRefresh?: () => void selfOnScrolltolower?: () => void hasMore?: true | false statusMore?: StatusParam } export default memo( ({ list = [], defaultValue = 0, height = '100vh', sideBarOnClick, children, heightItem = 100, refresherTriggered = false, selfOnRefresherRefresh, selfOnScrolltolower, hasMore = true, statusMore = 0, }: Params) => { let num_half = useRef(0) const [selected, setSelected] = useState(defaultValue) const [tabId, setTabId] = useState('') useEffect(() => { setSelected(defaultValue) }, [defaultValue]) const init = () => { const index = list?.findIndex((item) => { return item.id == defaultValue }) if (index !== -1) { computeSelectTab(index) } } const clickEvent = ({ item, index }: { item; index: number }) => { setSelected(item.id) sideBarOnClick?.(item) computeSelectTab(index) } const computeSelectTab = (index) => { if (index + 1 > num_half.current) { let num = index + 1 - num_half.current setTabId(list[num].id.toString()) } else { setTabId(list[0].id.toString()) } } useReady(() => { Taro.nextTick(() => { let query = Taro.createSelectorQuery() query .select('.side_bar_select') .boundingClientRect((rect) => { console.log('rect::', rect) let clientHeight = rect.height let clientWidth = rect.width let ratio = 750 / clientWidth let height = clientHeight * ratio num_half.current = Math.ceil(height / 2 / heightItem) init() }) .exec() }) }) const [openClass, setOpenClass] = useState(false) return ( <> {list?.map((item, index) => { return ( clickEvent({ item, index })} id={`tab_${item.id}`} key={item.id} style={{ height: heightItem + 'rpx' }}> {item.name} ) })} setOpenClass(val)} /> selfOnScrolltolower?.()} refresherTriggered={refresherTriggered} refresherEnabled={true} selfOnRefresherRefresh={() => selfOnRefresherRefresh?.()}> {children} ) }, )