Swiftgram/TelegramUI/ChatInterfaceStateInputPanels.swift
2016-09-10 18:00:50 +03:00

80 lines
3.8 KiB
Swift

import Foundation
import AsyncDisplayKit
import TelegramCore
func inputPanelForChatPresentationIntefaceState(_ chatPresentationInterfaceState: ChatPresentationInterfaceState, account: Account, currentPanel: ChatInputPanelNode?, textInputPanelNode: ChatTextInputPanelNode?, interfaceInteraction: ChatPanelInterfaceInteraction?) -> ChatInputPanelNode? {
if let selectionState = chatPresentationInterfaceState.interfaceState.selectionState {
if let currentPanel = currentPanel as? ChatMessageSelectionInputPanelNode {
currentPanel.selectedMessageCount = selectionState.selectedIds.count
currentPanel.interfaceInteraction = interfaceInteraction
currentPanel.peer = chatPresentationInterfaceState.peer
return currentPanel
} else {
let panel = ChatMessageSelectionInputPanelNode()
panel.account = account
panel.peer = chatPresentationInterfaceState.peer
panel.selectedMessageCount = selectionState.selectedIds.count
panel.interfaceInteraction = interfaceInteraction
return panel
}
} else {
if let peer = chatPresentationInterfaceState.peer {
if let channel = peer as? TelegramChannel {
switch channel.info {
case .broadcast:
switch channel.role {
case .creator, .editor, .moderator:
break
case .member:
if let currentPanel = currentPanel as? ChatChannelSubscriberInputPanelNode {
currentPanel.peer = peer
return currentPanel
} else {
let panel = ChatChannelSubscriberInputPanelNode()
panel.account = account
panel.peer = peer
return panel
}
}
case .group:
switch channel.participationStatus {
case .kicked, .left:
if let currentPanel = currentPanel as? ChatChannelSubscriberInputPanelNode {
currentPanel.peer = peer
return currentPanel
} else {
let panel = ChatChannelSubscriberInputPanelNode()
panel.account = account
panel.peer = peer
return panel
}
case .member:
break
}
}
}
if let currentPanel = currentPanel as? ChatTextInputPanelNode {
currentPanel.interfaceInteraction = interfaceInteraction
currentPanel.peer = peer
return currentPanel
} else {
if let textInputPanelNode = textInputPanelNode {
textInputPanelNode.interfaceInteraction = interfaceInteraction
textInputPanelNode.account = account
textInputPanelNode.peer = peer
return textInputPanelNode
} else {
let panel = ChatTextInputPanelNode()
panel.interfaceInteraction = interfaceInteraction
panel.account = account
panel.peer = peer
return panel
}
}
} else {
return nil
}
}
}