@touchpoll/tp-survey 0.0.49 → 0.0.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -199,21 +199,28 @@ const answerSSValidator = () => (control) => {
199
199
  //ошибок нет, всё корректно
200
200
  return null;
201
201
  };
202
- const answerMSValidator = (visibleAlternativeCount, minCount = 1, maxCount = 0) => (control) => {
203
- //visibleAlternativeCount - количество альтернатив на экране, если 0, то смысла показывать вопрос нет
202
+ const answerMSValidator = (visibleAlternativeList, minCount = 1, maxCount = 0) => (control) => {
203
+ //visibleAlternativeList - альтернативы на экране, если их 0, то смысла показывать вопрос нет
204
204
  //minCount - Минимальное количество ответов, которое может выбрать респондент, по умолчанию 1.
205
205
  //maxCount - Максимальное количество ответов, которые может выбрать респондент. Если указано 0, количество не ограничено. По умолчанию 0
206
- if (visibleAlternativeCount === 0) {
206
+ if (visibleAlternativeList.length === 0) {
207
207
  return null;
208
208
  }
209
209
  //ответ не массив, такого быть не может, это ошибка
210
210
  if (!Array.isArray(control.value)) {
211
211
  return { answerMsAnswerType: true };
212
212
  }
213
+ //Проблема минимального количества ответов - если доступных на экране альтернатив меньше, чем настройка "минимальное количество ответов", то это нужно учитывать.
214
+ //Поэтому вычисляем минимально возможное количество ответов, которое может выбрать респондент и если оно меньше значения из настроек, возьмем его.
215
+ let minPossibleCount = minCount;
216
+ if (control.value.length > 0) {
217
+ const currentAlternativeGroup = visibleAlternativeList.find(alternative => alternative.Value === control.value[0])?.GroupNo ?? 1;
218
+ minPossibleCount = Math.min(visibleAlternativeList.filter(alternative => alternative.GroupNo === currentAlternativeGroup).length, minCount);
219
+ }
213
220
  //количество ответов
214
221
  const count = control.value.length;
215
222
  //проверяем minCount
216
- if (count < minCount) {
223
+ if (count < minPossibleCount) {
217
224
  return { answerMsMinCount: true };
218
225
  }
219
226
  //проверяем maxCount
@@ -1297,7 +1304,7 @@ class ContainerAnswerComponent {
1297
1304
  break;
1298
1305
  }
1299
1306
  case QuestionsType.eqMS: {
1300
- this.answerForm.controls.answer.addValidators(answerMSValidator(this.visibleAlternativeList().length, this.question().AlternativeMinAnswersCount, this.question().AlternativeMaxAnswersCount));
1307
+ this.answerForm.controls.answer.addValidators(answerMSValidator(this.visibleAlternativeList(), this.question().AlternativeMinAnswersCount, this.question().AlternativeMaxAnswersCount));
1301
1308
  break;
1302
1309
  }
1303
1310
  case QuestionsType.eqOD: {
@@ -2631,5 +2638,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.7", ngImpor
2631
2638
  * Generated bundle index. Do not edit.
2632
2639
  */
2633
2640
 
2634
- export { AdditionalAnswerType, BASE_HEIGHT, BASE_WIDTH, LOGIC_FUNC_TEXT, MISSING_VALUE, QuestionsType, ResultativeStatus, SurveyEvents, SurveyPlayComponent, SurveyQuestionPreviewComponent, TP_SURVEY_CONFIGURATION, TpSurveyModule, VIDEO_EXTENSION_LIST, ValidStatus, ViewModel, executeLogicExpression };
2641
+ export { AdditionalAnswerType, Answer, BASE_HEIGHT, BASE_WIDTH, LOGIC_FUNC_TEXT, MISSING_VALUE, QuestionsType, ResultativeStatus, SurveyEvents, SurveyPlayComponent, SurveyQuestionPreviewComponent, TP_SURVEY_CONFIGURATION, TpSurveyModule, VIDEO_EXTENSION_LIST, ValidStatus, ViewModel, executeLogicExpression };
2635
2642
  //# sourceMappingURL=touchpoll-tp-survey.mjs.map