95 lines
2.5 KiB
Swift
95 lines
2.5 KiB
Swift
//
|
|
// ServerListSettingsView.swift
|
|
// QueueCube
|
|
//
|
|
// Created by James Magahern on 6/10/25.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct ServerListSettingsView: View
|
|
{
|
|
@State var model = ViewModel()
|
|
|
|
var body: some View {
|
|
VStack {
|
|
if model.configuredServers.isEmpty {
|
|
contentPlaceholderView(title: .noServersConfigured, systemImage: "server.rack") {
|
|
Button {
|
|
model.isAddServerPresented = true
|
|
} label: {
|
|
Text(.addServer)
|
|
}
|
|
}
|
|
} else {
|
|
Form {
|
|
List(model.configuredServers) { server in
|
|
serverListItem(server)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.navigationTitle(.servers)
|
|
|
|
.toolbar {
|
|
Button {
|
|
model.isAddServerPresented = true
|
|
} label: {
|
|
Image(systemName: "plus")
|
|
}
|
|
}
|
|
|
|
.sheet(isPresented: $model.isAddServerPresented) {
|
|
NavigationView {
|
|
AddServerView(onAddServer: { model.onAddServer(server: $0) })
|
|
.navigationTitle(.addServer)
|
|
.navigationBarTitleDisplayMode(.inline)
|
|
.toolbar {
|
|
ToolbarItemGroup(placement: .cancellationAction) {
|
|
Button(.cancel) { model.isAddServerPresented = false }
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
@ViewBuilder
|
|
func serverListItem(_ server: Server) -> some View {
|
|
HStack {
|
|
Image(systemName: "hifispeaker.fill")
|
|
|
|
VStack(alignment: .leading) {
|
|
Text(server.displayName)
|
|
.lineLimit(1)
|
|
.bold()
|
|
|
|
Text(server.baseURL.absoluteString)
|
|
.foregroundStyle(.secondary)
|
|
.font(.caption)
|
|
}
|
|
|
|
Spacer()
|
|
}
|
|
}
|
|
|
|
// MARK: - Types
|
|
|
|
@Observable
|
|
class ViewModel
|
|
{
|
|
var configuredServers: [Server]
|
|
var isAddServerPresented = false
|
|
|
|
init() {
|
|
self.configuredServers = []
|
|
}
|
|
|
|
func onAddServer(server: Server) {
|
|
isAddServerPresented = false
|
|
configuredServers.append(server)
|
|
}
|
|
}
|
|
}
|