/* * https://github.com/morethanwords/tweb * Copyright (C) 2019-2021 Eduard Kuzmenko * https://github.com/morethanwords/tweb/blob/master/LICENSE */ import appMessagesManager from "../../lib/appManagers/appMessagesManager"; import { addCancelButton } from "."; import PopupPeer, { PopupPeerButtonCallbackCheckboxes, PopupPeerOptions } from "./peer"; import appPeersManager from "../../lib/appManagers/appPeersManager"; import rootScope from "../../lib/rootScope"; import { FormatterArguments, LangPackKey } from "../../lib/langPack"; import appChatsManager from "../../lib/appManagers/appChatsManager"; import PeerTitle from "../peerTitle"; export default class PopupPinMessage { constructor(peerId: PeerId, mid: number, unpin?: true, onConfirm?: () => void) { let title: LangPackKey, description: LangPackKey, descriptionArgs: FormatterArguments, buttons: PopupPeerOptions['buttons'] = [], checkboxes: PopupPeerOptions['checkboxes'] = []; const canUnpin = appPeersManager.canPinMessage(peerId); const callback = (checked: PopupPeerButtonCallbackCheckboxes, oneSide?: boolean, silent?: boolean) => { setTimeout(() => { // * костыль, потому что document.elementFromPoint вернёт popup-peer пока он будет закрываться let promise: Promise; if(unpin && !mid) { if(canUnpin) { promise = appMessagesManager.unpinAllMessages(peerId); } else { promise = appMessagesManager.hidePinnedMessages(peerId); } } else { promise = appMessagesManager.updatePinnedMessage(peerId, mid, unpin, silent, oneSide); } if(onConfirm) { promise.then(onConfirm); } }, 300); }; if(unpin) { let buttonText: LangPackKey = 'UnpinMessage'; if(!mid) { if(canUnpin) { title = 'Popup.Unpin.AllTitle'; description = 'Chat.UnpinAllMessagesConfirmation'; descriptionArgs = ['' + (appMessagesManager.pinnedMessages[peerId]?.count || 1)]; } else { title = 'Popup.Unpin.HideTitle'; description = 'Popup.Unpin.HideDescription'; buttonText = 'Popup.Unpin.Hide'; } } else { title = 'UnpinMessageAlertTitle'; description = 'Chat.Confirm.Unpin'; } buttons.push({ langKey: buttonText, isDanger: true, callback }); } else { title = 'PinMessageAlertTitle'; const pinButtonText: LangPackKey = 'PinMessage'; if(peerId.isAnyChat()) { buttons.push({ langKey: pinButtonText, callback: (checked) => callback(checked, false, !checked.size) }); if(appChatsManager.isBroadcast(peerId.toChatId())) { description = 'PinMessageAlertChannel'; } else { description = 'PinMessageAlert'; checkboxes.push({ text: 'PinNotify', checked: true }); } } else { description = 'PinMessageAlertChat'; if(peerId === rootScope.myId) { buttons.push({ langKey: pinButtonText, callback }); } else { buttons.push({ langKey: pinButtonText, callback: (checked) => callback(checked, !checked.size) }); checkboxes.push({ text: 'PinAlsoFor', textArgs: [new PeerTitle({peerId}).element], checked: true }); } } } addCancelButton(buttons); const popup = new PopupPeer('popup-delete-chat', { peerId, titleLangKey: title, descriptionLangKey: description, descriptionLangArgs: descriptionArgs, buttons, checkboxes }); popup.show(); } }