Dynamic alteartion sorting
This commit is contained in:
parent
ae6581219b
commit
70ae338e23
3 changed files with 52 additions and 17 deletions
|
|
@ -103,4 +103,22 @@ class AlterationRepository @Inject constructor(
|
||||||
lastSuccessFullUpdate = Update.currentTime()
|
lastSuccessFullUpdate = Update.currentTime()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun sort(sheet: CharacterSheet?): Comparator<String> {
|
||||||
|
return compareByDescending<String> {
|
||||||
|
sheet?.name == it
|
||||||
|
}.thenByDescending {
|
||||||
|
PLAYER == it
|
||||||
|
}.thenByDescending {
|
||||||
|
sheet?.characterClass?.any { clazz -> clazz.value == it }
|
||||||
|
}.thenByDescending {
|
||||||
|
sheet?.race == it
|
||||||
|
}.thenBy {
|
||||||
|
it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private const val PLAYER = "Joueur"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -8,18 +8,21 @@ import androidx.lifecycle.SavedStateHandle
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import com.pixelized.rplexicon.R
|
import com.pixelized.rplexicon.R
|
||||||
import com.pixelized.rplexicon.data.repository.character.AlterationRepository
|
import com.pixelized.rplexicon.data.repository.character.AlterationRepository
|
||||||
|
import com.pixelized.rplexicon.data.repository.character.CharacterSheetRepository
|
||||||
import com.pixelized.rplexicon.data.repository.character.DescriptionRepository
|
import com.pixelized.rplexicon.data.repository.character.DescriptionRepository
|
||||||
import com.pixelized.rplexicon.ui.navigation.screens.characterSheetArgument
|
import com.pixelized.rplexicon.ui.navigation.screens.characterSheetArgument
|
||||||
import com.pixelized.rplexicon.ui.screens.rolls.factory.AlterationFactory
|
import com.pixelized.rplexicon.ui.screens.rolls.factory.AlterationFactory
|
||||||
import com.pixelized.rplexicon.utilitary.extentions.context
|
import com.pixelized.rplexicon.utilitary.extentions.context
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.flow.combine
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
class AlterationViewModel @Inject constructor(
|
class AlterationViewModel @Inject constructor(
|
||||||
|
private val characterSheetRepository: CharacterSheetRepository,
|
||||||
private val alterationRepository: AlterationRepository,
|
private val alterationRepository: AlterationRepository,
|
||||||
private val descriptionRepository: DescriptionRepository,
|
private val descriptionRepository: DescriptionRepository,
|
||||||
private val factory: AlterationFactory,
|
private val factory: AlterationFactory,
|
||||||
|
|
@ -37,18 +40,27 @@ class AlterationViewModel @Inject constructor(
|
||||||
init {
|
init {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
launch(Dispatchers.IO) {
|
launch(Dispatchers.IO) {
|
||||||
alterationRepository.assignedAlterations.collect { alterationMaps ->
|
characterSheetRepository.data
|
||||||
|
.combine(alterationRepository.assignedAlterations) { sheet, alterations ->
|
||||||
|
sheet[character] to alterations
|
||||||
|
}
|
||||||
|
.collect { entry ->
|
||||||
|
val (sheet, alterationMaps) = entry
|
||||||
val alterations = alterationMaps[character] ?: emptyList()
|
val alterations = alterationMaps[character] ?: emptyList()
|
||||||
val data = alterations
|
val data = alterations
|
||||||
.groupBy { alteration -> alteration.source }
|
.groupBy { alteration -> alteration.source }
|
||||||
|
.toSortedMap(AlterationRepository.sort(sheet = sheet))
|
||||||
.map {
|
.map {
|
||||||
AlterationGroupUio(
|
AlterationGroupUio(
|
||||||
name = it.key,
|
name = it.key,
|
||||||
alterations = factory.convert(character = character, alterations = it.value)
|
alterations = factory.convert(
|
||||||
.sortedBy { alteration -> alteration.label }
|
character = character,
|
||||||
|
alterations = it.value
|
||||||
|
).sortedBy { alteration ->
|
||||||
|
alteration.label
|
||||||
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
.sortedBy { it.name }
|
|
||||||
|
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
_alterations.value = data
|
_alterations.value = data
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,10 @@ import androidx.lifecycle.AndroidViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import com.pixelized.rplexicon.R
|
import com.pixelized.rplexicon.R
|
||||||
import com.pixelized.rplexicon.business.DiceThrowUseCase
|
import com.pixelized.rplexicon.business.DiceThrowUseCase
|
||||||
|
import com.pixelized.rplexicon.data.model.CharacterSheet
|
||||||
import com.pixelized.rplexicon.data.model.DiceThrow
|
import com.pixelized.rplexicon.data.model.DiceThrow
|
||||||
import com.pixelized.rplexicon.data.repository.character.AlterationRepository
|
import com.pixelized.rplexicon.data.repository.character.AlterationRepository
|
||||||
|
import com.pixelized.rplexicon.data.repository.character.CharacterSheetRepository
|
||||||
import com.pixelized.rplexicon.data.repository.character.DescriptionRepository
|
import com.pixelized.rplexicon.data.repository.character.DescriptionRepository
|
||||||
import com.pixelized.rplexicon.ui.screens.character.composable.actions.AlterationItemUio
|
import com.pixelized.rplexicon.ui.screens.character.composable.actions.AlterationItemUio
|
||||||
import com.pixelized.rplexicon.ui.screens.character.pages.alteration.AlterationDetailUio
|
import com.pixelized.rplexicon.ui.screens.character.pages.alteration.AlterationDetailUio
|
||||||
|
|
@ -28,6 +30,7 @@ import javax.inject.Inject
|
||||||
|
|
||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
class RollOverlayViewModel @Inject constructor(
|
class RollOverlayViewModel @Inject constructor(
|
||||||
|
private val characterSheetRepository: CharacterSheetRepository,
|
||||||
private val alterationRepository: AlterationRepository,
|
private val alterationRepository: AlterationRepository,
|
||||||
private val descriptionRepository: DescriptionRepository,
|
private val descriptionRepository: DescriptionRepository,
|
||||||
private val rollUseCase: DiceThrowUseCase,
|
private val rollUseCase: DiceThrowUseCase,
|
||||||
|
|
@ -35,6 +38,7 @@ class RollOverlayViewModel @Inject constructor(
|
||||||
private val alterationFactory: AlterationFactory,
|
private val alterationFactory: AlterationFactory,
|
||||||
application: Application,
|
application: Application,
|
||||||
) : AndroidViewModel(application) {
|
) : AndroidViewModel(application) {
|
||||||
|
private var sheet: CharacterSheet? = null
|
||||||
private var diceThrow: DiceThrow? = null
|
private var diceThrow: DiceThrow? = null
|
||||||
private var rollJob: Job? = null
|
private var rollJob: Job? = null
|
||||||
|
|
||||||
|
|
@ -42,13 +46,13 @@ class RollOverlayViewModel @Inject constructor(
|
||||||
val alterations: State<List<AlterationGroupUio>> = derivedStateOf {
|
val alterations: State<List<AlterationGroupUio>> = derivedStateOf {
|
||||||
_alterations.value
|
_alterations.value
|
||||||
.groupBy { it.source }
|
.groupBy { it.source }
|
||||||
|
.toSortedMap(AlterationRepository.sort(sheet = sheet))
|
||||||
.map { entry ->
|
.map { entry ->
|
||||||
AlterationGroupUio(
|
AlterationGroupUio(
|
||||||
name = entry.key,
|
name = entry.key,
|
||||||
alterations = entry.value.sortedBy { it.label }
|
alterations = entry.value.sortedBy { it.label }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
.sortedBy { it.name }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private val _dice = mutableStateOf<RollDiceUio?>(null)
|
private val _dice = mutableStateOf<RollDiceUio?>(null)
|
||||||
|
|
@ -66,6 +70,7 @@ class RollOverlayViewModel @Inject constructor(
|
||||||
fun prepareRoll(diceThrow: DiceThrow) {
|
fun prepareRoll(diceThrow: DiceThrow) {
|
||||||
this.diceThrow = diceThrow
|
this.diceThrow = diceThrow
|
||||||
_card.value = null
|
_card.value = null
|
||||||
|
sheet = characterSheetRepository.find(name = diceThrow.character)
|
||||||
_dice.value = diceFactory.convertDiceThrow(diceThrow)
|
_dice.value = diceFactory.convertDiceThrow(diceThrow)
|
||||||
_alterations.value = alterationFactory.convertDiceThrow(diceThrow)
|
_alterations.value = alterationFactory.convertDiceThrow(diceThrow)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue