mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
72 lines
3.1 KiB
Swift
72 lines
3.1 KiB
Swift
import Foundation
|
|
import TelegramCore
|
|
|
|
func titlePanelForChatPresentationInterfaceState(_ chatPresentationInterfaceState: ChatPresentationInterfaceState, account: Account, currentPanel: ChatTitleAccessoryPanelNode?, interfaceInteraction: ChatPanelInterfaceInteraction?) -> ChatTitleAccessoryPanelNode? {
|
|
var selectedContext: ChatTitlePanelContext?
|
|
if !chatPresentationInterfaceState.titlePanelContexts.isEmpty {
|
|
loop: for context in chatPresentationInterfaceState.titlePanelContexts.reversed() {
|
|
switch context {
|
|
case .pinnedMessage:
|
|
if chatPresentationInterfaceState.pinnedMessageId != chatPresentationInterfaceState.interfaceState.messageActionsState.closedPinnedMessageId {
|
|
selectedContext = context
|
|
break loop
|
|
}
|
|
case .chatInfo, .requestInProgress, .toastAlert:
|
|
selectedContext = context
|
|
break loop
|
|
}
|
|
}
|
|
}
|
|
|
|
if chatPresentationInterfaceState.canReportPeer && (selectedContext == nil || selectedContext! <= .pinnedMessage) {
|
|
if let currentPanel = currentPanel as? ChatReportPeerTitlePanelNode {
|
|
return currentPanel
|
|
} else {
|
|
let panel = ChatReportPeerTitlePanelNode()
|
|
panel.interfaceInteraction = interfaceInteraction
|
|
return panel
|
|
}
|
|
}
|
|
|
|
if let selectedContext = selectedContext {
|
|
switch selectedContext {
|
|
case .pinnedMessage:
|
|
if let currentPanel = currentPanel as? ChatPinnedMessageTitlePanelNode {
|
|
return currentPanel
|
|
} else {
|
|
let panel = ChatPinnedMessageTitlePanelNode(account: account)
|
|
panel.interfaceInteraction = interfaceInteraction
|
|
return panel
|
|
}
|
|
case .chatInfo:
|
|
if let currentPanel = currentPanel as? ChatInfoTitlePanelNode {
|
|
return currentPanel
|
|
} else {
|
|
let panel = ChatInfoTitlePanelNode()
|
|
panel.interfaceInteraction = interfaceInteraction
|
|
return panel
|
|
}
|
|
case .requestInProgress:
|
|
if let currentPanel = currentPanel as? ChatRequestInProgressTitlePanelNode {
|
|
return currentPanel
|
|
} else {
|
|
let panel = ChatRequestInProgressTitlePanelNode()
|
|
panel.interfaceInteraction = interfaceInteraction
|
|
return panel
|
|
}
|
|
case let .toastAlert(text):
|
|
if let currentPanel = currentPanel as? ChatToastAlertPanelNode {
|
|
currentPanel.text = text
|
|
return currentPanel
|
|
} else {
|
|
let panel = ChatToastAlertPanelNode()
|
|
panel.text = text
|
|
panel.interfaceInteraction = interfaceInteraction
|
|
return panel
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|