Commit 243a655b by Aleksandr

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

parent 4bf53d84
...@@ -7,9 +7,13 @@ import com.isidroid.c23.JobNotFoundException ...@@ -7,9 +7,13 @@ import com.isidroid.c23.JobNotFoundException
import com.isidroid.c23.NoLocationPermissionException import com.isidroid.c23.NoLocationPermissionException
import com.isidroid.c23.constant.Argument import com.isidroid.c23.constant.Argument
import com.isidroid.c23.data.mapper.createListItem 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.c23.ext.isDebug
import com.isidroid.core.FlowResult import com.isidroid.core.FlowResult
import com.isidroid.job.repository.JobRepository import com.isidroid.job.repository.JobRepository
import com.isidroid.job_sender.domain.dto.JobSenderResult
import com.isidroid.location.ext.isMileUnit import com.isidroid.location.ext.isMileUnit
import com.isidroid.location.repository.LocationRepository import com.isidroid.location.repository.LocationRepository
import com.isidroid.spot.repository.SpotRepository import com.isidroid.spot.repository.SpotRepository
...@@ -18,7 +22,6 @@ import com.isidroid.ui.maps.model.MapMarker ...@@ -18,7 +22,6 @@ import com.isidroid.ui.maps.model.MapMarker
import com.isidroid.utils.hasPermission import com.isidroid.utils.hasPermission
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flow
import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Singleton import javax.inject.Singleton
import kotlin.math.round import kotlin.math.round
...@@ -79,4 +82,11 @@ class DetailsUseCase @Inject constructor( ...@@ -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 ...@@ -11,12 +11,15 @@ import com.isidroid.c23.domain.use_case.DetailsUseCase
import com.isidroid.c23.ext.isDebug import com.isidroid.c23.ext.isDebug
import com.isidroid.core.FlowResult import com.isidroid.core.FlowResult
import com.isidroid.core.vm.BaseViewModel 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.ui.maps.model.MapMarker
import com.isidroid.utils.catchTimber import com.isidroid.utils.catchTimber
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.onEach
...@@ -27,6 +30,7 @@ import javax.inject.Inject ...@@ -27,6 +30,7 @@ import javax.inject.Inject
@HiltViewModel @HiltViewModel
class JobDetailsViewModel @Inject constructor( class JobDetailsViewModel @Inject constructor(
private val useCase: DetailsUseCase, private val useCase: DetailsUseCase,
private val sendJobEventCollectorFlow: SendJobEventCollectorFlow,
savedStateHandle: SavedStateHandle savedStateHandle: SavedStateHandle
) : BaseViewModel<JobDetailsContract.Event, JobDetailsContract.State, JobDetailsContract.Effect>() { ) : BaseViewModel<JobDetailsContract.Event, JobDetailsContract.State, JobDetailsContract.Effect>() {
private val _spotResultStateFlow = MutableStateFlow<List<MapMarker>>(emptyList()) private val _spotResultStateFlow = MutableStateFlow<List<MapMarker>>(emptyList())
...@@ -35,15 +39,8 @@ class JobDetailsViewModel @Inject constructor( ...@@ -35,15 +39,8 @@ class JobDetailsViewModel @Inject constructor(
private lateinit var jobId: String private lateinit var jobId: String
init { init {
viewModelScope.launch { viewModelScope.launch { create(savedStateHandle) }
savedStateHandle.getStateFlow<String?>(Argument.ID, null) viewModelScope.launch { listenSendJobEvents() }
.filterNotNull()
.onEach {
jobId = it
loadDetails()
}
.singleOrNull()
}
} }
...@@ -60,6 +57,22 @@ class JobDetailsViewModel @Inject constructor( ...@@ -60,6 +57,22 @@ class JobDetailsViewModel @Inject constructor(
} }
// handle events // 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() { private suspend fun loadDetails() {
useCase.loadDetails(jobId) useCase.loadDetails(jobId)
.flowOn(Dispatchers.IO) .flowOn(Dispatchers.IO)
...@@ -98,4 +111,9 @@ class JobDetailsViewModel @Inject constructor( ...@@ -98,4 +111,9 @@ class JobDetailsViewModel @Inject constructor(
setState { copy(requestLocationPermission = false) } setState { copy(requestLocationPermission = false) }
loadDetails() 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