From 13fbfc849a00d77069878be1d453b39dada6d6ec Mon Sep 17 00:00:00 2001 From: Kenta Kubo <601636+kkebo@users.noreply.github.com> Date: Tue, 2 Sep 2025 01:51:07 +0900 Subject: [PATCH] feat: redesign `RestorationView` resolves #117 --- DNSecure/Views/ContentView.swift | 4 +- DNSecure/Views/RestorationView.swift | 55 ++++++++++++++-------------- 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/DNSecure/Views/ContentView.swift b/DNSecure/Views/ContentView.swift index 6b35ac4..904d5a7 100644 --- a/DNSecure/Views/ContentView.swift +++ b/DNSecure/Views/ContentView.swift @@ -41,8 +41,8 @@ struct ContentView { self.selection = self.servers.count - 1 } - private func restoreFromPresets(resolvers: Set) { - self.servers.append(contentsOf: resolvers) + private func restoreFromPresets(resolver: Resolver) { + self.servers.append(resolver) } private func removeServers(at indexSet: IndexSet) { diff --git a/DNSecure/Views/RestorationView.swift b/DNSecure/Views/RestorationView.swift index d2a4e43..da9b094 100644 --- a/DNSecure/Views/RestorationView.swift +++ b/DNSecure/Views/RestorationView.swift @@ -9,9 +9,9 @@ import SwiftUI struct RestorationView { @Environment(\.dismiss) private var dismiss - @State private var selection = Set() + @State private var added = Set() @State private var keyword = "" - let onAdd: (Set) -> 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)