// // RQProfileViewModel.m // RQCommon // // Created by 张嵘 on 2018/11/21. // Copyright © 2018 张嵘. All rights reserved. // #import "RQProfileViewModel.h" @interface RQProfileViewModel () /// The current `user`. @property (nonatomic, readwrite , strong) RQUserModel *user; @end @implementation RQProfileViewModel - (instancetype)initWithServices:(id)services params:(NSDictionary *)params{ if (self = [super initWithServices:services params:params]) { /// 获取user self.user = [RQ_USER_MANAGER currentUser]; } return self; } - (void)initialize { [super initialize]; @weakify(self); self.title = @"快捷功能"; /// 获取网络数据+本地数据 RACSignal *fetchLocalDataSignal = [RACSignal return:[self fetchLocalData]]; RACSignal *requestRemoteDataSignal = self.requestRemoteDataCommand.executionSignals.switchToLatest; [[[fetchLocalDataSignal merge:requestRemoteDataSignal] deliverOnMainThread] subscribeNext:^(RQUserModel *user) { @strongify(self) [self willChangeValueForKey:@"user"]; /// user模型的数据 重置,但是user的 指针地址不变 [self.user mergeValuesForKeysFromModel:user]; [self didChangeValueForKey:@"user"]; }]; /// 配置数据 [self _configureData]; } /// 获取本地的用户数据 - (RQUserModel *)fetchLocalData{ return [RQ_USER_MANAGER currentUser]; } /// 获取网络的用户数据 用于比对 - (RACSignal *)requestRemoteDataSignalWithPage:(NSUInteger)page { return [[RACSignal createSignal:^RACDisposable * _Nullable(id _Nonnull subscriber) { RQ_USER_MANAGER.currentUser.channel = RQUserLoginChannelTypeAutoLogin; // [[RQ_HTTP_Service studentLoginWithLoginCode:RQ_USER_MANAGER.currentUser.loginCode password:RQ_USER_MANAGER.currentUser.password] subscribeNext:^(RQUserModel *userModel) { // [subscriber sendNext:userModel]; // } error:^(NSError * _Nullable error) { // [subscriber sendError:error]; // } completed:^{ // [subscriber sendCompleted]; // }]; return [RACDisposable disposableWithBlock:^{ /// 取消任务 }]; }] doError:^(NSError * _Nonnull error) { [MBProgressHUD rq_showErrorTips:error]; }]; } #pragma mark - 配置数据 - (void)_configureData{ /// 第一组 RQCommonGroupViewModel *group0 = [RQCommonGroupViewModel groupViewModel]; /// 用户信息 CommonProfileHeaderItemViewModel *profileHeader = [[CommonProfileHeaderItemViewModel alloc] initViewModelWithUser:self.user]; /// 由于涉及到 更新用户的数据,这里最后把用户数据传递过去 // profileHeader.destViewModelClass = [RQUserInfoViewModel class]; @weakify(self); profileHeader.operation = ^{ @strongify(self); // RQUserInfoViewModel *viewModel = [[RQUserInfoViewModel alloc] initWithServices:self.services params:@{RQViewModelUtilKey:self.user}]; // [self.services pushViewModel:viewModel animated:YES]; }; group0.itemViewModels = @[profileHeader]; /// 第一组 RQCommonGroupViewModel *group1 = [RQCommonGroupViewModel groupViewModel]; /// 支付 RQCommonArrowItemViewModel *pay = [RQCommonArrowItemViewModel itemViewModelWithTitle:@"支付" icon:@"icons_outlined_wechatpay.svg"]; /// 设置组头高度 group1.itemViewModels = @[pay]; /// 第二组 RQCommonGroupViewModel *group2 = [RQCommonGroupViewModel groupViewModel]; /// 收藏 RQCommonArrowItemViewModel *collect = [RQCommonArrowItemViewModel itemViewModelWithTitle:@"收藏" icon:@"icons_outlined_colorful_favorites.svg"]; /// 相册 RQCommonArrowItemViewModel *album = [RQCommonArrowItemViewModel itemViewModelWithTitle:@"相册" icon:@"icons_outlined_album.svg"]; /// 卡包 RQCommonArrowItemViewModel *cardPackage = [RQCommonArrowItemViewModel itemViewModelWithTitle:@"卡包" icon:@"icons_outlined_colorful_cards.svg"]; /// 表情 RQCommonArrowItemViewModel *expression = [RQCommonArrowItemViewModel itemViewModelWithTitle:@"表情" icon:@"icons_outlined_sticker.svg"]; group2.itemViewModels = @[collect, album, cardPackage,expression]; /// 第三组 RQCommonGroupViewModel *group3 = [RQCommonGroupViewModel groupViewModel]; /// 设置 RQCommonArrowItemViewModel *setting = [RQCommonArrowItemViewModel itemViewModelWithTitle:@"设置" icon:@"icons_outlined_setting.svg"]; #if defined(DEBUG)||defined(_DEBUG) /// 调试模式 RQCommonArrowItemViewModel *debug = [RQCommonArrowItemViewModel itemViewModelWithTitle:@"打开/关闭调试器" icon:@"mh_profile_debug_25x25"]; debug.operation = ^{ [[RQDebugTouchView sharedInstance] setHide:![RQDebugTouchView sharedInstance].isHide]; [RQSharedAppDelegate.window bringSubviewToFront:[RQDebugTouchView sharedInstance]]; }; group3.itemViewModels = @[setting , debug]; #else /// 发布模式 group3.itemViewModels = @[setting]; #endif self.dataSource = @[group0 , group1 , group2 , group3]; } @end