Fetch data in ranking screen
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
9d7061fa62
commit
7eb97fcb2c
@ -1,110 +1,27 @@
|
|||||||
package fr.iut.alldev.allin.ui.ranking
|
package fr.iut.alldev.allin.ui.ranking
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.getValue
|
||||||
import fr.iut.alldev.allin.data.model.User
|
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
|
import fr.iut.alldev.allin.ui.ranking.components.RankingScreenContent
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun RankingScreen() {
|
fun RankingScreen(
|
||||||
val users = remember { mockRanking }
|
viewModel: RankingViewModel = hiltViewModel()
|
||||||
|
) {
|
||||||
|
val state by viewModel.state.collectAsStateWithLifecycle()
|
||||||
|
|
||||||
|
when (val s = state) {
|
||||||
|
is RankingViewModel.State.Loaded -> {
|
||||||
RankingScreenContent(
|
RankingScreenContent(
|
||||||
users = users.sortedByDescending { it.coins }
|
users = s.friends.sortedByDescending { it.coins }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val mockRanking by lazy {
|
RankingViewModel.State.Loading -> {
|
||||||
listOf(
|
AllInLoading(visible = true)
|
||||||
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
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
}
|
@ -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