1.7.0 • Published 3 years ago

@crtl/react-infinite-list v1.7.0

Weekly downloads
-
License
proprietary
Repository
-
Last release
3 years ago

react-infinite-list

Basic component to render infinite list and handle logic to refresh when reaching end.

Example

import {useInfiniteList, InfiniteList} from "@crtl/react-infinite-list";

const App = (props) => {
    const {
        items, setItems, addItems, removeItems, pending, setPending, hasMore, setHasMore
    } = useInfiniteList();

    const loadItems = () => {
        // set pending to show loader
        setPending(true);
        
        setTimeout(() => {
            addItems([1, 2, 3, 4]);
            
            // set hasMore depending on wheter or not more items are avilable
            setHasMore(false);
            
            // reset pending to false
            setPending(false);
        }, 1000);
    };
    
    return (
        <div style={{maxHeight: "100%", overflow: "auto"}}>
            <InfiniteList<any> 
                className="MyInfiniteList"
                items={items} 
                hasMore={hasMore} 
                pending={pending}
                buildItem={(item: any, index: number) => <p>{index}</p>}
                loadMore={loadItems}
                empty={() => <p>No items found</p>}
                loader={() => <p>Loading...</p>}
                end={() => <p>No more items available</p>}
                trigger={() => <button onClick={loadItems}>Click to load more</button>}
                threshold="-20vh"
            />
        </div>
    );

};

InfiniteList itself renders no wrapping element to allow free customization of behaviour.

By default the IntersectionObserver will listen on its parent element which in the above example is .MyInfiniteList.

To change this behaviour you can pass a React ref with scrollRoot prop.

Options

NameTypeDescription
itemsT[]The list of items to display
pendingbooleanShould indicate if an request for items is pending
hasMorebooleanIndicates if more items are available
buildItem(item: T, index: number) => ReactNodeRenderer for each, key must be included
loadMore() => anyCallback which is called to load more items
emptyundefined | () => ReactNodeOptional renderer for component to display when list is empty and no items are available
loaderundefined | () => ReactNodeOptional callback to render component to display while pending
endundefined | () => ReactNodeOptional callback to render component to display when end of list is reached (hasMore = false && items.length > 0)
triggerundefined | () => ReactNodeOptional callback, when passed trigger is rendered at end of each page and loading of items will not be trigger by intersection anymore.
thresholdstring | undefinedOptional threshold CSS value string should be negative
scrollRootRefObject | undefinedOptional ref for element to intersect with. By default intersects with parent element.
1.7.0

3 years ago

1.6.0

3 years ago

1.5.0

3 years ago

1.4.0

3 years ago

1.3.0

3 years ago

1.2.0

3 years ago

1.1.0

3 years ago

1.0.0

3 years ago