aboutsummaryrefslogtreecommitdiff
path: root/iosApp/iosApp/Details/Reports/UnitReportsView.swift
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2022-02-27 01:29:49 -0600
committerIván Ávalos <avalos@disroot.org>2022-02-27 01:29:49 -0600
commit596efb5f3b9d9e13407222f4672853363e81a0fc (patch)
treebb1a52cf634036e46c3507ab59e77a454290c5ee /iosApp/iosApp/Details/Reports/UnitReportsView.swift
parent438c0a9cbb1bcb594028cc4c7fcedfe4a802ef6f (diff)
downloadetbsa-trackermap-mobile-596efb5f3b9d9e13407222f4672853363e81a0fc.tar.gz
etbsa-trackermap-mobile-596efb5f3b9d9e13407222f4672853363e81a0fc.tar.bz2
etbsa-trackermap-mobile-596efb5f3b9d9e13407222f4672853363e81a0fc.zip
Added report map icons and initial impl. of events table
Diffstat (limited to 'iosApp/iosApp/Details/Reports/UnitReportsView.swift')
-rw-r--r--iosApp/iosApp/Details/Reports/UnitReportsView.swift76
1 files changed, 72 insertions, 4 deletions
diff --git a/iosApp/iosApp/Details/Reports/UnitReportsView.swift b/iosApp/iosApp/Details/Reports/UnitReportsView.swift
index b73c9e7..1ca1a87 100644
--- a/iosApp/iosApp/Details/Reports/UnitReportsView.swift
+++ b/iosApp/iosApp/Details/Reports/UnitReportsView.swift
@@ -18,6 +18,9 @@
import SwiftUI
import shared
import SwiftUIX
+import Tabler
+
+extension EventInformation: Identifiable {}
struct UnitReportsView: View {
@StateObject var unitReportsViewModel: UnitReportsViewModel
@@ -30,12 +33,77 @@ struct UnitReportsView: View {
wrappedValue: UnitReportsViewModel(deviceId: unit.device.id))
}
+ private var eventsGridItems: [GridItem] = [
+ GridItem(.flexible(), alignment: .leading),
+ GridItem(.flexible(), alignment: .leading),
+ GridItem(.flexible(), alignment: .leading),
+ GridItem(.flexible(), alignment: .leading),
+ ]
+
+ @ViewBuilder
+ private func eventsHeader(_ ctx: TablerSortContext<EventInformation>) -> some View {
+ Text("events-table-datetime")
+ Text("events-table-event")
+ Text("events-table-geofence")
+ Text("events-table-address")
+ }
+
+ @ViewBuilder
+ private func eventsRow(_ element: EventInformation) -> some View {
+ if let eventTime = element.event.eventTime {
+ Text(Formatter.companion.formatDate(str: eventTime))
+ } else { Text("") }
+
+ if let eventType = element.event.type {
+ switch EventInformation.companion.stringToReportType(s: eventType) {
+ case .deviceOnline: Text("event-device-online")
+ case .deviceUnknown: Text("event-device-unknown")
+ case .deviceOffline: Text("event-device-offline")
+ case .deviceInactive: Text("event-device-inactive")
+ case .deviceMoving: Text("event-device-moving")
+ case .deviceStopped: Text("event-device-stopped")
+ case .deviceOverspeed: Text("event-device-overspeed")
+ case .deviceFuelDrop: Text("event-device-fuel-drop")
+ case .commandResult: Text("event-command-result")
+ case .geofenceEnter: Text("event-geofence-enter")
+ case .geofenceExit: Text("event-geofence-exit")
+ case .alarm: Text("event-alarm")
+ case .ignitionOn: Text("event-ignition-on")
+ case .ignitionOff: Text("event-ignition-off")
+ case .maintenance: Text("event-maintenance")
+ case .textMessage: Text("event-text-message")
+ case .driverChanged: Text("event-driver-changed")
+ default: Text("event-unknown")
+ }
+ } else { Text("") }
+
+ if let geofenceName = element.geofence?.name {
+ Text(geofenceName)
+ } else { Text("") }
+
+ if let positionAddress = element.position?.address {
+ Text(positionAddress)
+ } else { Text("") }
+ }
+
var body: some View {
VStack {
- MapView(layer: $unitReportsViewModel.layer,
- markers: $unitReportsViewModel.markers,
- selected: $unitReportsViewModel.selectedMarker,
- isReport: true)
+ if unitReportsViewModel.reportType == .events {
+ if let report = unitReportsViewModel.report as? ReportController.ReportEventsReport {
+ TablerList(TablerListConfig<EventInformation>(gridItems: eventsGridItems),
+ headerContent: eventsHeader,
+ rowContent: eventsRow,
+ results: report.events)
+ } else {
+ Spacer()
+ }
+ } else {
+ MapView(layer: $unitReportsViewModel.layer,
+ markers: $unitReportsViewModel.markers,
+ selected: $unitReportsViewModel.selectedMarker,
+ isReport: true)
+ }
+
VStack {
HStack {
Text("report-period")