parent
9d7061fa62
commit
7eb97fcb2c
@ -1,110 +1,27 @@
|
||||
package fr.iut.alldev.allin.ui.ranking
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import fr.iut.alldev.allin.data.model.User
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import fr.iut.alldev.allin.ui.core.AllInLoading
|
||||
import fr.iut.alldev.allin.ui.ranking.components.RankingScreenContent
|
||||
|
||||
@Composable
|
||||
fun RankingScreen() {
|
||||
val users = remember { mockRanking }
|
||||
fun RankingScreen(
|
||||
viewModel: RankingViewModel = hiltViewModel()
|
||||
) {
|
||||
val state by viewModel.state.collectAsStateWithLifecycle()
|
||||
|
||||
RankingScreenContent(
|
||||
users = users.sortedByDescending { it.coins }
|
||||
)
|
||||
}
|
||||
when (val s = state) {
|
||||
is RankingViewModel.State.Loaded -> {
|
||||
RankingScreenContent(
|
||||
users = s.friends.sortedByDescending { it.coins }
|
||||
)
|
||||
}
|
||||
|
||||
private val mockRanking by lazy {
|
||||
listOf(
|
||||
User(
|
||||
id = "1",
|
||||
username = "Owen",
|
||||
email = "",
|
||||
coins = 8533
|
||||
),
|
||||
User(
|
||||
id = "2",
|
||||
username = "Dave",
|
||||
email = "",
|
||||
coins = 6942
|
||||
),
|
||||
User(
|
||||
id = "3",
|
||||
username = "Lucas",
|
||||
email = "",
|
||||
coins = 3333
|
||||
),
|
||||
User(
|
||||
id = "4",
|
||||
username = "Louison",
|
||||
email = "",
|
||||
coins = 1970
|
||||
),
|
||||
User(
|
||||
id = "5",
|
||||
username = "Imri",
|
||||
email = "",
|
||||
coins = 1
|
||||
),
|
||||
User(
|
||||
id = "21",
|
||||
username = "Owen",
|
||||
email = "",
|
||||
coins = 8533
|
||||
),
|
||||
User(
|
||||
id = "22",
|
||||
username = "Dave",
|
||||
email = "",
|
||||
coins = 6942
|
||||
),
|
||||
User(
|
||||
id = "23",
|
||||
username = "Lucas",
|
||||
email = "",
|
||||
coins = 3333
|
||||
),
|
||||
User(
|
||||
id = "24",
|
||||
username = "Louison",
|
||||
email = "",
|
||||
coins = 1970
|
||||
),
|
||||
User(
|
||||
id = "25",
|
||||
username = "Imri",
|
||||
email = "",
|
||||
coins = 1
|
||||
),
|
||||
User(
|
||||
id = "31",
|
||||
username = "Owen",
|
||||
email = "",
|
||||
coins = 8533
|
||||
),
|
||||
User(
|
||||
id = "32",
|
||||
username = "Dave",
|
||||
email = "",
|
||||
coins = 6942
|
||||
),
|
||||
User(
|
||||
id = "33",
|
||||
username = "Lucas",
|
||||
email = "",
|
||||
coins = 3333
|
||||
),
|
||||
User(
|
||||
id = "34",
|
||||
username = "Louison",
|
||||
email = "",
|
||||
coins = 1970
|
||||
),
|
||||
User(
|
||||
id = "35",
|
||||
username = "Imri",
|
||||
email = "",
|
||||
coins = 1
|
||||
)
|
||||
)
|
||||
RankingViewModel.State.Loading -> {
|
||||
AllInLoading(visible = true)
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
package fr.iut.alldev.allin.ui.ranking
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import fr.iut.alldev.allin.data.model.User
|
||||
import fr.iut.alldev.allin.data.repository.FriendRepository
|
||||
import fr.iut.alldev.allin.keystore.AllInKeystoreManager
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.launch
|
||||
import timber.log.Timber
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class RankingViewModel @Inject constructor(
|
||||
private val friendRepository: FriendRepository,
|
||||
private val keystoreManager: AllInKeystoreManager
|
||||
) : ViewModel() {
|
||||
private val _state by lazy { MutableStateFlow<State>(State.Loading) }
|
||||
val state get() = _state.asStateFlow()
|
||||
|
||||
init {
|
||||
viewModelScope.launch {
|
||||
try {
|
||||
_state.emit(
|
||||
State.Loaded(
|
||||
friends = friendRepository.getFriends(
|
||||
token = keystoreManager.getTokenOrEmpty()
|
||||
)
|
||||
)
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
Timber.e(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sealed interface State {
|
||||
data object Loading : State
|
||||
data class Loaded(val friends: List<User>) : State
|
||||
}
|
||||
}
|
Loading…
Reference in new issue