Skip to content

Commit

Permalink
spotlessApply
Browse files Browse the repository at this point in the history
  • Loading branch information
FikriMilano committed Sep 27, 2023
1 parent 6e5c0ab commit 386b26d
Show file tree
Hide file tree
Showing 10 changed files with 191 additions and 145 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,37 +31,37 @@ class BehaviorListViewModel(application: Application) : AndroidViewModel(applica
@DrawableRes val iconId: Int,
@StringRes val textId: Int,
val questionnaireFileName: String,
val workFlow: WorkflowType = WorkflowType.BEHAVIOR
val workFlow: WorkflowType = WorkflowType.BEHAVIOR,
) {
CALCULATED_EXPRESSION(
R.drawable.ic_calculations_behavior,
R.string.behavior_name_calculated_expression,
"behavior_calculated_expression.json"
"behavior_calculated_expression.json",
),
CONTEXT_VARIABLES(
R.drawable.ic_context,
R.string.behavior_name_context_variables,
"behavior_context_variables.json"
"behavior_context_variables.json",
),
SKIP_LOGIC(
R.drawable.ic_skiplogic_behavior,
R.string.behavior_name_skip_logic,
"behavior_skip_logic.json"
"behavior_skip_logic.json",
),
SKIP_LOGIC_WITH_EXPRESSION(
R.drawable.ic_skiplogic_behavior,
R.string.behavior_name_skip_logic_with_expression,
"behavior_skip_logic_with_expression.json"
"behavior_skip_logic_with_expression.json",
),
DYNAMIC_QUESTION_TEXT(
R.drawable.ic_dynamic_text_behavior,
R.string.behavior_name_dynamic_question_text,
"behavior_dynamic_question_text.json"
"behavior_dynamic_question_text.json",
),
CUSTOM_QUESTIONNAIRE_CONSTRAINT(
com.google.android.fhir.datacapture.R.drawable.ic_error_48px,
R.string.behavior_name_custom_questionnaire_constraint,
"behavior_custom_questionnaire_constraint.json"
"behavior_custom_questionnaire_constraint.json",
),
}
}
2 changes: 1 addition & 1 deletion catalog/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
>Dynamic question text</string>
<string
name="behavior_name_custom_questionnaire_constraint"
>Custom questionnaire constraint</string>
>Custom questionnaire constraint</string>
<string name="component_name_initial_value">Initial Value</string>
<string
name="behavior_name_calculated_expression_info"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
if (state.contains(QuestionnaireFragment.EXTRA_QUESTIONNAIRE_JSON_STRING)) {
Timber.w(
"Both EXTRA_QUESTIONNAIRE_JSON_URI & EXTRA_QUESTIONNAIRE_JSON_STRING are provided. " +
"EXTRA_QUESTIONNAIRE_JSON_URI takes precedence."
"EXTRA_QUESTIONNAIRE_JSON_URI takes precedence.",
)
}
val uri: Uri = state[QuestionnaireFragment.EXTRA_QUESTIONNAIRE_JSON_URI]!!
Expand All @@ -109,7 +109,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
}
else ->
error(
"Neither EXTRA_QUESTIONNAIRE_JSON_URI nor EXTRA_QUESTIONNAIRE_JSON_STRING is supplied."
"Neither EXTRA_QUESTIONNAIRE_JSON_URI nor EXTRA_QUESTIONNAIRE_JSON_STRING is supplied.",
)
}
}
Expand All @@ -123,7 +123,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
if (state.contains(QuestionnaireFragment.EXTRA_QUESTIONNAIRE_RESPONSE_JSON_STRING)) {
Timber.w(
"Both EXTRA_QUESTIONNAIRE_RESPONSE_JSON_URI & EXTRA_QUESTIONNAIRE_RESPONSE_JSON_STRING are provided. " +
"EXTRA_QUESTIONNAIRE_RESPONSE_JSON_URI takes precedence."
"EXTRA_QUESTIONNAIRE_RESPONSE_JSON_URI takes precedence.",
)
}
val uri: Uri = state[QuestionnaireFragment.EXTRA_QUESTIONNAIRE_RESPONSE_JSON_URI]!!
Expand Down Expand Up @@ -269,7 +269,9 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
*/
private val responseItemToAnswersMapForDisabledQuestionnaireItem =
mutableMapOf<
QuestionnaireResponseItemComponent, List<QuestionnaireResponseItemAnswerComponent>>()
QuestionnaireResponseItemComponent,
List<QuestionnaireResponseItemAnswerComponent>,
>()

/**
* Map from [QuestionnaireResponseItemComponent] to draft answers, e.g "02/02" for date with
Expand Down Expand Up @@ -298,15 +300,15 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
* - the reference to the [Questionnaire.QuestionnaireItemComponent] in the [Questionnaire]
* - the reference to the [QuestionnaireResponseItemComponent] in the [QuestionnaireResponse]
* - a [List] of [QuestionnaireResponseItemAnswerComponent] which are the new answers to the
* question.
* question.
* - partial answer, the entered input is not a valid answer
*/
private val answersChangedCallback:
(
QuestionnaireItemComponent,
QuestionnaireResponseItemComponent,
List<QuestionnaireResponseItemAnswerComponent>,
Any?
Any?,
) -> Unit =
{ questionnaireItem, questionnaireResponseItem, answers, draftAnswer ->
// TODO(jingtang10): update the questionnaire response item pre-order list and the parent map
Expand Down Expand Up @@ -338,15 +340,15 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
questionnaire,
questionnaireResponse,
questionnaireItemParentMap,
questionnaireLaunchContextMap
questionnaireLaunchContextMap,
)

