/* eslint-disable @typescript-eslint/ban-ts-comment */ import React, { ReactNode, useEffect, useState } from 'react'; import classNames from 'classnames'; import { ArrowIcon } from '../common-view'; import './index.scss'; interface oplistI { dataSource: any[]; renderItem: (record: any, index: number) => any; renderDetails: (record: any, index: number) => any; clickRowOpen: boolean; hasBorder: boolean; iconSize: number; } export default function OPList(props: oplistI) { const { dataSource, renderItem, renderDetails, clickRowOpen = true, hasBorder = true, iconSize = 14, } = props; const [openState, setOpenState] = useState([]); useEffect(() => { // @ts-ignore setOpenState(Array(dataSource.length).fill(false)); }, [dataSource]); const changeOpen = (index: number, from: 'item' | 'icon') => { if ( (clickRowOpen && from === 'icon') || (!clickRowOpen && from === 'item') ) { return; } const oldVal = openState[index]; // @ts-ignore openState[index] = !oldVal; setOpenState(openState.slice()); }; return (
{Array.isArray(dataSource) ? dataSource.map((item, index) => (
{/* 展示的内容 */}
{ changeOpen(index, 'item'); }} className='operate-list__display' >
{ changeOpen(index, 'icon'); }} className={classNames('operate-list__icon', { 'operate-list__item_seleced': openState[index], })} >
{renderItem instanceof Function ? renderItem(item, index) : null}
{openState[index] ? (
{renderDetails instanceof Function ? renderDetails(item, index) : null}
) : null}
)) : null}
); }