Skip to content

Commit

Permalink
XFHIR Query SDC Artifact release
Browse files Browse the repository at this point in the history
    - SDC Library - 1.0.0-preview14.2-SNAPSHOT
  • Loading branch information
ndegwamartin committed Jul 19, 2023
1 parent 854b682 commit ad589e8
Show file tree
Hide file tree
Showing 4 changed files with 198 additions and 33 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.1-SNAPSHOT"
override val version = "1.0.0-preview14.2-SNAPSHOT"
override val name = "Android FHIR Structured Data Capture Library"
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -764,6 +764,9 @@ internal class QuestionnaireViewModel(application: Application, state: SavedStat
answersChangedCallback = answersChangedCallback,
resolveAnswerValueSet = { resolveAnswerValueSet(it) },
resolveAnswerExpression = { resolveAnswerExpression(it) },
resolveDynamicText = { item, responseItem, textElement ->
resolveDynamicText(item, responseItem, textElement)
},
draftAnswer = draftAnswerMap[questionnaireResponseItem],
enabledDisplayItems =
questionnaireItem.item.filter {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
import org.hl7.fhir.r4.model.Questionnaire
import org.hl7.fhir.r4.model.QuestionnaireResponse
import org.hl7.fhir.r4.model.QuestionnaireResponse.QuestionnaireResponseItemComponent
import org.hl7.fhir.r4.model.StringType

/**
* Data item for [QuestionnaireItemViewHolder] in [RecyclerView].
Expand Down Expand Up @@ -70,22 +72,28 @@ data class QuestionnaireViewItem(
val validationResult: ValidationResult,
internal val answersChangedCallback:
(
Questionnaire.QuestionnaireItemComponent,
QuestionnaireResponse.QuestionnaireResponseItemComponent,
List<QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent>,
Any?
) -> Unit,
Questionnaire.QuestionnaireItemComponent,
QuestionnaireResponse.QuestionnaireResponseItemComponent,
List<QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent>,
Any?
) -> Unit,
private val resolveAnswerValueSet:
suspend (String) -> List<Questionnaire.QuestionnaireItemAnswerOptionComponent> =
suspend (String) -> List<Questionnaire.QuestionnaireItemAnswerOptionComponent> =
{
emptyList()
},
private val resolveAnswerExpression:
suspend (Questionnaire.QuestionnaireItemComponent) -> List<
Questionnaire.QuestionnaireItemAnswerOptionComponent> =
suspend (Questionnaire.QuestionnaireItemComponent) -> List<
Questionnaire.QuestionnaireItemAnswerOptionComponent> =
{
emptyList()
},
private val resolveDynamicText:
suspend (
Questionnaire.QuestionnaireItemComponent,
QuestionnaireResponseItemComponent,
StringType
) -> String?,
val draftAnswer: Any? = null,
val enabledDisplayItems: List<Questionnaire.QuestionnaireItemComponent> = emptyList(),
val questionViewTextConfiguration: QuestionTextConfiguration = QuestionTextConfiguration(),
Expand All @@ -109,7 +117,7 @@ data class QuestionnaireViewItem(
/** Updates the answers. This will override any existing answers and removes the draft answer. */
fun setAnswer(
vararg questionnaireResponseItemAnswerComponent:
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent
) {
check(questionnaireItem.repeats || questionnaireResponseItemAnswerComponent.size <= 1) {
"Questionnaire item with linkId ${questionnaireItem.linkId} has repeated answers."
Expand All @@ -130,7 +138,7 @@ data class QuestionnaireViewItem(
/** Adds an answer to the existing answers and removes the draft answer. */
fun addAnswer(
questionnaireResponseItemAnswerComponent:
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent
) {
check(questionnaireItem.repeats) {
"Questionnaire item with linkId ${questionnaireItem.linkId} does not allow repeated answers"
Expand All @@ -146,7 +154,7 @@ data class QuestionnaireViewItem(
/** Removes an answer from the existing answers, as well as any draft answer. */
fun removeAnswer(
questionnaireResponseItemAnswerComponent:
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent
QuestionnaireResponse.QuestionnaireResponseItemAnswerComponent
) {
check(questionnaireItem.repeats) {
"Questionnaire item with linkId ${questionnaireItem.linkId} does not allow repeated answers"
Expand Down Expand Up @@ -216,7 +224,15 @@ data class QuestionnaireViewItem(
* is derived from [localizedTextSpanned] of [QuestionnaireResponse.QuestionnaireItemComponent]
*/
val questionText: Spanned? by lazy {
questionnaireResponseItem.text?.toSpanned() ?: questionnaireItem.localizedTextSpanned
runBlocking(Dispatchers.IO) {
questionnaireResponseItem.text =
resolveDynamicText(
questionnaireItem,
questionnaireResponseItem,
questionnaireItem.textElement
)
questionnaireResponseItem.text?.toSpanned() ?: questionnaireItem.localizedTextSpanned
}
}

/**
Expand All @@ -230,7 +246,7 @@ data class QuestionnaireViewItem(
*/
internal fun hasTheSameItem(other: QuestionnaireViewItem) =
questionnaireItem === other.questionnaireItem &&
questionnaireResponseItem === other.questionnaireResponseItem
questionnaireResponseItem === other.questionnaireResponseItem

/**
* Returns whether this [QuestionnaireViewItem] and the `other` [QuestionnaireViewItem] have the
Expand All @@ -241,15 +257,15 @@ data class QuestionnaireViewItem(
*/
internal fun hasTheSameResponse(other: QuestionnaireViewItem) =
answers.size == other.answers.size &&
answers
.zip(other.answers) { answer, otherAnswer ->
answer.value != null &&
otherAnswer.value != null &&
answer.value.equalsShallow(otherAnswer.value)
}
.all { it } &&
draftAnswer == other.draftAnswer &&
questionText == other.questionText
answers
.zip(other.answers) { answer, otherAnswer ->
answer.value != null &&
otherAnswer.value != null &&
answer.value.equalsShallow(otherAnswer.value)
}
.all { it } &&
draftAnswer == other.draftAnswer &&
questionText == other.questionText

/**
* Returns whether this [QuestionnaireViewItem] and the `other` [QuestionnaireViewItem] have the
Expand Down
Loading

0 comments on commit ad589e8

Please sign in to comment.