@@ -3,32 +3,32 @@ package org.simple.clinic.summary.medicalhistory
3
3
import android.content.Context
4
4
import android.os.Parcelable
5
5
import android.util.AttributeSet
6
- import android.view.LayoutInflater
7
6
import android.widget.FrameLayout
8
7
import androidx.appcompat.app.AppCompatActivity
8
+ import androidx.compose.animation.AnimatedVisibility
9
+ import androidx.compose.runtime.getValue
10
+ import androidx.compose.runtime.mutableStateOf
11
+ import androidx.compose.runtime.setValue
12
+ import androidx.compose.ui.platform.ComposeView
13
+ import androidx.compose.ui.platform.ViewCompositionStrategy
9
14
import io.reactivex.Observable
10
15
import io.reactivex.rxkotlin.ofType
11
16
import io.reactivex.subjects.PublishSubject
12
17
import org.simple.clinic.ReportAnalyticsEvents
13
- import org.simple.clinic.databinding.MedicalhistorySummaryViewBinding
18
+ import org.simple.clinic.common.ui.theme.SimpleTheme
14
19
import org.simple.clinic.di.injector
15
20
import org.simple.clinic.feature.Feature
16
21
import org.simple.clinic.feature.Features
17
22
import org.simple.clinic.medicalhistory.Answer
18
23
import org.simple.clinic.medicalhistory.MedicalHistory
19
24
import org.simple.clinic.medicalhistory.MedicalHistoryQuestion
20
- import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.DiagnosedWithDiabetes
21
- import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.DiagnosedWithHypertension
22
- import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.HasHadAHeartAttack
23
- import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.HasHadAKidneyDisease
24
- import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.HasHadAStroke
25
- import org.simple.clinic.medicalhistory.MedicalHistoryQuestion.IsSmoking
26
25
import org.simple.clinic.medicalhistory.SelectDiagnosisErrorDialog
27
26
import org.simple.clinic.mobius.MobiusDelegate
28
27
import org.simple.clinic.navigation.v2.keyprovider.ScreenKeyProvider
29
28
import org.simple.clinic.summary.PatientSummaryChildView
30
29
import org.simple.clinic.summary.PatientSummaryModelUpdateCallback
31
30
import org.simple.clinic.summary.PatientSummaryScreenKey
31
+ import org.simple.clinic.summary.medicalhistory.ui.MedicalHistorySummary
32
32
import org.simple.clinic.util.unsafeLazy
33
33
import org.simple.clinic.widgets.ScreenCreated
34
34
import org.simple.clinic.widgets.UiEvent
@@ -39,37 +39,12 @@ class MedicalHistorySummaryView(
39
39
attributeSet : AttributeSet
40
40
) : FrameLayout(context, attributeSet), MedicalHistorySummaryUi, PatientSummaryChildView {
41
41
42
- private var binding: MedicalhistorySummaryViewBinding ? = null
43
-
44
- private val heartAttackQuestionView
45
- get() = binding!! .heartAttackQuestionView
46
-
47
- private val strokeQuestionView
48
- get() = binding!! .strokeQuestionView
49
-
50
- private val kidneyDiseaseQuestionView
51
- get() = binding!! .kidneyDiseaseQuestionView
52
-
53
- private val diabetesQuestionView
54
- get() = binding!! .diabetesQuestionView
55
-
56
- private val hypertensionDiagnosisView
57
- get() = binding!! .hypertensionDiagnosisView
58
-
59
- private val diabetesDiagnosisView
60
- get() = binding!! .diabetesDiagnosisView
61
-
62
- private val diagnosisViewContainer
63
- get() = binding!! .diagnosisViewContainer
64
-
65
- private val currentSmokerQuestionView
66
- get() = binding!! .currentSmokerQuestionView
67
-
68
- private val currentSmokerQuestionContainer
69
- get() = binding!! .currentSmokerQuestionContainer
70
-
71
42
private val internalEvents = PublishSubject .create<MedicalHistorySummaryEvent >()
72
43
44
+ private var medicalHistory by mutableStateOf<MedicalHistory ?>(null )
45
+ private var diabetesManagementEnabled by mutableStateOf(false )
46
+ private var showSmokerQuestion by mutableStateOf(false )
47
+
73
48
@Inject
74
49
lateinit var activity: AppCompatActivity
75
50
@@ -82,11 +57,6 @@ class MedicalHistorySummaryView(
82
57
@Inject
83
58
lateinit var features: Features
84
59
85
- init {
86
- val layoutInflater = LayoutInflater .from(context)
87
- binding = MedicalhistorySummaryViewBinding .inflate(layoutInflater, this , true )
88
- }
89
-
90
60
private var modelUpdateCallback: PatientSummaryModelUpdateCallback ? = null
91
61
92
62
private val screenKey by unsafeLazy { screenKeyProvider.keyFor<PatientSummaryScreenKey >(this ) }
@@ -127,6 +97,31 @@ class MedicalHistorySummaryView(
127
97
}
128
98
129
99
context.injector<MedicalHistorySummaryViewInjector >().inject(this )
100
+
101
+ addView(ComposeView (context).apply {
102
+ setViewCompositionStrategy(ViewCompositionStrategy .DisposeOnDetachedFromWindow )
103
+
104
+ setContent {
105
+ SimpleTheme {
106
+ AnimatedVisibility (
107
+ visible = medicalHistory != null
108
+ ) {
109
+ MedicalHistorySummary (
110
+ hypertensionAnswer = medicalHistory?.diagnosedWithHypertension,
111
+ diabetesAnswer = medicalHistory?.diagnosedWithDiabetes,
112
+ heartAttackAnswer = medicalHistory?.hasHadHeartAttack,
113
+ strokeAnswer = medicalHistory?.hasHadStroke,
114
+ kidneyAnswer = medicalHistory?.hasHadKidneyDisease,
115
+ smokerAnswer = medicalHistory?.isSmoking,
116
+ diabetesManagementEnabled = diabetesManagementEnabled,
117
+ showSmokerQuestion = showSmokerQuestion,
118
+ ) { question, answer ->
119
+ answerToggled(question, answer)
120
+ }
121
+ }
122
+ }
123
+ }
124
+ })
130
125
}
131
126
132
127
override fun onAttachedToWindow () {
@@ -150,50 +145,23 @@ class MedicalHistorySummaryView(
150
145
private fun screenCreates (): Observable <UiEvent > = Observable .just(ScreenCreated )
151
146
152
147
override fun populateMedicalHistory (medicalHistory : MedicalHistory ) {
153
- renderMedicalHistory(medicalHistory)
154
- renderDiagnosis(medicalHistory)
155
- }
156
-
157
- private fun renderMedicalHistory (medicalHistory : MedicalHistory ) {
158
- heartAttackQuestionView.render(HasHadAHeartAttack , medicalHistory.hasHadHeartAttack, ::answerToggled)
159
- strokeQuestionView.render(HasHadAStroke , medicalHistory.hasHadStroke, ::answerToggled)
160
- kidneyDiseaseQuestionView.render(HasHadAKidneyDisease , medicalHistory.hasHadKidneyDisease, ::answerToggled)
161
- diabetesQuestionView.render(DiagnosedWithDiabetes , medicalHistory.diagnosedWithDiabetes, ::answerToggled)
162
- currentSmokerQuestionView.render(IsSmoking , medicalHistory.isSmoking, ::answerToggled)
163
- }
164
-
165
- private fun renderDiagnosis (medicalHistory : MedicalHistory ) {
166
- hypertensionDiagnosisView.render(DiagnosedWithHypertension , medicalHistory.diagnosedWithHypertension, ::answerToggled)
167
- diabetesDiagnosisView.render(DiagnosedWithDiabetes , medicalHistory.diagnosedWithDiabetes, ::answerToggled)
148
+ this .medicalHistory = medicalHistory
168
149
}
169
150
170
151
override fun showDiagnosisView () {
171
- diagnosisViewContainer.visibility = VISIBLE
172
- diabetesDiagnosisView.hideDivider()
152
+ this .diabetesManagementEnabled = true
173
153
}
174
154
175
155
override fun hideDiagnosisView () {
176
- diagnosisViewContainer.visibility = GONE
177
- }
178
-
179
- override fun showDiabetesHistorySection () {
180
- diabetesQuestionView.visibility = VISIBLE
181
- kidneyDiseaseQuestionView.showDivider()
182
- diabetesQuestionView.hideDivider()
183
- }
184
-
185
- override fun hideDiabetesHistorySection () {
186
- diabetesQuestionView.visibility = GONE
187
- kidneyDiseaseQuestionView.hideDivider()
156
+ this .diabetesManagementEnabled = false
188
157
}
189
158
190
159
override fun showCurrentSmokerQuestion () {
191
- currentSmokerQuestionContainer.visibility = VISIBLE
192
- currentSmokerQuestionView.hideDivider()
160
+ showSmokerQuestion = true
193
161
}
194
162
195
163
override fun hideCurrentSmokerQuestion () {
196
- currentSmokerQuestionContainer.visibility = GONE
164
+ showSmokerQuestion = false
197
165
}
198
166
199
167
override fun registerSummaryModelUpdateCallback (callback : PatientSummaryModelUpdateCallback ? ) {
0 commit comments