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

31 lines
1014 B

import { useCallback, useEffect } from 'react';
import { IRocketChatRecord } from '../../../definition/IRocketChatRecord';
import { AsyncStatePhase } from '../../lib/asyncState';
import { RecordList, RecordListBatchChanges } from '../../lib/lists/RecordList';
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) => void;
initialItemCount: number;
} => {
const loadMoreItems = useCallback(
(start: number) => {
if (recordList.phase === AsyncStatePhase.LOADING || start + 1 < recordList.itemCount) {
recordList.batchHandle(() => fetchBatchChanges(start, initialItemCount));
}
},
[recordList, fetchBatchChanges, initialItemCount],
);
useEffect(() => {
loadMoreItems(0);
}, [loadMoreItems]);
return { loadMoreItems, initialItemCount };
};