From 7f23c6e959b61613a955ca9aad412f36e7c98889 Mon Sep 17 00:00:00 2001 From: rahulmalhotra Date: Thu, 14 Nov 2024 11:48:14 +0000 Subject: [PATCH] Highlight form fields that fail validation when submit button is clicked --- .../fhir/datacapture/QuestionnaireViewModel.kt | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/datacapture/src/main/java/com/google/android/fhir/datacapture/QuestionnaireViewModel.kt b/datacapture/src/main/java/com/google/android/fhir/datacapture/QuestionnaireViewModel.kt index 35ca593755..fab796f77d 100644 --- a/datacapture/src/main/java/com/google/android/fhir/datacapture/QuestionnaireViewModel.kt +++ b/datacapture/src/main/java/com/google/android/fhir/datacapture/QuestionnaireViewModel.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 Google LLC + * Copyright 2023-2025 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -293,12 +293,6 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat private lateinit var currentPageItems: List - /** - * True if the user has tapped the next/previous pagination buttons on the current page. This is - * needed to avoid spewing validation errors before any questions are answered. - */ - private var forceValidation = false - /** * Map of [QuestionnaireResponseItemAnswerComponent] for * [Questionnaire.QuestionnaireItemComponent]s that are disabled now. The answers will be used to @@ -896,7 +890,6 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat val validationResult = if ( modifiedQuestionnaireResponseItemSet.contains(questionnaireResponseItem) || - forceValidation || isInReviewModeFlow.value ) { questionnaireResponseItemValidator.validate( @@ -1117,13 +1110,14 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat it.item.validationResult is NotValidated } ) { - // Force update validation results for all questions on the current page. This is needed - // when the user has not answered any questions so no validation has been done. - forceValidation = true + // Add all items on the current page to modifiedQuestionnaireResponseItemSet. + // This will ensure that all fields are validated even when they're not filled by the user + currentPageItems.filterIsInstance().forEach { + modifiedQuestionnaireResponseItemSet.add(it.item.getQuestionnaireResponseItem()) + } // Results in a new questionnaire state being generated synchronously, i.e., the current // thread will be suspended until the new state is generated. modificationCount.update { it + 1 } - forceValidation = false } if (