Last active
October 26, 2018 18:14
-
-
Save AlexanderBollbach/e8a19954ee1277a48e7bc199cf1cdbba to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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