import React, { useCallback } from '../../../../lib/teact/teact'; import { getDispatch } from '../../../../lib/teact/teactn'; import { isChatPrivate } from '../../../../modules/helpers'; import { IAlbum, MediaViewerOrigin } from '../../../../types'; import { ApiChat, ApiMessage, ApiUser, MAIN_THREAD_ID, } from '../../../../api/types'; import { LangFn } from '../../../../hooks/useLang'; export default function useInnerHandlers( lang: LangFn, selectMessage: (e: React.MouseEvent, groupedId?: string) => void, message: ApiMessage, chatId: number, threadId: number, isInDocumentGroup: boolean, isScheduled?: boolean, album?: IAlbum, avatarPeer?: ApiUser | ApiChat, senderPeer?: ApiUser | ApiChat, botSender?: ApiUser, ) { const { openUserInfo, openChat, showNotification, focusMessage, openMediaViewer, openAudioPlayer, markMessagesRead, cancelSendingMessage, sendPollVote, openForwardMenu, } = getDispatch(); const { id: messageId, forwardInfo, replyToMessageId, groupedId, } = message; const handleAvatarClick = useCallback(() => { if (!avatarPeer) { return; } if (isChatPrivate(avatarPeer.id)) { openUserInfo({ id: avatarPeer.id }); } else { openChat({ id: avatarPeer.id }); } }, [avatarPeer, openUserInfo, openChat]); const handleSenderClick = useCallback(() => { if (!senderPeer) { showNotification({ message: lang('HidAccount') }); return; } if (isChatPrivate(senderPeer.id)) { openUserInfo({ id: senderPeer.id }); } else { openChat({ id: senderPeer.id }); } }, [senderPeer, showNotification, lang, openUserInfo, openChat]); const handleViaBotClick = useCallback(() => { if (!botSender) { return; } openUserInfo({ id: botSender.id }); }, [botSender, openUserInfo]); const handleReplyClick = useCallback((): void => { focusMessage({ chatId, threadId, messageId: replyToMessageId, replyMessageId: messageId, }); }, [focusMessage, chatId, threadId, replyToMessageId, messageId]); const handleMediaClick = useCallback((): void => { openMediaViewer({ chatId, threadId, messageId, origin: isScheduled ? MediaViewerOrigin.ScheduledInline : MediaViewerOrigin.Inline, }); }, [chatId, threadId, messageId, openMediaViewer, isScheduled]); const handleAudioPlay = useCallback((): void => { openAudioPlayer({ chatId, messageId }); }, [chatId, messageId, openAudioPlayer]); const handleAlbumMediaClick = useCallback((albumMessageId: number): void => { openMediaViewer({ chatId, threadId, messageId: albumMessageId, origin: isScheduled ? MediaViewerOrigin.ScheduledAlbum : MediaViewerOrigin.Album, }); }, [chatId, threadId, openMediaViewer, isScheduled]); const handleReadMedia = useCallback((): void => { markMessagesRead({ messageIds: [messageId] }); }, [messageId, markMessagesRead]); const handleCancelUpload = useCallback(() => { cancelSendingMessage({ chatId, messageId }); }, [cancelSendingMessage, chatId, messageId]); const handleVoteSend = useCallback((options: string[]) => { sendPollVote({ chatId, messageId, options }); }, [chatId, messageId, sendPollVote]); const handleGroupForward = useCallback(() => { openForwardMenu({ fromChatId: chatId, groupedId }); }, [openForwardMenu, chatId, groupedId]); const handleForward = useCallback(() => { if (album && album.messages) { const messageIds = album.messages.map(({ id }) => id); openForwardMenu({ fromChatId: chatId, messageIds }); } else { openForwardMenu({ fromChatId: chatId, messageIds: [messageId] }); } }, [album, openForwardMenu, chatId, messageId]); const handleFocus = useCallback(() => { focusMessage({ chatId, threadId: MAIN_THREAD_ID, messageId, }); }, [focusMessage, chatId, messageId]); const handleFocusForwarded = useCallback(() => { if (isInDocumentGroup) { focusMessage({ chatId: forwardInfo!.fromChatId, groupedId, groupedChatId: chatId, }); return; } focusMessage({ chatId: forwardInfo!.fromChatId, messageId: forwardInfo!.fromMessageId, }); }, [isInDocumentGroup, focusMessage, forwardInfo, groupedId, chatId]); const selectWithGroupedId = useCallback((e: React.MouseEvent) => { e.stopPropagation(); selectMessage(e, groupedId); }, [selectMessage, groupedId]); return { handleAvatarClick, handleSenderClick, handleViaBotClick, handleReplyClick, handleMediaClick, handleAudioPlay, handleAlbumMediaClick, handleMetaClick: selectWithGroupedId, handleReadMedia, handleCancelUpload, handleVoteSend, handleGroupForward, handleForward, handleFocus, handleFocusForwarded, handleDocumentGroupSelectAll: selectWithGroupedId, }; }