YMDynamicListViewModel.m 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. //
  2. // YMDynamicListViewModel.m
  3. // MSYOUPAI
  4. //
  5. // Created by YoMi on 2024/2/26.
  6. // Copyright © 2024 MS. All rights reserved.
  7. //
  8. #import "YMDynamicListViewModel.h"
  9. #import "YMDynamicListModel.h"
  10. @interface YMDynamicListViewModel ()
  11. /// 当前数据数量
  12. @property (nonatomic, assign) NSInteger currentSize;
  13. /// 动态分类类型
  14. @property (nonatomic, assign, readwrite) YMDynamicCategoryType categoryType;
  15. /// 列表数据
  16. @property (nonatomic, strong, readwrite) NSMutableArray <YMDynamicListCellViewModel*>*listDataArray;
  17. /// 前往动态详情
  18. @property (nonatomic, strong, readwrite) RACSubject *gotoDynamicDetailSubject;
  19. @end
  20. @implementation YMDynamicListViewModel
  21. - (void)ym_initialize{
  22. [super ym_initialize];
  23. self.currentPage = 1;
  24. self.currentSize = 10;
  25. self.categoryType = [self.params integerValueForKey:ParamsCategoryType defaultValue:YMDynamicCategoryTypeRecommend];
  26. @weakify(self)
  27. [[self.gotoDynamicDetailSubject takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id _Nullable value) {
  28. @strongify(self)
  29. if ([value intValue] != 0) {
  30. YMDynamicDetailViewModel *dynamicDetailVM = [[YMDynamicDetailViewModel alloc]initWithParams:@{
  31. ParamsId:@([value intValue])
  32. }];
  33. [YMRouter openURL:stringFormat(@"%@%@", YM_ROUTER_URL_PREFIX, YM_ROUTER_DYNAMIC_DETAIL) withUserInfo:@{
  34. RouterViewModel:dynamicDetailVM
  35. } completion:nil];
  36. }
  37. }];
  38. }
  39. - (void)getDynamicListData {
  40. @weakify(self)
  41. [ZCHUDHelper showWithStatus:@"加载中..."];
  42. [LCHttpHelper requestWithURLString:DynamicList parameters:@{
  43. @"type":@(self.categoryType),
  44. @"gender":@([LCSaveModel getUserModel].youpaipuserinfo.youpaipgender),
  45. @"page":@(self.currentPage),
  46. @"limit":@(self.currentSize)
  47. } needToken:YES type:HttpRequestTypePost success:^(id responseObject) {
  48. @strongify(self)
  49. NSDictionary* dict = (NSDictionary*)responseObject;
  50. NSInteger code = [[dict objectForKey:@"code"] integerValue];
  51. if (code == 0) {
  52. [ZCHUDHelper dismiss];
  53. NSDictionary *data = [dict dictionaryValueForKey:@"data" defaultValue:@{}];
  54. NSArray *result = [data arrayValueForKey:@"list" defaultValue:@[]];
  55. if (self.currentPage == 1) {
  56. [self.listDataArray removeAllObjects];
  57. }
  58. NSArray *viewModelArr = [[NSArray yy_modelArrayWithClass:[YMDynamicListModel class] json:result].rac_sequence map:^(YMDynamicListModel * _Nullable model) {
  59. YMDynamicListCellViewModel *viewModel = [[YMDynamicListCellViewModel alloc]initWithParams:@{
  60. ParamsModel:model
  61. }];
  62. return viewModel;
  63. }].array;
  64. [self.listDataArray addObjectsFromArray:viewModelArr];
  65. if(self.currentPage > 0 && self.currentPage % 5 == 0){
  66. [[SDImageCache sharedImageCache] clearMemory];
  67. }
  68. [self.refreshUISubject sendNext:@(result.count < self.currentSize ? YMFooterRefresh_HasNoMoreData : YMFooterRefresh_HasMoreData)];
  69. }else{
  70. [ZCHUDHelper showTitle:[dict stringValueForKey:@"message" defaultValue:@""]];
  71. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  72. [self.refreshUISubject sendNext:@(YMRefreshError)];
  73. });
  74. }
  75. } failure:^(NSError *error) {
  76. if(self.currentPage != 1){
  77. self.currentPage--;
  78. }
  79. [ZCHUDHelper showTitle:error.localizedDescription];
  80. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  81. [self.refreshUISubject sendNext:@(YMRefreshError)];
  82. });
  83. }];
  84. }
  85. - (NSMutableArray<YMDynamicListCellViewModel *> *)listDataArray{
  86. if (!_listDataArray) {
  87. _listDataArray = [NSMutableArray array];
  88. }
  89. return _listDataArray;
  90. }
  91. - (RACSubject *)gotoDynamicDetailSubject{
  92. if (!_gotoDynamicDetailSubject) {
  93. _gotoDynamicDetailSubject = [RACSubject subject];
  94. }
  95. return _gotoDynamicDetailSubject;
  96. }
  97. @end