burrow/Apple/UI/MenuItemToggleView.swift
Conrad Kramer 85640ffce1
Some checks are pending
Build AppImage / Build AppImage (push) Waiting to run
Build Apple Apps / Build App (iOS) (push) Waiting to run
Build Apple Apps / Build App (iOS Simulator) (push) Waiting to run
Build Apple Apps / Build App (macOS) (push) Waiting to run
Build Docker / Build Docker Image (push) Waiting to run
Build Rust Crate / Build Crate (macOS (Intel)) (push) Waiting to run
Build Rust Crate / Build Crate (macOS) (push) Waiting to run
Build Rust Crate / Build Crate (Linux) (push) Waiting to run
Build Rust Crate / Build Crate (Windows) (push) Waiting to run
Switch to gRPC client in Swift app
2024-09-09 10:38:13 -07:00

67 lines
1.6 KiB
Swift

//
// MenuItemToggleView.swift
// App
//
// Created by Thomas Stubblefield on 5/13/23.
//
import SwiftUI
public struct MenuItemToggleView: View {
@Environment(\.tunnel)
var tunnel: Tunnel
public var body: some View {
HStack {
VStack(alignment: .leading) {
Text("Burrow")
.font(.headline)
Text(tunnel.status.description)
.font(.subheadline)
}
Spacer()
Toggle(isOn: tunnel.toggleIsOn) {
}
.disabled(tunnel.toggleDisabled)
.toggleStyle(.switch)
}
.accessibilityElement(children: .combine)
.padding(.horizontal, 4)
.padding(10)
.frame(minWidth: 300, minHeight: 32, maxHeight: 32)
}
public init() {
}
}
extension Tunnel {
@MainActor fileprivate var toggleDisabled: Bool {
switch status {
case .disconnected, .permissionRequired, .connected, .disconnecting:
false
case .unknown, .disabled, .connecting, .reasserting, .invalid, .configurationReadWriteFailed:
true
}
}
@MainActor var toggleIsOn: Binding<Bool> {
Binding {
switch status {
case .connecting, .reasserting, .connected:
true
default:
false
}
} set: { newValue in
switch (status, newValue) {
case (.permissionRequired, true):
enable()
case (_, true):
start()
case (_, false):
stop()
}
}
}
}