@@ -8,12 +8,12 @@ import android.view.View
8
8
import android.view.ViewGroup
9
9
import androidx.appcompat.app.AppCompatActivity
10
10
import androidx.compose.runtime.getValue
11
+ import androidx.compose.runtime.mutableIntStateOf
11
12
import androidx.compose.runtime.mutableStateOf
12
13
import androidx.compose.runtime.setValue
13
14
import androidx.compose.ui.platform.ViewCompositionStrategy
14
15
import com.f2prateek.rx.preferences2.Preference
15
16
import com.google.android.material.dialog.MaterialAlertDialogBuilder
16
- import com.jakewharton.rxbinding3.view.clicks
17
17
import com.spotify.mobius.Update
18
18
import com.spotify.mobius.functions.Consumer
19
19
import io.reactivex.Observable
@@ -34,7 +34,7 @@ import org.simple.clinic.feature.Feature.OverdueInstantSearch
34
34
import org.simple.clinic.feature.Feature.PatientReassignment
35
35
import org.simple.clinic.feature.Features
36
36
import org.simple.clinic.home.HomeScreen
37
- import org.simple.clinic.home.overdue.compose.OverdueAppointmentListItem
37
+ import org.simple.clinic.home.overdue.compose.OverdueScreenView
38
38
import org.simple.clinic.home.overdue.compose.OverdueUiModel
39
39
import org.simple.clinic.home.overdue.compose.OverdueUiModelMapper
40
40
import org.simple.clinic.home.overdue.search.OverdueSearchScreen
@@ -53,9 +53,7 @@ import org.simple.clinic.sync.LastSyncedState
53
53
import org.simple.clinic.util.RuntimeNetworkStatus
54
54
import org.simple.clinic.util.UserClock
55
55
import org.simple.clinic.util.UtcClock
56
- import org.simple.clinic.util.applyInsetsBottomPadding
57
56
import org.simple.clinic.util.unsafeLazy
58
- import org.simple.clinic.widgets.UiEvent
59
57
import java.time.Instant
60
58
import java.time.LocalDate
61
59
import java.time.format.DateTimeFormatter
@@ -107,7 +105,7 @@ class OverdueScreen : BaseScreen<
107
105
lateinit var lastSyncedState: Preference <LastSyncedState >
108
106
109
107
@Inject
110
- lateinit var runtimeNetworkStatus: RuntimeNetworkStatus <UiEvent >
108
+ lateinit var runtimeNetworkStatus: RuntimeNetworkStatus <OverdueEvent >
111
109
112
110
@Inject
113
111
lateinit var pendingAppointmentsConfig: PendingAppointmentsConfig
@@ -117,38 +115,20 @@ class OverdueScreen : BaseScreen<
117
115
118
116
private val disposable = CompositeDisposable ()
119
117
120
- private val viewForEmptyList
121
- get() = binding.viewForEmptyList
122
-
123
118
private val composeView
124
119
get() = binding.composeView
125
120
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
-
147
121
private val isOverdueListDownloadAndShareEnabled by unsafeLazy {
148
122
country.isoCountryCode == Country .INDIA
149
123
}
150
124
151
125
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 )
152
132
153
133
override fun defaultModel () = OverdueModel .create()
154
134
@@ -160,9 +140,6 @@ class OverdueScreen : BaseScreen<
160
140
private val composeUiEvents = PublishSubject .create<OverdueEvent >()
161
141
162
142
override fun events () = Observable .mergeArray(
163
- downloadOverdueListClicks(),
164
- shareOverdueListClicks(),
165
- clearSelectedOverdueAppointmentClicks(),
166
143
composeUiEvents,
167
144
)
168
145
.compose(RequestPermissions (runtimePermissions, screenResults.streamResults().ofType()))
@@ -196,33 +173,28 @@ class OverdueScreen : BaseScreen<
196
173
override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
197
174
super .onViewCreated(view, savedInstanceState)
198
175
199
- buttonsFrame.applyInsetsBottomPadding()
200
-
201
176
composeView.apply {
202
177
setViewCompositionStrategy(
203
178
ViewCompositionStrategy .DisposeOnViewTreeLifecycleDestroyed
204
179
)
205
180
setContent {
206
- OverdueAppointmentListItem (
181
+ OverdueScreenView (
182
+ showDownloadAndShareButton = showDownloadAndShareButton,
183
+ showSelectedOverdueCountView = showSelectedOverdueCountView,
184
+ showEmptyListView = showEmptyListView,
185
+ showLoader = showLoader,
186
+ showAppointmentSections = showAppointmentSections,
187
+ selectedOverdueCount = selectedOverdueCount,
207
188
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 ()) }
226
198
)
227
199
}
228
200
}
@@ -286,7 +258,7 @@ class OverdueScreen : BaseScreen<
286
258
)
287
259
288
260
if (isOverdueListDownloadAndShareEnabled) {
289
- buttonsFrame.visibility = View . VISIBLE
261
+ showDownloadAndShareButton = true
290
262
}
291
263
}
292
264
@@ -295,61 +267,45 @@ class OverdueScreen : BaseScreen<
295
267
}
296
268
297
269
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
300
272
}
301
273
302
274
override fun hideSelectedOverdueAppointmentCount () {
303
- selectedOverdueCountView.visibility = View . GONE
275
+ showSelectedOverdueCountView = false
304
276
}
305
277
306
278
override fun showProgress () {
307
- overdueProgressBar.visibility = View . VISIBLE
279
+ showLoader = true
308
280
}
309
281
310
282
override fun hideProgress () {
311
- overdueProgressBar.visibility = View . GONE
283
+ showLoader = false
312
284
}
313
285
314
286
override fun showNoOverduePatientsView () {
315
- viewForEmptyList.visibility = View . VISIBLE
287
+ showEmptyListView = true
316
288
if (isOverdueListDownloadAndShareEnabled) {
317
- buttonsFrame.visibility = View . GONE
289
+ showDownloadAndShareButton = false
318
290
}
319
291
}
320
292
321
293
override fun hideNoOverduePatientsView () {
322
- viewForEmptyList.visibility = View . GONE
294
+ showEmptyListView = false
323
295
}
324
296
325
- override fun showOverdueRecyclerView () {
326
- composeView.visibility = View . VISIBLE
297
+ override fun showOverdueAppointmentSections () {
298
+ showAppointmentSections = true
327
299
}
328
300
329
- override fun hideOverdueRecyclerView () {
330
- composeView.visibility = View . GONE
301
+ override fun hideOverdueAppointmentSections () {
302
+ showAppointmentSections = false
331
303
}
332
304
333
305
override fun openOverdueSearch () {
334
306
router.push(OverdueSearchScreen .Key ())
335
307
}
336
308
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
-
353
309
interface Injector {
354
310
fun inject (target : OverdueScreen )
355
311
}
0 commit comments