Telegram Web K with changes to work inside I2P
https://web.telegram.i2p/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.7 KiB
111 lines
3.7 KiB
/* |
|
* https://github.com/morethanwords/tweb |
|
* Copyright (C) 2019-2021 Eduard Kuzmenko |
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE |
|
*/ |
|
|
|
import rootScope from '../../lib/rootScope'; |
|
import PopupElement, {addCancelButton} from '.'; |
|
import PopupPeer, {PopupPeerButtonCallbackCheckboxes, PopupPeerOptions} from './peer'; |
|
import {ChatType} from '../chat/chat'; |
|
import {i18n, LangPackKey} from '../../lib/langPack'; |
|
import PeerTitle from '../peerTitle'; |
|
import hasRights from '../../lib/appManagers/utils/chats/hasRights'; |
|
import filterAsync from '../../helpers/array/filterAsync'; |
|
|
|
export default class PopupDeleteMessages { |
|
constructor(private peerId: PeerId, private mids: number[], private type: ChatType, private onConfirm?: () => void) { |
|
this.construct(); |
|
} |
|
|
|
private async construct() { |
|
let {peerId, mids, type, onConfirm} = this; |
|
|
|
const peerTitleElement = new PeerTitle({peerId}).element; |
|
|
|
const managers = PopupElement.MANAGERS; |
|
|
|
mids = mids.slice(); |
|
const callback = (checked: PopupPeerButtonCallbackCheckboxes, revoke?: boolean) => { |
|
onConfirm && onConfirm(); |
|
if(type === 'scheduled') { |
|
managers.appMessagesManager.deleteScheduledMessages(peerId, mids); |
|
} else { |
|
managers.appMessagesManager.deleteMessages(peerId, mids, !!checked.size || revoke); |
|
} |
|
}; |
|
|
|
const buttons: PopupPeerOptions['buttons'] = [{ |
|
langKey: 'Delete', |
|
isDanger: true, |
|
callback |
|
}]; |
|
const checkboxes: PopupPeerOptions['checkboxes'] = []; |
|
let title: LangPackKey, titleArgs: any[], description: LangPackKey, descriptionArgs: any[]; |
|
if(mids.length === 1) { |
|
title = 'DeleteSingleMessagesTitle'; |
|
} else { |
|
title = 'DeleteMessagesTitle'; |
|
titleArgs = [i18n('messages', [mids.length])]; |
|
} |
|
|
|
if(await managers.appPeersManager.isMegagroup(peerId)) { |
|
description = mids.length === 1 ? 'AreYouSureDeleteSingleMessageMega' : 'AreYouSureDeleteFewMessagesMega'; |
|
} else { |
|
description = mids.length === 1 ? 'AreYouSureDeleteSingleMessage' : 'AreYouSureDeleteFewMessages'; |
|
} |
|
|
|
if(peerId === rootScope.myId || type === 'scheduled') { |
|
|
|
} else { |
|
if(peerId.isUser()) { |
|
checkboxes.push({ |
|
text: 'DeleteMessagesOptionAlso', |
|
textArgs: [peerTitleElement] |
|
}); |
|
} else { |
|
const chat = await managers.appChatsManager.getChat(peerId.toChatId()); |
|
|
|
const _hasRights = hasRights(chat, 'delete_messages'); |
|
if(chat._ === 'chat') { |
|
const canRevoke = _hasRights ? mids.slice() : await filterAsync(mids, async(mid) => { |
|
const message = await managers.appMessagesManager.getMessageByPeer(peerId, mid); |
|
return message.fromId === rootScope.myId; |
|
}); |
|
|
|
if(canRevoke.length) { |
|
if(canRevoke.length === mids.length) { |
|
checkboxes.push({ |
|
text: 'DeleteForAll' |
|
}); |
|
} else { |
|
checkboxes.push({ |
|
text: 'DeleteMessagesOption' |
|
}); |
|
|
|
description = 'DeleteMessagesTextGroup'; |
|
descriptionArgs = [i18n('messages', [canRevoke.length])]; |
|
// description = `You can also delete the ${canRevoke.length} message${canRevoke.length > 1 ? 's' : ''} you sent from the inboxes of other group members by pressing "${buttonText}".`; |
|
} |
|
} |
|
} else { |
|
buttons[0].callback = (checked) => callback(checked, true); |
|
} |
|
} |
|
} |
|
|
|
addCancelButton(buttons); |
|
|
|
const popup = new PopupPeer('popup-delete-chat', { |
|
peerId, |
|
titleLangKey: title, |
|
titleLangArgs: titleArgs, |
|
descriptionLangKey: description, |
|
descriptionLangArgs: descriptionArgs, |
|
buttons, |
|
checkboxes |
|
}); |
|
|
|
popup.show(); |
|
} |
|
}
|
|
|