Files
ClashX-Dashboard/Sources/ClashX Dashboard/Views/APISetting/APISettingView.swift
2023-08-11 15:05:10 +08:00

82 lines
1.7 KiB
Swift

//
// APISettingView.swift
// ClashX Dashboard
//
//
import SwiftUI
import SwiftUIIntrospect
struct APISettingView: View {
@State var baseURL: String = ""
@State var secret: String = ""
@State var connectInfo: String = ""
@AppStorage("savedServers") var savedServers = SavedServersAppStorage()
var body: some View {
VStack(alignment: .center) {
HStack {
VStack(alignment: .leading) {
Text("API Base URL")
TextField("http://127.0.0.1:9090", text: $baseURL)
}
.frame(width: 250)
VStack(alignment: .leading) {
Text("Secret(optional)")
TextField("", text: $secret)
}
.frame(width: 120)
}
HStack {
Text(connectInfo)
Spacer()
Button("Add") {
savedServers.append(.init(apiURL: baseURL, secret: secret))
print(savedServers)
}
}
List(savedServers, id: \.id) { server in
APIServerItem(server: server.apiURL) {
ConfigManager.shared.overrideApiURL = .init(string: server.apiURL)
ConfigManager.shared.overrideSecret = server.secret
ApiRequest.requestVersion { version in
if let version {
connectInfo = ""
print(version)
ConfigManager.shared.isRunning = true
} else {
connectInfo = "Failed to connect"
}
}
} onDelete: {
savedServers.removeAll {
$0.id == server.id
}
}
}
.introspect(.table, on: .macOS(.v12, .v13, .v14)) {
$0.backgroundColor = NSColor.clear
$0.enclosingScrollView?.drawsBackground = false
}
}
.padding(.top)
.fixedSize(horizontal: true, vertical: false)
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
struct APISettingView_Previews: PreviewProvider {
static var previews: some View {
APISettingView()
}
}