USB-Meter / USB Meter / Views / Meter / Tabs / Home / Subviews / MeterConnectionActionView.swift
1 contributor
73 lines | 2.038kb
//
//  MeterConnectionActionView.swift
//  USB Meter
//
//  Created by Bogdan Timofte on 29/03/2026.
//  Co-authored-by: GPT-5.3-Codex.
//  Copyright © 2026 Bogdan Timofte. All rights reserved.
//

import SwiftUI

struct MeterConnectionActionView: View {
    let operationalState: Meter.OperationalState
    let compact: Bool

    var body: some View {
        if operationalState == .notPresent {
            HStack(spacing: 10) {
                Image(systemName: "exclamationmark.triangle.fill")
                    .foregroundColor(.orange)
                Text("Not found at this time.")
                    .fontWeight(.semibold)
                Spacer()
            }
            .padding(compact ? 12 : 16)
            .meterCard(tint: .orange, fillOpacity: 0.14, strokeOpacity: 0.18)
        }
    }
}

struct MeterConnectionToolbarButton: View {
    let operationalState: Meter.OperationalState
    let showsTitle: Bool
    let connectAction: () -> Void
    let disconnectAction: () -> Void

    private var connected: Bool {
        operationalState >= .peripheralConnectionPending
    }

    private var actionTint: Color {
        connected ? Color(red: 0.66, green: 0.39, blue: 0.35) : Color(red: 0.20, green: 0.46, blue: 0.43)
    }

    private var title: String {
        connected ? "Disconnect" : "Connect"
    }

    private var systemImage: String {
        connected ? "link.badge.minus" : "bolt.horizontal.circle.fill"
    }

    var body: some View {
        if operationalState != .notPresent {
            Button(action: {
                if connected {
                    disconnectAction()
                } else {
                    connectAction()
                }
            }) {
                if showsTitle {
                    Label(title, systemImage: systemImage)
                } else {
                    Image(systemName: systemImage)
                }
            }
            .foregroundStyle(actionTint)
            .accessibilityLabel(title)
            .help(title)
        }
    }
}