feat: redesign RestorationView

resolves #117
This commit is contained in:
Kenta Kubo 2025-09-02 01:51:07 +09:00
parent 2b1277347d
commit 13fbfc849a
2 changed files with 29 additions and 30 deletions

View file

@ -41,8 +41,8 @@ struct ContentView {
self.selection = self.servers.count - 1
}
private func restoreFromPresets(resolvers: Set<Resolver>) {
self.servers.append(contentsOf: resolvers)
private func restoreFromPresets(resolver: Resolver) {
self.servers.append(resolver)
}
private func removeServers(at indexSet: IndexSet) {

View file

@ -9,9 +9,9 @@ import SwiftUI
struct RestorationView {
@Environment(\.dismiss) private var dismiss
@State private var selection = Set<Resolver>()
@State private var added = Set<Resolver>()
@State private var keyword = ""
let onAdd: (Set<Resolver>) -> Void
let onAdd: (Resolver) -> Void
private var servers: Resolvers {
guard !self.keyword.isEmpty else { return Presets.servers }
@ -23,44 +23,43 @@ extension RestorationView: View {
var body: some View {
NavigationView {
List(self.servers, id: \.self) { resolver in
Button {
if self.selection.contains(resolver) {
self.selection.remove(resolver)
} else {
self.selection.insert(resolver)
HStack {
VStack(alignment: .leading) {
Text(resolver.name)
Text(resolver.configuration.description)
.foregroundStyle(.secondary)
}
} label: {
HStack {
VStack(alignment: .leading) {
Text(resolver.name)
Text(resolver.configuration.description)
.foregroundStyle(.secondary)
}
Spacer()
if self.selection.contains(resolver) {
Spacer()
if self.added.contains(resolver) {
HStack(spacing: 5) {
Image(systemName: "checkmark")
Text("Added")
}
.foregroundStyle(.secondary)
} else {
Button {
self.added.insert(resolver)
self.onAdd(resolver)
} label: {
HStack(spacing: 5) {
Image(systemName: "plus")
Text("Add")
}
}
.buttonStyle(.borderedProminent)
.buttonBorderShape(.capsule)
}
.tint(.primary)
}
}
.navigationTitle("Presets")
.toolbar {
ToolbarItem(placement: .primaryAction) {
Button("Add") {
self.onAdd(self.selection)
self.dismiss()
}
.disabled(self.selection.isEmpty)
}
ToolbarItem(placement: .cancellationAction) {
Button("Cancel", role: .cancel) {
Button(role: .cancel) {
self.dismiss()
} label: {
Image(systemName: "xmark")
}
}
ToolbarItem(placement: .bottomBar) {
Text("\(self.selection.count) Selected")
}
}
}
.navigationViewStyle(.stack)