mirror of
https://github.com/kkebo/DNSecure.git
synced 2026-03-11 08:54:36 +00:00
Merge pull request #122 from kkebo/117-redesign-restorationview
feat: redesign `RestorationView`
This commit is contained in:
commit
4bbda1c4cc
2 changed files with 27 additions and 30 deletions
|
|
@ -41,8 +41,8 @@ struct ContentView {
|
||||||
self.selection = self.servers.count - 1
|
self.selection = self.servers.count - 1
|
||||||
}
|
}
|
||||||
|
|
||||||
private func restoreFromPresets(resolvers: Set<Resolver>) {
|
private func restoreFromPresets(resolver: Resolver) {
|
||||||
self.servers.append(contentsOf: resolvers)
|
self.servers.append(resolver)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func removeServers(at indexSet: IndexSet) {
|
private func removeServers(at indexSet: IndexSet) {
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,9 @@ import SwiftUI
|
||||||
|
|
||||||
struct RestorationView {
|
struct RestorationView {
|
||||||
@Environment(\.dismiss) private var dismiss
|
@Environment(\.dismiss) private var dismiss
|
||||||
@State private var selection = Set<Resolver>()
|
@State private var added = Set<Resolver>()
|
||||||
@State private var keyword = ""
|
@State private var keyword = ""
|
||||||
let onAdd: (Set<Resolver>) -> Void
|
let onAdd: (Resolver) -> Void
|
||||||
|
|
||||||
private var servers: Resolvers {
|
private var servers: Resolvers {
|
||||||
guard !self.keyword.isEmpty else { return Presets.servers }
|
guard !self.keyword.isEmpty else { return Presets.servers }
|
||||||
|
|
@ -23,44 +23,41 @@ extension RestorationView: View {
|
||||||
var body: some View {
|
var body: some View {
|
||||||
NavigationView {
|
NavigationView {
|
||||||
List(self.servers, id: \.self) { resolver in
|
List(self.servers, id: \.self) { resolver in
|
||||||
Button {
|
HStack {
|
||||||
if self.selection.contains(resolver) {
|
VStack(alignment: .leading) {
|
||||||
self.selection.remove(resolver)
|
Text(resolver.name)
|
||||||
} else {
|
Text(resolver.configuration.description)
|
||||||
self.selection.insert(resolver)
|
.foregroundStyle(.secondary)
|
||||||
}
|
}
|
||||||
} label: {
|
Spacer()
|
||||||
HStack {
|
if self.added.contains(resolver) {
|
||||||
VStack(alignment: .leading) {
|
HStack(spacing: 5) {
|
||||||
Text(resolver.name)
|
|
||||||
Text(resolver.configuration.description)
|
|
||||||
.foregroundStyle(.secondary)
|
|
||||||
}
|
|
||||||
Spacer()
|
|
||||||
if self.selection.contains(resolver) {
|
|
||||||
Image(systemName: "checkmark")
|
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")
|
.navigationTitle("Presets")
|
||||||
.toolbar {
|
.toolbar {
|
||||||
ToolbarItem(placement: .primaryAction) {
|
|
||||||
Button("Add") {
|
|
||||||
self.onAdd(self.selection)
|
|
||||||
self.dismiss()
|
|
||||||
}
|
|
||||||
.disabled(self.selection.isEmpty)
|
|
||||||
}
|
|
||||||
ToolbarItem(placement: .cancellationAction) {
|
ToolbarItem(placement: .cancellationAction) {
|
||||||
Button("Cancel", role: .cancel) {
|
Button("Cancel", systemImage: "xmark", role: .cancel) {
|
||||||
self.dismiss()
|
self.dismiss()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ToolbarItem(placement: .bottomBar) {
|
|
||||||
Text("\(self.selection.count) Selected")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.navigationViewStyle(.stack)
|
.navigationViewStyle(.stack)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue