TelegramPWA/src/components/middle/MessageListHistoryHandler.tsx
2023-01-06 22:49:02 +01:00

51 lines
1.5 KiB
TypeScript

import type { FC } from '../../lib/teact/teact';
import React, { memo } from '../../lib/teact/teact';
import { getActions, withGlobal } from '../../lib/teact/teactn';
import { createLocationHash } from '../../util/routing';
import useHistoryBack from '../../hooks/useHistoryBack';
import type { MessageList as GlobalMessageList } from '../../global/types';
type StateProps = {
messageLists?: GlobalMessageList[];
};
// Actual `MessageList` components are unmounted when deep in the history,
// so we need a separate component just for handling history
const MessageListHistoryHandler: FC<StateProps> = ({ messageLists }) => {
const { openChat } = getActions();
const closeChat = () => {
openChat({ id: undefined }, { forceSyncOnIOs: true });
};
const MessageHistoryRecord: FC<GlobalMessageList> = ({ chatId, type, threadId }) => {
useHistoryBack({
isActive: true,
hash: createLocationHash(chatId, type, threadId),
onBack: closeChat,
});
};
return (
<div>
{messageLists?.map((messageList, i) => (
<MessageHistoryRecord
// eslint-disable-next-line react/no-array-index-key
key={`${messageList.chatId}_${messageList.threadId}_${messageList.type}_${i}`}
// eslint-disable-next-line react/jsx-props-no-spreading
{...messageList}
/>
))}
</div>
);
};
export default memo(withGlobal(
(global): StateProps => {
return {
messageLists: global.messages.messageLists,
};
},
)(MessageListHistoryHandler));