Skip to content

Commit a9f7a6c

Browse files
authored
CMM-676 DataView custom empty view (#22118)
* First pass at empty view for DataView * 2nd pass at empty view for DataView * Removed extra space
1 parent fa1fa2a commit a9f7a6c

File tree

6 files changed

+32
-8
lines changed

6 files changed

+32
-8
lines changed

WordPress/src/main/java/org/wordpress/android/ui/accounts/applicationpassword/ApplicationPasswordsListActivity.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ class ApplicationPasswordsListActivity : BaseAppCompatActivity() {
167167
onSortOrderClick = { order ->
168168
viewModel.onSortOrderClick(order)
169169
},
170+
emptyView = viewModel.emptyView,
170171
modifier = modifier
171172
)
172173
}

WordPress/src/main/java/org/wordpress/android/ui/dataview/DataViewScreen.kt

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import org.wordpress.android.ui.compose.components.EmptyContentM3
5050
import org.wordpress.android.ui.dataview.DummyDataViewItems.getDummyDataViewItems
5151
import uniffi.wp_api.WpApiParamOrder
5252
import java.util.Locale
53+
import org.wordpress.android.ui.dataview.DataViewViewModel.DataViewEmptyView
5354

5455
/**
5556
* Provides a basic screen for displaying a list of [DataViewItem]s
@@ -68,7 +69,8 @@ fun DataViewScreen(
6869
onSortOrderClick: (WpApiParamOrder) -> Unit,
6970
onRefresh: () -> Unit,
7071
onFetchMore: () -> Unit,
71-
modifier: Modifier = Modifier
72+
modifier: Modifier = Modifier,
73+
emptyView: DataViewEmptyView = DataViewEmptyView(),
7274
) {
7375
val pullToRefreshState = rememberPullToRefreshState()
7476

@@ -107,7 +109,7 @@ fun DataViewScreen(
107109

108110
when (uiState.value.loadingState) {
109111
LoadingState.LOADING -> LoadingDataView()
110-
LoadingState.EMPTY -> EmptyDataView()
112+
LoadingState.EMPTY -> EmptyDataView(emptyView)
111113
LoadingState.EMPTY_SEARCH -> EmptySearchDataView()
112114
LoadingState.ERROR -> ErrorDataView(uiState.value.errorMessage)
113115
LoadingState.OFFLINE -> OfflineDataView()
@@ -116,7 +118,7 @@ fun DataViewScreen(
116118
items = uiState.value.items,
117119
onItemClick = onItemClick,
118120
onFetchMore = onFetchMore,
119-
showProgress = uiState.value.loadingState == LoadingState.LOADING_MORE
121+
showProgress = uiState.value.loadingState == LoadingState.LOADING_MORE,
120122
)
121123
}
122124
}
@@ -137,7 +139,7 @@ private fun SearchAndFilterBar(
137139
supportedSorts: List<DataViewDropdownItem>,
138140
) {
139141
var searchQuery by remember { mutableStateOf("") }
140-
142+
141143
// Sync local search query with the current search query from UI state
142144
LaunchedEffect(currentSearchQuery) {
143145
searchQuery = currentSearchQuery
@@ -432,16 +434,18 @@ private fun LoadingDataView() {
432434
}
433435

434436
@Composable
435-
private fun EmptyDataView() {
437+
private fun EmptyDataView(
438+
emptyView: DataViewEmptyView
439+
) {
436440
Column(
437441
modifier = Modifier.fillMaxSize(),
438442
verticalArrangement = Arrangement.Center,
439443
horizontalAlignment = Alignment.CenterHorizontally
440444
) {
441445
EmptyContentM3(
442-
title = stringResource(R.string.subscribers_empty),
443-
image = R.drawable.img_jetpack_empty_state,
444-
imageContentDescription = stringResource(R.string.subscribers_empty),
446+
title = stringResource(emptyView.messageRes),
447+
image = emptyView.imageRes,
448+
imageContentDescription = stringResource(emptyView.messageRes),
445449
)
446450
}
447451
}

WordPress/src/main/java/org/wordpress/android/ui/dataview/DataViewViewModel.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.wordpress.android.ui.dataview
22

33
import android.content.SharedPreferences
4+
import androidx.annotation.DrawableRes
5+
import androidx.annotation.StringRes
46
import androidx.core.content.edit
57
import dagger.hilt.android.lifecycle.HiltViewModel
68
import kotlinx.coroutines.CoroutineDispatcher
@@ -11,6 +13,7 @@ import kotlinx.coroutines.flow.asStateFlow
1113
import kotlinx.coroutines.flow.debounce
1214
import kotlinx.coroutines.flow.update
1315
import kotlinx.coroutines.withContext
16+
import org.wordpress.android.R
1417
import org.wordpress.android.fluxc.store.AccountStore
1518
import org.wordpress.android.fluxc.utils.AppLogWrapper
1619
import org.wordpress.android.modules.IO_THREAD
@@ -46,6 +49,8 @@ open class DataViewViewModel @Inject constructor(
4649

4750
private val debouncedQuery = MutableStateFlow("")
4851

52+
open val emptyView = DataViewEmptyView()
53+
4954
private fun updateState(update: (DataViewUiState) -> DataViewUiState) {
5055
_uiState.update { update(it) }
5156
}
@@ -315,6 +320,11 @@ open class DataViewViewModel @Inject constructor(
315320
FILTER,
316321
}
317322

323+
class DataViewEmptyView(
324+
@StringRes val messageRes: Int = R.string.dataview_default_empty_message,
325+
@DrawableRes val imageRes: Int = R.drawable.img_jetpack_empty_state,
326+
)
327+
318328
companion object {
319329
private const val SEARCH_DELAY_MS = 500L
320330
const val PAGE_SIZE = 25

WordPress/src/main/java/org/wordpress/android/ui/subscribers/SubscribersActivity.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ class SubscribersActivity : BaseAppCompatActivity() {
229229
onSortOrderClick = { order ->
230230
viewModel.onSortOrderClick(order)
231231
},
232+
emptyView = viewModel.emptyView,
232233
modifier = modifier
233234
)
234235
}

WordPress/src/main/java/org/wordpress/android/ui/subscribers/SubscribersViewModel.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ class SubscribersViewModel @Inject constructor(
5757

5858
private var statsJob: Job? = null
5959

60+
override val emptyView = DataViewEmptyView(
61+
messageRes = R.string.subscribers_empty,
62+
imageRes = R.drawable.img_jetpack_empty_state
63+
)
64+
6065
@Inject
6166
lateinit var dateFormatWrapper: SimpleDateFormatWrapper
6267

WordPress/src/main/res/values/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5071,4 +5071,7 @@ translators: %s: Select control option value e.g: "Auto, 25%". -->
50715071
<string name="application_password_name_sort">Name</string>
50725072
<string name="application_password_created_sort">Created</string>
50735073
<string name="application_password_last_used_sort">Last used</string>
5074+
5075+
<!-- DataView -->
5076+
<string name="dataview_default_empty_message">There\'s nothing here</string>
50745077
</resources>

0 commit comments

Comments
 (0)