Skip to content

Commit 3196409

Browse files
siddh1004Siddharth Agarwal
andauthored

File tree

11 files changed

+527
-334
lines changed

11 files changed

+527
-334
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
- Add Compose components for Overdue screen
1212
- Migrate medicines summary view to Jetpack Compose
1313
- Migrate codeclimate config to qlty.sh config
14-
- Migrate `OverdueScreen` patient list to Jetpack Compose
14+
- Migrate `OverdueScreen` to Jetpack Compose
1515
- Migrate blood pressure summary view to Jetpack Compose
1616
- Migrate blood sugar summary view to Jetpack Compose
1717
- Migrate medical history summary view to Jetpack Compose

app/src/main/java/org/simple/clinic/home/overdue/OverdueScreen.kt

Lines changed: 38 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ import android.view.View
88
import android.view.ViewGroup
99
import androidx.appcompat.app.AppCompatActivity
1010
import androidx.compose.runtime.getValue
11+
import androidx.compose.runtime.mutableIntStateOf
1112
import androidx.compose.runtime.mutableStateOf
1213
import androidx.compose.runtime.setValue
1314
import androidx.compose.ui.platform.ViewCompositionStrategy
1415
import com.f2prateek.rx.preferences2.Preference
1516
import com.google.android.material.dialog.MaterialAlertDialogBuilder
16-
import com.jakewharton.rxbinding3.view.clicks
1717
import com.spotify.mobius.Update
1818
import com.spotify.mobius.functions.Consumer
1919
import io.reactivex.Observable
@@ -34,7 +34,7 @@ import org.simple.clinic.feature.Feature.OverdueInstantSearch
3434
import org.simple.clinic.feature.Feature.PatientReassignment
3535
import org.simple.clinic.feature.Features
3636
import org.simple.clinic.home.HomeScreen
37-
import org.simple.clinic.home.overdue.compose.OverdueAppointmentListItem
37+
import org.simple.clinic.home.overdue.compose.OverdueScreenView
3838
import org.simple.clinic.home.overdue.compose.OverdueUiModel
3939
import org.simple.clinic.home.overdue.compose.OverdueUiModelMapper
4040
import org.simple.clinic.home.overdue.search.OverdueSearchScreen
@@ -53,9 +53,7 @@ import org.simple.clinic.sync.LastSyncedState
5353
import org.simple.clinic.util.RuntimeNetworkStatus
5454
import org.simple.clinic.util.UserClock
5555
import org.simple.clinic.util.UtcClock
56-
import org.simple.clinic.util.applyInsetsBottomPadding
5756
import org.simple.clinic.util.unsafeLazy
58-
import org.simple.clinic.widgets.UiEvent
5957
import java.time.Instant
6058
import java.time.LocalDate
6159
import java.time.format.DateTimeFormatter
@@ -107,7 +105,7 @@ class OverdueScreen : BaseScreen<
107105
lateinit var lastSyncedState: Preference<LastSyncedState>
108106

109107
@Inject
110-
lateinit var runtimeNetworkStatus: RuntimeNetworkStatus<UiEvent>
108+
lateinit var runtimeNetworkStatus: RuntimeNetworkStatus<OverdueEvent>
111109

112110
@Inject
113111
lateinit var pendingAppointmentsConfig: PendingAppointmentsConfig
@@ -117,38 +115,20 @@ class OverdueScreen : BaseScreen<
117115

118116
private val disposable = CompositeDisposable()
119117

120-
private val viewForEmptyList
121-
get() = binding.viewForEmptyList
122-
123118
private val composeView
124119
get() = binding.composeView
125120

126-
private val overdueProgressBar
127-
get() = binding.overdueProgressBar
128-
129-
private val buttonsFrame
130-
get() = binding.buttonsFrame
131-
132-
private val downloadOverdueListButton
133-
get() = binding.downloadOverdueListButton
134-
135-
private val shareOverdueListButton
136-
get() = binding.shareOverdueListButton
137-
138-
private val selectedOverdueCountView
139-
get() = binding.selectedOverdueCountView
140-
141-
private val selectedOverdueAppointmentsCountTextView
142-
get() = binding.selectedOverdueAppointmentsTextView
143-
144-
private val clearSelectedOverdueAppointmentsButton
145-
get() = binding.clearSelectedOverdueAppointmentsButton
146-
147121
private val isOverdueListDownloadAndShareEnabled by unsafeLazy {
148122
country.isoCountryCode == Country.INDIA
149123
}
150124

