Updated on 2026-08-14

This commit is contained in:
Tangem 2024-07-09 12:45:17 +03:00
parent 46ff455a6f
commit e3eada68fd
35 changed files with 757 additions and 13 deletions

View file

@ -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>()
/**

View file

@ -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 ->

View file

@ -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>>>
}

View file

@ -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
}