Skip to content

Commit 0186f58

Browse files
authored
Merge pull request #139 from hoc081098/flowext_0_4_0_snapshot
deps: flowExt 0.4.0-SNAPSHOT
2 parents 513f4da + 76c32ba commit 0186f58

File tree

7 files changed

+18
-20
lines changed

7 files changed

+18
-20
lines changed

.idea/compiler.xml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

buildSrc/src/main/kotlin/deps.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ object deps {
7070

7171
const val coil = "io.coil-kt:coil:2.0.0-rc03"
7272
const val viewBindingDelegate = "com.github.hoc081098:ViewBindingDelegate:1.3.1"
73-
const val flowExt = "io.github.hoc081098:FlowExt:0.3.0"
73+
const val flowExt = "io.github.hoc081098:FlowExt:0.4.0-SNAPSHOT"
7474
const val timber = "com.jakewharton.timber:timber:5.0.1"
7575

7676
object arrow {

core-ui/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ dependencies {
5050
implementation(deps.lifecycle.runtimeKtx)
5151

5252
implementation(deps.timber)
53+
implementation(deps.flowExt)
5354

5455
addUnitTest()
5556
}

core-ui/src/main/java/com/hoc/flowmvi/core_ui/FlowBinding.kt

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ import androidx.annotation.CheckResult
77
import androidx.appcompat.widget.SearchView
88
import androidx.core.widget.doOnTextChanged
99
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
10+
import com.hoc081098.flowext.startWith
1011
import kotlinx.coroutines.Dispatchers
1112
import kotlinx.coroutines.channels.awaitClose
1213
import kotlinx.coroutines.flow.Flow
1314
import kotlinx.coroutines.flow.callbackFlow
14-
import kotlinx.coroutines.flow.onStart
1515
import kotlinx.coroutines.flow.take
1616
import timber.log.Timber
1717
import kotlin.coroutines.EmptyCoroutineContext
@@ -93,13 +93,11 @@ fun SearchView.queryTextEvents(): Flow<SearchViewQueryTextEvent> {
9393
})
9494

9595
awaitClose { setOnQueryTextListener(null) }
96-
}.onStart {
97-
emit(
98-
SearchViewQueryTextEvent(
99-
view = this@queryTextEvents,
100-
query = query,
101-
isSubmitted = false,
102-
)
96+
}.startWith {
97+
SearchViewQueryTextEvent(
98+
view = this@queryTextEvents,
99+
query = query,
100+
isSubmitted = false,
103101
)
104102
}
105103
}
@@ -111,5 +109,5 @@ fun EditText.textChanges(): Flow<CharSequence?> {
111109

112110
val listener = doOnTextChanged { text, _, _, _ -> trySend(text) }
113111
awaitClose { removeTextChangedListener(listener) }
114-
}.onStart { emit(text) }
112+
}.startWith { text }
115113
}

