Skip to content

Commit 522d77d

Browse files
authored
1 parent 17fbf2e commit 522d77d

19 files changed

+567
-377
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
- Migrate codeclimate config to qlty.sh config
1414
- Migrate `OverdueScreen` patient list to Jetpack Compose
1515
- Migrate blood pressure summary view to Jetpack Compose
16+
- Migrate blood sugar summary view to Jetpack Compose
1617

1718
### Fixes
1819

app/src/main/java/org/simple/clinic/main/TheActivityComponent.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ import org.simple.clinic.summary.addcholesterol.CholesterolEntrySheet
7575
import org.simple.clinic.summary.addphone.AddPhoneNumberDialog
7676
import org.simple.clinic.summary.assignedfacility.AssignedFacilityView
7777
import org.simple.clinic.summary.bloodpressures.ui.BloodPressureSummaryViewInjector
78-
import org.simple.clinic.summary.bloodsugar.view.BloodSugarSummaryViewInjector
78+
import org.simple.clinic.summary.bloodsugar.ui.BloodSugarSummaryViewInjector
7979
import org.simple.clinic.summary.linkId.LinkIdWithPatientSheet
8080
import org.simple.clinic.summary.medicalhistory.MedicalHistorySummaryViewInjector
8181
import org.simple.clinic.summary.nextappointment.NextAppointmentCardView

app/src/main/java/org/simple/clinic/summary/PatientSummaryScreen.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -750,7 +750,6 @@ class PatientSummaryScreen :
750750

751751
val transition = AutoTransition().apply {
752752
excludeChildren(view, true)
753-
excludeTarget(R.id.bloodSugarItemContainer, true)
754753
// We are doing this to wait for the router transitions to be done before we start this.
755754
startDelay = 500
756755
}
@@ -798,7 +797,6 @@ class PatientSummaryScreen :
798797

799798
val transition = AutoTransition().apply {
800799
excludeChildren(view, true)
801-
excludeTarget(R.id.bloodSugarItemContainer, true)
802800
}
803801
TransitionManager.beginDelayedTransition(summaryViewsContainer, transition)
804802

app/src/main/java/org/simple/clinic/summary/bloodsugar/BloodSugarSummaryViewEffect.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.simple.clinic.summary.bloodsugar
22

3-
import org.simple.clinic.bloodsugar.BloodSugarMeasurement
3+
import org.simple.clinic.bloodsugar.BloodSugarMeasurementType
44
import java.util.UUID
55

66
sealed class BloodSugarSummaryViewEffect
@@ -13,4 +13,4 @@ data class FetchBloodSugarCount(val patientUuid: UUID) : BloodSugarSummaryViewEf
1313

1414
data class ShowBloodSugarHistoryScreen(val patientUuid: UUID) : BloodSugarSummaryViewEffect()
1515

16-
data class OpenBloodSugarUpdateSheet(val measurement: BloodSugarMeasurement) : BloodSugarSummaryViewEffect()
16+
data class OpenBloodSugarUpdateSheet(val id: UUID, val measurementType: BloodSugarMeasurementType) : BloodSugarSummaryViewEffect()

app/src/main/java/org/simple/clinic/summary/bloodsugar/BloodSugarSummaryViewEffectHandler.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class BloodSugarSummaryViewEffectHandler @AssistedInject constructor(
3232
.addTransformer(FetchBloodSugarCount::class.java, fetchBloodSugarMeasurementsCount(schedulersProvider.io()))
3333
.addTransformer(OpenBloodSugarTypeSelector::class.java, openBloodSugarSelector(schedulersProvider))
3434
.addConsumer(ShowBloodSugarHistoryScreen::class.java, { uiActions.showBloodSugarHistoryScreen(it.patientUuid) }, schedulersProvider.ui())
35-
.addConsumer(OpenBloodSugarUpdateSheet::class.java, { uiActions.openBloodSugarUpdateSheet(it.measurement.uuid, it.measurement.reading.type) }, schedulersProvider.ui())
35+
.addConsumer(OpenBloodSugarUpdateSheet::class.java, { uiActions.openBloodSugarUpdateSheet(it.id, it.measurementType) }, schedulersProvider.ui())
3636
.build()
3737
}
3838

app/src/main/java/org/simple/clinic/summary/bloodsugar/BloodSugarSummaryViewEvent.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package org.simple.clinic.summary.bloodsugar
22

33
import org.simple.clinic.bloodsugar.BloodSugarMeasurement
4+
import org.simple.clinic.bloodsugar.BloodSugarMeasurementType
45
import org.simple.clinic.widgets.UiEvent
6+
import java.util.UUID
57

