123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- //
- // 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<RQViewModelServices>)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
|