// // RQPlaceDetailNoteViewModel.m // JiaPei // // Created by 张嵘 on 2023/4/17. // #import "RQPlaceDetailNoteViewModel.h" @interface RQPlaceDetailNoteViewModel () @property (nonatomic, readwrite, strong) RQPlaceListModel *placeListModel; @end @implementation RQPlaceDetailNoteViewModel #pragma mark - Public Method - (instancetype)initWithServices:(id)services params:(NSDictionary *)params { if (self = [super initWithServices:services params:params]) { self.placeListModel = params[RQViewCommonValueKey]; self.wpviewModel = params[@"NYWPviewmodel"]; } return self; } - (void)initialize { [super initialize]; @weakify(self) /// 隐藏导航栏的细线 self.prefersNavigationBarBottomLineHidden = YES; self.shouldPullDownToRefresh = YES; self.shouldPullUpToLoadMore = YES; ///配置数据 [self rq_configureData]; [[[[RACObserve(RQ_COMMON_MANAGER, vipListArr) deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] skip:1] subscribeNext:^(id _Nullable x) { @strongify(self) BOOL isBuy = [RQ_COMMON_MANAGER.vipListArr containsObject:self.placeListModel.name]; self.placeListModel.isCheckVip = isBuy; [self.requestRemoteDataCommand execute:nil]; }]; } #pragma mark - PrivateMethod - (void)rq_configureData { @weakify(self); RQCommonGroupViewModel *group = [RQCommonGroupViewModel groupViewModel]; RQCommonGroupViewModel *payGroup = [RQCommonGroupViewModel groupViewModel]; RQPlaceBuyItemViewModel *placeBuyItemViewModel = [[RQPlaceBuyItemViewModel alloc] initWithPlaceListModel:self.placeListModel]; placeBuyItemViewModel.wpviewModel = self.wpviewModel; payGroup.itemViewModels = @[placeBuyItemViewModel]; RQCommonGroupViewModel *introduceGroup = [RQCommonGroupViewModel groupViewModel]; [introduceGroup setCustomStyleWithRQCommonGroupModel:^(RQCommonGroupModel *groupModel) { groupModel.headerHeight = 54.f; groupModel.header = @"实拍优势"; groupModel.headerFont = RQSemiboldFont(23.f); groupModel.headerLabelColor = RQ_MAIN_TEXT_COLOR_1; groupModel.headerBgColor = UIColor.whiteColor; }]; RQPlaceDetailNoteIntroduceItemViewModel *placeDetailNoteIntroduceItemViewModel = [[RQPlaceDetailNoteIntroduceItemViewModel alloc] init]; introduceGroup.itemViewModels = @[placeDetailNoteIntroduceItemViewModel]; RAC(self, items) = self.requestRemoteDataCommand.executionSignals.switchToLatest; RAC(group, itemViewModels) = [RACObserve(self, items) map:^(NSArray * items) { @strongify(self) return RQObjectIsNil(items)? @[] : [self dataSourceWithItems:items]; }]; RAC(self, dataSource) = [RACObserve(group, itemViewModels) map:^(NSArray * itemViewModels) { return @[group, payGroup, introduceGroup]; }]; } /// 请求数据 - (RACSignal *)requestRemoteDataSignalWithPage:(NSUInteger)page { [QMUITips showLoadingInView:DefaultTipsParentView]; NSArray * (^itemsBlock)(NSArray *) = ^(NSArray *products) { [QMUITips hideAllTips]; if (page == 1 || page == 0) { /// 下拉刷新 } else { /// 上拉加载 products = @[(self.items ?: @[]).rac_sequence, products.rac_sequence].rac_sequence.flatten.array; } return products; }; /// return [[[RQ_HTTP_Service getPlaceVideoListWithPageNum:0 pageSize:0 searchString:self.placeListModel.name examId:[NSString stringWithFormat:@"%zd",self.placeListModel.id]] map:itemsBlock] doError:^(NSError * _Nonnull error) { [QMUITips hideAllTips]; [QMUITips showError:[NSError rq_tipsFromError:error]]; }]; } #pragma mark - 辅助方法 - (NSArray *)dataSourceWithItems:(NSArray *)items { NSArray *viewModels = [items.rac_sequence map:^(RQPlaceVideoListModel *placeVideoListModel) { RQPlaceVideoListItemViewModel *placeVideoListItemViewModel = [[RQPlaceVideoListItemViewModel alloc] initWithPlaceVideoListModel:placeVideoListModel items:items placeListModel:self.placeListModel]; return placeVideoListItemViewModel; }].array; return viewModels ?: @[]; } @end