mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-07-31 15:37:01 +00:00

git-subtree-dir: submodules/TelegramUI git-subtree-mainline: 5c1613d1048026b9e00a6ce753775cef87eb53fa git-subtree-split: fa3ac0b61a27c8dd3296518a15891a6f9750cbf2
53 lines
2.6 KiB
Swift
53 lines
2.6 KiB
Swift
import Foundation
|
|
import UIKit
|
|
import AsyncDisplayKit
|
|
import TelegramCore
|
|
import Postbox
|
|
|
|
func inputNodeForChatPresentationIntefaceState(_ chatPresentationInterfaceState: ChatPresentationInterfaceState, context: AccountContext, currentNode: ChatInputNode?, interfaceInteraction: ChatPanelInterfaceInteraction?, inputMediaNode: ChatMediaInputNode?, controllerInteraction: ChatControllerInteraction, inputPanelNode: ChatInputPanelNode?) -> ChatInputNode? {
|
|
if !(inputPanelNode is ChatTextInputPanelNode) {
|
|
return nil
|
|
}
|
|
switch chatPresentationInterfaceState.inputMode {
|
|
case .media:
|
|
if let currentNode = currentNode as? ChatMediaInputNode {
|
|
return currentNode
|
|
} else if let inputMediaNode = inputMediaNode {
|
|
return inputMediaNode
|
|
} else {
|
|
var peerId: PeerId?
|
|
if case let .peer(id) = chatPresentationInterfaceState.chatLocation {
|
|
peerId = id
|
|
}
|
|
let inputNode = ChatMediaInputNode(context: context, peerId: peerId, controllerInteraction: controllerInteraction, theme: chatPresentationInterfaceState.theme, strings: chatPresentationInterfaceState.strings, gifPaneIsActiveUpdated: { [weak interfaceInteraction] value in
|
|
if let interfaceInteraction = interfaceInteraction {
|
|
interfaceInteraction.updateInputModeAndDismissedButtonKeyboardMessageId { state in
|
|
if case let .media(_, expanded) = state.inputMode {
|
|
if value {
|
|
return (.media(mode: .gif, expanded: expanded), nil)
|
|
} else {
|
|
return (.media(mode: .other, expanded: expanded), nil)
|
|
}
|
|
} else {
|
|
return (state.inputMode, nil)
|
|
}
|
|
}
|
|
}
|
|
})
|
|
inputNode.interfaceInteraction = interfaceInteraction
|
|
return inputNode
|
|
}
|
|
case .inputButtons:
|
|
if let currentNode = currentNode as? ChatButtonKeyboardInputNode {
|
|
return currentNode
|
|
} else {
|
|
let inputNode = ChatButtonKeyboardInputNode(context: context, controllerInteraction: controllerInteraction)
|
|
inputNode.interfaceInteraction = interfaceInteraction
|
|
return inputNode
|
|
}
|
|
case .none, .text:
|
|
return nil
|
|
}
|
|
return nil
|
|
}
|