// // RQHomePageSubjectOneOrFourViewModel.m // SDJK // // Created by 张嵘 on 2021/7/29. // #import "RQHomePageSubjectOneOrFourViewModel.h" @interface RQHomePageSubjectOneOrFourViewModel () @property (nonatomic, readwrite, assign) RQHomePageCarType homePageCarType; @property (nonatomic, readwrite, assign) RQHomePageSubjectType homePageSubjectType; @property (nonatomic, readwrite, strong) RQTreeListModel *treeListModel; @property (nonatomic, readwrite, copy) NSString *subjectStr; /// 交管12123服务 @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *group12123; @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *groupFreeAndNew; @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 rq_configureData]; } #pragma mark - PrivateMethod - (void)rq_configureData { @weakify(self) __block NSMutableArray *mutableArrr = @[].mutableCopy; /// 第零组 RQCommonGroupViewModel *group0 = [RQCommonGroupViewModel groupViewModel]; [group0 setCustomStyleWithRQCommonGroupModel:^(RQCommonGroupModel *groupModel) { groupModel.footerHeight = 10.f; groupModel.footerBgColor = RQ_LIST_BACKGROUNDCOLOR; }]; RQHomeSubPageItemViewModel *homeSubPageItemViewModel = [[RQHomeSubPageItemViewModel alloc] initWithRQHomePageCarType:self.homePageCarType homePageSubjectType:self.homePageSubjectType]; homeSubPageItemViewModel.itemSize = CGSizeMake(RQ_SCREEN_WIDTH, RQ_FIT_HORIZONTAL(379.f)); homeSubPageItemViewModel.operation = ^{ }; RAC(self, dataSource) = [RACSignal combineLatest:@[RACObserve(RQ_COMMON_MANAGER, treeListArr),RACObserve(RQ_COMMON_MANAGER, dspListArr)] reduce:^(NSArray *treeListModelArr, NSArray *dspListModelArr) { @strongify(self) /// 第一组 RQHomeSubPageVideoHeaderGroupViewModel *group1 = [RQHomeSubPageVideoHeaderGroupViewModel groupViewModel]; [group1 setCustomStyleWithRQCommonGroupModel:^(RQCommonGroupModel *groupModel) { groupModel.header = (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? @"基础操作视频" : ((self.homePageSubjectType == RQHomePageSubjectType_SubjectFour)? @"科目四视频教程" : @"科目一视频教程"); groupModel.headerHeight = 58.f; groupModel.footerHeight = 10.f; groupModel.footerBgColor = RQ_LIST_BACKGROUNDCOLOR; }]; /// 第二组 RQHomeSubPageVideoHeaderGroupViewModel *group2 = [RQHomeSubPageVideoHeaderGroupViewModel groupViewModel]; @weakify(dspListModelArr) [group2 setCustomStyleWithRQCommonGroupModel:^(RQCommonGroupModel *groupModel) { @strongify(dspListModelArr) groupModel.header = @"短视频"; groupModel.headerHeight = 58.f; groupModel.footerHeight = 10.f; groupModel.footerBgColor = RQ_LIST_BACKGROUNDCOLOR; if (dspListModelArr.count >= 6) { groupModel.footerHeight = 58.f; groupModel.footer = @"查看更多 >"; groupModel.footerBgColor = UIColor.whiteColor; } }]; if (dspListModelArr.count >= 6) { 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; group2.itemViewModels = (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? viewModels : @[]; if (RQArrayIsEmpty(treeListModelArr)) { group0.itemViewModels = (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? @[] : @[homeSubPageItemViewModel]; if (RQArrayIsEmpty(dspListModelArr)) { return (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? @[group0, self.group12123] : @[group0, self.groupFreeAndNew, self.group12123]; } else { return (self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? @[group2, self.group12123] : @[group0, self.groupFreeAndNew, self.group12123]; } } else { __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; group1.treeListModel = treeListModel; group1.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) { group1.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; [mutableArrr addObjectsFromArray:arrr]; return nil; } } }].array; }].array; [self dataDealWithDataArr:arr completion:^(NSArray *arr) { group1.itemViewModels = arr; }]; RQHomeSubPageVideoScrollItemViewModel *homeSubPageVideoScrollItemViewModel = [[RQHomeSubPageVideoScrollItemViewModel alloc] initWithChildrenItemArr:mutableArrr.copy treeListModel:self.treeListModel homePageSubjectType:self.homePageSubjectType section:scrollItemSection]; group0.itemViewModels = @[(self.homePageSubjectType == RQHomePageSubjectType_SubjectThree || self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? homeSubPageVideoScrollItemViewModel : homeSubPageItemViewModel]; return group1.itemViewModels.count > 0? (RQArrayIsEmpty(group2.itemViewModels)? @[group0, self.groupFreeAndNew, group1, self.group12123] : @[group0, group1, group2, self.group12123]) : (RQArrayIsEmpty(group2.itemViewModels)? @[group0, self.groupFreeAndNew, self.group12123] : @[group0, group2, self.group12123]); } }]; } - (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 { @weakify(self) NSArray *viewModels = [items.rac_sequence map:^(VideosItem *videosItem) { RQHomeSubPageVideoItemViewModel *homeSubPageVideoItemViewModel = [[RQHomeSubPageVideoItemViewModel alloc] initWithVideosItem:videosItem]; homeSubPageVideoItemViewModel.operation = ^{ @strongify(self) 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 ?: @[]; } - (NSString *)subjectStr { return (self.homePageSubjectType == RQHomePageSubjectType_SubjectFour)? @"科目四" : ((self.homePageSubjectType == RQHomePageSubjectType_SubjectThree)? @"科目三" : (self.homePageSubjectType == RQHomePageSubjectType_SubjectTwo)? @"科目二" : @"科目一"); } - (RQCommonGroupViewModel *)group12123 { if (!_group12123) { _group12123 = [RQCommonGroupViewModel groupViewModel]; RQHomePageJiaoGuan12123ItemViewModel *homePageJiaoGuan12123ItemViewModel = [[RQHomePageJiaoGuan12123ItemViewModel alloc] init]; _group12123.itemViewModels = @[homePageJiaoGuan12123ItemViewModel]; } return _group12123; } //RQFreeTryItemViewModel - (RQCommonGroupViewModel *)groupFreeAndNew { if (!_groupFreeAndNew) { _groupFreeAndNew = [RQCommonGroupViewModel groupViewModel]; RQFreeTryItemViewModel *freeTryItemViewModel = [[RQFreeTryItemViewModel alloc] initWithTitle:@"免费试用" icon:@"免费试用背景"]; RQFreeTryItemViewModel *newTryItemViewModel = [[RQFreeTryItemViewModel alloc] initWithTitle:@"新规秘卷" icon:@"新规秘卷背景"]; _groupFreeAndNew.itemViewModels = @[freeTryItemViewModel,newTryItemViewModel]; [_groupFreeAndNew setCustomStyleWithRQCommonGroupModel:^(RQCommonGroupModel *groupModel) { groupModel.footerHeight = 10.f; groupModel.footerBgColor = RQ_LIST_BACKGROUNDCOLOR; }]; } return _groupFreeAndNew; } @end