USB-Meter / USB Meter / Views / Meter / Tabs / Home / Subviews / MeterOverviewSectionView.swift
Newer Older
63 lines | 2.454kb
Bogdan Timofte authored 2 months ago
1
//
2
//  MeterOverviewSectionView.swift
3
//  USB Meter
4
//
5
//  Created by Bogdan Timofte on 29/03/2026.
6
//  Co-authored-by: GPT-5.3-Codex.
7
//  Copyright © 2026 Bogdan Timofte. All rights reserved.
8
//
9

            
10
import SwiftUI
11

            
12
struct MeterOverviewSectionView: View {
13
    let meter: Meter
14

            
Bogdan Timofte authored a month ago
15
    private var overviewInfoMessage: String? {
16
        guard meter.operationalState != .dataIsAvailable else {
17
            return nil
18
        }
19
        return "Connect to the meter to load firmware, serial, and boot details."
20
    }
21

            
Bogdan Timofte authored 2 months ago
22
    var body: some View {
23
        VStack(spacing: 14) {
Bogdan Timofte authored a month ago
24
            MeterInfoCardView(
25
                title: "Overview",
26
                infoMessage: overviewInfoMessage,
27
                tint: meter.color
28
            ) {
Bogdan Timofte authored 2 months ago
29
                MeterInfoRowView(label: "Name", value: meter.name)
30
                MeterInfoRowView(label: "Device Model", value: meter.deviceModelName)
31
                MeterInfoRowView(label: "Advertised Model", value: meter.modelString)
32
                MeterInfoRowView(label: "MAC", value: meter.btSerial.macAddress.description)
33
                if meter.modelNumber != 0 {
34
                    MeterInfoRowView(label: "Model Identifier", value: "\(meter.modelNumber)")
35
                }
36
                MeterInfoRowView(label: "Working Voltage", value: meter.documentedWorkingVoltage)
37
                MeterInfoRowView(label: "Temperature Unit", value: meter.temperatureUnitDescription)
38
                MeterInfoRowView(label: "Last Seen", value: meterHistoryText(for: meter.lastSeen))
39
                MeterInfoRowView(label: "Last Connected", value: meterHistoryText(for: meter.lastConnectedAt))
40
                if meter.operationalState == .dataIsAvailable {
41
                    if !meter.firmwareVersion.isEmpty {
42
                        MeterInfoRowView(label: "Firmware", value: meter.firmwareVersion)
43
                    }
44
                    if meter.serialNumber != 0 {
45
                        MeterInfoRowView(label: "Serial", value: "\(meter.serialNumber)")
46
                    }
47
                    if meter.bootCount != 0 {
48
                        MeterInfoRowView(label: "Boot Count", value: "\(meter.bootCount)")
49
                    }
50
                }
51
            }
52

            
53
        }
54
        .padding(.horizontal, 12)
55
    }
56

            
57
    private func meterHistoryText(for date: Date?) -> String {
58
        guard let date else {
59
            return "Never"
60
        }
61
        return date.format(as: "yyyy-MM-dd HH:mm")
62
    }
63
}