Skip to content

Commit

Permalink
Merge pull request #213 from wwt/fix-212
Browse files Browse the repository at this point in the history
[fix-212] - Add UIKit views to play with in sample app and fix #212 - TT
  • Loading branch information
Tyler-Keith-Thompson committed Aug 28, 2022
2 parents 3fda6bd + 2f547e0 commit 8b93684
Show file tree
Hide file tree
Showing 3 changed files with 228 additions and 7 deletions.
Expand Up @@ -34,6 +34,7 @@
CA84D8E726A0E72A006CF964 /* MapFeatureViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA84D8E626A0E72A006CF964 /* MapFeatureViewTests.swift */; };
CA84D8E926A0ED66006CF964 /* ChangePasswordViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA84D8E826A0ED66006CF964 /* ChangePasswordViewTests.swift */; };
CA971D2226D593150083821A /* XCTestCaseExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA971D2126D593150083821A /* XCTestCaseExtensions.swift */; };
CAA4DE0228BB1A740059324B /* SwiftCurrent_UIKit in Frameworks */ = {isa = PBXBuildFile; productRef = CAA4DE0128BB1A740059324B /* SwiftCurrent_UIKit */; };
CABEC41726E13BC900F1BF53 /* TestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A6CE7D26E039C300599824 /* TestView.swift */; };
CABEC41926E1899000F1BF53 /* SwiftCurrent_SwiftUI in Frameworks */ = {isa = PBXBuildFile; productRef = CABEC41826E1899000F1BF53 /* SwiftCurrent_SwiftUI */; };
CABEC41B26E1899000F1BF53 /* SwiftCurrent in Frameworks */ = {isa = PBXBuildFile; productRef = CABEC41A26E1899000F1BF53 /* SwiftCurrent */; };
Expand Down Expand Up @@ -227,6 +228,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
CAA4DE0228BB1A740059324B /* SwiftCurrent_UIKit in Frameworks */,
CABEC41B26E1899000F1BF53 /* SwiftCurrent in Frameworks */,
CABEC41926E1899000F1BF53 /* SwiftCurrent_SwiftUI in Frameworks */,
);
Expand Down Expand Up @@ -587,6 +589,7 @@
packageProductDependencies = (
CABEC41826E1899000F1BF53 /* SwiftCurrent_SwiftUI */,
CABEC41A26E1899000F1BF53 /* SwiftCurrent */,
CAA4DE0128BB1A740059324B /* SwiftCurrent_UIKit */,
);
productName = SwiftCurrent_SwiftUI_UITests;
productReference = D7A6CE7226E0316C00599824 /* SwiftCurrent_SwiftUI_UITests.xctest */;
Expand Down Expand Up @@ -1111,6 +1114,10 @@
package = CA6FB0E526C6ADCD00FB3285 /* XCRemoteSwiftPackageReference "UIUTest" */;
productName = UIUTest;
};
CAA4DE0128BB1A740059324B /* SwiftCurrent_UIKit */ = {
isa = XCSwiftPackageProductDependency;
productName = SwiftCurrent_UIKit;
};
CABEC41826E1899000F1BF53 /* SwiftCurrent_SwiftUI */ = {
isa = XCSwiftPackageProductDependency;
productName = SwiftCurrent_SwiftUI;
Expand Down
193 changes: 193 additions & 0 deletions ExampleApps/SwiftUIExample/SwiftUIExample/TestViews/TestView.swift
Expand Up @@ -8,6 +8,7 @@

import SwiftUI
import SwiftCurrent_SwiftUI
import SwiftCurrent_UIKit

struct TestView: View {
var body: some View {
Expand Down Expand Up @@ -206,3 +207,195 @@ struct FR4: View, FlowRepresentable {
return shouldLoad
}
}

final class FRUI1: UIWorkflowItem<Never, Never>, FlowRepresentable {
private lazy var text: UITextField = {
let textField = UITextField()
textField.text = "This is: \(String(describing: Self.self))"
textField.translatesAutoresizingMaskIntoConstraints = false
return textField
}()

private lazy var navigateForwardButton: UIButton = {
let button = UIButton(primaryAction: UIAction(title: "Navigate foward", handler: { [self] _ in
proceedInWorkflow()
}))
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()

private lazy var navigateBackwardButton: UIButton = {
let button = UIButton(primaryAction: UIAction(title: "Navigate backward", handler: { [self] _ in
try? backUpInWorkflow()
}))
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()

override func viewDidLoad() {
super.viewDidLoad()

view.backgroundColor = .systemBackground

view.addSubview(text)
view.addSubview(navigateForwardButton)
view.addSubview(navigateBackwardButton)

NSLayoutConstraint.activate([
text.centerXAnchor.constraint(equalTo: view.centerXAnchor),
text.centerYAnchor.constraint(equalTo: view.centerYAnchor),
text.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
text.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),
navigateForwardButton.topAnchor.constraint(equalTo: text.bottomAnchor, constant: 10),
navigateForwardButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
navigateForwardButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),
navigateBackwardButton.topAnchor.constraint(equalTo: navigateForwardButton.bottomAnchor, constant: 10),
navigateBackwardButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
navigateBackwardButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),
])
}
}

final class FRUI2: UIWorkflowItem<Never, Never>, FlowRepresentable {
private lazy var text: UITextField = {
let textField = UITextField()
textField.text = "This is: \(String(describing: Self.self))"
textField.translatesAutoresizingMaskIntoConstraints = false
return textField
}()

private lazy var navigateForwardButton: UIButton = {
let button = UIButton(primaryAction: UIAction(title: "Navigate foward", handler: { [self] _ in
proceedInWorkflow()
}))
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()

private lazy var navigateBackwardButton: UIButton = {
let button = UIButton(primaryAction: UIAction(title: "Navigate backward", handler: { [self] _ in
try? backUpInWorkflow()
}))
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()

override func viewDidLoad() {
super.viewDidLoad()

view.backgroundColor = .systemBackground

view.addSubview(text)
view.addSubview(navigateForwardButton)
view.addSubview(navigateBackwardButton)

NSLayoutConstraint.activate([
text.centerXAnchor.constraint(equalTo: view.centerXAnchor),
text.centerYAnchor.constraint(equalTo: view.centerYAnchor),
text.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
text.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),
navigateForwardButton.topAnchor.constraint(equalTo: text.bottomAnchor, constant: 10),
navigateForwardButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
navigateForwardButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),
navigateBackwardButton.topAnchor.constraint(equalTo: navigateForwardButton.bottomAnchor, constant: 10),
navigateBackwardButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
navigateBackwardButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),
])
}
}