private val enablementEvaluator: EnablementEvaluator =
EnablementEvaluator(
questionnaire,
questionnaireResponse,
questionnaireItemParentMap,
questionnaireLaunchContextMap
questionnaireLaunchContextMap,
)

private val answerOptionsEvaluator: EnabledAnswerOptionsEvaluator =
Expand All @@ -356,7 +358,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
xFhirQueryResolver,
externalValueSetResolver,
questionnaireItemParentMap,
questionnaireLaunchContextMap
questionnaireLaunchContextMap,
)

/**
Expand Down Expand Up @@ -394,6 +396,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
}
}
}

/**
* Returns current [QuestionnaireResponse] captured by the UI which includes answers of enabled
* questions.
Expand All @@ -405,7 +408,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
item =
getEnabledResponseItems(
this@QuestionnaireViewModel.questionnaire.item,
questionnaireResponse.item
questionnaireResponse.item,
)
.map { it.copy() }
unpackRepeatedGroups(this@QuestionnaireViewModel.questionnaire)
Expand Down Expand Up @@ -502,7 +505,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
questionnaire.item.flattened().forEach { qItem ->
updateDependentQuestionnaireResponseItems(
qItem,
questionnaireResponse.allItems.find { qrItem -> qrItem.linkId == qItem.linkId }
questionnaireResponse.allItems.find { qrItem -> qrItem.linkId == qItem.linkId },
)
}
modificationCount.update { count -> count + 1 }
Expand All @@ -512,7 +515,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
.stateIn(
viewModelScope,
SharingStarted.Lazily,
initialValue = QuestionnaireState(items = emptyList(), displayMode = DisplayMode.InitMode)
initialValue = QuestionnaireState(items = emptyList(), displayMode = DisplayMode.InitMode),
)

private fun updateDependentQuestionnaireResponseItems(
Expand Down Expand Up @@ -565,7 +568,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
private fun removeDisabledAnswers(
questionnaireItem: QuestionnaireItemComponent,
questionnaireResponseItem: QuestionnaireResponseItemComponent,
disabledAnswers: List<QuestionnaireResponseItemAnswerComponent>
disabledAnswers: List<QuestionnaireResponseItemAnswerComponent>,
) {
val validAnswers =
questionnaireResponseItem.answer.filterNot { ans ->
Expand Down Expand Up @@ -596,7 +599,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
}
getQuestionnaireAdapterItems(
questionnaireItemList[currentPageIndexFlow.value!!],
questionnaireResponseItemList[currentPageIndexFlow.value!!]
questionnaireResponseItemList[currentPageIndexFlow.value!!],
)
} else {
getQuestionnaireAdapterItems(questionnaireItemList, questionnaireResponseItemList)
Expand All @@ -609,8 +612,8 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
displayMode =
DisplayMode.ReviewMode(
showEditButton = !isReadOnly,
showSubmitButton = !isReadOnly && shouldShowSubmitButton
)
showSubmitButton = !isReadOnly && shouldShowSubmitButton,
),
)
}

Expand All @@ -631,13 +634,13 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
pages!!,
currentPageIndexFlow.value!!,
showSubmitButton,
showReviewButton
showReviewButton,
)
}

return QuestionnaireState(
items = questionnaireItemViewItems,
displayMode = DisplayMode.EditMode(questionnairePagination)
displayMode = DisplayMode.EditMode(questionnairePagination),
)
}

Expand Down Expand Up @@ -681,7 +684,8 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat

// Determine the validation result, which will be displayed on the item itself
val validationResult =
if (modifiedQuestionnaireResponseItemSet.contains(questionnaireResponseItem) ||
if (
modifiedQuestionnaireResponseItemSet.contains(questionnaireResponseItem) ||
forceValidation ||
isInReviewModeFlow.value
) {
Expand All @@ -691,7 +695,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
questionnaireResponse,
questionnaireResponseItem,
this@QuestionnaireViewModel.getApplication(),
expressionEvaluator
expressionEvaluator,
)
} else {
NotValidated
Expand All @@ -712,7 +716,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
removeDisabledAnswers(
questionnaireItem,
questionnaireResponseItem,
disabledQuestionnaireResponseAnswers
disabledQuestionnaireResponseAnswers,
)
}

Expand All @@ -739,10 +743,10 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
QuestionTextConfiguration(
showAsterisk = showAsterisk,
showRequiredText = showRequiredText,
showOptionalText = showOptionalText
)
)
)
showOptionalText = showOptionalText,
),
),
),
)

// Add nested questions after the parent item. We need to get the questionnaire items and
Expand Down Expand Up @@ -771,7 +775,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
// questionnaire state for it.
questionnaireItemList = questionnaireItem.item.filterNot { it.isDisplayItem },
questionnaireResponseItemList = nestedResponseItemList,
)
),
)
}
}
Expand All @@ -785,7 +789,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
* item to be wrongly evaluated as well.
*/
private fun cacheDisabledQuestionnaireItemAnswers(
questionnaireResponseItem: QuestionnaireResponseItemComponent
questionnaireResponseItem: QuestionnaireResponseItemComponent,
) {
if (questionnaireResponseItem.hasAnswer()) {
responseItemToAnswersMapForDisabledQuestionnaireItem[questionnaireResponseItem] =
Expand All @@ -798,7 +802,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
* If the questionnaire item was previously disabled, check the cache to restore previous answers.
*/
private fun restoreFromDisabledQuestionnaireItemAnswersCache(
questionnaireResponseItem: QuestionnaireResponseItemComponent
questionnaireResponseItem: QuestionnaireResponseItemComponent,
) {
if (responseItemToAnswersMapForDisabledQuestionnaireItem.contains(questionnaireResponseItem)) {
questionnaireResponseItem.answer =
Expand Down Expand Up @@ -851,7 +855,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
questionnaireItem,
questionnaireResponseItem,
),
questionnaireItem.isHidden
questionnaireItem.isHidden,
)
}
} else {
Expand All @@ -863,7 +867,8 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
* are all [Valid].
*/
private fun validateCurrentPageItems(block: () -> Unit) {
if (currentPageItems.filterIsInstance<QuestionnaireAdapterItem.Question>().any {
if (
currentPageItems.filterIsInstance<QuestionnaireAdapterItem.Question>().any {
it.item.validationResult is NotValidated
}
) {
Expand All @@ -876,7 +881,8 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
forceValidation = false
}

if (currentPageItems.filterIsInstance<QuestionnaireAdapterItem.Question>().all {
if (
currentPageItems.filterIsInstance<QuestionnaireAdapterItem.Question>().all {
it.item.validationResult is Valid
}
) {
Expand All @@ -895,6 +901,7 @@ internal data class QuestionnaireState(

internal sealed class DisplayMode {
class EditMode(val pagination: QuestionnairePagination) : DisplayMode()

data class ReviewMode(val showEditButton: Boolean, val showSubmitButton: Boolean) : DisplayMode()

// Sentinel displayMode that's used in setting the initial default QuestionnaireState
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import org.hl7.fhir.r4.model.Resource
*
* For example, the following `enableWhen` constraint in a
* [Questionnaire.QuestionnaireItemComponent]
*
* ```
* "enableWhen": [
* {
Expand All @@ -45,6 +46,7 @@ import org.hl7.fhir.r4.model.Resource
* }
* ],
* ```
*
* specifies that the [Questionnaire.QuestionnaireItemComponent] should be enabled only if the
* question with linkId `vitaminKgiven` has been answered.
*
Expand Down Expand Up @@ -77,13 +79,14 @@ internal class EnablementEvaluator(
private val questionnaireLaunchContextMap: Map<String, Resource>? = emptyMap(),
) {

val expressionEvaluator
get() = ExpressionEvaluator(
questionnaire,
questionnaireResponse,
questionnaireItemParentMap,
questionnaireLaunchContextMap
)
val expressionEvaluator
get() =
ExpressionEvaluator(
questionnaire,
questionnaireResponse,
questionnaireItemParentMap,
questionnaireLaunchContextMap,
)

/**
* The pre-order traversal trace of the items in the [QuestionnaireResponse]. This essentially
Expand All @@ -95,7 +98,7 @@ internal class EnablementEvaluator(
private val questionnaireResponseItemParentMap =
mutableMapOf<
QuestionnaireResponse.QuestionnaireResponseItemComponent,
QuestionnaireResponse.QuestionnaireResponseItemComponent
QuestionnaireResponse.QuestionnaireResponseItemComponent,
>()

init {
Expand Down Expand Up @@ -180,11 +183,14 @@ internal class EnablementEvaluator(
questionnaireResponseItem: QuestionnaireResponse.QuestionnaireResponseItemComponent,
): Boolean {
val targetQuestionnaireResponseItem: QuestionnaireResponse.QuestionnaireResponseItemComponent? =
if (questionnaireItem.type == Questionnaire.QuestionnaireItemType.DISPLAY &&
if (
questionnaireItem.type == Questionnaire.QuestionnaireItemType.DISPLAY &&
questionnaireResponseItem.linkId == enableWhen.question
)
) {
questionnaireResponseItem
else findEnableWhenQuestionnaireResponseItem(questionnaireResponseItem, enableWhen.question)
} else {
findEnableWhenQuestionnaireResponseItem(questionnaireResponseItem, enableWhen.question)
}
return if (Questionnaire.QuestionnaireItemOperator.EXISTS == enableWhen.operator) {
// True iff the answer value of the enable when is equal to whether an answer exists in the
// target questionnaire response item
Expand Down
Loading

0 comments on commit 386b26d

Please sign in to comment.