151125
private var uiModelsState by mutableStateOf<List<OverdueUiModel>>(emptyList())
126+
private var showLoader by mutableStateOf(false)
127+
private var showEmptyListView by mutableStateOf(false)
128+
private var showAppointmentSections by mutableStateOf(false)
129+
private var showDownloadAndShareButton by mutableStateOf(false)
130+
private var showSelectedOverdueCountView by mutableStateOf(false)
131+
private var selectedOverdueCount by mutableIntStateOf(0)
152132

153133
override fun defaultModel() = OverdueModel.create()
154134

@@ -160,9 +140,6 @@ class OverdueScreen : BaseScreen<
160140
private val composeUiEvents = PublishSubject.create<OverdueEvent>()
161141

162142
override fun events() = Observable.mergeArray(
163-
downloadOverdueListClicks(),
164-
shareOverdueListClicks(),
165-
clearSelectedOverdueAppointmentClicks(),
166143
composeUiEvents,
167144
)
168145
.compose(RequestPermissions(runtimePermissions, screenResults.streamResults().ofType()))
@@ -196,33 +173,28 @@ class OverdueScreen : BaseScreen<
196173
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
197174
super.onViewCreated(view, savedInstanceState)
198175

199-
buttonsFrame.applyInsetsBottomPadding()
200-
201176
composeView.apply {
202177
setViewCompositionStrategy(
203178
ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed
204179
)
205180
setContent {
206-
OverdueAppointmentListItem(
181+
OverdueScreenView(
182+
showDownloadAndShareButton = showDownloadAndShareButton,
183+
showSelectedOverdueCountView = showSelectedOverdueCountView,
184+
showEmptyListView = showEmptyListView,
185+
showLoader = showLoader,
186+
showAppointmentSections = showAppointmentSections,
187+
selectedOverdueCount = selectedOverdueCount,
207188
uiModels = uiModelsState,
208-
onCallClicked = { patientId ->
209-
composeUiEvents.onNext(CallPatientClicked(patientId))
210-
},
211-
onRowClicked = { patientId ->
212-
composeUiEvents.onNext(OverduePatientClicked(patientId))
213-
},
214-
onCheckboxClicked = { appointmentUuid ->
215-
composeUiEvents.onNext(OverdueAppointmentCheckBoxClicked(appointmentUuid))
216-
},
217-
onSearch = {
218-
composeUiEvents.onNext(OverdueSearchButtonClicked)
219-
},
220-
onSectionHeaderClick = { overdueAppointmentSectionTitle ->
221-
composeUiEvents.onNext(ChevronClicked(overdueAppointmentSectionTitle))
222-
},
223-
onSectionFooterClick = {
224-
composeUiEvents.onNext(PendingListFooterClicked)
225-
}
189+
onCall = { composeUiEvents.onNext(CallPatientClicked(it)) },
190+
onOpen = { composeUiEvents.onNext(OverduePatientClicked(it)) },
191+
onToggleSelection = { composeUiEvents.onNext(OverdueAppointmentCheckBoxClicked(it)) },
192+
onSearch = { composeUiEvents.onNext(OverdueSearchButtonClicked) },
193+
onToggleSection = { composeUiEvents.onNext(ChevronClicked(it)) },
194+
onToggleFooter = { composeUiEvents.onNext(PendingListFooterClicked) },
195+
onClearSelected = { composeUiEvents.onNext(ClearSelectedOverdueAppointmentsClicked) },
196+
onDownload = { composeUiEvents.onNext(DownloadOverdueListClicked()) },
197+
onShare = { composeUiEvents.onNext(ShareOverdueListClicked()) }
226198
)
227199
}
228200
}
@@ -286,7 +258,7 @@ class OverdueScreen : BaseScreen<
286258
)
287259

288260
if (isOverdueListDownloadAndShareEnabled) {
289-
buttonsFrame.visibility = View.VISIBLE
261+
showDownloadAndShareButton = true
290262
}
291263
}
292264

@@ -295,61 +267,45 @@ class OverdueScreen : BaseScreen<
295267
}
296268

