Skip to content

Commit

Permalink
samples/sample: remove all FlowWrapper usage 🤟 (#32)
Browse files Browse the repository at this point in the history
fix #29
  • Loading branch information
hoc081098 authored Feb 8, 2024
1 parent 1d93d45 commit a4092b5
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,13 @@ import com.hoc081098.flowext.flowFromSuspend
import com.hoc081098.flowext.startWith
import com.hoc081098.kmp.viewmodel.SavedStateHandle
import com.hoc081098.kmp.viewmodel.ViewModel
import com.hoc081098.kmp.viewmodel.wrapper.NonNullStateFlowWrapper
import com.hoc081098.kmp.viewmodel.wrapper.wrap
import com.hoc081098.solivagant.navigation.requireRoute
import com.hoc081098.solivagant.sample.common.toProductItemUi
import io.github.aakira.napier.Napier
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.map
Expand All @@ -39,7 +38,7 @@ class ProductDetailViewModel(
.onStart { Napier.d("getProductById id=$route") }
.map { ProductDetailState.Success(it.toProductItemUi()) }

val stateFlow: NonNullStateFlowWrapper<ProductDetailState> = merge(
val stateFlow: StateFlow<ProductDetailState> = merge(
// initial load & retry
retryFlow
.startWith(Unit)
Expand All @@ -61,7 +60,6 @@ class ProductDetailViewModel(
started = SharingStarted.Lazily,
initialValue = ProductDetailState.Loading,
)
.wrap()

fun refresh() {
viewModelScope.launch {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@ import com.hoc081098.flowext.ignoreElements
import com.hoc081098.flowext.startWith
import com.hoc081098.kmp.viewmodel.Closeable
import com.hoc081098.kmp.viewmodel.ViewModel
import com.hoc081098.kmp.viewmodel.wrapper.NonNullFlowWrapper
import com.hoc081098.kmp.viewmodel.wrapper.NonNullStateFlowWrapper
import com.hoc081098.kmp.viewmodel.wrapper.wrap
import com.hoc081098.solivagant.navigation.NavEventNavigator
import com.hoc081098.solivagant.sample.common.SingleEventChannel
import com.hoc081098.solivagant.sample.common.toProductItemUi
Expand All @@ -19,6 +16,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.flatMapLatest
Expand Down Expand Up @@ -57,8 +55,8 @@ class ProductsViewModel(
) {
private val _actionFlow = MutableSharedFlow<ProductsAction>(Int.MAX_VALUE)

val stateFlow: NonNullStateFlowWrapper<ProductsState>
val eventFlow: NonNullFlowWrapper<ProductSingleEvent> = singleEventChannel.singleEventFlow.wrap()
val stateFlow: StateFlow<ProductsState>
val eventFlow: Flow<ProductSingleEvent> = singleEventChannel.singleEventFlow

init {
addCloseable { Napier.d("[DEMO] Closable 3 ...") }
Expand Down Expand Up @@ -86,7 +84,6 @@ class ProductsViewModel(
started = SharingStarted.Eagerly,
initialValue = ProductsState.INITIAL,
)
.wrap()
}

//region Handlers
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@ import com.hoc081098.kmp.viewmodel.ViewModel
import com.hoc081098.kmp.viewmodel.safe.NullableSavedStateHandleKey
import com.hoc081098.kmp.viewmodel.safe.safe
import com.hoc081098.kmp.viewmodel.safe.string
import com.hoc081098.kmp.viewmodel.wrapper.NonNullStateFlowWrapper
import com.hoc081098.kmp.viewmodel.wrapper.NullableStateFlowWrapper
import com.hoc081098.kmp.viewmodel.wrapper.wrap
import com.hoc081098.solivagant.navigation.NavEventNavigator
import com.hoc081098.solivagant.sample.common.toProductItemUi
import com.hoc081098.solivagant.sample.product_detail.ProductDetailScreenRoute
Expand All @@ -23,6 +20,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.distinctUntilChanged
Expand All @@ -37,10 +35,10 @@ class SearchProductsViewModel(
private val savedStateHandle: SavedStateHandle,
private val navigator: NavEventNavigator,
) : ViewModel() {
val searchTermStateFlow: NullableStateFlowWrapper<String?> =
savedStateHandle.safe { it.getStateFlow(SEARCH_TERM_KEY) }.wrap()
val searchTermStateFlow: StateFlow<String?> =
savedStateHandle.safe.getStateFlow(SEARCH_TERM_KEY)

val stateFlow: NonNullStateFlowWrapper<SearchProductsState> = searchTermStateFlow
val stateFlow: StateFlow<SearchProductsState> = searchTermStateFlow
.debounce(400.milliseconds)
.map { it.orEmpty().trim() }
.distinctUntilChanged()
Expand All @@ -50,15 +48,12 @@ class SearchProductsViewModel(
started = SharingStarted.Lazily,
initialValue = SearchProductsState.INITIAL,
)
.wrap()

fun search(term: String) {
fun search(term: String) =
savedStateHandle.safe { it[SEARCH_TERM_KEY] = term }
}

fun navigateToProductDetail(id: Int) {
fun navigateToProductDetail(id: Int) =
navigator.navigateTo(ProductDetailScreenRoute(id))
}

companion object {
private val SEARCH_TERM_KEY = NullableSavedStateHandleKey.string("com.hoc081098.kmpviewmodelsample.search_term")
Expand Down

0 comments on commit a4092b5

Please sign in to comment.