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 { deinit {
self.context.sharedContext.hasPreloadBlockingContent.set(.single(false)) self.context.sharedContext.hasPreloadBlockingContent.set(.single(false))
self.focusedItemPromise.set(.single(nil))
} }
override public func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { 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) let targetController = component.context.sharedContext.makeMyStoriesController(context: component.context, isArchive: false)
var viewControllers = navigationController.viewControllers if "".isEmpty {
if let index = viewControllers.firstIndex(where: { $0 === controller }) { navigationController.pushViewController(targetController)
viewControllers.insert(targetController, at: index)
} else { } 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) { 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 { guard let controller, let navigationController else {
return return
} }
var viewControllers = navigationController.viewControllers if "".isEmpty {
if let index = viewControllers.firstIndex(where: { $0 === controller }) { navigationController.pushViewController(chatController)
viewControllers.insert(chatController, at: index)
} else { } 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 { } 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 { 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 return
} }
var viewControllers = navigationController.viewControllers if "".isEmpty {
if let index = viewControllers.firstIndex(where: { $0 === controller }) { navigationController.pushViewController(chatController)
viewControllers.insert(chatController, at: index)
} else { } 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() { private func openStoryEditing() {

View File

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