diff options
author | Isidro Henoch <imhenoch@protonmail.com> | 2021-12-08 04:28:51 -0600 |
---|---|---|
committer | Isidro Henoch <imhenoch@protonmail.com> | 2021-12-08 04:28:51 -0600 |
commit | 04c2889895483f5925c90ed7a856d38391fcab45 (patch) | |
tree | 896334a1d8a0540b9d54c7390db2d78e61cadb1b /shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/UnitsController.kt | |
parent | d2ee6a21355c390a4aaefc6ea847060c8e47c6ae (diff) | |
download | etbsa-trackermap-mobile-04c2889895483f5925c90ed7a856d38391fcab45.tar.gz etbsa-trackermap-mobile-04c2889895483f5925c90ed7a856d38391fcab45.tar.bz2 etbsa-trackermap-mobile-04c2889895483f5925c90ed7a856d38391fcab45.zip |
WIP: Implements the basic structure for the units list/map
- Updates the Devices and Positions APIs to properly construct the Url's query when there are null values
- Adds a units controller to the shared module
- Adds a devices and map fragment that each print the fetched units on the console
- Adds a units view model to connect previously mentioned fragments with the units controller
Diffstat (limited to 'shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/UnitsController.kt')
-rw-r--r-- | shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/UnitsController.kt | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/UnitsController.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/UnitsController.kt new file mode 100644 index 0000000..9c11b79 --- /dev/null +++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/UnitsController.kt @@ -0,0 +1,65 @@ +package mx.trackermap.TrackerMap.controllers + +import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.launch +import mx.trackermap.TrackerMap.client.apis.DevicesApi +import mx.trackermap.TrackerMap.client.apis.PositionsApi +import mx.trackermap.TrackerMap.client.models.Position +import mx.trackermap.TrackerMap.client.models.UnitInformation + +@DelicateCoroutinesApi +class UnitsController( + private val devicesApi: DevicesApi, + private val positionsApi: PositionsApi +) { + + val displayedUnitsFlow = MutableStateFlow<List<UnitInformation>>(emptyList()) + private val unitsFlow = MutableStateFlow<List<UnitInformation>>(emptyList()) + private val queryFlow = MutableStateFlow("") + + init { + GlobalScope.launch { + fetchUnits() + } + GlobalScope.launch { + setupFlows() + } + } + + suspend fun fetchUnits() { + val devices = devicesApi.devicesGet() + val positions = positionsApi.positionsGet() + val positionsMap: MutableMap<Int, Position> = mutableMapOf() + + positions.forEach { position -> + position.deviceId?.let { + positionsMap[it] = position + } + } + + val units = devices.map { + UnitInformation(it, positionsMap[it.id]) + } + unitsFlow.value = units + } + + fun search(query: String) { + queryFlow.value = query + } + + suspend fun setupFlows() { + unitsFlow.combine(queryFlow) { units, query -> + units.filter { unit -> + unit.device.name.contains(query) || + unit.device.contact?.contains(query) == true || + unit.position?.address?.contains(query) == true + } + }.collect { units -> + this.displayedUnitsFlow.value = units + } + } +}
\ No newline at end of file |