The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/client/hooks/lists/useScrollableRecordList.ts

28 lines
914 B

import { useCallback, useEffect } from 'react';
import { RecordList, RecordListBatchChanges } from '../../lib/lists/RecordList';
import { IRocketChatRecord } from '../../../definition/IRocketChatRecord';
const INITIAL_ITEM_COUNT = 25;
export const useScrollableRecordList = <T extends IRocketChatRecord>(
recordList: RecordList<T>,
fetchBatchChanges: (start: number, end: number) => Promise<RecordListBatchChanges<T>>,
initialItemCount: number = INITIAL_ITEM_COUNT,
): {
loadMoreItems: (start: number, end: number) => void;
initialItemCount: number;
} => {
const loadMoreItems = useCallback(
(start: number, end: number) => {
recordList.batchHandle(() => fetchBatchChanges(start, end));
},
[recordList, fetchBatchChanges],
);
useEffect(() => {
loadMoreItems(0, initialItemCount ?? INITIAL_ITEM_COUNT);
}, [loadMoreItems, initialItemCount]);
return { loadMoreItems, initialItemCount };
};