Skip to content

Commit

Permalink
Merge pull request #214 from wwt/interop-abandon
Browse files Browse the repository at this point in the history
[interop-abandon] - support workflow abandon with interop and navcontroller
  • Loading branch information
Tyler-Keith-Thompson committed Aug 28, 2022
2 parents a5c1bf4 + 630f4c8 commit c7438c9
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions Sources/SwiftCurrent_SwiftUI/Views/ViewControllerWrapper.swift
Expand Up @@ -9,6 +9,7 @@

#if (os(iOS) || os(tvOS) || targetEnvironment(macCatalyst)) && canImport(UIKit)
import SwiftUI
import Combine
import SwiftCurrent

/// A wrapper for exposing `UIViewController`s that are `FlowRepresentable` to SwiftUI.
Expand All @@ -27,6 +28,7 @@ public struct ViewControllerWrapper<F: FlowRepresentable & UIViewController>: Vi
private var vc: F

@StateObject private var model: Model
@EnvironmentObject private var workflowModel: WorkflowViewModel

public init(with args: F.WorkflowInput) {
let vc = F._factory(F.self, with: args)
Expand All @@ -42,6 +44,16 @@ public struct ViewControllerWrapper<F: FlowRepresentable & UIViewController>: Vi

public func makeUIViewController(context: Context) -> F {
model.vc._workflowPointer = _workflowPointer
workflowModel.onAbandonPublisher
.receive(on: RunLoop.main)
.sink {
if let navController = model.vc.navigationController,
let parent = model.vc.parent {
navController.popToViewController(parent, animated: true)
print("")
}
}
.store(in: &model.subscribers)
return model.vc
}

Expand All @@ -57,6 +69,7 @@ extension ViewControllerWrapper {
@available(iOS 14.0, macOS 11, tvOS 14.0, *)
final class Model: ObservableObject {
var vc: F
var subscribers = Set<AnyCancellable>()

init(vc: F) {
self.vc = vc
Expand Down

0 comments on commit c7438c9

Please sign in to comment.