No Description

UserInfoViewModel.swift 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. //
  2. // UserInfoViewModel.swift
  3. // PaiaiDataKit
  4. //
  5. // Created by FFIB on 2018/12/20.
  6. // Copyright © 2018 FFIB. All rights reserved.
  7. //
  8. import Foundation
  9. import RxSwift
  10. import RxCocoa
  11. fileprivate(set) var ShareUserId: String = ""
  12. public class UserInfoViewModel {
  13. public var shareUserInfo = BehaviorRelay<UserInfo>(value: UserInfo())
  14. public var isLoggedIn: Observable<Void> {
  15. return shareUserInfo.asObservable()
  16. .filter { $0.userId != "" }
  17. .flatMapLatest { _ in
  18. return Observable.just(())
  19. }
  20. }
  21. public var notLoggedIn: Observable<Void> {
  22. return shareUserInfo.asObservable()
  23. .filter { $0.userId == "" }
  24. .flatMapLatest { _ in
  25. return Observable.just(())
  26. }
  27. }
  28. public var loginCompleted: Observable<Void> {
  29. return _loginCompleted.asObservable()
  30. }
  31. public var guestLoginBtnTapped = PublishSubject<Void>()
  32. public var wxLoginBtnTapped = PublishSubject<Void>()
  33. private var _loginCompleted = PublishSubject<Void>()
  34. private var repository: UserInfoRepository
  35. private var disposeBag = DisposeBag()
  36. public init() {
  37. self.repository = UserInfoRepository(userInfoStore: UserInfoStore(),
  38. guestRemoteAPI: GuestUserInfoRemoteAPI(),
  39. wxRemoteAPI: WXUserInfoRemoteAPI())
  40. shareUserInfo.asObservable().subscribe(onNext: { (userInfo) in
  41. ShareUserId = userInfo.userId
  42. }).disposed(by: disposeBag)
  43. guestLoginBtnTapped.subscribe {[unowned self] _ in
  44. self.guestLogin()
  45. }.disposed(by: disposeBag)
  46. wxLoginBtnTapped.subscribe {[unowned self] _ in
  47. self.wxLogin()
  48. }.disposed(by: disposeBag)
  49. load()
  50. }
  51. fileprivate func load() {
  52. shareUserInfo.accept(repository.readUserInfo())
  53. }
  54. public func guestLogin() {
  55. repository.guestLogin().subscribe(onSuccess: { (userInfo) in
  56. self.shareUserInfo.accept(userInfo)
  57. self._loginCompleted.onNext(())
  58. }).disposed(by: disposeBag)
  59. }
  60. public func wxLogin() {
  61. Toast.showActivity(message: "正在登陆")
  62. repository.wxLogin().subscribe(onSuccess: { (userInfo) in
  63. self.shareUserInfo.accept(userInfo)
  64. self._loginCompleted.onNext(())
  65. Toast.hide()
  66. }).disposed(by: disposeBag)
  67. }
  68. }