// // RQHomePageSubjectOneOrFourViewModel.m // JSJP // // Created by 张嵘 on 2021/7/29. // #import "RQHomePageSubjectOneOrFourViewModel.h" #import "LightingAndSoundVC.h" @interface RQHomePageOneOrFourItemModel () @property (nonatomic, readwrite, copy) NSString *titleStr; @property (nonatomic, readwrite, copy) NSString *iconImgStr; @end @implementation RQHomePageOneOrFourItemModel - (instancetype)initWithTitleStr:(NSString *)titleStr iconImgStr:(NSString *)iconImgStr { if (self = [super init]) { self.titleStr = titleStr; self.iconImgStr = iconImgStr; } return self; } @end @interface RQHomePageSubjectOneOrFourViewModel () @property (nonatomic, readwrite, assign) RQHomePageCarType homePageCarType; @property (nonatomic, readwrite, assign) RQHomePageSubjectType homePageSubjectType; @property (nonatomic, readwrite, strong) RQTreeListModel *treeListModel; @property (nonatomic, readwrite, strong) NSMutableArray *mutableArrr; @property (nonatomic, readwrite, copy) NSString *subjectStr; @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *group; @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *group0; @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *group1; @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *group2; @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *group3; @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *group4; @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *group5; /// @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *groupSubject3Module; /// 驾驶方法 @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *groupDriveMethods; /// 交管12123服务 @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *group12123; /// 考场视频 @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *groupKaoChang; @property (nonatomic, readwrite, copy) NSArray *subjectOneOrFourSectionZeroArr; @property (nonatomic, readwrite, copy) NSArray *subjectOneOrFourSectionZeroBigModelArr; @property (nonatomic, readwrite, copy) NSArray *subjectOneOrFourSectionZeroSmallModelArr; @property (nonatomic, readwrite, copy) NSArray *subjectOneOrFourSectionOneArr; @property (nonatomic, readwrite, copy) NSArray *leftTitleArr; @property (nonatomic, readwrite, copy) NSArray *rightTitleArr; @end @implementation RQHomePageSubjectOneOrFourViewModel #pragma mark - Public Method - (instancetype)initWithServices:(id)services params:(NSDictionary *)params { if (self = [super initWithServices:services params:params]) { self.homePageCarType = [params[RQHomePageCarTypeKey] integerValue]; self.homePageSubjectType = [params[RQHomePageSubjectTypeKey] integerValue]; } return self; } - (void)initialize { [super initialize]; self.title = @""; /// 隐藏导航栏的细线 self.prefersNavigationBarBottomLineHidden = YES; ///配置数据 [self rq_configureData]; } #pragma mark - PrivateMethod - (void)rq_configureData { @weakify(self) RAC(self, dataSource) = [RACSignal combineLatest:@[RACObserve(RQ_COMMON_MANAGER, treeListArr),RACObserve(RQ_COMMON_MANAGER, dspListArr), [RACObserve(RQ_VIP_Module, videoVipModel) distinctUntilChanged], [RACObserve(RQ_USER_MANAGER, currentUser) distinctUntilChanged]] reduce:^(NSArray *treeListModelArr, NSArray *dspListModelArr, RQVideoVipModel *videoVipModel, RQUserModel *currentUser) { @strongify(self) /// 第一组 RQHomeSubPageVideoHeaderGroupViewModel *group3 = [self group3WithTreeListModelArr:treeListModelArr]; self.group3 = group3; /// 第二组 RQHomeSubPageVideoHeaderGroupViewModel *group4 = [self group4WithDspListModelArr:dspListModelArr]; self.group4 = group4; if (RQArrayIsEmpty(treeListModelArr)) { return (self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? (RQArrayIsEmpty(dspListModelArr)? @[self.group, self.group12123] : @[self.group, self.group12123, group4]) : ((self.homePageSubjectType == RQHomePageSubjectType_SubjectThree)? (RQArrayIsEmpty(dspListModelArr)? @[self.group, self.groupKaoChang, self.groupSubject3Module, self.groupDriveMethods, self.group12123] : @[self.group, self.groupKaoChang, self.groupSubject3Module, self.groupDriveMethods, self.group12123, group4]) : @[self.group, self.group0, self.group1, self.group2]); } else { if (self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo) { // if (RQ_COMMON_MANAGER.APP_SWITCH && !RQ_VIP_Module.isSubject2Vip) { // self.group0.itemViewModels = @[]; // group3.itemViewModels = @[]; // } return RQArrayIsEmpty(group3.itemViewModels)? (RQArrayIsEmpty(group4.itemViewModels)? @[self.group, self.group0, self.group12123] : @[self.group, self.group0, self.group12123, group4]) : (RQArrayIsEmpty(group4.itemViewModels)? @[self.group, self.group0, self.group12123, group3] : @[self.group, self.group0, self.group12123, group3, group4]); } else if (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree) { // if (RQ_COMMON_MANAGER.APP_SWITCH && !RQ_VIP_Module.isSubject3Vip) { // self.group0.itemViewModels = @[]; // } return RQArrayIsEmpty(group4.itemViewModels)? @[self.group, self.groupKaoChang, self.groupSubject3Module, self.group0, self.groupDriveMethods, self.group12123] : @[self.group, self.groupKaoChang, self.groupSubject3Module, self.group0, self.groupDriveMethods, self.group12123, group4]; } else { return [RQ_YDTQuestion_Module.isZhiGeZheng isEqualToString:@"YES"]? @[self.group, self.group0, self.group1, self.group12123] : ( RQArrayIsEmpty(group3.itemViewModels)? @[self.group, self.group0, self.group1, self.group2] : @[self.group, self.group0, self.group1, self.group2, group3]); } } }]; } - (void)dataDealWithDataArr:(NSArray *)dataArr completion:(void (^)(NSArray *arr))completion { if (dataArr.count > 0) { for (id value in dataArr) { if ([value isKindOfClass:[NSArray class]]) { [self dataDealWithDataArr:value completion:completion]; break; } else { completion(dataArr); break; } } } else { completion(dataArr); } } - (NSArray *)dataSourceWithItems:(NSArray *)items treeListModel:(RQTreeListModel *)treeListModel section:(NSInteger)section { NSArray *viewModels = [items.rac_sequence map:^(VideosItem *videosItem) { videosItem.subject = self.homePageSubjectType; RQHomeSubPageVideoItemViewModel *homeSubPageVideoItemViewModel = [[RQHomeSubPageVideoItemViewModel alloc] initWithVideosItem:videosItem]; CGFloat cellWidth = (RQ_SCREEN_WIDTH - (16 * 3)) / 2.f; homeSubPageVideoItemViewModel.itemSize = CGSizeMake(cellWidth, cellWidth * (122.f / 167.f)); homeSubPageVideoItemViewModel.operation = ^{ RQVideoDetailViewModel *videoDetailViewModel = [[RQVideoDetailViewModel alloc] initWithServices:RQ_APPDELEGATE.services params:@{ RQViewModelUtilKey : treeListModel, RQVideoItemIndexKey : @(0), RQVideoItemIndexPathKey : [NSIndexPath indexPathForRow:[items indexOfObject:videosItem] inSection:section], RQHomePageSubjectTypeKey : @(self.homePageSubjectType), }]; if ([RQ_Video_Module isCanWatchWithVideosItem:videosItem]) { [RQ_APPDELEGATE.services pushViewModel:videoDetailViewModel animated:YES]; } }; return homeSubPageVideoItemViewModel; }].array; return viewModels ?: @[]; } - (void)navPushHideTabbarToVC:(UIViewController *)vc { vc.hidesBottomBarWhenPushed = YES; [RQControllerHelper.currentViewController.navigationController qmui_pushViewController:vc animated:YES completion:nil]; vc.hidesBottomBarWhenPushed = NO; } - (RQCommonGroupViewModel *)group { if (!_group) { _group = [RQCommonGroupViewModel groupViewModel]; _group.itemViewModels = @[[[RQHomePageADItemViewModel alloc] initWithHomePageSubjectType:self.homePageSubjectType]]; } return _group; } /// - (RQCommonGroupViewModel *)group0 { if (!_group0) { _group0 = [RQCommonGroupViewModel groupViewModel]; if (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo) { _group0.headerHeight = 10.f; _group0.footerHeight = 10.f; _group0.itemViewModels = @[]; } else { [_group0 setCustomStyleWithRQCommonGroupModel:^(RQCommonGroupModel *groupModel) { groupModel.headerHeight = CGFLOAT_MIN; groupModel.footerHeight = 16.f; groupModel.footerBgColor = RQ_MAIN_BACKGROUNDCOLOR; }]; _group0.itemViewModels = self.subjectOneOrFourSectionZeroArr; } } return _group0; } - (RQCommonGroupViewModel *)group1 { if (!_group1) { _group1 = [RQHomePageSectionOneGroupViewModel groupViewModel]; _group1.itemViewModels = self.subjectOneOrFourSectionOneArr; } return _group1; } - (RQCommonGroupViewModel *)group2 { if (!_group2) { _group2 = [RQHomePageSectionTwoGroupViewModel groupViewModel]; RQHomePageSimulationExamItemViewModel *homePageSimulationExamItemViewModel = [[RQHomePageSimulationExamItemViewModel alloc] initWithRQHomePageCarType:self.homePageCarType homePageSubjectType:self.homePageSubjectType]; _group2.itemViewModels = @[homePageSimulationExamItemViewModel]; } return _group2; } - (RQHomeSubPageVideoHeaderGroupViewModel *)group3WithTreeListModelArr:(NSArray *)treeListModelArr { /// 第一组 RQHomeSubPageVideoHeaderGroupViewModel *group3 = [RQHomeSubPageVideoHeaderGroupViewModel groupViewModel]; group3.header = (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? @"基础操作视频" : ((self.homePageSubjectType == RQHomePageSubjectType_SubjectFour)? @"科目四视频教程" : @"科目一视频教程"); __block NSInteger scrollItemSection; NSArray *arr = [[treeListModelArr.rac_sequence filter:^BOOL(RQTreeListModel *treeListModel) { return [treeListModel.typeName isEqualToString:self.subjectStr]; }].array.rac_sequence map:^id _Nullable(RQTreeListModel *treeListModel) { self.treeListModel = treeListModel; group3.treeListModel = treeListModel; group3.homePageSubjectType = self.homePageSubjectType; return [treeListModel.children.rac_sequence map:^id _Nullable(ChildrenItem *childrenItem) { NSInteger section = [treeListModel.children indexOfObject:childrenItem]; if (childrenItem.videos.count > 0) { return [self dataSourceWithItems:childrenItem.videos treeListModel:treeListModel section:section]; } else { if ([childrenItem.typeName isEqualToString:@"基础操作"]) { return [childrenItem.children.rac_sequence map:^id _Nullable(ChildrenItem *childrenItemA) { group3.mySection = section; return [self dataSourceWithItems:childrenItemA.videos treeListModel:treeListModel section:section]; }].array; } else { scrollItemSection = section; NSArray *arrr = [childrenItem.children.rac_sequence map:^id _Nullable(ChildrenItem *childrenItemA) { if (childrenItemA.videos.count > 0) { return childrenItemA; } else { return nil; } }].array; [self.mutableArrr addObjectsFromArray:arrr]; return nil; } } }].array; }].array; [self dataDealWithDataArr:arr completion:^(NSArray *arr) { group3.itemViewModels = arr; }]; RQHomeSubPageVideoScrollItemViewModel *homeSubPageVideoScrollItemViewModel = [[RQHomeSubPageVideoScrollItemViewModel alloc] initWithChildrenItemArr:self.mutableArrr.copy treeListModel:self.treeListModel homePageSubjectType:self.homePageSubjectType section:scrollItemSection]; if (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo) { self.group0.itemViewModels = @[homeSubPageVideoScrollItemViewModel]; } return group3; } - (RQHomeSubPageVideoHeaderGroupViewModel *)group4WithDspListModelArr:(NSArray *)dspListModelArr { @weakify(self) /// 第二组 RQHomeSubPageVideoHeaderGroupViewModel *group4 = [RQHomeSubPageVideoHeaderGroupViewModel groupViewModel]; group4.header = @"短视频"; self.group3.footerHeight = (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? ((dspListModelArr.count > 0)? 10 : CGFLOAT_MIN) : CGFLOAT_MIN; if (dspListModelArr.count >= 6) { group4.footerHeight = 48.f; group4.footer = @"查看更多 >"; dspListModelArr = [dspListModelArr subarrayWithRange:NSMakeRange(0, 6)]; } NSArray *viewModels = [dspListModelArr.rac_sequence map:^(VideosItem *videosItem) { RQHomeSubPageVideoItemViewModel *homeSubPageVideoItemViewModel = [[RQHomeSubPageVideoItemViewModel alloc] initWithVideosItem:videosItem]; homeSubPageVideoItemViewModel.operation = ^{ @strongify(self) RQDspVideoDetailViewModel *viewModel = [[RQDspVideoDetailViewModel alloc] initWithServices:self.services params:@{ RQViewCommonValueKey: [NSIndexPath indexPathForRow:[dspListModelArr indexOfObject:videosItem] inSection:0], }]; [self.services pushViewModel:viewModel animated:YES]; }; return homeSubPageVideoItemViewModel; }].array; group4.itemViewModels = (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? viewModels : @[]; return group4; } /// 科目三---灯光操作/语音模拟 - (RQCommonGroupViewModel *)group5 { if (!_group5) { _group5 = [RQCommonGroupViewModel groupViewModel]; _group5.headerHeight = 10.f; _group5.headerHeight = 10.f; RQHomeSubPageNormalItemViewModel *item0 = [[RQHomeSubPageNormalItemViewModel alloc] init]; item0.icon = @"subject3_light_ico"; item0.title = @"灯光操作"; item0.itemSize = CGSizeMake(RQ_SCREEN_WIDTH / 2.f - 8.f, 54.f); item0.operation = ^{ LightingAndSoundVC *VC = [[LightingAndSoundVC alloc] init]; VC.styleTag = 4; [self navPushHideTabbarToVC:VC]; }; item0.bottomLineHide = YES; RQHomeSubPageNormalItemViewModel *item1 = [[RQHomeSubPageNormalItemViewModel alloc] init]; item1.icon = @"subject3_voice_icon"; item1.title = @"语音模拟"; item1.itemSize = CGSizeMake(RQ_SCREEN_WIDTH / 2.f - 8.f, 54.f); item1.bottomLineHide = YES; item1.operation = ^{ LightingAndSoundVC *VC = [[LightingAndSoundVC alloc] init]; VC.styleTag = 5; [self navPushHideTabbarToVC:VC]; }; _group5.itemViewModels = @[item0, item1]; } return _group5; } - (RQCommonGroupViewModel *)group12123 { if (!_group12123) { _group12123 = [RQCommonGroupViewModel groupViewModel]; RQHomePageJiaoGuan12123ItemViewModel *homePageJiaoGuan12123ItemViewModel = [[RQHomePageJiaoGuan12123ItemViewModel alloc] init]; _group12123.itemViewModels = @[homePageJiaoGuan12123ItemViewModel]; _group12123.headerHeight = [RQ_YDTQuestion_Module.isZhiGeZheng isEqualToString:@"YES"]? 10.f : 0.f; _group12123.footerHeight = 10.f; } return _group12123; } - (RQCommonGroupViewModel *)groupDriveMethods { if (!_groupDriveMethods) { _groupDriveMethods = [RQCommonGroupViewModel groupViewModel]; RQHomePageDriveMethodItemViewModel *homePageDriveMethodItemViewModel = [[RQHomePageDriveMethodItemViewModel alloc] init]; _groupDriveMethods.itemViewModels = @[homePageDriveMethodItemViewModel]; _groupDriveMethods.footerHeight = 10.f; } return _groupDriveMethods; } - (RQCommonGroupViewModel *)groupSubject3Module { if (!_groupSubject3Module) { _groupSubject3Module = [RQCommonGroupViewModel groupViewModel]; RQHomePageSubjectModuleItemViewModel *homePageSubjectModuleItemViewModel = [[RQHomePageSubjectModuleItemViewModel alloc] init]; _groupSubject3Module.itemViewModels = @[homePageSubjectModuleItemViewModel]; } return _groupSubject3Module; } - (RQCommonGroupViewModel *)groupKaoChang { if (!_groupKaoChang) { _groupKaoChang = [RQCommonGroupViewModel groupViewModel]; } [_groupKaoChang setCustomStyleWithRQCommonGroupModel:^(RQCommonGroupModel *groupModel) { #if defined(DEBUG)||defined(_DEBUG) groupModel.footerHeight = 20.f; #else groupModel.footerHeight = [RQ_COMMON_MANAGER.JSJP_APP_KAOCHANG_OPEN_ARR containsObject:RQ_USER_MANAGER.currentUser.city]? 20.f : CGFLOAT_MIN; #endif groupModel.footerBgColor = UIColor.whiteColor; }]; RQTeachSchoolVideoItemViewModel *teachSchoolVideoItemViewModel = [[RQTeachSchoolVideoItemViewModel alloc] init]; #if defined(DEBUG)||defined(_DEBUG) _groupKaoChang.itemViewModels = @[teachSchoolVideoItemViewModel]; #else _groupKaoChang.itemViewModels = [RQ_COMMON_MANAGER.JSJP_APP_KAOCHANG_OPEN_ARR containsObject:RQ_USER_MANAGER.currentUser.city]? @[teachSchoolVideoItemViewModel] : @[]; #endif return _groupKaoChang; } - (NSMutableArray *)mutableArrr { if (!_mutableArrr) { _mutableArrr = @[].mutableCopy; } return _mutableArrr; } - (NSString *)subjectStr { return (self.homePageSubjectType == RQHomePageSubjectType_SubjectFour)? @"科目四" : ((self.homePageSubjectType == RQHomePageSubjectType_SubjectThree)? @"科目三" : (self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? @"科目二" : @"科目一"); } - (NSArray *)subjectOneOrFourSectionZeroArr { return [self.subjectOneOrFourSectionZeroBigModelArr.rac_sequence.signal map:^id _Nullable(RQHomePageOneOrFourItemModel *homePageOneOrFourItemModel) { RQHomePageOneOrFourBigItemViewModel *itemViewModel = [[RQHomePageOneOrFourBigItemViewModel alloc] initWithRQHomePageCarType:self.homePageCarType homePageSubjectType:self.homePageSubjectType homePageOneOrFourItemModel:homePageOneOrFourItemModel]; itemViewModel.isLeft = [self.leftTitleArr containsObject:itemViewModel.title]; return itemViewModel; }].toArray; } - (NSArray *)subjectOneOrFourSectionOneArr { return [self.subjectOneOrFourSectionZeroSmallModelArr.rac_sequence.signal map:^id _Nullable(RQHomePageOneOrFourItemModel *homePageOneOrFourItemModel) { RQHomePageOneOrFourSmallItemViewModel *itemViewModel = [[RQHomePageOneOrFourSmallItemViewModel alloc] initWithRQHomePageCarType:self.homePageCarType homePageSubjectType:self.homePageSubjectType homePageOneOrFourItemModel:homePageOneOrFourItemModel]; itemViewModel.isLeft = [self.leftTitleArr containsObject:itemViewModel.title]; return itemViewModel; }].toArray; } - (NSArray *)subjectOneOrFourSectionZeroBigModelArr { return @[ [[RQHomePageOneOrFourItemModel alloc] initWithTitleStr:@"模拟考试" iconImgStr:@"模拟考试"], [[RQHomePageOneOrFourItemModel alloc] initWithTitleStr:@"顺序练习" iconImgStr:@"顺序练习"], ]; } - (NSArray *)subjectOneOrFourSectionZeroSmallModelArr { return [RQ_YDTQuestion_Module.isZhiGeZheng isEqualToString:@"YES"]? @[ [[RQHomePageOneOrFourItemModel alloc] initWithTitleStr:@"专项练习" iconImgStr:@"专项练习"], [[RQHomePageOneOrFourItemModel alloc] initWithTitleStr:@"错题收藏" iconImgStr:@"错题收藏"], ] : (RQ_COMMON_MANAGER.APP_SWITCH? @[ [[RQHomePageOneOrFourItemModel alloc] initWithTitleStr:@"精选500题" iconImgStr:@"精选500题"], [[RQHomePageOneOrFourItemModel alloc] initWithTitleStr:@"新规秘卷" iconImgStr:@"新规秘卷"], [[RQHomePageOneOrFourItemModel alloc] initWithTitleStr:@"专项练习" iconImgStr:@"专项练习"], [[RQHomePageOneOrFourItemModel alloc] initWithTitleStr:@"真实考场" iconImgStr:@"真实考场"], [[RQHomePageOneOrFourItemModel alloc] initWithTitleStr:@"错题收藏" iconImgStr:@"错题收藏"], ] : @[ [[RQHomePageOneOrFourItemModel alloc] initWithTitleStr:@"VIP课程" iconImgStr:(self.homePageSubjectType == RQHomePageSubjectType_SubjectOne)? @"科一VIP" : @"科四VIP"], [[RQHomePageOneOrFourItemModel alloc] initWithTitleStr:@"精选500题" iconImgStr:@"精选500题"], [[RQHomePageOneOrFourItemModel alloc] initWithTitleStr:@"新规秘卷" iconImgStr:@"新规秘卷"], [[RQHomePageOneOrFourItemModel alloc] initWithTitleStr:@"专项练习" iconImgStr:@"专项练习"], [[RQHomePageOneOrFourItemModel alloc] initWithTitleStr:@"真实考场" iconImgStr:@"真实考场"], [[RQHomePageOneOrFourItemModel alloc] initWithTitleStr:@"错题收藏" iconImgStr:@"错题收藏"], ]); } - (NSArray *)leftTitleArr { return @[@"模拟考试",@"VIP课程",@"新规秘卷",@"真实考场"]; } - (NSArray *)rightTitleArr { return @[@"顺序练习",@"精选500题",@"专项练习",@"错题收藏"]; } @end