import React, { memo, useMemo } from '../../lib/teact/teact'; import { getActions, withGlobal } from '../../global'; import { selectChatMessage, selectTabState } from '../../global/selectors'; import buildClassName from '../../util/buildClassName'; import { formatDateAtTime } from '../../util/date/dateFormat'; import useCurrentOrPrev from '../../hooks/useCurrentOrPrev'; import useLang from '../../hooks/useLang'; import useLastCallback from '../../hooks/useLastCallback'; import Button from '../ui/Button'; import ListItem from '../ui/ListItem'; import Modal from '../ui/Modal'; import PrivateChatInfo from './PrivateChatInfo'; import styles from './SeenByModal.module.scss'; export type OwnProps = { isOpen: boolean; }; export type StateProps = { seenByDates?: Record; }; const CLOSE_ANIMATION_DURATION = 100; function SeenByModal({ isOpen, seenByDates, }: OwnProps & StateProps) { const { openChat, closeSeenByModal, } = getActions(); const lang = useLang(); const renderingSeenByDates = useCurrentOrPrev(seenByDates, true); const memberIds = useMemo(() => { if (!renderingSeenByDates) { return undefined; } const result = Object.keys(renderingSeenByDates); result.sort((leftId, rightId) => renderingSeenByDates[rightId] - renderingSeenByDates[leftId]); return result; }, [renderingSeenByDates]); const handleClick = useLastCallback((userId: string) => { closeSeenByModal(); setTimeout(() => { openChat({ id: userId }); }, CLOSE_ANIMATION_DURATION); }); const handleCloseSeenByModal = useLastCallback(() => { closeSeenByModal(); }); return (
{memberIds && memberIds.map((userId) => ( handleClick(userId)} > ))}
); } export default memo(withGlobal( (global): StateProps => { const { chatId, messageId } = selectTabState(global).seenByModal || {}; if (!chatId || !messageId) { return {}; } return { seenByDates: selectChatMessage(global, chatId, messageId)?.seenByDates, }; }, )(SeenByModal));