Chat navigation from story screen

This commit is contained in:
Ali 2023-07-03 16:35:00 +02:00
parent 9c2d44a24c
commit 9ed09e2f1a
3 changed files with 38 additions and 22 deletions

View File

@ -1320,6 +1320,7 @@ public class StoryContainerScreen: ViewControllerComponentContainer {
deinit {
self.context.sharedContext.hasPreloadBlockingContent.set(.single(false))
self.focusedItemPromise.set(.single(nil))
}
override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {

View File

@ -2973,13 +2973,17 @@ public final class StoryItemSetContainerComponent: Component {
let targetController = component.context.sharedContext.makeMyStoriesController(context: component.context, isArchive: false)
var viewControllers = navigationController.viewControllers
if let index = viewControllers.firstIndex(where: { $0 === controller }) {
viewControllers.insert(targetController, at: index)
if "".isEmpty {
navigationController.pushViewController(targetController)
} else {
viewControllers.append(targetController)
var viewControllers = navigationController.viewControllers
if let index = viewControllers.firstIndex(where: { $0 === controller }) {
viewControllers.insert(targetController, at: index)
} else {
viewControllers.append(targetController)
}
navigationController.setViewControllers(viewControllers, animated: true)
}
navigationController.setViewControllers(viewControllers, animated: true)
}
func navigateToPeer(peer: EnginePeer, chat: Bool, messageId: EngineMessage.Id? = nil) {
@ -3001,29 +3005,35 @@ public final class StoryItemSetContainerComponent: Component {
guard let controller, let navigationController else {
return
}
var viewControllers = navigationController.viewControllers
if let index = viewControllers.firstIndex(where: { $0 === controller }) {
viewControllers.insert(chatController, at: index)
if "".isEmpty {
navigationController.pushViewController(chatController)
} else {
viewControllers.append(chatController)
var viewControllers = navigationController.viewControllers
if let index = viewControllers.firstIndex(where: { $0 === controller }) {
viewControllers.insert(chatController, at: index)
} else {
viewControllers.append(chatController)
}
navigationController.setViewControllers(viewControllers, animated: animated)
}
navigationController.setViewControllers(viewControllers, animated: animated)
}))
} else {
guard let chatController = component.context.sharedContext.makePeerInfoController(context: component.context, updatedPresentationData: nil, peer: peer._asPeer(), mode: .generic, avatarInitiallyExpanded: false, fromChat: false, requestsContext: nil) else {
return
}
var viewControllers = navigationController.viewControllers
if let index = viewControllers.firstIndex(where: { $0 === controller }) {
viewControllers.insert(chatController, at: index)
if "".isEmpty {
navigationController.pushViewController(chatController)
} else {
viewControllers.append(chatController)
var viewControllers = navigationController.viewControllers
if let index = viewControllers.firstIndex(where: { $0 === controller }) {
viewControllers.insert(chatController, at: index)
} else {
viewControllers.append(chatController)
}
navigationController.setViewControllers(viewControllers, animated: true)
}
navigationController.setViewControllers(viewControllers, animated: true)
}
controller.dismissWithoutTransitionOut()
}
private func openStoryEditing() {

View File

@ -14,6 +14,7 @@ import ChatPresentationInterfaceState
import AttachmentUI
import ForumCreateTopicScreen
import LegacyInstantVideoController
import StoryContainerScreen
public func navigateToChatControllerImpl(_ params: NavigateToChatControllerParams) {
if case let .peer(peer) = params.chatLocation, case let .channel(channel) = peer, channel.flags.contains(.isForum) {
@ -149,12 +150,16 @@ public func navigateToChatControllerImpl(_ params: NavigateToChatControllerParam
}
let resolvedKeepStack: Bool
switch params.keepStack {
case .default:
resolvedKeepStack = params.context.sharedContext.immediateExperimentalUISettings.keepChatNavigationStack
case .always:
case .default:
if params.navigationController.viewControllers.contains(where: { $0 is StoryContainerScreen }) {
resolvedKeepStack = true
case .never:
resolvedKeepStack = false
} else {
resolvedKeepStack = params.context.sharedContext.immediateExperimentalUISettings.keepChatNavigationStack
}
case .always:
resolvedKeepStack = true
case .never:
resolvedKeepStack = false
}
if resolvedKeepStack {
if let pushController = params.pushController {