// // RQTestQuestionsViewModel.m // JSJP // // Created by 张嵘 on 2021/8/12. // #import "RQTestQuestionsViewModel.h" @interface RQTestQuestionsViewModel () @property (nonatomic, readwrite, assign) RQExerciseOptionItemType exerciseOptionItemType; @property (nonatomic, readwrite, assign) RQAnswerResultsType answerResultsType; //@property (nonatomic, readwrite, assign) RQExerciseType exerciseType; /// homePageCarType @property (nonatomic, readwrite, assign) RQHomePageCarType homePageCarType; /// homePageSubjectType @property (nonatomic, readwrite, assign) RQHomePageSubjectType homePageSubjectType; /// 第零组 题目 @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *group0; /// 第一组 选项 @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *group1; /// 第二组 答案 @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *group2; /// 第三组 多选题确定按钮 @property (nonatomic, readwrite, strong) RQCommonGroupViewModel *group3; /// 第四组 试题讲解 @property (nonatomic, readwrite, strong) RQExciseExplainHeaderGroupViewModel *group4; @end @implementation RQTestQuestionsViewModel #pragma mark - Public Method - (instancetype)initWithServices:(id)services params:(NSDictionary *)params { if (self = [super initWithServices:services params:params]) { self.exerciseOptionItemType = RQExerciseOptionItemType_Default; self.answerResultsType = RQAnswerResultsType_Unanswered; // self.exerciseType = [params[RQExerciseTypeKey] integerValue]; self.exerciseModel = (RQExerciseModel *)params[RQViewModelUtilKey]; self.homePageCarType = [params[RQHomePageCarTypeKey] integerValue]; self.homePageSubjectType = [params[RQHomePageSubjectTypeKey] integerValue]; } return self; } - (void)initialize { [super initialize]; // self.title = @""; /// 隐藏导航栏的细线 self.prefersNavigationBarBottomLineHidden = YES; ///配置数据 [self rq_configureData]; } - (void)dealloc { } #pragma mark - PrivateMethod - (void)rq_configureData { @weakify(self) /// 答案 RQExerciseAnswerItemViewModel *exerciseAnswerItemViewModel = [[RQExerciseAnswerItemViewModel alloc] initWithRQExerciseModel:self.exerciseModel]; /// 多选题确定按钮 RQExerciseOptionSureBtnItemViewModel *exerciseOptionSureBtnItemViewModel = [[RQExerciseOptionSureBtnItemViewModel alloc] initWithRQExerciseModel:self.exerciseModel]; RQYDTJSModel *ydtJSModel = [RQ_YDT_JS_Question_Module getQuestionJSWithQuestionId:self.exerciseModel.ydtQuestionModel.ID]; /// 视频讲解 RQExerciseVideoExplainItemViewModel *exerciseVideoExplainItemViewModel = RQStringIsEmpty(ydtJSModel.short_video_url)? nil : [[RQExerciseVideoExplainItemViewModel alloc] initWithRQYDTJSModel:ydtJSModel]; /// 试题讲解 RQExercisExplainItemViewModel *exercisExplainItemViewModel = [[RQExercisExplainItemViewModel alloc] initWithRQExerciseModel:self.exerciseModel]; /// RAC(self, dataSource) = [[RACSignal combineLatest:@[[RACObserve(self, exerciseModel) distinctUntilChanged], RACObserve(self.exerciseModel, userAnswer), [RACObserve(self.exerciseModel, answerResultsType) distinctUntilChanged],RACObserve(RQ_Exercise_Module, currentExerciseType)] reduce:^id (RQExerciseModel *exerciseModel, NSArray *userAnswer, NSNumber *answerResultsType, NSNumber *currentExerciseType) { @strongify(self) if (RQ_Exercise_Module.currentExerciseType == RQExerciseType_Recitation) { self.group2.itemViewModels = @[exerciseAnswerItemViewModel]; self.group3.itemViewModels = @[]; self.group4.itemViewModels = RQObjectIsNil(exerciseVideoExplainItemViewModel)? @[exercisExplainItemViewModel] : @[exerciseVideoExplainItemViewModel,exercisExplainItemViewModel]; } else { BOOL isAnswered = (![userAnswer containsObject:@"预选Option"] && userAnswer.count > 0); if (isAnswered) { if (exerciseModel.answerResultsType == RQAnswerResultsType_Correct) { if (![RQ_Exercise_Module.correctArr containsObject:exerciseModel]) { NSMutableArray *corArr = RQ_Exercise_Module.correctArr.mutableCopy; [corArr addObject:exerciseModel]; RQ_Exercise_Module.correctArr = corArr.copy; } } else if (exerciseModel.answerResultsType == RQAnswerResultsType_Error) { if (![RQ_Exercise_Module.errorArr containsObject:exerciseModel]) { NSMutableArray *errArr = RQ_Exercise_Module.errorArr.mutableCopy; [errArr addObject:exerciseModel]; RQ_Exercise_Module.errorArr = errArr.copy; } } } self.group2.itemViewModels = isAnswered? @[exerciseAnswerItemViewModel] : @[]; self.group3.itemViewModels = ([userAnswer containsObject:@"预选Option"] && (exerciseModel.ydtQuestionModel.Type == 3))? @[exerciseOptionSureBtnItemViewModel] : @[]; self.group4.itemViewModels = isAnswered? ( RQObjectIsNil(exerciseVideoExplainItemViewModel)? @[exercisExplainItemViewModel] : @[exerciseVideoExplainItemViewModel,exercisExplainItemViewModel]) : @[]; } self.group4.headerHeight = (self.group4.itemViewModels.count > 0)? RQ_FIT_HORIZONTAL(50.f) : CGFLOAT_MIN; return @[self.group0, self.group1, self.group2, self.group3, self.group4]; }] deliverOnMainThread]; } #pragma mark - LazyLoad - (RQCommonGroupViewModel *)group0 { if (!_group0) { _group0 = [RQCommonGroupViewModel groupViewModel]; RQExerciseQuestionItemViewModel *exerciseQuestionItemViewModel = [[RQExerciseQuestionItemViewModel alloc] initWithRQExerciseModel:self.exerciseModel]; _group0.itemViewModels = @[exerciseQuestionItemViewModel]; } return _group0; } - (RQCommonGroupViewModel *)group1 { @weakify(self) if (!_group1) { _group1 = [RQCommonGroupViewModel groupViewModel]; NSArray *allOptionsArr = [@[self.exerciseModel.ydtQuestionModel.An1, self.exerciseModel.ydtQuestionModel.An2, self.exerciseModel.ydtQuestionModel.An3, self.exerciseModel.ydtQuestionModel.An4, ].rac_sequence.signal filter:^BOOL(NSString *optionString) { return RQStringIsNotEmpty(optionString); }].toArray; _group1.itemViewModels = [allOptionsArr.rac_sequence.signal map:^id _Nullable(NSString *optionString) { @strongify(self) return [[RQExerciseOptionItemViewModel alloc] initWithRQExerciseModel:self.exerciseModel allOptionsArr:allOptionsArr optString:optionString]; }].toArray; } return _group1; } - (RQCommonGroupViewModel *)group2 { if (!_group2) { _group2 = [RQCommonGroupViewModel groupViewModel]; } return _group2; } - (RQCommonGroupViewModel *)group3 { if (!_group3) { _group3 = [RQCommonGroupViewModel groupViewModel]; } return _group3; } - (RQExciseExplainHeaderGroupViewModel *)group4 { if (!_group4) { _group4 = [RQExciseExplainHeaderGroupViewModel groupViewModel]; } return _group4; } @end