Commit 243a655b by Aleksandr

Обновление информации о задаче на основе отправляемых данных на экране детали заказа

parent 4bf53d84
......@@ -7,9 +7,13 @@ import com.isidroid.c23.JobNotFoundException
import com.isidroid.c23.NoLocationPermissionException
import com.isidroid.c23.constant.Argument
import com.isidroid.c23.data.mapper.createListItem
import com.isidroid.c23.domain.dto.PrintJobListItem
import com.isidroid.c23.ext.getPrintJobStatus
import com.isidroid.c23.ext.getPrintJobStatusColor
import com.isidroid.c23.ext.isDebug
import com.isidroid.core.FlowResult
import com.isidroid.job.repository.JobRepository
import com.isidroid.job_sender.domain.dto.JobSenderResult
import com.isidroid.location.ext.isMileUnit
import com.isidroid.location.repository.LocationRepository
import com.isidroid.spot.repository.SpotRepository
......@@ -18,7 +22,6 @@ import com.isidroid.ui.maps.model.MapMarker
import com.isidroid.utils.hasPermission
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.flow.flow
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Singleton
import kotlin.math.round
......@@ -79,4 +82,11 @@ class DetailsUseCase @Inject constructor(
)
)
}
fun updateStatuses(printJob: PrintJobListItem?, info: JobSenderResult.Statuses): PrintJobListItem? {
return printJob?.copy(
statusName = context.getString(getPrintJobStatus(info.status)),
statusColor = getPrintJobStatusColor(info.status)
)
}
}
\ No newline at end of file
......@@ -11,12 +11,15 @@ import com.isidroid.c23.domain.use_case.DetailsUseCase
import com.isidroid.c23.ext.isDebug
import com.isidroid.core.FlowResult
import com.isidroid.core.vm.BaseViewModel
import com.isidroid.job_sender.SendJobEventCollectorFlow
import com.isidroid.job_sender.domain.dto.JobSenderResult
import com.isidroid.ui.maps.model.MapMarker
import com.isidroid.utils.catchTimber
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.onEach
......@@ -27,6 +30,7 @@ import javax.inject.Inject
@HiltViewModel
class JobDetailsViewModel @Inject constructor(
private val useCase: DetailsUseCase,
private val sendJobEventCollectorFlow: SendJobEventCollectorFlow,
savedStateHandle: SavedStateHandle
) : BaseViewModel<JobDetailsContract.Event, JobDetailsContract.State, JobDetailsContract.Effect>() {
private val _spotResultStateFlow = MutableStateFlow<List<MapMarker>>(emptyList())
......@@ -35,15 +39,8 @@ class JobDetailsViewModel @Inject constructor(
private lateinit var jobId: String
init {
viewModelScope.launch {
savedStateHandle.getStateFlow<String?>(Argument.ID, null)
.filterNotNull()
.onEach {
jobId = it
loadDetails()
}
.singleOrNull()
}
viewModelScope.launch { create(savedStateHandle) }
viewModelScope.launch { listenSendJobEvents() }
}
......@@ -60,6 +57,22 @@ class JobDetailsViewModel @Inject constructor(
}
// handle events
private suspend fun create(savedStateHandle: SavedStateHandle) {
savedStateHandle.getStateFlow<String?>(Argument.ID, null)
.filterNotNull()
.onEach {
jobId = it
loadDetails()
}
.singleOrNull()
}
private suspend fun listenSendJobEvents() {
sendJobEventCollectorFlow.eventsFlow
.filterIsInstance<JobSenderResult.Statuses>()
.collect { st -> updateStatuses(st) }
}
private suspend fun loadDetails() {
useCase.loadDetails(jobId)
.flowOn(Dispatchers.IO)
......@@ -98,4 +111,9 @@ class JobDetailsViewModel @Inject constructor(
setState { copy(requestLocationPermission = false) }
loadDetails()
}
private fun updateStatuses(statuses: JobSenderResult.Statuses) {
val updated = useCase.updateStatuses(viewState.value.printJob, info = statuses) ?: return
setState { copy(printJob = updated) }
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment