import Foundation import UIKit import Display import TelegramPresentationData import ListSectionHeaderNode public enum ChatListSearchItemHeaderType: Int32 { case localPeers case members case contacts case bots case admins case globalPeers case deviceContacts case recentPeers case messages case phoneNumber case exceptions case addToExceptions } public final class ChatListSearchItemHeader: ListViewItemHeader { public let id: Int64 public let type: ChatListSearchItemHeaderType public let stickDirection: ListViewItemHeaderStickDirection = .top public let theme: PresentationTheme public let strings: PresentationStrings public let actionTitle: String? public let action: (() -> Void)? public let height: CGFloat = 28.0 public init(type: ChatListSearchItemHeaderType, theme: PresentationTheme, strings: PresentationStrings, actionTitle: String?, action: (() -> Void)?) { self.type = type self.id = Int64(self.type.rawValue) self.theme = theme self.strings = strings self.actionTitle = actionTitle self.action = action } public func node() -> ListViewItemHeaderNode { return ChatListSearchItemHeaderNode(type: self.type, theme: self.theme, strings: self.strings, actionTitle: self.actionTitle, action: self.action) } public func updateNode(_ node: ListViewItemHeaderNode, previous: ListViewItemHeader?, next: ListViewItemHeader?) { } } public final class ChatListSearchItemHeaderNode: ListViewItemHeaderNode { private let type: ChatListSearchItemHeaderType private var theme: PresentationTheme private var strings: PresentationStrings private let actionTitle: String? private let action: (() -> Void)? private let sectionHeaderNode: ListSectionHeaderNode public init(type: ChatListSearchItemHeaderType, theme: PresentationTheme, strings: PresentationStrings, actionTitle: String?, action: (() -> Void)?) { self.type = type self.theme = theme self.strings = strings self.actionTitle = actionTitle self.action = action self.sectionHeaderNode = ListSectionHeaderNode(theme: theme) super.init() switch type { case .localPeers: self.sectionHeaderNode.title = strings.DialogList_SearchSectionDialogs.uppercased() case .members: self.sectionHeaderNode.title = strings.Channel_Info_Members.uppercased() case .contacts: self.sectionHeaderNode.title = strings.Contacts_TopSection.uppercased() case .bots: self.sectionHeaderNode.title = strings.MemberSearch_BotSection.uppercased() case .admins: self.sectionHeaderNode.title = strings.Channel_Management_Title.uppercased() case .globalPeers: self.sectionHeaderNode.title = strings.DialogList_SearchSectionGlobal.uppercased() case .deviceContacts: self.sectionHeaderNode.title = strings.Contacts_NotRegisteredSection.uppercased() case .messages: self.sectionHeaderNode.title = strings.DialogList_SearchSectionMessages.uppercased() case .recentPeers: self.sectionHeaderNode.title = strings.DialogList_SearchSectionRecent.uppercased() case .phoneNumber: self.sectionHeaderNode.title = strings.Contacts_PhoneNumber.uppercased() case .exceptions: self.sectionHeaderNode.title = strings.GroupInfo_Permissions_Exceptions.uppercased() case .addToExceptions: self.sectionHeaderNode.title = strings.Exceptions_AddToExceptions.uppercased() } self.sectionHeaderNode.action = actionTitle self.sectionHeaderNode.activateAction = action self.addSubnode(self.sectionHeaderNode) } public func updateTheme(theme: PresentationTheme) { self.theme = theme self.sectionHeaderNode.updateTheme(theme: theme) } override public func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat) { self.sectionHeaderNode.frame = CGRect(origin: CGPoint(), size: size) self.sectionHeaderNode.updateLayout(size: size, leftInset: leftInset, rightInset: rightInset) } override public func animateRemoved(duration: Double) { self.alpha = 0.0 self.layer.animateAlpha(from: 1.0, to: 0.0, duration: duration, removeOnCompletion: true) } }