297269
override fun showSelectedOverdueAppointmentCount(selectedOverdueAppointments: Int) {
298-
selectedOverdueCountView.visibility = View.VISIBLE
299-
selectedOverdueAppointmentsCountTextView.text = getString(R.string.selected_overdue_count, selectedOverdueAppointments)
270+
showSelectedOverdueCountView = true
271+
selectedOverdueCount = selectedOverdueAppointments
300272
}
301273

302274
override fun hideSelectedOverdueAppointmentCount() {
303-
selectedOverdueCountView.visibility = View.GONE
275+
showSelectedOverdueCountView = false
304276
}
305277

306278
override fun showProgress() {
307-
overdueProgressBar.visibility = View.VISIBLE
279+
showLoader = true
308280
}
309281

310282
override fun hideProgress() {
311-
overdueProgressBar.visibility = View.GONE
283+
showLoader = false
312284
}
313285

314286
override fun showNoOverduePatientsView() {
315-
viewForEmptyList.visibility = View.VISIBLE
287+
showEmptyListView = true
316288
if (isOverdueListDownloadAndShareEnabled) {
317-
buttonsFrame.visibility = View.GONE
289+
showDownloadAndShareButton = false
318290
}
319291
}
320292

321293
override fun hideNoOverduePatientsView() {
322-
viewForEmptyList.visibility = View.GONE
294+
showEmptyListView = false
323295
}
324296

325-
override fun showOverdueRecyclerView() {
326-
composeView.visibility = View.VISIBLE
297+
override fun showOverdueAppointmentSections() {
298+
showAppointmentSections = true
327299
}
328300

329-
override fun hideOverdueRecyclerView() {
330-
composeView.visibility = View.GONE
301+
override fun hideOverdueAppointmentSections() {
302+
showAppointmentSections = false
331303
}
332304

333305
override fun openOverdueSearch() {
334306
router.push(OverdueSearchScreen.Key())
335307
}
336308

337-
private fun downloadOverdueListClicks(): Observable<UiEvent> {
338-
return downloadOverdueListButton
339-
.clicks()
340-
.map { DownloadOverdueListClicked() }
341-
}
342-
343-
private fun shareOverdueListClicks(): Observable<UiEvent> {
344-
return shareOverdueListButton
345-
.clicks()
346-
.map { ShareOverdueListClicked() }
347-
}
348-
349-
private fun clearSelectedOverdueAppointmentClicks() = clearSelectedOverdueAppointmentsButton
350-
.clicks()
351-
.map { ClearSelectedOverdueAppointmentsClicked }
352-
353309
interface Injector {
354310
fun inject(target: OverdueScreen)
355311
}

app/src/main/java/org/simple/clinic/home/overdue/OverdueUi.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ interface OverdueUi {
2020
fun showNoOverduePatientsView()
2121
fun hideNoOverduePatientsView()
2222

23-
fun showOverdueRecyclerView()
24-
fun hideOverdueRecyclerView()
23+
fun showOverdueAppointmentSections()
24+
fun hideOverdueAppointmentSections()
2525
}

app/src/main/java/org/simple/clinic/home/overdue/OverdueUiRenderer.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,17 @@ class OverdueUiRenderer(private val ui: OverdueUi) : ViewRenderer<OverdueModel>
3535

3636
private fun renderOverdueListLoadingViews() {
3737
ui.showProgress()
38-
ui.hideOverdueRecyclerView()
38+
ui.hideOverdueAppointmentSections()
3939
ui.hideNoOverduePatientsView()
4040
}
4141

4242
private fun renderOverdueListLoadedViews(model: OverdueModel) {
4343
if (model.isOverdueAppointmentSectionsListEmpty) {
4444
ui.showNoOverduePatientsView()
45-
ui.hideOverdueRecyclerView()
45+
ui.hideOverdueAppointmentSections()
4646
} else {
4747
ui.hideNoOverduePatientsView()
48-
ui.showOverdueRecyclerView()
48+
ui.showOverdueAppointmentSections()
4949
}
5050
}
5151
}

app/src/main/java/org/simple/clinic/home/overdue/compose/OverdueAppointmentListItem.kt

Lines changed: 0 additions & 118 deletions
This file was deleted.

0 commit comments

Comments
 (0)