feature-add/src/main/java/com/hoc/flowmvi/ui/add/AddVM.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.hoc.flowmvi.domain.model.User
77
import com.hoc.flowmvi.domain.usecase.AddUserUseCase
88
import com.hoc.flowmvi.mvi_base.AbstractMviViewModel
99
import com.hoc081098.flowext.flatMapFirst
10+
import com.hoc081098.flowext.flowFromSuspend
1011
import com.hoc081098.flowext.mapTo
1112
import com.hoc081098.flowext.startWith
1213
import com.hoc081098.flowext.withLatestFrom
@@ -19,7 +20,6 @@ import kotlinx.coroutines.flow.catch
1920
import kotlinx.coroutines.flow.combine
2021
import kotlinx.coroutines.flow.distinctUntilChanged
2122
import kotlinx.coroutines.flow.filterIsInstance
22-
import kotlinx.coroutines.flow.flow
2323
import kotlinx.coroutines.flow.map
2424
import kotlinx.coroutines.flow.mapNotNull
2525
import kotlinx.coroutines.flow.merge
@@ -110,7 +110,7 @@ class AddVM(
110110
.withLatestFrom(userFormFlow) { _, userForm -> userForm }
111111
.mapNotNull { it?.orNull() }
112112
.flatMapFirst { user ->
113-
flow { emit(addUser(user)) }
113+
flowFromSuspend { addUser(user) }
114114
.map { result ->
115115
result.fold(
116116
ifLeft = { PartialStateChange.AddUser.AddUserFailure(user, it) },

feature-main/src/main/java/com/hoc/flowmvi/ui/main/MainVM.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ import com.hoc.flowmvi.domain.usecase.GetUsersUseCase
66
import com.hoc.flowmvi.domain.usecase.RefreshGetUsersUseCase
77
import com.hoc.flowmvi.domain.usecase.RemoveUserUseCase
88
import com.hoc.flowmvi.mvi_base.AbstractMviViewModel
9+
import com.hoc081098.flowext.defer
910
import com.hoc081098.flowext.flatMapFirst
11+
import com.hoc081098.flowext.flowFromSuspend
1012
import com.hoc081098.flowext.startWith
1113
import kotlinx.coroutines.ExperimentalCoroutinesApi
1214
import kotlinx.coroutines.FlowPreview
@@ -15,13 +17,11 @@ import kotlinx.coroutines.flow.SharingStarted
1517
import kotlinx.coroutines.flow.StateFlow
1618
import kotlinx.coroutines.flow.asFlow
1719
import kotlinx.coroutines.flow.catch
18-
import kotlinx.coroutines.flow.emitAll
1920
import kotlinx.coroutines.flow.filter
2021
import kotlinx.coroutines.flow.filterIsInstance
2122
import kotlinx.coroutines.flow.filterNot
2223
import kotlinx.coroutines.flow.flatMapConcat
2324
import kotlinx.coroutines.flow.flatMapMerge
24-
import kotlinx.coroutines.flow.flow
2525
import kotlinx.coroutines.flow.map
2626
import kotlinx.coroutines.flow.merge
2727
import kotlinx.coroutines.flow.onEach
@@ -121,11 +121,10 @@ class MainVM(
121121
.log("Intent")
122122
.map { it.user }
123123
.flatMapMerge { userItem ->
124-
flow {
124+
flowFromSuspend {
125125
userItem
126126
.toDomain()
127127
.flatMap { removeUser(it) }
128-
.let { emit(it) }
129128
}
130129
.map { result ->
131130
result.fold(
@@ -137,5 +136,3 @@ class MainVM(
137136
)
138137
}
139138
}
140-
141-
private fun <T> defer(flowFactory: () -> Flow<T>): Flow<T> = flow { emitAll(flowFactory()) }

feature-search/src/main/java/com/hoc/flowmvi/ui/search/SearchVM.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.lifecycle.viewModelScope
55
import com.hoc.flowmvi.domain.usecase.SearchUsersUseCase
66
import com.hoc.flowmvi.mvi_base.AbstractMviViewModel
77
import com.hoc081098.flowext.flatMapFirst
8+
import com.hoc081098.flowext.flowFromSuspend
89
import com.hoc081098.flowext.startWith
910
import com.hoc081098.flowext.takeUntil
1011
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -20,7 +21,6 @@ import kotlinx.coroutines.flow.emptyFlow
2021
import kotlinx.coroutines.flow.filter
2122
import kotlinx.coroutines.flow.filterIsInstance
2223
import kotlinx.coroutines.flow.flatMapLatest
23-
import kotlinx.coroutines.flow.flow
2424
import kotlinx.coroutines.flow.map
2525
import kotlinx.coroutines.flow.merge
2626
import kotlinx.coroutines.flow.onEach
@@ -55,7 +55,7 @@ class SearchVM(
5555

5656
private fun SharedFlow<ViewIntent>.toPartialStateChangesFlow(): Flow<PartialStateChange> {
5757
val executeSearch: suspend (String) -> Flow<PartialStateChange> = { query: String ->
58-
flow { emit(searchUsersUseCase(query)) }
58+
flowFromSuspend { searchUsersUseCase(query) }
5959
.map { result ->
6060
result.fold(
6161
ifLeft = { PartialStateChange.Failure(it, query) },

0 commit comments

Comments
 (0)