import type { FC } from '../../lib/teact/teact'; import React, { memo, useCallback, useEffect, useRef, } from '../../lib/teact/teact'; import { getActions, withGlobal } from '../../global'; import type { ApiSticker, ApiUpdateConnectionStateType } from '../../api/types'; import { selectChat } from '../../global/selectors'; import { useIntersectionObserver } from '../../hooks/useIntersectionObserver'; import useLang from '../../hooks/useLang'; import { getUserIdDividend } from '../../global/helpers'; import StickerButton from '../common/StickerButton'; import './ContactGreeting.scss'; type OwnProps = { userId: string; }; type StateProps = { sticker?: ApiSticker; lastUnreadMessageId?: number; connectionState?: ApiUpdateConnectionStateType; }; const INTERSECTION_DEBOUNCE_MS = 200; const ContactGreeting: FC = ({ sticker, connectionState, lastUnreadMessageId, }) => { const { loadGreetingStickers, sendMessage, markMessageListRead, } = getActions(); const lang = useLang(); // eslint-disable-next-line no-null/no-null const containerRef = useRef(null); const { observe: observeIntersection, } = useIntersectionObserver({ rootRef: containerRef, debounceMs: INTERSECTION_DEBOUNCE_MS, }); useEffect(() => { if (sticker || connectionState !== 'connectionStateReady') { return; } loadGreetingStickers(); }, [connectionState, loadGreetingStickers, sticker]); useEffect(() => { if (connectionState === 'connectionStateReady' && lastUnreadMessageId) { markMessageListRead({ maxId: lastUnreadMessageId }); } }, [connectionState, markMessageListRead, lastUnreadMessageId]); const handleStickerSelect = useCallback((selectedSticker: ApiSticker) => { selectedSticker = { ...selectedSticker, isPreloadedGlobally: true, }; sendMessage({ sticker: selectedSticker }); }, [sendMessage]); return (

{lang('Conversation.EmptyPlaceholder')}

{lang('Conversation.GreetingText')}

{sticker && ( )}
); }; export default memo(withGlobal( (global, { userId }): StateProps => { const { stickers } = global.stickers.greeting; const dividend = getUserIdDividend(userId) + getUserIdDividend(global.currentUserId!); const sticker = stickers?.length ? stickers[dividend % stickers.length] : undefined; const chat = selectChat(global, userId); if (!chat) { return {}; } return { sticker, lastUnreadMessageId: chat.lastMessage && chat.lastMessage.id !== chat.lastReadInboxMessageId ? chat.lastMessage.id : undefined, connectionState: global.connectionState, }; }, )(ContactGreeting));