-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
80e0701
commit ac4eeca
Showing
29 changed files
with
527 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
@file:Suppress("UnusedPrivateMember") | ||
|
||
import ru.astrainteractive.gradleplugin.util.ProjectProperties.projectInfo | ||
|
||
plugins { | ||
id("com.android.library") | ||
kotlin("multiplatform") | ||
id("ru.astrainteractive.gradleplugin.java.core") | ||
id("ru.astrainteractive.gradleplugin.android.core") | ||
alias(libs.plugins.kotlin.serialization) | ||
} | ||
|
||
kotlin { | ||
android() | ||
ios() | ||
iosSimulatorArm64() | ||
sourceSets { | ||
val commonMain by getting { | ||
dependencies { | ||
// klibs | ||
implementation(libs.klibs.mikro.core) | ||
api(libs.klibs.mikro.platform) | ||
implementation(libs.klibs.kstorage) | ||
implementation(libs.klibs.kdi) | ||
// Decompose | ||
api(libs.decompose.core) | ||
api(libs.essenty) | ||
// Moko | ||
implementation(libs.moko.resources.core) | ||
// Paging | ||
implementation("ru.astrainteractive.mobilex:paging:2.7.3") | ||
// Coroutines | ||
implementation(libs.kotlin.coroutines.core) | ||
// MVIKotlin | ||
implementation(libs.mvikotlin) | ||
// Local | ||
api(projects.modules.services.resources) | ||
api(projects.modules.services.core) | ||
api(projects.modules.services.apiEmpireapi) | ||
} | ||
} | ||
} | ||
} | ||
android { | ||
apply(plugin = "kotlin-parcelize") | ||
namespace = "${projectInfo.group}.rating" | ||
} |
59 changes: 59 additions & 0 deletions
59
...com/makeevrserg/empireprojekt/mobile/features/rating/users/DefaultRatingUsersComponent.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
package com.makeevrserg.empireprojekt.mobile.features.rating.users | ||
|
||
import com.arkivanov.decompose.ComponentContext | ||
import com.arkivanov.essenty.instancekeeper.getOrCreate | ||
import com.makeevrserg.empireprojekt.mobile.features.rating.users.RatingUsersComponent.Model | ||
import com.makeevrserg.empireprojekt.mobile.features.rating.users.data.RatingUsersRepository | ||
import com.makeevrserg.empireprojekt.mobile.services.core.CoroutineFeature | ||
import kotlinx.coroutines.flow.MutableStateFlow | ||
import kotlinx.coroutines.flow.collectLatest | ||
import kotlinx.coroutines.flow.update | ||
import kotlinx.coroutines.launch | ||
|
||
class DefaultRatingUsersComponent( | ||
componentContext: ComponentContext, | ||
private val repository: RatingUsersRepository | ||
) : RatingUsersComponent, | ||
ComponentContext by componentContext { | ||
private val coroutineFeature = instanceKeeper.getOrCreate { | ||
CoroutineFeature.Default() | ||
} | ||
override val model = MutableStateFlow(Model()) | ||
|
||
private fun collectPagingState() = coroutineFeature.launch { | ||
repository.pagingStateFlow.collectLatest { | ||
model.update { model -> | ||
model.copy( | ||
isLastPage = it.isLastPage, | ||
isLoading = it.isLoading | ||
) | ||
} | ||
} | ||
} | ||
|
||
private fun collectListStateFlow() = coroutineFeature.launch { | ||
repository.listStateFlow.collectLatest { | ||
model.update { model -> | ||
model.copy(items = it) | ||
} | ||
} | ||
} | ||
|
||
override fun reset() { | ||
coroutineFeature.launch { | ||
repository.reset() | ||
repository.loadNextPage() | ||
} | ||
} | ||
|
||
override fun loadNextPage() { | ||
coroutineFeature.launch { | ||
repository.loadNextPage() | ||
} | ||
} | ||
|
||
init { | ||
collectPagingState() | ||
collectListStateFlow() | ||
} | ||
} |
20 changes: 20 additions & 0 deletions
20
...kotlin/com/makeevrserg/empireprojekt/mobile/features/rating/users/RatingUsersComponent.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package com.makeevrserg.empireprojekt.mobile.features.rating.users | ||
|
||
import kotlinx.coroutines.flow.StateFlow | ||
import ru.astrainteractive.empireapi.models.rating.RatingListRequest | ||
import ru.astrainteractive.empireapi.models.rating.RatingUserModel | ||
|
||
interface RatingUsersComponent { | ||
val model: StateFlow<Model> | ||
|
||
fun reset() | ||
|
||
fun loadNextPage() | ||
|
||
data class Model( | ||
val items: List<RatingUserModel> = emptyList(), | ||
val request: RatingListRequest = RatingListRequest(), | ||
val isLoading: Boolean = false, | ||
val isLastPage: Boolean = false | ||
) | ||
} |
14 changes: 14 additions & 0 deletions
14
.../com/makeevrserg/empireprojekt/mobile/features/rating/users/data/RatingUsersRepository.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package com.makeevrserg.empireprojekt.mobile.features.rating.users.data | ||
|
||
import com.makeevrserg.mobilex.paging.state.PagingState | ||
import kotlinx.coroutines.flow.MutableStateFlow | ||
import ru.astrainteractive.empireapi.models.rating.RatingListRequest | ||
import ru.astrainteractive.empireapi.models.rating.RatingUserModel | ||
|
||
interface RatingUsersRepository { | ||
fun updateRequest(request: RatingListRequest) | ||
suspend fun loadNextPage() | ||
suspend fun reset() | ||
val pagingStateFlow: MutableStateFlow<PagingState<Int>> | ||
val listStateFlow: MutableStateFlow<List<RatingUserModel>> | ||
} |
52 changes: 52 additions & 0 deletions
52
.../makeevrserg/empireprojekt/mobile/features/rating/users/data/RatingUsersRepositoryImpl.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
package com.makeevrserg.empireprojekt.mobile.features.rating.users.data | ||
|
||
import com.makeevrserg.empireprojekt.mobile.api.empireapi.RatingApi | ||
import com.makeevrserg.mobilex.paging.PagingCollector | ||
import com.makeevrserg.mobilex.paging.data.LambdaPagedListDataSource | ||
import com.makeevrserg.mobilex.paging.state.IntPagingState | ||
import kotlinx.coroutines.flow.MutableStateFlow | ||
import kotlinx.coroutines.flow.update | ||
import kotlinx.coroutines.withContext | ||
import ru.astrainteractive.empireapi.models.rating.RatingListRequest | ||
import ru.astrainteractive.klibs.mikro.core.dispatchers.KotlinDispatchers | ||
|
||
class RatingUsersRepositoryImpl( | ||
private val ratingApi: RatingApi, | ||
private val dispatchers: KotlinDispatchers | ||
) : RatingUsersRepository { | ||
private val request = MutableStateFlow(RatingListRequest()) | ||
|
||
private val pagingCollector = PagingCollector( | ||
initialPagingState = IntPagingState(0), | ||
pager = LambdaPagedListDataSource { | ||
val result = runCatching { | ||
withContext(dispatchers.IO) { | ||
ratingApi.users( | ||
page = it.page, | ||
size = 10, | ||
body = request.value | ||
).data | ||
} | ||
}.onFailure(Throwable::printStackTrace) | ||
result.getOrNull() | ||
} | ||
) | ||
|
||
override val pagingStateFlow = pagingCollector.pagingStateFlow | ||
|
||
override val listStateFlow = pagingCollector.listStateFlow | ||
|
||
override suspend fun reset() { | ||
pagingCollector.reset() | ||
} | ||
|
||
override suspend fun loadNextPage() { | ||
pagingCollector.loadNextPage() | ||
} | ||
|
||
override fun updateRequest(request: RatingListRequest) { | ||
this.request.update { | ||
request | ||
} | ||
} | ||
} |
24 changes: 24 additions & 0 deletions
24
...kotlin/com/makeevrserg/empireprojekt/mobile/features/rating/users/di/RatingUsersModule.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package com.makeevrserg.empireprojekt.mobile.features.rating.users.di | ||
|
||
import com.makeevrserg.empireprojekt.mobile.api.empireapi.di.EmpireApiModule | ||
import com.makeevrserg.empireprojekt.mobile.features.rating.users.data.RatingUsersRepository | ||
import com.makeevrserg.empireprojekt.mobile.features.rating.users.data.RatingUsersRepositoryImpl | ||
import ru.astrainteractive.klibs.kdi.Single | ||
import ru.astrainteractive.klibs.kdi.getValue | ||
import ru.astrainteractive.klibs.mikro.core.dispatchers.KotlinDispatchers | ||
|
||
interface RatingUsersModule { | ||
val ratingUsersRepository: RatingUsersRepository | ||
|
||
class Default( | ||
empireApiModule: EmpireApiModule, | ||
dispatchers: KotlinDispatchers | ||
) : RatingUsersModule { | ||
override val ratingUsersRepository: RatingUsersRepository by Single { | ||
RatingUsersRepositoryImpl( | ||
ratingApi = empireApiModule.ratingApi, | ||
dispatchers = dispatchers | ||
) | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.