import { SliderTab } from "../../slider"; import lottieLoader, { RLottiePlayer } from "../../../lib/lottieLoader"; import { RichTextProcessor } from "../../../lib/richtextprocessor"; import { cancelEvent, positionElementByIndex } from "../../../helpers/dom"; import { ripple } from "../../ripple"; import { toast } from "../../toast"; import type { ApiManagerProxy } from "../../../lib/mtproto/mtprotoworker"; import type { AppMessagesManager } from "../../../lib/appManagers/appMessagesManager"; import type { MyDialogFilter } from "../../../lib/storages/filters"; import type { AppPeersManager } from "../../../lib/appManagers/appPeersManager"; import type { AppSidebarLeft } from ".."; import type { DialogFilterSuggested, DialogFilter } from "../../../layer"; import type _rootScope from "../../../lib/rootScope"; export default class AppChatFoldersTab implements SliderTab { public container: HTMLElement; public createFolderBtn: HTMLElement; private foldersContainer: HTMLElement; private suggestedContainer: HTMLElement; private stickerContainer: HTMLElement; private animation: RLottiePlayer; private filtersRendered: {[filterID: number]: HTMLElement} = {}; constructor(private appMessagesManager: AppMessagesManager, private appPeersManager: AppPeersManager, private appSidebarLeft: AppSidebarLeft, private apiManager: ApiManagerProxy, private rootScope: typeof _rootScope) { } private renderFolder(dialogFilter: DialogFilterSuggested | DialogFilter | MyDialogFilter, container?: HTMLElement, div: HTMLElement = document.createElement('div')) { let filter: DialogFilter | MyDialogFilter; let description = ''; let d: string[] = []; if(dialogFilter._ == 'dialogFilterSuggested') { filter = dialogFilter.filter; description = dialogFilter.description; } else { filter = dialogFilter; description = ''; const filterID = filter.id; if(!this.filtersRendered.hasOwnProperty(filter.id)) { div.addEventListener('click', () => { this.appSidebarLeft.editFolderTab.open(this.appMessagesManager.filtersStorage.filters[filterID]); }); } this.filtersRendered[filter.id] = div; let enabledFilters = Object.keys(filter.pFlags).length; /* (['include_peers', 'exclude_peers'] as ['include_peers', 'exclude_peers']).forEach(key => { enabledFilters += +!!filter[key].length; }); */ if(enabledFilters == 1) { description = 'All '; const pFlags = filter.pFlags; if(pFlags.contacts) description += 'Contacts'; else if(pFlags.non_contacts) description += 'Non-Contacts'; else if(pFlags.groups) description += 'Groups'; else if(pFlags.broadcasts) description += 'Channels'; else if(pFlags.bots) description += 'Bots'; else if(pFlags.exclude_muted) description += 'Unmuted'; else if(pFlags.exclude_read) description += 'Unread'; else if(pFlags.exclude_archived) description += 'Unarchived'; d.push(description); } else { const folder = this.appMessagesManager.dialogsStorage.getFolder(filter.id); let chats = 0, channels = 0, groups = 0; for(const dialog of folder) { if(this.appPeersManager.isAnyGroup(dialog.peerID)) groups++; else if(this.appPeersManager.isBroadcast(dialog.peerID)) channels++; else chats++; } if(chats) d.push(chats + ' chats'); if(channels) d.push(channels + ' channels'); if(groups) d.push(groups + ' groups'); } } div.classList.add('category', 'rp-square'); div.innerHTML = `
${RichTextProcessor.wrapEmojiText(filter.title)}
${d.length ? d.join(', ') : description}