aboutsummaryrefslogtreecommitdiff
path: root/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/UnitsController.kt
diff options
context:
space:
mode:
authorIsidro Henoch <imhenoch@protonmail.com>2021-12-08 04:28:51 -0600
committerIsidro Henoch <imhenoch@protonmail.com>2021-12-08 04:28:51 -0600
commit04c2889895483f5925c90ed7a856d38391fcab45 (patch)
tree896334a1d8a0540b9d54c7390db2d78e61cadb1b /shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/UnitsController.kt
parentd2ee6a21355c390a4aaefc6ea847060c8e47c6ae (diff)
downloadetbsa-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.kt65
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