From 6b253a684338d40a9caf210aa4749982184488b9 Mon Sep 17 00:00:00 2001 From: Benjamin Erhart Date: Tue, 14 Apr 2026 18:20:30 +0200 Subject: [PATCH] Issue #2: Moved local SwiftUI state to a view model. --- dns/DnsApp.swift | 16 ++++++++++++++++ dns/HomeView.swift | 16 ++++++++++------ dns/ViewModel.swift | 16 ++++++++++++++++ dns/dnsApp.swift | 11 ----------- 4 files changed, 42 insertions(+), 17 deletions(-) create mode 100644 dns/DnsApp.swift create mode 100644 dns/ViewModel.swift delete mode 100644 dns/dnsApp.swift diff --git a/dns/DnsApp.swift b/dns/DnsApp.swift new file mode 100644 index 0000000..acd5119 --- /dev/null +++ b/dns/DnsApp.swift @@ -0,0 +1,16 @@ + +import SwiftUI + +@main +struct DnsApp: App { + + @StateObject + var viewModel = ViewModel() + + var body: some Scene { + WindowGroup { + HomeView() + .environmentObject(viewModel) + } + } +} diff --git a/dns/HomeView.swift b/dns/HomeView.swift index a79c2c9..d95d302 100644 --- a/dns/HomeView.swift +++ b/dns/HomeView.swift @@ -35,8 +35,11 @@ enum ServiceStatus { } struct HomeView: View { + + @EnvironmentObject + private var viewModel: ViewModel + @State private var isEnabled = false - @State private var selectedBlocklist: BlocklistOption = .secure @State private var serviceStatus: ServiceStatus = .operational private let falsePositiveURL = URL(string: "https://www.sr2.uk/contact")! @@ -74,13 +77,13 @@ struct HomeView: View { ForEach(BlocklistOption.allCases) { option in BlocklistRow( option: option, - isSelected: selectedBlocklist == option + isSelected: viewModel.blocklist == option ) .contentShape(Rectangle()) .onTapGesture { guard option.enabled else { return } withAnimation(.spring(duration: 0.3)) { - selectedBlocklist = option + viewModel.blocklist = option } } .opacity(option.enabled ? 1 : 0.6) @@ -105,7 +108,7 @@ struct HomeView: View { HStack { Label("Server", systemImage: "server.rack") Spacer() - Text(selectedBlocklist.server) + Text(viewModel.blocklist.server) .foregroundStyle(.secondary) .font(.system(.body, design: .monospaced)) } @@ -113,7 +116,7 @@ struct HomeView: View { HStack { Label("IPv4", systemImage: "globe") Spacer() - Text(selectedBlocklist.ipv4) + Text(viewModel.blocklist.ipv4) .foregroundStyle(.secondary) .font(.system(.body, design: .monospaced)) } @@ -121,7 +124,7 @@ struct HomeView: View { HStack { Label("IPv6", systemImage: "globe") Spacer() - Text(selectedBlocklist.ipv6) + Text(viewModel.blocklist.ipv6) .foregroundStyle(.secondary) .font(.system(.body, design: .monospaced)) } @@ -217,4 +220,5 @@ struct HomeView: View { #Preview { HomeView() + .environmentObject(ViewModel()) } diff --git a/dns/ViewModel.swift b/dns/ViewModel.swift new file mode 100644 index 0000000..4c82680 --- /dev/null +++ b/dns/ViewModel.swift @@ -0,0 +1,16 @@ +// +// ViewModel.swift +// dns +// +// Created by Benjamin Erhart on 14.04.26. +// + +import Foundation +import Combine + +class ViewModel: NSObject, ObservableObject { + + @Published + var blocklist: BlocklistOption = .secure + +} diff --git a/dns/dnsApp.swift b/dns/dnsApp.swift deleted file mode 100644 index 165bec1..0000000 --- a/dns/dnsApp.swift +++ /dev/null @@ -1,11 +0,0 @@ - -import SwiftUI - -@main -struct dnsApp: App { - var body: some Scene { - WindowGroup { - HomeView() - } - } -}