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/useScrollableMessageList.ts

36 lines
1.3 KiB

import { useCallback } from 'react';
import { IMessage } from '../../../definition/IMessage';
import { ObjectFromApi } from '../../../definition/ObjectFromApi';
import { MessageList } from '../../lib/lists/MessageList';
import { RecordListBatchChanges } from '../../lib/lists/RecordList';
import { useScrollableRecordList } from './useScrollableRecordList';
const convertMessageFromApi = (apiMessage: ObjectFromApi<IMessage>): IMessage => ({
...apiMessage,
_updatedAt: new Date(apiMessage._updatedAt),
ts: new Date(apiMessage.ts),
...(apiMessage.tlm && { tlm: new Date(apiMessage.tlm) }),
});
export const useScrollableMessageList = (
messageList: MessageList,
fetchMessages: (
start: number,
end: number,
) => Promise<RecordListBatchChanges<ObjectFromApi<IMessage>>>,
initialItemCount?: number,
): ReturnType<typeof useScrollableRecordList> => {
const fetchItems = useCallback(
async (start: number, end: number): Promise<RecordListBatchChanges<IMessage>> => {
const batchChanges = await fetchMessages(start, end);
return {
...(batchChanges.items && { items: batchChanges.items.map(convertMessageFromApi) }),
...(batchChanges.itemCount && { itemCount: batchChanges.itemCount }),
};
},
[fetchMessages],
);
return useScrollableRecordList(messageList, fetchItems, initialItemCount);
};