Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ fun DiagnosisContainer(
hypertensionAnswer: Answer?,
diabetesAnswer: Answer?,
showDiabetesDiagnosisView: Boolean,
isScreeningFeatureEnabled: Boolean,
showHypertensionSuspectedOption: Boolean,
showDiabetesSuspectedOption: Boolean,
modifier: Modifier = Modifier,
onAnswerChange: (MedicalHistoryQuestion, Answer) -> Unit,
) {
Expand All @@ -31,7 +32,13 @@ fun DiagnosisContainer(
.padding(dimensionResource(R.dimen.spacing_16))
) {

val options = if (isScreeningFeatureEnabled) {
val hypertensionDiagnosisOptions = if (showHypertensionSuspectedOption) {
listOf(Answer.Yes, Answer.No, Answer.Suspected)
} else {
listOf(Answer.Yes, Answer.No)
}

val diabetesDiagnosisOptions = if (showDiabetesSuspectedOption) {
listOf(Answer.Yes, Answer.No, Answer.Suspected)
} else {
listOf(Answer.Yes, Answer.No)
Expand All @@ -40,7 +47,7 @@ fun DiagnosisContainer(
MedicalHistoryDiagnosisQuestionItem(
header = stringResource(R.string.medicalhistorysummaryview_hypertension_diagnosis),
question = MedicalHistoryQuestion.DiagnosedWithHypertension,
options = options,
options = hypertensionDiagnosisOptions,
selectedAnswer = hypertensionAnswer,
onAnswerChange = onAnswerChange
)
Expand All @@ -56,7 +63,7 @@ fun DiagnosisContainer(
MedicalHistoryDiagnosisQuestionItem(
header = stringResource(R.string.medicalhistorysummaryview_diabetes_diagnosis),
question = MedicalHistoryQuestion.DiagnosedWithDiabetes,
options = options,
options = diabetesDiagnosisOptions,
selectedAnswer = diabetesAnswer,
onAnswerChange = onAnswerChange
)
Expand All @@ -73,7 +80,8 @@ fun DiagnosisContainerPreview(modifier: Modifier = Modifier) {
hypertensionAnswer = Answer.Yes,
diabetesAnswer = Answer.No,
showDiabetesDiagnosisView = true,
isScreeningFeatureEnabled = true,
showHypertensionSuspectedOption = true,
showDiabetesSuspectedOption = true,
modifier = modifier,
onAnswerChange = { _, _ -> }
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,6 @@ data class LoadMedicalHistory(val patientUUID: UUID) : MedicalHistorySummaryEffe

data object LoadCurrentFacility : MedicalHistorySummaryEffect()

data class DetermineSuspectedOptionVisibility(val medicalHistory: MedicalHistory) : MedicalHistorySummaryEffect()

data class SaveUpdatedMedicalHistory(val medicalHistory: MedicalHistory) : MedicalHistorySummaryEffect()
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import com.spotify.mobius.rx2.RxMobius
import dagger.Lazy
import io.reactivex.ObservableTransformer
import org.simple.clinic.facility.Facility
import org.simple.clinic.feature.Feature
import org.simple.clinic.feature.Features
import org.simple.clinic.medicalhistory.MedicalHistory
import org.simple.clinic.medicalhistory.MedicalHistoryRepository
import org.simple.clinic.util.UtcClock
Expand All @@ -17,14 +19,16 @@ class MedicalHistorySummaryEffectHandler @Inject constructor(
private val medicalHistoryRepository: MedicalHistoryRepository,
private val clock: UtcClock,
private val currentFacility: Lazy<Facility>,
private val uuidGenerator: UuidGenerator
private val uuidGenerator: UuidGenerator,
private val features: Features,
) {

fun build(): ObservableTransformer<MedicalHistorySummaryEffect, MedicalHistorySummaryEvent> {
return RxMobius
.subtypeEffectHandler<MedicalHistorySummaryEffect, MedicalHistorySummaryEvent>()
.addTransformer(LoadMedicalHistory::class.java, loadMedicalHistory())
.addTransformer(LoadCurrentFacility::class.java, loadCurrentFacility())
.addTransformer(DetermineSuspectedOptionVisibility::class.java, determineSuspectedOptionVisibility())
.addConsumer(SaveUpdatedMedicalHistory::class.java, { updateMedicalHistory(it.medicalHistory) }, schedulers.io())
.build()
}
Expand Down Expand Up @@ -55,4 +59,39 @@ class MedicalHistorySummaryEffectHandler @Inject constructor(
private fun updateMedicalHistory(medicalHistory: MedicalHistory) {
medicalHistoryRepository.save(medicalHistory, Instant.now(clock))
}

private fun determineSuspectedOptionVisibility():
ObservableTransformer<DetermineSuspectedOptionVisibility, MedicalHistorySummaryEvent> {
return ObservableTransformer { effects ->
effects
.observeOn(schedulers.io())
.map { effect ->
val medicalHistory = effect.medicalHistory

val isScreeningFeatureEnabled = features.isEnabled(Feature.Screening)

val showHypertensionSuspectedOption = shouldShowSuspectedOption(
isScreeningFeatureEnabled,
medicalHistory.diagnosedWithHypertension.isAnsweredWithYesOrNo,
)

val showDiabetesSuspectedOption = shouldShowSuspectedOption(
isScreeningFeatureEnabled,
medicalHistory.diagnosedWithDiabetes.isAnsweredWithYesOrNo,
)

SuspectedOptionVisibilityDetermined(
showHypertensionSuspectedOption = showHypertensionSuspectedOption,
showDiabetesSuspectedOption = showDiabetesSuspectedOption
)
}
}
}

private fun shouldShowSuspectedOption(
isScreeningEnabled: Boolean,
hasAnswered: Boolean,
): Boolean {
return isScreeningEnabled && !hasAnswered
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,8 @@ data class SummaryMedicalHistoryAnswerToggled(
data class MedicalHistoryLoaded(val medicalHistory: MedicalHistory) : MedicalHistorySummaryEvent()

data class CurrentFacilityLoaded(val facility: Facility) : MedicalHistorySummaryEvent()

data class SuspectedOptionVisibilityDetermined(
val showHypertensionSuspectedOption: Boolean,
val showDiabetesSuspectedOption: Boolean
) : MedicalHistorySummaryEvent()
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ data class MedicalHistorySummaryModel(
val currentFacility: Facility? = null,
val showIsSmokingQuestion: Boolean,
val showSmokelessTobaccoQuestion: Boolean,
val showHypertensionSuspectedOption: Boolean,
val showDiabetesSuspectedOption: Boolean,
val hasDeterminedSuspectedOptionVisibility: Boolean
) : Parcelable, PatientSummaryChildModel {

companion object {
Expand All @@ -26,7 +29,10 @@ data class MedicalHistorySummaryModel(
): MedicalHistorySummaryModel = MedicalHistorySummaryModel(
patientUuid = patientUuid,
showIsSmokingQuestion = showIsSmokingQuestion,
showSmokelessTobaccoQuestion = showSmokelessTobaccoQuestion
showSmokelessTobaccoQuestion = showSmokelessTobaccoQuestion,
showHypertensionSuspectedOption = false,
showDiabetesSuspectedOption = false,
hasDeterminedSuspectedOptionVisibility = false,
)
}

Expand All @@ -51,4 +57,15 @@ data class MedicalHistorySummaryModel(
fun answerToggled(question: MedicalHistoryQuestion, answer: Answer): MedicalHistorySummaryModel {
return copy(medicalHistory = medicalHistory!!.answered(question, answer))
}

fun diagnosisSuspectedOptionVisibilityLoaded(
showHypertensionSuspectedOption: Boolean,
showDiabetesSuspectedOption: Boolean
): MedicalHistorySummaryModel {
return copy(
showHypertensionSuspectedOption = showHypertensionSuspectedOption,
showDiabetesSuspectedOption = showDiabetesSuspectedOption,
hasDeterminedSuspectedOptionVisibility = true
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,6 @@ interface MedicalHistorySummaryUi {

fun showSmokelessTobaccoQuestion()
fun hideSmokelessTobaccoQuestion()
fun setHypertensionSuspectedOptionVisibility(visible: Boolean)
fun setDiabetesSuspectedOptionVisibility(visible: Boolean)
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@ class MedicalHistorySummaryUiRenderer(

private val smokelessTobaccoQuestionVisibilityChangedCallback = ValueChangedCallback<Boolean>()

private val hypertensionSuspectedVisibilityChangedCallback =
ValueChangedCallback<Boolean>()

private val diabetesSuspectedVisibilityChangedCallback =
ValueChangedCallback<Boolean>()


override fun render(model: MedicalHistorySummaryModel) {
if (model.hasLoadedMedicalHistory) {
medicalHistoryChangedCallback.pass(model.medicalHistory!!, ui::populateMedicalHistory)
Expand All @@ -40,6 +47,16 @@ class MedicalHistorySummaryUiRenderer(
ui.hideSmokelessTobaccoQuestion()
}
}

hypertensionSuspectedVisibilityChangedCallback.pass(
model.showHypertensionSuspectedOption,
ui::setHypertensionSuspectedOptionVisibility
)

diabetesSuspectedVisibilityChangedCallback.pass(
model.showDiabetesSuspectedOption,
ui::setDiabetesSuspectedOptionVisibility
)
}

private fun toggleDiabetesManagementUi(diabetesManagementEnabled: Boolean) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,28 @@ class MedicalHistorySummaryUpdate : Update<MedicalHistorySummaryModel, MedicalHi
event: MedicalHistorySummaryEvent
): Next<MedicalHistorySummaryModel, MedicalHistorySummaryEffect> {
return when (event) {
is MedicalHistoryLoaded -> next(model.medicalHistoryLoaded(event.medicalHistory))
is MedicalHistoryLoaded -> medicalHistoryLoaded(model, event)
is SummaryMedicalHistoryAnswerToggled -> medicalHistoryAnswerToggled(model, event)
is CurrentFacilityLoaded -> next(model.currentFacilityLoaded(event.facility))
is SuspectedOptionVisibilityDetermined -> next(
model.diagnosisSuspectedOptionVisibilityLoaded(
event.showHypertensionSuspectedOption,
event.showDiabetesSuspectedOption
)
)
}
}

private fun medicalHistoryLoaded(
model: MedicalHistorySummaryModel,
event: MedicalHistoryLoaded
): Next<MedicalHistorySummaryModel, MedicalHistorySummaryEffect> {
val updatedModel = model.medicalHistoryLoaded(event.medicalHistory)

return if (updatedModel.hasDeterminedSuspectedOptionVisibility) {
next(updatedModel)
} else {
next(updatedModel, DetermineSuspectedOptionVisibility(event.medicalHistory))
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ class MedicalHistorySummaryView(
private var showSmokerQuestion by mutableStateOf(false)
private var showSmokelessTobaccoQuestion by mutableStateOf(false)

private var showHypertensionSuspectedOption by mutableStateOf(false)
private var showDiabetesSuspectedOption by mutableStateOf(false)

@Inject
lateinit var activity: AppCompatActivity

Expand Down Expand Up @@ -126,7 +129,8 @@ class MedicalHistorySummaryView(
diabetesManagementEnabled = diabetesManagementEnabled,
showSmokerQuestion = showSmokerQuestion,
showSmokelessTobaccoQuestion = showSmokelessTobaccoQuestion,
isScreeningFeatureEnabled = features.isEnabled(Feature.Screening)
showHypertensionSuspectedOption = showHypertensionSuspectedOption,
showDiabetesSuspectedOption = showDiabetesSuspectedOption
) { question, answer ->
answerToggled(question, answer)
}
Expand Down Expand Up @@ -184,6 +188,14 @@ class MedicalHistorySummaryView(
showSmokelessTobaccoQuestion = false
}

override fun setHypertensionSuspectedOptionVisibility(visible: Boolean) {
showHypertensionSuspectedOption = visible
}

override fun setDiabetesSuspectedOptionVisibility(visible: Boolean) {
showDiabetesSuspectedOption = visible
}

override fun registerSummaryModelUpdateCallback(callback: PatientSummaryModelUpdateCallback?) {
modelUpdateCallback = callback
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ fun MedicalHistorySummary(
diabetesManagementEnabled: Boolean,
showSmokerQuestion: Boolean,
showSmokelessTobaccoQuestion: Boolean,
isScreeningFeatureEnabled: Boolean,
showHypertensionSuspectedOption: Boolean,
showDiabetesSuspectedOption: Boolean,
modifier: Modifier = Modifier,
onAnswerChange: (MedicalHistoryQuestion, Answer) -> Unit,
) {
Expand All @@ -43,7 +44,8 @@ fun MedicalHistorySummary(
hypertensionAnswer = hypertensionAnswer,
diabetesAnswer = diabetesAnswer,
showDiabetesDiagnosisView = diabetesManagementEnabled,
isScreeningFeatureEnabled = isScreeningFeatureEnabled,
showHypertensionSuspectedOption = showHypertensionSuspectedOption,
showDiabetesSuspectedOption = showDiabetesSuspectedOption,
onAnswerChange = onAnswerChange,
)

Expand Down Expand Up @@ -82,7 +84,8 @@ private fun MedicalHistorySummaryPreview() {
diabetesManagementEnabled = true,
showSmokerQuestion = false,
showSmokelessTobaccoQuestion = false,
isScreeningFeatureEnabled = true,
showHypertensionSuspectedOption = true,
showDiabetesSuspectedOption = true,
onAnswerChange = { _, _ ->
// no-op
}
Expand All @@ -105,7 +108,8 @@ private fun MedicalHistorySummaryNoDiabetesManagementPreview() {
diabetesManagementEnabled = false,
showSmokerQuestion = false,
showSmokelessTobaccoQuestion = false,
isScreeningFeatureEnabled = true,
showHypertensionSuspectedOption = true,
showDiabetesSuspectedOption = true,
onAnswerChange = { _, _ ->
// no-op
}
Expand All @@ -128,7 +132,8 @@ private fun MedicalHistorySummarySmokerPreview() {
diabetesManagementEnabled = true,
showSmokerQuestion = true,
showSmokelessTobaccoQuestion = false,
isScreeningFeatureEnabled = true,
showHypertensionSuspectedOption = true,
showDiabetesSuspectedOption = true,
onAnswerChange = { _, _ ->
// no-op
}
Expand All @@ -151,7 +156,8 @@ private fun MedicalHistorySummaryTobaccoUsePreview() {
diabetesManagementEnabled = true,
showSmokerQuestion = true,
showSmokelessTobaccoQuestion = true,
isScreeningFeatureEnabled = true,
showHypertensionSuspectedOption = true,
showDiabetesSuspectedOption = true,
onAnswerChange = { _, _ ->
// no-op
}
Expand Down
Loading
Loading