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,6 +2973,9 @@ 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)
if "".isEmpty {
navigationController.pushViewController(targetController)
} else {
var viewControllers = navigationController.viewControllers var viewControllers = navigationController.viewControllers
if let index = viewControllers.firstIndex(where: { $0 === controller }) { if let index = viewControllers.firstIndex(where: { $0 === controller }) {
viewControllers.insert(targetController, at: index) viewControllers.insert(targetController, at: index)
@ -2981,6 +2984,7 @@ public final class StoryItemSetContainerComponent: Component {
} }
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) {
guard let component = self.component else { guard let component = self.component else {
@ -3001,6 +3005,9 @@ public final class StoryItemSetContainerComponent: Component {
guard let controller, let navigationController else { guard let controller, let navigationController else {
return return
} }
if "".isEmpty {
navigationController.pushViewController(chatController)
} else {
var viewControllers = navigationController.viewControllers var viewControllers = navigationController.viewControllers
if let index = viewControllers.firstIndex(where: { $0 === controller }) { if let index = viewControllers.firstIndex(where: { $0 === controller }) {
viewControllers.insert(chatController, at: index) viewControllers.insert(chatController, at: index)
@ -3008,12 +3015,16 @@ public final class StoryItemSetContainerComponent: Component {
viewControllers.append(chatController) 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
} }
if "".isEmpty {
navigationController.pushViewController(chatController)
} else {
var viewControllers = navigationController.viewControllers var viewControllers = navigationController.viewControllers
if let index = viewControllers.firstIndex(where: { $0 === controller }) { if let index = viewControllers.firstIndex(where: { $0 === controller }) {
viewControllers.insert(chatController, at: index) viewControllers.insert(chatController, at: index)
@ -3022,8 +3033,7 @@ public final class StoryItemSetContainerComponent: Component {
} }
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) {
@ -150,7 +151,11 @@ public func navigateToChatControllerImpl(_ params: NavigateToChatControllerParam
let resolvedKeepStack: Bool let resolvedKeepStack: Bool
switch params.keepStack { switch params.keepStack {
case .default: case .default:
if params.navigationController.viewControllers.contains(where: { $0 is StoryContainerScreen }) {
resolvedKeepStack = true
} else {
resolvedKeepStack = params.context.sharedContext.immediateExperimentalUISettings.keepChatNavigationStack resolvedKeepStack = params.context.sharedContext.immediateExperimentalUISettings.keepChatNavigationStack
}
case .always: case .always:
resolvedKeepStack = true resolvedKeepStack = true
case .never: case .never: