RQProfileViewModel.m 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. //
  2. // RQProfileViewModel.m
  3. // RQCommon
  4. //
  5. // Created by 张嵘 on 2018/11/21.
  6. // Copyright © 2018 张嵘. All rights reserved.
  7. //
  8. #import "RQProfileViewModel.h"
  9. @interface RQProfileViewModel ()
  10. /// The current `user`.
  11. @property (nonatomic, readwrite , strong) RQUserModel *user;
  12. @end
  13. @implementation RQProfileViewModel
  14. - (instancetype)initWithServices:(id<RQViewModelServices>)services params:(NSDictionary *)params{
  15. if (self = [super initWithServices:services params:params]) {
  16. /// 获取user
  17. self.user = [RQ_USER_MANAGER currentUser];
  18. }
  19. return self;
  20. }
  21. - (void)initialize
  22. {
  23. [super initialize];
  24. @weakify(self);
  25. self.title = @"快捷功能";
  26. /// 获取网络数据+本地数据
  27. RACSignal *fetchLocalDataSignal = [RACSignal return:[self fetchLocalData]];
  28. RACSignal *requestRemoteDataSignal = self.requestRemoteDataCommand.executionSignals.switchToLatest;
  29. [[[fetchLocalDataSignal
  30. merge:requestRemoteDataSignal]
  31. deliverOnMainThread]
  32. subscribeNext:^(RQUserModel *user) {
  33. @strongify(self)
  34. [self willChangeValueForKey:@"user"];
  35. /// user模型的数据 重置,但是user的 指针地址不变
  36. [self.user mergeValuesForKeysFromModel:user];
  37. [self didChangeValueForKey:@"user"];
  38. }];
  39. /// 配置数据
  40. [self _configureData];
  41. }
  42. /// 获取本地的用户数据
  43. - (RQUserModel *)fetchLocalData{
  44. return [RQ_USER_MANAGER currentUser];
  45. }
  46. /// 获取网络的用户数据 用于比对
  47. - (RACSignal *)requestRemoteDataSignalWithPage:(NSUInteger)page {
  48. return [[RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
  49. RQ_USER_MANAGER.currentUser.channel = RQUserLoginChannelTypeAutoLogin;
  50. // [[RQ_HTTP_Service studentLoginWithLoginCode:RQ_USER_MANAGER.currentUser.loginCode password:RQ_USER_MANAGER.currentUser.password] subscribeNext:^(RQUserModel *userModel) {
  51. // [subscriber sendNext:userModel];
  52. // } error:^(NSError * _Nullable error) {
  53. // [subscriber sendError:error];
  54. // } completed:^{
  55. // [subscriber sendCompleted];
  56. // }];
  57. return [RACDisposable disposableWithBlock:^{
  58. /// 取消任务
  59. }];
  60. }] doError:^(NSError * _Nonnull error) {
  61. [MBProgressHUD rq_showErrorTips:error];
  62. }];
  63. }
  64. #pragma mark - 配置数据
  65. - (void)_configureData{
  66. /// 第一组
  67. RQCommonGroupViewModel *group0 = [RQCommonGroupViewModel groupViewModel];
  68. /// 用户信息
  69. CommonProfileHeaderItemViewModel *profileHeader = [[CommonProfileHeaderItemViewModel alloc] initViewModelWithUser:self.user];
  70. /// 由于涉及到 更新用户的数据,这里最后把用户数据传递过去
  71. // profileHeader.destViewModelClass = [RQUserInfoViewModel class];
  72. @weakify(self);
  73. profileHeader.operation = ^{
  74. @strongify(self);
  75. // RQUserInfoViewModel *viewModel = [[RQUserInfoViewModel alloc] initWithServices:self.services params:@{RQViewModelUtilKey:self.user}];
  76. // [self.services pushViewModel:viewModel animated:YES];
  77. };
  78. group0.itemViewModels = @[profileHeader];
  79. /// 第一组
  80. RQCommonGroupViewModel *group1 = [RQCommonGroupViewModel groupViewModel];
  81. /// 支付
  82. RQCommonArrowItemViewModel *pay = [RQCommonArrowItemViewModel itemViewModelWithTitle:@"支付" icon:@"icons_outlined_wechatpay.svg"];
  83. /// 设置组头高度
  84. group1.itemViewModels = @[pay];
  85. /// 第二组
  86. RQCommonGroupViewModel *group2 = [RQCommonGroupViewModel groupViewModel];
  87. /// 收藏
  88. RQCommonArrowItemViewModel *collect = [RQCommonArrowItemViewModel itemViewModelWithTitle:@"收藏" icon:@"icons_outlined_colorful_favorites.svg"];
  89. /// 相册
  90. RQCommonArrowItemViewModel *album = [RQCommonArrowItemViewModel itemViewModelWithTitle:@"相册" icon:@"icons_outlined_album.svg"];
  91. /// 卡包
  92. RQCommonArrowItemViewModel *cardPackage = [RQCommonArrowItemViewModel itemViewModelWithTitle:@"卡包" icon:@"icons_outlined_colorful_cards.svg"];
  93. /// 表情
  94. RQCommonArrowItemViewModel *expression = [RQCommonArrowItemViewModel itemViewModelWithTitle:@"表情" icon:@"icons_outlined_sticker.svg"];
  95. group2.itemViewModels = @[collect, album, cardPackage,expression];
  96. /// 第三组
  97. RQCommonGroupViewModel *group3 = [RQCommonGroupViewModel groupViewModel];
  98. /// 设置
  99. RQCommonArrowItemViewModel *setting = [RQCommonArrowItemViewModel itemViewModelWithTitle:@"设置" icon:@"icons_outlined_setting.svg"];
  100. #if defined(DEBUG)||defined(_DEBUG)
  101. /// 调试模式
  102. RQCommonArrowItemViewModel *debug = [RQCommonArrowItemViewModel itemViewModelWithTitle:@"打开/关闭调试器" icon:@"mh_profile_debug_25x25"];
  103. debug.operation = ^{
  104. [[RQDebugTouchView sharedInstance] setHide:![RQDebugTouchView sharedInstance].isHide];
  105. [RQSharedAppDelegate.window bringSubviewToFront:[RQDebugTouchView sharedInstance]];
  106. };
  107. group3.itemViewModels = @[setting , debug];
  108. #else
  109. /// 发布模式
  110. group3.itemViewModels = @[setting];
  111. #endif
  112. self.dataSource = @[group0 , group1 , group2 , group3];
  113. }
  114. @end