@@ -8,12 +8,12 @@ import android.view.View
88import android.view.ViewGroup
99import androidx.appcompat.app.AppCompatActivity
1010import androidx.compose.runtime.getValue
11+ import androidx.compose.runtime.mutableIntStateOf
1112import androidx.compose.runtime.mutableStateOf
1213import androidx.compose.runtime.setValue
1314import androidx.compose.ui.platform.ViewCompositionStrategy
1415import com.f2prateek.rx.preferences2.Preference
1516import com.google.android.material.dialog.MaterialAlertDialogBuilder
16- import com.jakewharton.rxbinding3.view.clicks
1717import com.spotify.mobius.Update
1818import com.spotify.mobius.functions.Consumer
1919import io.reactivex.Observable
@@ -34,7 +34,7 @@ import org.simple.clinic.feature.Feature.OverdueInstantSearch
3434import org.simple.clinic.feature.Feature.PatientReassignment
3535import org.simple.clinic.feature.Features
3636import org.simple.clinic.home.HomeScreen
37- import org.simple.clinic.home.overdue.compose.OverdueAppointmentListItem
37+ import org.simple.clinic.home.overdue.compose.OverdueScreenView
3838import org.simple.clinic.home.overdue.compose.OverdueUiModel
3939import org.simple.clinic.home.overdue.compose.OverdueUiModelMapper
4040import org.simple.clinic.home.overdue.search.OverdueSearchScreen
@@ -53,9 +53,7 @@ import org.simple.clinic.sync.LastSyncedState
5353import org.simple.clinic.util.RuntimeNetworkStatus
5454import org.simple.clinic.util.UserClock
5555import org.simple.clinic.util.UtcClock
56- import org.simple.clinic.util.applyInsetsBottomPadding
5756import org.simple.clinic.util.unsafeLazy
58- import org.simple.clinic.widgets.UiEvent
5957import java.time.Instant
6058import java.time.LocalDate
6159import 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 }
0 commit comments