import React, { useEffect } from 'react';
import PropTypes from 'prop-types';
import { useItemListSync } from '../../utils/hooks/';
import { PositiveIntegerOrZero } from '../../utils/helpers';
import { PendingItemsList } from './PendingItemsList';
import { ListItem, listItemProps } from '../list-item/ListItem';
import { ItemsStaticListHandler } from './includes/itemLists/ItemsStaticListHandler';
export function ItemList(props) {
const [
countedItems,
items,
listHandler,
setListHandler,
classname,
itemsListWrapperRef,
itemsListRef,
onItemsCount,
onItemsLoad,
renderBeforeListWrap,
renderAfterListWrap,
] = useItemListSync(props);
useEffect(() => {
setListHandler(new ItemsStaticListHandler(props.items, props.pageItems, props.maxItems, onItemsCount, onItemsLoad));
return () => {
if (listHandler) {
listHandler.cancelAll();
setListHandler(null);
}
};
}, []);
return !countedItems ? (
) : !items.length ? null : (
{renderBeforeListWrap()}
{items.map((itm, index) => (
))}
{renderAfterListWrap()}
);
}
ItemList.propTypes = {
items: PropTypes.array.isRequired,
className: PropTypes.string,
hideDate: PropTypes.bool,
hideViews: PropTypes.bool,
hideAuthor: PropTypes.bool,
hidePlaylistOptions: PropTypes.bool,
hidePlaylistOrderNumber: PropTypes.bool,
hideAllMeta: PropTypes.bool,
preferSummary: PropTypes.bool,
inPlaylistView: PropTypes.bool,
inPlaylistPage: PropTypes.bool,
playlistActiveItem: PositiveIntegerOrZero,
playlistId: PropTypes.string,
/* ################################################## */
maxItems: PropTypes.number.isRequired,
pageItems: PropTypes.number.isRequired,
horizontalItemsOrientation: PropTypes.bool.isRequired,
singleLinkContent: PropTypes.bool.isRequired,
inTagsList: PropTypes.bool,
inCategoriesList: PropTypes.bool,
itemsCountCallback: PropTypes.func,
itemsLoadCallback: PropTypes.func,
firstItemViewer: PropTypes.bool,
firstItemDescr: PropTypes.bool,
canEdit: PropTypes.bool,
};
ItemList.defaultProps = {
hideDate: false,
hideViews: false,
hideAuthor: false,
hidePlaylistOptions: true,
hidePlaylistOrderNumber: true,
hideAllMeta: false,
preferSummary: false,
inPlaylistView: false,
inPlaylistPage: false,
playlistActiveItem: 1,
playlistId: void 0,
/* ################################################## */
maxItems: 99999,
// pageItems: 48,
pageItems: 24,
horizontalItemsOrientation: false,
singleLinkContent: false,
inTagsList: false,
inCategoriesList: false,
firstItemViewer: false,
firstItemDescr: false,
canEdit: false,
};