UIKit bindings to connect UI to PureduxSrore
PureduxStore is available through Swift Package Manager. To install it, in Xcode 11.0 or later select File > Swift Packages > Add Package Dependency... and add Puredux repositoies URLs for the modules requried:
https://github.com/KazaiMazai/PureduxUIKit
import PureduxUIKit
Presentable
final class FancyViewController: UIViewController, Presentable {
var presenter: PresenterProtocol? { get set }
func setProps(_ props: Props) {
//update views here
}
override func viewDidLoad() {
super.viewDidLoad()
presenter?.subscribeToStore()
}
}
extension FancyViewController {
struct Props {
//some data that is prepared for showing here
}
}
Props
with current state and store. For e.g. as a part of some fancy presenter:
struct FancyVCPresenter {
func makeProps(
state: FancyFeatureState,
store: Store<FancyFeatureState, Action>) -> FancyViewController.Props {
//prepare props for your fancy view controller
}
}
let appState = AppState()
let rootStore = RootStore<AppState, Action>(initialState: appState, reducer: reducer)
let fancyFeatureStore = rootStore.store().proxy { $0.yourFancyFeatureSubstate }
let presenter = FancyVCPresenter()
let viewController = FancyViewController()
viewController.with(store: fancyFeatureStore,
props: presenter.makeProps)
Props
preparation.viewController.with(store: fancyFeatureStore,
props: presenter.makeProps,
presentationQueue: .main)
or standalone queue:
let queue = DispatchQueue(label: "some.queue", qos: .userInteractive)
viewController.with(store: fancyFeatureStore,
props: presenter.makeProps,
presentationQueue: .serialQueue(queue))
Equating<State>
guy:
viewController.with(store: fancyFeatureStore,
props: presenter.makeProps,
removeStateDuplicates: .equal {
$0.title
})
Equating<State>
guy?Equatable
implementation won't work here.
firstViewController.with(store: fancyFeatureStore,
props: firstVCpresenter.makeProps,
removeStateDuplicates: .equal {
$0.title
})
secondViewController.with(store: fancyFeatureStore,
props: secondVCpresenter.makeProps,
removeStateDuplicates: .equal {
$0.subtitle
})
Equating<State>
details ?Here is the definition:
Equating<T> { (lhs: T, rhs: T) -> Bool
//compare here
}
It has handy extensions, like Equating.alwaysEqual
or Equating.neverEqual
as well as &&
operator:
viewController.with(store: fancyFeatureStore,
props: vcPresenter.makeProps,
removeStateDuplicates:
.equal { $0.title } &&
.equal { $0.subtitle }
)
PureduxUIKit is licensed under MIT license.
link |
Stars: 9 |
Last commit: 2 weeks ago |
All is done and tests work on Github Actions
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics