RQPlaceDetailNoteViewModel.m 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. //
  2. // RQPlaceDetailNoteViewModel.m
  3. // JiaPei
  4. //
  5. // Created by 张嵘 on 2023/4/17.
  6. //
  7. #import "RQPlaceDetailNoteViewModel.h"
  8. @interface RQPlaceDetailNoteViewModel ()
  9. @property (nonatomic, readwrite, strong) RQPlaceListModel *placeListModel;
  10. @end
  11. @implementation RQPlaceDetailNoteViewModel
  12. #pragma mark - Public Method
  13. - (instancetype)initWithServices:(id<RQViewModelServices>)services params:(NSDictionary *)params {
  14. if (self = [super initWithServices:services params:params]) {
  15. self.placeListModel = params[RQViewCommonValueKey];
  16. self.wpviewModel = params[@"NYWPviewmodel"];
  17. }
  18. return self;
  19. }
  20. - (void)initialize {
  21. [super initialize];
  22. @weakify(self)
  23. /// 隐藏导航栏的细线
  24. self.prefersNavigationBarBottomLineHidden = YES;
  25. self.shouldPullDownToRefresh = YES;
  26. self.shouldPullUpToLoadMore = YES;
  27. ///配置数据
  28. [self rq_configureData];
  29. [[[[RACObserve(RQ_COMMON_MANAGER, vipListArr) deliverOnMainThread] takeUntil:self.rac_willDeallocSignal] skip:1] subscribeNext:^(id _Nullable x) {
  30. @strongify(self)
  31. BOOL isBuy = [RQ_COMMON_MANAGER.vipListArr containsObject:self.placeListModel.name];
  32. self.placeListModel.isCheckVip = isBuy;
  33. [self.requestRemoteDataCommand execute:nil];
  34. }];
  35. }
  36. #pragma mark - PrivateMethod
  37. - (void)rq_configureData {
  38. @weakify(self);
  39. RQCommonGroupViewModel *group = [RQCommonGroupViewModel groupViewModel];
  40. RQCommonGroupViewModel *payGroup = [RQCommonGroupViewModel groupViewModel];
  41. RQPlaceBuyItemViewModel *placeBuyItemViewModel = [[RQPlaceBuyItemViewModel alloc] initWithPlaceListModel:self.placeListModel];
  42. placeBuyItemViewModel.wpviewModel = self.wpviewModel;
  43. payGroup.itemViewModels = @[placeBuyItemViewModel];
  44. RQCommonGroupViewModel *introduceGroup = [RQCommonGroupViewModel groupViewModel];
  45. [introduceGroup setCustomStyleWithRQCommonGroupModel:^(RQCommonGroupModel *groupModel) {
  46. groupModel.headerHeight = 54.f;
  47. groupModel.header = @"实拍优势";
  48. groupModel.headerFont = RQSemiboldFont(23.f);
  49. groupModel.headerLabelColor = RQ_MAIN_TEXT_COLOR_1;
  50. groupModel.headerBgColor = UIColor.whiteColor;
  51. }];
  52. RQPlaceDetailNoteIntroduceItemViewModel *placeDetailNoteIntroduceItemViewModel = [[RQPlaceDetailNoteIntroduceItemViewModel alloc] init];
  53. introduceGroup.itemViewModels = @[placeDetailNoteIntroduceItemViewModel];
  54. RAC(self, items) = self.requestRemoteDataCommand.executionSignals.switchToLatest;
  55. RAC(group, itemViewModels) = [RACObserve(self, items) map:^(NSArray * items) {
  56. @strongify(self)
  57. return RQObjectIsNil(items)? @[] : [self dataSourceWithItems:items];
  58. }];
  59. RAC(self, dataSource) = [RACObserve(group, itemViewModels) map:^(NSArray * itemViewModels) {
  60. return @[group, payGroup, introduceGroup];
  61. }];
  62. }
  63. /// 请求数据
  64. - (RACSignal *)requestRemoteDataSignalWithPage:(NSUInteger)page {
  65. [QMUITips showLoadingInView:DefaultTipsParentView];
  66. NSArray * (^itemsBlock)(NSArray *) = ^(NSArray *products) {
  67. [QMUITips hideAllTips];
  68. if (page == 1 || page == 0) {
  69. /// 下拉刷新
  70. } else {
  71. /// 上拉加载
  72. products = @[(self.items ?: @[]).rac_sequence, products.rac_sequence].rac_sequence.flatten.array;
  73. }
  74. return products;
  75. };
  76. ///
  77. 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) {
  78. [QMUITips hideAllTips];
  79. [QMUITips showError:[NSError rq_tipsFromError:error]];
  80. }];
  81. }
  82. #pragma mark - 辅助方法
  83. - (NSArray *)dataSourceWithItems:(NSArray *)items {
  84. NSArray *viewModels = [items.rac_sequence map:^(RQPlaceVideoListModel *placeVideoListModel) {
  85. RQPlaceVideoListItemViewModel *placeVideoListItemViewModel = [[RQPlaceVideoListItemViewModel alloc] initWithPlaceVideoListModel:placeVideoListModel items:items placeListModel:self.placeListModel];
  86. return placeVideoListItemViewModel;
  87. }].array;
  88. return viewModels ?: @[];
  89. }
  90. @end