Этот код слишком велик для Composable или мне следует перенести его в viewModel?
Код: Выделить всё
@Composable
fun getDataFromRoomAndApi(
clickedTrain: ClickedTrainDetails,
): List {
val roomViewModel: RoomViewModel = hiltViewModel()
val viewModel: RetroViewModel = hiltViewModel()
var selectedTrain by remember { mutableStateOf(emptyList()) }
var isLoading by remember { mutableStateOf(false) }
val trainSchStat = roomViewModel.trainSchPaged.collectAsLazyPagingItems()
val roomTrainSch = trainSchStat.itemSnapshotList.firstOrNull()
val trainLiveStatus by viewModel.trainStatus.collectAsState()
LaunchedEffect(clickedTrain.clickedTrain, clickedTrain.live) {
isLoading = true
selectedTrain = emptyList() // Clear previous data immediately
clickedTrain.clickedTrain?.let { roomViewModel.setTrainNumber(it) }
if (clickedTrain.live == true) {
clickedTrain.clickedTrain?.let { viewModel.fetchTrainStatus(it) }
}
}
when {
clickedTrain.live == true -> {
when (val status = trainLiveStatus) {
is ViewState.Loading -> {
// Handle loading state if needed
}
is ViewState.Success -> {
val apiData = status.data
if (roomTrainSch != null) {
selectedTrain = mapRoomDataToApiListData(roomTrainSch, apiData)
}
isLoading = false
}
is ViewState.Error -> {
selectedTrain = emptyList()
isLoading = false
}
}
}
else -> {
// Handle non-live data (room data only)
if (roomTrainSch != null) {
selectedTrain = listOf(roomTrainSchToTrainSch(roomTrainSch))
}
isLoading = false
}
}
return if (isLoading) emptyList() else selectedTrain
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... -displayed
Мобильная версия