68
sealed class BloodSugarSummaryViewEvent : UiEvent
79

@@ -15,6 +17,6 @@ data object SeeAllClicked : BloodSugarSummaryViewEvent() {
1517
override val analyticsName: String = "Patient Summary:Blood Sugar See All Clicked"
1618
}
1719

18-
data class BloodSugarClicked(val bloodSugarMeasurement: BloodSugarMeasurement) : BloodSugarSummaryViewEvent() {
20+
data class BloodSugarClicked(val id: UUID, val measurementType: BloodSugarMeasurementType) : BloodSugarSummaryViewEvent() {
1921
override val analyticsName: String = "Patient Summary:Blood Sugar Clicked"
2022
}

app/src/main/java/org/simple/clinic/summary/bloodsugar/BloodSugarSummaryViewUpdate.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class BloodSugarSummaryViewUpdate : Update<BloodSugarSummaryViewModel, BloodSuga
1616
is BloodSugarCountFetched -> next(model.countFetched(event.count))
1717
NewBloodSugarClicked -> dispatch(OpenBloodSugarTypeSelector)
1818
is SeeAllClicked -> dispatch(ShowBloodSugarHistoryScreen(model.patientUuid))
19-
is BloodSugarClicked -> dispatch(OpenBloodSugarUpdateSheet(event.bloodSugarMeasurement))
19+
is BloodSugarClicked -> dispatch(OpenBloodSugarUpdateSheet(event.id, event.measurementType))
2020
}
2121
}
2222
}
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
package org.simple.clinic.summary.bloodsugar.ui
2+
3+
import androidx.compose.foundation.background
4+
import androidx.compose.foundation.layout.Arrangement
5+
import androidx.compose.foundation.layout.Column
6+
import androidx.compose.foundation.layout.Row
7+
import androidx.compose.foundation.layout.Spacer
8+
import androidx.compose.foundation.layout.fillMaxWidth
9+
import androidx.compose.foundation.layout.padding
10+
import androidx.compose.foundation.layout.requiredHeight
11+
import androidx.compose.material.Divider
12+
import androidx.compose.material.Icon
13+
import androidx.compose.material.MaterialTheme
14+
import androidx.compose.material.Text
15+
import androidx.compose.runtime.Composable
16+
import androidx.compose.ui.Modifier
17+
import androidx.compose.ui.res.dimensionResource
18+
import androidx.compose.ui.res.painterResource
19+
import androidx.compose.ui.res.stringResource
20+
import androidx.compose.ui.text.style.TextAlign
21+
import androidx.compose.ui.tooling.preview.Preview
22+
import androidx.compose.ui.unit.dp
23+
import org.simple.clinic.R
24+
import org.simple.clinic.bloodsugar.BloodSugarMeasurementType
25+
import org.simple.clinic.bloodsugar.BloodSugarReading
26+
import org.simple.clinic.bloodsugar.BloodSugarUnitPreference
27+
import org.simple.clinic.bloodsugar.Fasting
28+
import org.simple.clinic.bloodsugar.HbA1c
29+
import org.simple.clinic.bloodsugar.PostPrandial
30+
import org.simple.clinic.common.ui.components.ButtonSize
31+
import org.simple.clinic.common.ui.components.TextButton
32+
import org.simple.clinic.common.ui.theme.SimpleTheme
33+
import java.util.UUID
34+
35+
@Composable
36+
fun BloodSugarSummary(
37+
summaryItems: List<BloodSugarSummaryItem>,
38+
canShowSeeAllButton: Boolean,
39+
onSeeAllClick: () -> Unit,
40+
onAddBPClick: () -> Unit,
41+
onEditBPClick: (UUID, BloodSugarMeasurementType) -> Unit,
42+
modifier: Modifier = Modifier
43+
) {
44+
Column(
45+
modifier = Modifier
46+
.fillMaxWidth()
47+
.background(MaterialTheme.colors.surface)
48+
.then(modifier)
49+
) {
50+
Row(
51+
modifier = Modifier.fillMaxWidth(),
52+
horizontalArrangement = Arrangement.SpaceBetween,
53+
) {
54+
TextButton(
55+
leadingIcon = {
56+
Icon(
57+
painter = painterResource(id = R.drawable.ic_add_circle_blue1_24dp),
58+
contentDescription = null
59+
)
60+
},
61+
onClick = onAddBPClick,
62+
buttonSize = ButtonSize.Small,
63+
) {
64+
val label = stringResource(id = R.string.bloodsugarsummaryview_add_blood_sugar_button).uppercase()
65+
Text(text = label)
66+
}
67+
68+
if (canShowSeeAllButton) {
69+
TextButton(
70+
trailingIcon = {
71+
Icon(
72+
painter = painterResource(id = R.drawable.ic_chevron_right_blue1_24dp),
73+
contentDescription = null
74+
)
75+
},
76+
onClick = onSeeAllClick,
77+
buttonSize = ButtonSize.Small,
78+
) {
79+
val label = stringResource(id = R.string.bloodpressuresummaryview_see_all_button).uppercase()
80+
Text(text = label)
81+
}
82+
}
83+
}
84+
85+
Divider(
86+
modifier = Modifier
87+
.fillMaxWidth()
88+
.padding(horizontal = dimensionResource(id = R.dimen.spacing_8)),
89+
color = SimpleTheme.colors.onSurface11,
90+
)
91+
92+
if (summaryItems.isNotEmpty()) {
93+
Column(
94+
modifier = Modifier
95+
.fillMaxWidth()
96+
.padding(top = dimensionResource(id = R.dimen.spacing_4))
97+
) {
98+
summaryItems.forEach { summaryItem ->
99+
BloodSugarSummaryItem(
100+
item = summaryItem,
101+
onEdit = {
102+
onEditBPClick(summaryItem.id, summaryItem.reading.type)
103+
},
104+
)
105+
}
106+
}
107+
} else {
108+
Text(
109+
text = stringResource(id = R.string.bloodsugarsummaryview_no_blood_sugars),
110+
modifier = Modifier
111+
.fillMaxWidth()
112+
.padding(vertical = dimensionResource(id = R.dimen.spacing_16)),
113+
textAlign = TextAlign.Center,
114+
style = MaterialTheme.typography.body1,
115+
color = SimpleTheme.colors.onSurface67
116+
)
117+
}
118+
119+
when {
120+
summaryItems.size > 1 -> {
121+
Spacer(Modifier.requiredHeight(dimensionResource(R.dimen.spacing_8)))
122+
}
123+
124+
summaryItems.isNotEmpty() -> {
125+
Spacer(Modifier.requiredHeight(dimensionResource(R.dimen.spacing_24)))
126+
}
127+
128+
else -> {
129+
// no-op
130+
}
131+
}
132+
}
133+
}
134+
135+
@Preview
136+
@Composable
137+
private fun BloodSugarSummaryPreview() {
138+
SimpleTheme {
139+
BloodSugarSummary(
140+
summaryItems = listOf(
141+
BloodSugarSummaryItem(
142+
id = UUID.fromString("dbf8d3f5-87e2-4f90-ab53-1c250737af95"),
143+
reading = BloodSugarReading(
144+
value = "80",
145+
type = PostPrandial
146+
),
147+
measurementUnit = BloodSugarUnitPreference.Mg,
148+
date = "12-Jun-2025",
149+
time = "08:10 am",
150+
canEdit = false,
151+
),
152+
BloodSugarSummaryItem(
153+
id = UUID.fromString("dbf8d3f5-87e2-4f90-ab53-1c250737af95"),
154+
reading = BloodSugarReading(
155+
value = "75",
156+
type = PostPrandial
157+
),
158+
measurementUnit = BloodSugarUnitPreference.Mg,
159+
date = "12-Jun-2025",
160+
time = "08:00 am",
161+
canEdit = false,
162+
),
163+
BloodSugarSummaryItem(
164+
id = UUID.fromString("0057f476-dd45-47c0-9797-21427aa86766"),
165+
reading = BloodSugarReading(
166+
value = "7.5",
167+
type = HbA1c
168+
),
169+
measurementUnit = BloodSugarUnitPreference.Mg,
170+
date = "12-Jun-2025",
171+
time = null,
172+
canEdit = true,
173+
),
174+
BloodSugarSummaryItem(
175+
id = UUID.fromString("b309c90f-1391-4ab4-9991-09a4eae21631"),
176+
reading = BloodSugarReading(
177+
value = "250",
178+
type = Fasting
179+
),
180+
measurementUnit = BloodSugarUnitPreference.Mg,
181+
date = "12-Jun-2025",
182+
time = null,
183+
canEdit = true,
184+
),
185+
),
186+
canShowSeeAllButton = true,
187+
onSeeAllClick = {
188+
// no-op
189+
},
190+
onAddBPClick = {
191+
// no-op
192+
},
193+
onEditBPClick = { _, _ ->
194+
// no-op
195+
}
196+
)
197+
}
198+
}

0 commit comments

Comments
 (0)