From 166f63b5f856a233ab245f2736e321557cece241 Mon Sep 17 00:00:00 2001 From: Eduard Kuzmenko Date: Sat, 13 Mar 2021 09:18:55 +0400 Subject: [PATCH] Delete channel, group --- .../sidebarRight/tabs/editChannel.ts | 33 ++++++++++-- src/components/sidebarRight/tabs/editGroup.ts | 51 ++++++++++++++----- src/lib/appManagers/appChatsManager.ts | 12 +++++ 3 files changed, 79 insertions(+), 17 deletions(-) diff --git a/src/components/sidebarRight/tabs/editChannel.ts b/src/components/sidebarRight/tabs/editChannel.ts index f601f203..93ac9a4a 100644 --- a/src/components/sidebarRight/tabs/editChannel.ts +++ b/src/components/sidebarRight/tabs/editChannel.ts @@ -7,7 +7,9 @@ import CheckboxField from "../../checkboxField"; import Button from "../../button"; import appChatsManager from "../../../lib/appManagers/appChatsManager"; import appProfileManager from "../../../lib/appManagers/appProfileManager"; -import { attachClickEvent } from "../../../helpers/dom"; +import { attachClickEvent, toggleDisability } from "../../../helpers/dom"; +import PopupPeer from "../../popups/peer"; +import { addCancelButton } from "../../popups"; export default class AppEditChannelTab extends SliderSuperTab { private nameInputField: InputField; @@ -15,10 +17,12 @@ export default class AppEditChannelTab extends SliderSuperTab { private editPeer: EditPeer; public peerId: number; - protected init() { + protected async init() { this.container.classList.add('edit-peer-container', 'edit-channel-container'); this.title.innerHTML = 'Edit'; + const chatFull = await appProfileManager.getChannelFull(-this.peerId, true); + { const section = new SettingSection({noDelimiter: true}); const inputFields: InputField[] = []; @@ -39,9 +43,7 @@ export default class AppEditChannelTab extends SliderSuperTab { this.nameInputField.setOriginalValue(appChatsManager.getChat(-this.peerId).title); - appProfileManager.getChatFull(-this.peerId).then(chatFull => { - this.descriptionInputField.setOriginalValue(chatFull.about); - }); + this.descriptionInputField.setOriginalValue(chatFull.about); inputWrapper.append(this.nameInputField.container, this.descriptionInputField.container); @@ -128,6 +130,27 @@ export default class AppEditChannelTab extends SliderSuperTab { const btnDelete = Button('btn-primary btn-transparent danger', {icon: 'delete', text: 'Delete Channel'}); + attachClickEvent(btnDelete, () => { + new PopupPeer('popup-delete-channel', { + peerId: this.peerId, + title: 'Delete Group?', + description: `Are you sure you want to delete this channel? All subscribers will be removed and all messages will be lost.`, + buttons: addCancelButton([{ + text: 'DELETE', + callback: () => { + toggleDisability([btnDelete], true); + + appChatsManager.deleteChannel(-this.peerId).then(() => { + this.close(); + }, () => { + toggleDisability([btnDelete], false); + }); + }, + isDanger: true + }]) + }).show(); + }, {listenerSetter: this.listenerSetter}); + section.content.append(btnDelete); this.scrollable.append(section.container); diff --git a/src/components/sidebarRight/tabs/editGroup.ts b/src/components/sidebarRight/tabs/editGroup.ts index 9d558923..126964f0 100644 --- a/src/components/sidebarRight/tabs/editGroup.ts +++ b/src/components/sidebarRight/tabs/editGroup.ts @@ -7,7 +7,10 @@ import CheckboxField from "../../checkboxField"; import Button from "../../button"; import appChatsManager from "../../../lib/appManagers/appChatsManager"; import appProfileManager from "../../../lib/appManagers/appProfileManager"; -import { attachClickEvent } from "../../../helpers/dom"; +import { attachClickEvent, toggleDisability } from "../../../helpers/dom"; +import { ChatFull } from "../../../layer"; +import PopupPeer from "../../popups/peer"; +import { addCancelButton } from "../../popups"; export default class AppEditGroupTab extends SliderSuperTab { private groupNameInputField: InputField; @@ -15,10 +18,12 @@ export default class AppEditGroupTab extends SliderSuperTab { private editPeer: EditPeer; public peerId: number; - protected init() { + protected async init() { this.container.classList.add('edit-peer-container', 'edit-group-container'); this.title.innerHTML = 'Edit'; + const chatFull = await appProfileManager.getChatFull(-this.peerId, true); + { const section = new SettingSection({noDelimiter: true}); const inputFields: InputField[] = []; @@ -39,9 +44,7 @@ export default class AppEditGroupTab extends SliderSuperTab { this.groupNameInputField.setOriginalValue(appChatsManager.getChat(-this.peerId).title); - appProfileManager.getChatFull(-this.peerId).then(chatFull => { - this.descriptionInputField.setOriginalValue(chatFull.about); - }); + this.descriptionInputField.setOriginalValue(chatFull.about); inputWrapper.append(this.groupNameInputField.container, this.descriptionInputField.container); @@ -54,6 +57,8 @@ export default class AppEditGroupTab extends SliderSuperTab { }); this.content.append(this.editPeer.nextBtn); + //section.content.append(this.editPeer.avatarEdit.container, inputWrapper); + const groupTypeRow = new Row({ title: 'Group Type', subtitle: 'Private', @@ -70,7 +75,7 @@ export default class AppEditGroupTab extends SliderSuperTab { const administratorsRow = new Row({ title: 'Administrators', - subtitle: '5', + subtitle: '' + ((chatFull as ChatFull.channelFull).admins_count || 1), icon: 'admin', clickable: true }); @@ -119,22 +124,44 @@ export default class AppEditGroupTab extends SliderSuperTab { }); const showChatHistoryCheckboxField = new CheckboxField({ - text: 'Show chat history for new members', - checked: true + text: 'Show chat history for new members' }); + if(appChatsManager.isChannel(-this.peerId) && !(chatFull as ChatFull.channelFull).pFlags.hidden_prehistory) { + showChatHistoryCheckboxField.value = true; + } + section.content.append(membersRow.container, showChatHistoryCheckboxField.label); this.scrollable.append(section.container); } - { - const section = new SettingSection({ - - }); + if(appChatsManager.isChannel(-this.peerId)) { + const section = new SettingSection({}); const btnDelete = Button('btn-primary btn-transparent danger', {icon: 'delete', text: 'Delete Group'}); + attachClickEvent(btnDelete, () => { + new PopupPeer('popup-delete-group', { + peerId: this.peerId, + title: 'Delete Group?', + description: `Are you sure you want to delete this group? All members will be removed, and all messages will be lost.`, + buttons: addCancelButton([{ + text: 'DELETE', + callback: () => { + toggleDisability([btnDelete], true); + + appChatsManager.deleteChannel(-this.peerId).then(() => { + this.close(); + }, () => { + toggleDisability([btnDelete], false); + }); + }, + isDanger: true + }]) + }).show(); + }, {listenerSetter: this.listenerSetter}); + section.content.append(btnDelete); this.scrollable.append(section.container); diff --git a/src/lib/appManagers/appChatsManager.ts b/src/lib/appManagers/appChatsManager.ts index 6d9ce567..49569bd9 100644 --- a/src/lib/appManagers/appChatsManager.ts +++ b/src/lib/appManagers/appChatsManager.ts @@ -531,6 +531,18 @@ export class AppChatsManager { return this.isChannel(id) ? this.leaveChannel(id) : this.leaveChat(id); } + public deleteChannel(id: number) { + return apiManager.invokeApi('channels.deleteChannel', { + channel: this.getChannelInput(id) + }).then(this.onChatUpdated.bind(this, id)); + } + + public migrateChat(id: number) { + return apiManager.invokeApi('messages.migrateChat', { + chat_id: id + }).then(this.onChatUpdated.bind(this, id)); + } + public editPhoto(id: number, inputFile: InputFile) { const inputChatPhoto: InputChatPhoto = { _: 'inputChatUploadedPhoto',