sealed class RecipeViewState : ViewState {
object Loading : RecipeViewState()
object Refreshing : RecipeViewState()
data class LoadedRecipes(val recipes: List<RecipeModel>) : RecipeViewState()
data class LikedRecipe(val recipe: RecipeModel) : RecipeViewState() // adding a new state for liked item
data class Error(val error: String?, val errorEvent: ViewEvent<String>?, val isEmpty: Boolean) // Unavailable, No data or empty etc
}
// in Fragment
// instead of:
override fun render(state: RecipeViewState) {
when {
state.isDataUnavailable -> binding.renderEmptyState(state)
state.isDataAvailableError -> binding.renderDataAvailableErrorState(state)
state.isNoDataError -> binding.renderNoDataErrorState(state)
state.isLoading -> binding.renderLoadingState()
state.isRefreshing -> binding.renderRefreshState()
else -> binding.renderSuccessState(state)
}
}
// modifed to:
override fun render(state: RecipeViewState) {
when (state) {
is Error -> {
if (state.error != null) binding.renderNoDataErrorState(state)
if (state.errorEvent != null) binding.renderDataAvailableErrorState(state)
if (state.isEmpty) binding.renderEmptyState(state)
}
Loading -> binding.renderLoadingState()
Refreshing -> binding.renderRefreshState()
is LikedRecipe -> binding.renderLikedState(state)
is LoadedRecipes -> binding.renderSuccessState(state)
// no else branch
}
}