final class FRUI3: UIWorkflowItem<Never, Never>, FlowRepresentable {
private lazy var text: UITextField = {
let textField = UITextField()
textField.text = "This is: \(String(describing: Self.self))"
textField.translatesAutoresizingMaskIntoConstraints = false
return textField
}()

private lazy var navigateForwardButton: UIButton = {
let button = UIButton(primaryAction: UIAction(title: "Navigate foward", handler: { [self] _ in
proceedInWorkflow()
}))
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()

private lazy var navigateBackwardButton: UIButton = {
let button = UIButton(primaryAction: UIAction(title: "Navigate backward", handler: { [self] _ in
try? backUpInWorkflow()
}))
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()

override func viewDidLoad() {
super.viewDidLoad()

view.backgroundColor = .systemBackground

view.addSubview(text)
view.addSubview(navigateForwardButton)
view.addSubview(navigateBackwardButton)

NSLayoutConstraint.activate([
text.centerXAnchor.constraint(equalTo: view.centerXAnchor),
text.centerYAnchor.constraint(equalTo: view.centerYAnchor),
text.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
text.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),
navigateForwardButton.topAnchor.constraint(equalTo: text.bottomAnchor, constant: 10),
navigateForwardButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
navigateForwardButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),
navigateBackwardButton.topAnchor.constraint(equalTo: navigateForwardButton.bottomAnchor, constant: 10),
navigateBackwardButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
navigateBackwardButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),
])
}
}

final class FRUI4: UIWorkflowItem<Never, Never>, FlowRepresentable {
private lazy var text: UITextField = {
let textField = UITextField()
textField.text = "This is: \(String(describing: Self.self))"
textField.translatesAutoresizingMaskIntoConstraints = false
return textField
}()

private lazy var navigateForwardButton: UIButton = {
let button = UIButton(primaryAction: UIAction(title: "Navigate foward", handler: { [self] _ in
proceedInWorkflow()
}))
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()

private lazy var navigateBackwardButton: UIButton = {
let button = UIButton(primaryAction: UIAction(title: "Navigate backward", handler: { [self] _ in
try? backUpInWorkflow()
}))
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()

override func viewDidLoad() {
super.viewDidLoad()

view.backgroundColor = .systemBackground

view.addSubview(text)
view.addSubview(navigateForwardButton)
view.addSubview(navigateBackwardButton)

NSLayoutConstraint.activate([
text.centerXAnchor.constraint(equalTo: view.centerXAnchor),
text.centerYAnchor.constraint(equalTo: view.centerYAnchor),
text.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
text.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),
navigateForwardButton.topAnchor.constraint(equalTo: text.bottomAnchor, constant: 10),
navigateForwardButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
navigateForwardButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),
navigateBackwardButton.topAnchor.constraint(equalTo: navigateForwardButton.bottomAnchor, constant: 10),
navigateBackwardButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
navigateBackwardButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20),
])
}
}
35 changes: 28 additions & 7 deletions Sources/SwiftCurrent_SwiftUI/Views/ViewControllerWrapper.swift
Expand Up @@ -25,21 +25,42 @@ public struct ViewControllerWrapper<F: FlowRepresentable & UIViewController>: Vi
}

private var vc: F
private let args: WorkflowInput?

@StateObject private var model: Model

public init(with args: F.WorkflowInput) {
self.args = args
vc = F._factory(F.self, with: args)
let vc = F._factory(F.self, with: args)
self.vc = vc
_model = StateObject(wrappedValue: Model(vc: vc))
}

public init() {
args = nil
vc = F._factory(F.self)
let vc = F._factory(F.self)
self.vc = vc
_model = StateObject(wrappedValue: Model(vc: vc))
}

public func makeUIViewController(context: Context) -> F { vc }
public func makeUIViewController(context: Context) -> F {
model.vc._workflowPointer = _workflowPointer
return model.vc
}

public func updateUIViewController(_ uiViewController: F, context: Context) { }
public func updateUIViewController(_ uiViewController: F, context: Context) {
model.vc._workflowPointer = _workflowPointer
}

public func shouldLoad() -> Bool { vc.shouldLoad() }
}

@available(iOS 14.0, macOS 11, tvOS 14.0, *)
extension ViewControllerWrapper {
@available(iOS 14.0, macOS 11, tvOS 14.0, *)
final class Model: ObservableObject {
var vc: F

init(vc: F) {
self.vc = vc
}
}
}
#endif

0 comments on commit 8b93684

Please sign in to comment.