Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@AlexanderBollbach
Last active October 26, 2018 18:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AlexanderBollbach/e8a19954ee1277a48e7bc199cf1cdbba to your computer and use it in GitHub Desktop.
Save AlexanderBollbach/e8a19954ee1277a48e7bc199cf1cdbba to your computer and use it in GitHub Desktop.
class EditSettingsVM {
struct Inputs {
let reload = PublishSubject<Void>()
let updateSetting = PublishSubject<(SettingKey, SettingValue)>()
let reset = PublishSubject<Void>()
let dismiss = PublishSubject<Void>()
let updateEnumSetting = PublishSubject<(SettingKey, EnumSettingValue)>()
}
struct Outputs {
let sections: Observable<[ListItemSectionModel]>
let shouldDismiss: Observable<Void>
let isLoading: Observable<Bool>
}
let inputs = Inputs()
let outputs: Outputs
init(settingsController: SettingsController) {
let resetTappedSubject = PublishSubject<Void>()
let resetTappedObserver = AnyObserver<Void>.init(eventHandler: { event in
resetTappedSubject.onNext(())
})
let settingToggledObserver = AnyObserver<(SettingKey, Bool)>.init(eventHandler: { event in
})
let resetSettings = resetTappedSubject
.flatMap { _ -> Observable<[SettingGroup]> in
print("reset")
settingsController.reset()
return .just(settingsController.settingGroups)
}.debug("reset settings", trimOutput: false)
let sectionsDriving = Observable.combineLatest(inputs.reload, resetSettings.map { _ in () }.startWith(()))
.debug("sections dribing", trimOutput: false)
let sections = sectionsDriving
.flatMap { _ -> Observable<Event<[ListItemSectionModel]>> in
let headerItem = ListItem.settingsHeader(resetTapped: resetTappedObserver)
let section = ListItemSectionModel(model: .all, items: [headerItem])
return Observable.just([section]).materialize()
}.share()
outputs = Outputs(
sections: sections
.elements(),
// .debug("sections", trimOutput: false),
shouldDismiss: inputs.dismiss,
isLoading: sections.map { _ in false }.debug("is loading", trimOutput: false)
)
env.logger.log(type: .initialize, log: "\(self)")
}
deinit { env.logger.log(type: .deinitialize, log: "\(self)") }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment