Swiftgram/TelegramUI/ChatInterfaceTitlePanelNodes.swift
2017-03-03 13:48:11 +04:00

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
}