import React, { HTMLAttributes, ReactNode, useCallback, useState } from 'react';
import styled from 'styled-components';
import Button from '../Button/Button';
import Skeleton from '../Skeleton/Skeleton';
import SkeletonItem from '../Skeleton/SkeletonItem';
import Pagination from '../Pagination/Pagination ';
export interface ListProps extends HTMLAttributes {
data: any[];
renderItem: (item: any) => ReactNode;
loadMoreCallback?: () => void;
paginateCallback?: (start: number) => void;
isLoading?: boolean;
isLoadFinish?: boolean;
model: 'loadMore' | 'pagination' | 'normal';
totalData?: number;
perPage?: number;
}
const ListStyled = styled.div`
border: 1px solid rgba(0, 0, 0, 0.1);
width: 100%;
padding: 20px 20px;
display: flex;
flex-direction: column;
scroll-behavior: smooth;
`;
const LoadMore = styled.div`
width: 100%;
margin-top: 40px;
display: flex;
justify-content: center;
`;
const List: React.FC = (props) => {
const {
renderItem,
model,
perPage,
totalData,
loadMoreCallback,
paginateCallback,
isLoading,
isLoadFinish,
data
} = props;
const [currentPage, setPage] = useState(1);
const fn = useCallback((page: number, start: number) => {
paginateCallback!(start);
setPage(page);
}, []);
const bottomRender = () => {
if (model === 'normal') {
return '';
}
if (model === 'loadMore') {
return (
{isLoadFinish ? (
没有更多了,
返回顶部?
) : (
)}
);
}
if (model === 'pagination') {
return (
);
}
};
return (
{data.map((item) => renderItem(item))}
{bottomRender()}
);
};
List.defaultProps = {
loadMoreCallback: () => {},
paginateCallback: () => {},
isLoading: false,
isLoadFinish: false,
totalData: 0,
perPage: 5
};
export default List;