parent
fb76901366
commit
4ee0325d2f
@ -0,0 +1,65 @@ |
|||||||
|
import SwiftUI |
||||||
|
import Network |
||||||
|
|
||||||
|
struct ConnectionSheet: View { |
||||||
|
var remoteClient: RemoteClient |
||||||
|
@Binding var isPresented: Bool |
||||||
|
|
||||||
|
var body: some View { |
||||||
|
VStack(spacing: 16) { |
||||||
|
Text("Connect to Host") |
||||||
|
.font(.headline) |
||||||
|
|
||||||
|
if let message = remoteClient.connectionState.userMessage { |
||||||
|
HStack(spacing: 8) { |
||||||
|
if !remoteClient.connectionState.isConnected && |
||||||
|
remoteClient.connectionState != .disconnected { |
||||||
|
ProgressView().controlSize(.small) |
||||||
|
} |
||||||
|
Text(message) |
||||||
|
.font(.subheadline) |
||||||
|
.foregroundStyle(.secondary) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if case .connectionLost(let reason) = remoteClient.connectionState { |
||||||
|
VStack(spacing: 8) { |
||||||
|
Text(reason).font(.caption).foregroundStyle(.red) |
||||||
|
Button("Retry") { remoteClient.startDiscovery() } |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if remoteClient.discoveredHosts.isEmpty && remoteClient.connectionState == .discovering { |
||||||
|
VStack(spacing: 8) { |
||||||
|
ProgressView() |
||||||
|
Text("Looking for hosts on your network...") |
||||||
|
.font(.caption).foregroundStyle(.secondary) |
||||||
|
} |
||||||
|
.frame(height: 100) |
||||||
|
} else { |
||||||
|
List(remoteClient.discoveredHosts, id: \.name) { host in |
||||||
|
HStack { |
||||||
|
Image(systemName: "desktopcomputer").foregroundStyle(.secondary) |
||||||
|
Text(host.name) |
||||||
|
Spacer() |
||||||
|
Button("Connect") { remoteClient.connect(to: host) } |
||||||
|
.buttonStyle(.borderedProminent).controlSize(.small) |
||||||
|
} |
||||||
|
.padding(.vertical, 4) |
||||||
|
} |
||||||
|
.frame(minHeight: 100, maxHeight: 200) |
||||||
|
} |
||||||
|
|
||||||
|
Button("Cancel") { |
||||||
|
remoteClient.stopDiscovery() |
||||||
|
isPresented = false |
||||||
|
} |
||||||
|
.keyboardShortcut(.cancelAction) |
||||||
|
} |
||||||
|
.padding(20) |
||||||
|
.frame(width: 380) |
||||||
|
.onChange(of: remoteClient.connectionState) { _, newState in |
||||||
|
if case .connected = newState { isPresented = false } |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue