import type { FC } from '../../lib/teact/teact'; import React, { useCallback, memo } from '../../lib/teact/teact'; import { getActions, withGlobal } from '../../global'; import type { ApiChat } from '../../api/types'; import { selectIsChatWithSelf, selectUser } from '../../global/selectors'; import { isUserId, isUserBot, getUserFirstOrLastName, getPrivateChatUserId, isChatBasicGroup, isChatSuperGroup, isChatChannel, getChatTitle, } from '../../global/helpers'; import useLang from '../../hooks/useLang'; import renderText from './helpers/renderText'; import Avatar from './Avatar'; import Modal from '../ui/Modal'; import Button from '../ui/Button'; import './DeleteChatModal.scss'; export type OwnProps = { isOpen: boolean; chat: ApiChat; onClose: () => void; onCloseAnimationEnd?: () => void; }; type StateProps = { isChannel: boolean; isChatWithSelf?: boolean; isBot?: boolean; isPrivateChat: boolean; isBasicGroup: boolean; isSuperGroup: boolean; currentUserId: string | undefined; canDeleteForAll?: boolean; contactName?: string; }; const DeleteChatModal: FC = ({ isOpen, chat, isChannel, isPrivateChat, isChatWithSelf, isBot, isBasicGroup, isSuperGroup, currentUserId, canDeleteForAll, contactName, onClose, onCloseAnimationEnd, }) => { const { leaveChannel, deleteHistory, deleteChannel, deleteChatUser, blockUser, } = getActions(); const lang = useLang(); const chatTitle = getChatTitle(lang, chat); const handleDeleteForAll = useCallback(() => { deleteHistory({ chatId: chat.id, shouldDeleteForAll: true }); onClose(); }, [deleteHistory, chat.id, onClose]); const handleDeleteAndStop = useCallback(() => { deleteHistory({ chatId: chat.id, shouldDeleteForAll: true }); blockUser({ userId: chat.id }); onClose(); }, [chat.id, onClose]); const handleDeleteChat = useCallback(() => { if (isPrivateChat) { deleteHistory({ chatId: chat.id, shouldDeleteForAll: false }); } else if (isBasicGroup) { deleteChatUser({ chatId: chat.id, userId: currentUserId! }); deleteHistory({ chatId: chat.id, shouldDeleteForAll: false }); } else if ((isChannel || isSuperGroup) && !chat.isCreator) { leaveChannel({ chatId: chat.id }); } else if ((isChannel || isSuperGroup) && chat.isCreator) { deleteChannel({ chatId: chat.id }); } onClose(); }, [ isPrivateChat, isBasicGroup, isChannel, isSuperGroup, currentUserId, chat.isCreator, chat.id, onClose, deleteHistory, deleteChatUser, leaveChannel, deleteChannel, ]); const handleLeaveChat = useCallback(() => { if (isChannel || isSuperGroup) { leaveChannel({ chatId: chat.id }); onClose(); } else { handleDeleteChat(); } }, [chat.id, handleDeleteChat, isChannel, isSuperGroup, leaveChannel, onClose]); function renderHeader() { return (

{lang(renderTitle())}

); } function renderTitle() { if (isChannel && !chat.isCreator) { return 'LeaveChannel'; } if (isChannel && chat.isCreator) { return 'ChannelDelete'; } if (isBasicGroup || isSuperGroup) { return 'Group.LeaveGroup'; } return 'DeleteChatUser'; } function renderContent() { if (isChannel && chat.isCreator) { return (

{renderText(lang('ChatList.DeleteAndLeaveGroupConfirmation', chatTitle), ['simple_markdown', 'emoji'])}

); } if ((isChannel && !chat.isCreator) || isBasicGroup || isSuperGroup) { return

{renderText(lang('ChannelLeaveAlertWithName', chatTitle), ['simple_markdown', 'emoji'])}

; } return

{renderText(lang('ChatList.DeleteChatConfirmation', contactName), ['simple_markdown', 'emoji'])}

; } function renderActionText() { if (isChannel && !chat.isCreator) { return 'LeaveChannel'; } if (isChannel && chat.isCreator) { return 'Chat.Input.Delete'; } if (isBasicGroup || isSuperGroup) { return 'Group.LeaveGroup'; } return canDeleteForAll ? 'ChatList.DeleteForCurrentUser' : 'Delete'; } return ( {renderContent()}
{isBot && ( )} {canDeleteForAll && ( )} {!isPrivateChat && chat.isCreator && ( )}
); }; export default memo(withGlobal( (global, { chat }): StateProps => { const isPrivateChat = isUserId(chat.id); const isChatWithSelf = selectIsChatWithSelf(global, chat.id); const user = isPrivateChat && selectUser(global, getPrivateChatUserId(chat)!); const isBot = user && isUserBot(user) && !chat.isSupport; const canDeleteForAll = (isPrivateChat && !isChatWithSelf && !isBot); const contactName = isPrivateChat ? getUserFirstOrLastName(selectUser(global, getPrivateChatUserId(chat)!)) : undefined; return { isPrivateChat, isChatWithSelf, isBot, isChannel: isChatChannel(chat), isBasicGroup: isChatBasicGroup(chat), isSuperGroup: isChatSuperGroup(chat), currentUserId: global.currentUserId, canDeleteForAll, contactName, }; }, )(DeleteChatModal));