1 contributor
//
// MeterComunicationView.swift
// USB Meter
//
// Created by Bogdan Timofte on 05/05/2020.
// Copyright © 2020 Bogdan Timofte. All rights reserved.
//
import SwiftUI
struct MeterRowView: View {
@EnvironmentObject private var meter: Meter
var body: some View {
HStack(spacing: 14) {
Image(systemName: "sensor.tag.radiowaves.forward.fill")
.font(.system(size: 18, weight: .semibold))
.foregroundColor(meter.color)
.frame(width: 42, height: 42)
.background(
Circle()
.fill(meter.color.opacity(0.18))
)
.overlay(alignment: .bottomTrailing) {
Circle()
.fill(connectivityTint)
.frame(width: 12, height: 12)
.overlay(
Circle()
.stroke(Color(uiColor: .systemBackground), lineWidth: 2)
)
}
VStack(alignment: .leading, spacing: 4) {
Text(meter.name)
.font(.headline)
Text(meter.deviceModelSummary)
.font(.caption)
.foregroundColor(.secondary)
}
Spacer()
VStack(alignment: .trailing, spacing: 4) {
HStack(spacing: 6) {
Circle()
.fill(connectivityTint)
.frame(width: 8, height: 8)
Text(statusText)
.font(.caption.weight(.semibold))
.foregroundColor(.secondary)
}
.padding(.horizontal, 10)
.padding(.vertical, 6)
.background(
Capsule(style: .continuous)
.fill(connectivityTint.opacity(0.12))
)
.overlay(
Capsule(style: .continuous)
.stroke(connectivityTint.opacity(0.22), lineWidth: 1)
)
Text(meter.btSerial.macAddress.description)
.font(.caption2)
.foregroundColor(.secondary)
}
}
.padding(14)
.meterCard(
tint: meter.color,
fillOpacity: 0.16,
strokeOpacity: 0.22,
cornerRadius: 18
)
}
private var connectivityTint: Color {
Meter.operationalColor(for: meter.operationalState)
}
private var statusText: String {
switch meter.operationalState {
case .offline:
return "Offline"
case .connectedElsewhere:
return "Elsewhere"
case .peripheralNotConnected:
return "Available"
case .peripheralConnectionPending:
return "Connecting"
case .peripheralConnected:
return "Linked"
case .peripheralReady:
return "Ready"
case .comunicating:
return "Syncing"
case .dataIsAvailable:
return "Live"
}
}
}