Updated on 2026-08-14
This commit is contained in:
parent
46ff455a6f
commit
e3eada68fd
35 changed files with 757 additions and 13 deletions
|
|
@ -16,7 +16,7 @@ sealed class BatchFetchResult<out TData> {
|
|||
*/
|
||||
data class Success<TData>(
|
||||
val data: TData,
|
||||
val last: Boolean = false,
|
||||
val last: Boolean,
|
||||
) : BatchFetchResult<TData>()
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -269,10 +269,14 @@ private class DefaultBatchListSource<TKey, TData, TRequestParams : Any, TUpdate>
|
|||
val batches = state.value.data
|
||||
val batchesToUpdate = batches.filter { action.keys.contains(it.key) }
|
||||
|
||||
val result = updateFetcher.fetchUpdate(
|
||||
toUpdate = batchesToUpdate,
|
||||
updateRequest = action.updateRequest,
|
||||
)
|
||||
val result = try {
|
||||
updateFetcher.fetchUpdate(
|
||||
toUpdate = batchesToUpdate,
|
||||
updateRequest = action.updateRequest,
|
||||
)
|
||||
} catch (t: Throwable) {
|
||||
BatchUpdateResult.Error(t)
|
||||
}
|
||||
|
||||
if (result is BatchUpdateResult.Success) {
|
||||
state.update { currentState ->
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
package com.tangem.pagination
|
||||
|
||||
import kotlinx.coroutines.flow.SharedFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
|
||||
fun <TKey, TData, TUpdate> BatchListSource<TKey, TData, TUpdate>.toBatchFlow() =
|
||||
object : BatchFlow<TKey, TData, TUpdate> {
|
||||
override val state: StateFlow<BatchListState<TKey, TData>>
|
||||
get() = this@toBatchFlow.state
|
||||
override val updateResults: SharedFlow<Pair<TUpdate, BatchUpdateResult<TKey, TData>>>
|
||||
get() = this@toBatchFlow.updateResults
|
||||
}
|
||||
|
||||
interface BatchFlow<TKey, TData, TUpdate> {
|
||||
val state: StateFlow<BatchListState<TKey, TData>>
|
||||
val updateResults: SharedFlow<Pair<TUpdate, BatchUpdateResult<TKey, TData>>>
|
||||
}
|
||||
|
|
@ -35,7 +35,10 @@ class LimitOffsetBatchFetcher<TRequestParams : Any, TData>(
|
|||
request = requestParams,
|
||||
)
|
||||
|
||||
val res = fetch(req)
|
||||
val res = runCatching {
|
||||
fetch(req)
|
||||
}.getOrElse { BatchFetchResult.Error(it) }
|
||||
|
||||
lastRequest.value = req
|
||||
return res
|
||||
}
|
||||
|
|
@ -61,7 +64,10 @@ class LimitOffsetBatchFetcher<TRequestParams : Any, TData>(
|
|||
last
|
||||
}
|
||||
|
||||
val res = fetch(req)
|
||||
val res = runCatching {
|
||||
fetch(req)
|
||||
}.getOrElse { BatchFetchResult.Error(it) }
|
||||
|
||||
lastRequest.value = req
|
||||
return res
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue