Skip to content

Commit

Permalink
Optimizations + X-FHIR-Query
Browse files Browse the repository at this point in the history
- X-FHIR-Query support for variable extension PR google#2076
- Optimize flatten and descendent traversal PR google#2079
  • Loading branch information
ndegwamartin committed Aug 11, 2023
1 parent d864e44 commit 25f632c
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 9 deletions.
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/Releases.kt
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ object Releases {

object DataCapture : LibraryArtifact {
override val artifactId = "data-capture"
override val version = "1.0.0-preview14.3-SNAPSHOT"
override val version = "1.0.0-preview14.4-SNAPSHOT"
override val name = "Android FHIR Structured Data Capture Library"
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,7 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
questionnaireResponseItem.addNestedItemsToAnswer(questionnaireItem)
}
modifiedQuestionnaireResponseItemSet.add(questionnaireResponseItem)
modificationCount.update { it + 1 }

viewModelScope.launch(Dispatchers.IO) {
updateDependentQuestionnaireResponseItems(questionnaireItem, questionnaireResponseItem)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -673,9 +673,16 @@ internal fun Questionnaire.QuestionnaireItemComponent.extractAnswerOptions(
* Flatten a nested list of [Questionnaire.QuestionnaireItemComponent] recursively and returns a
* flat list of all items into list embedded at any level
*/
fun List<Questionnaire.QuestionnaireItemComponent>.flattened():
List<Questionnaire.QuestionnaireItemComponent> {
return this + this.flatMap { it.item.flattened() }
fun List<Questionnaire.QuestionnaireItemComponent>.flattened(): List<Questionnaire.QuestionnaireItemComponent> =
mutableListOf<Questionnaire.QuestionnaireItemComponent>().also { flattenInto(it) }

private fun List<Questionnaire.QuestionnaireItemComponent>.flattenInto(
output: MutableList<Questionnaire.QuestionnaireItemComponent>
) {
forEach {
output.add(it)
it.item.flattenInto(output)
}
}

val Resource.logicalId: String
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,18 @@ import org.hl7.fhir.r4.model.QuestionnaireResponse
*/
val QuestionnaireResponse.QuestionnaireResponseItemComponent.descendant:
List<QuestionnaireResponse.QuestionnaireResponseItemComponent>
get() {
return listOf(this) +
this.item.flatMap { it.descendant } +
this.answer.flatMap { answer -> answer.item.flatMap { it.descendant } }
}
get() =
mutableListOf<QuestionnaireResponse.QuestionnaireResponseItemComponent>().also {
appendDescendantTo(it)
}

private fun QuestionnaireResponse.QuestionnaireResponseItemComponent.appendDescendantTo(
output: MutableList<QuestionnaireResponse.QuestionnaireResponseItemComponent>
) {
output.add(this)
item.forEach { it.appendDescendantTo(output) }
answer.forEach { answer -> answer.item.forEach { it.appendDescendantTo(output) } }
}

/**
* Add nested items under the provided `questionnaireItem` to each answer in the questionnaire
Expand Down

0 comments on commit 25f632c

Please sign in to comment.