import React, { FC, useMemo, useState } from 'react'; import styles from './styles/style'; import Item from './Item'; import { StyleSheet, View, ViewStyle } from 'react-native'; import { isArray } from 'lodash'; import Collapse, { RNCollapseProps } from '../Collapse'; import { VerticalListItemBase, VerticalListItemProps, VerticalListProps, } from './interface'; import ShouldRender from '../ShouldRender'; const COLLAPSE_ITEM_KEY = 'COLLAPSE_ITEM_KEY'; const collapseItemHeaderStyle: ViewStyle = { flexDirection: 'column', borderBottomWidth: 0, paddingVertical: 10, height: 'auto', }; const collapseItemContentStyle: ViewStyle = { padding: 0, }; /** * @deprecated 不再推荐使用 */ const VerticalList: FC = (props) => { const { data, style, gap = 14, autoCollapse, collapseKeepingCount = 2, } = props; const [sliceIdx, setSliceIdx] = useState( autoCollapse ? collapseKeepingCount : data.length ); const hasCollapse = sliceIdx !== data.length; const resetDivider = (item: VerticalListItemBase) => { return { ...item, divider: false, }; }; const resetDividers = (item: VerticalListItemProps) => { if (isArray(item)) { return item.map((_, j) => { if (j === item.length - 1) { return resetDivider(_); } return _; }); } return resetDivider(item); }; const _dataSource = useMemo( () => data.map((item, index) => { if (hasCollapse && index === sliceIdx - 1) { return resetDividers(item); } return item; }), [data, sliceIdx] ); const renderItem = (itemProps: VerticalListItemBase, index: number) => { return ( ); }; const renderItems = (dataSource: VerticalListItemProps[]) => { return dataSource.map((item, i) => { if (isArray(item)) { return item.map(renderItem); } return renderItem(item, i); }); }; const handleCollapseChange: RNCollapseProps['onChange'] = (activeKey) => { if ((activeKey as string[])[0] === COLLAPSE_ITEM_KEY) { setSliceIdx(data.length); return; } setSliceIdx(collapseKeepingCount); }; return ( {renderItems(_dataSource.slice(0, sliceIdx))} {renderItems(_dataSource.slice(sliceIdx, _dataSource.length))} {renderItems(_dataSource.slice(sliceIdx, _dataSource.length))} ); }; export default VerticalList;