Issue #2: Moved local SwiftUI state to a view model.

This commit is contained in:
Benjamin Erhart 2026-04-14 18:20:30 +02:00
parent 3ec25bc247
commit 6b253a6843
4 changed files with 42 additions and 17 deletions

16
dns/DnsApp.swift Normal file
View file

@ -0,0 +1,16 @@
import SwiftUI
@main
struct DnsApp: App {
@StateObject
var viewModel = ViewModel()
var body: some Scene {
WindowGroup {
HomeView()
.environmentObject(viewModel)
}
}
}

View file

@ -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())
}

16
dns/ViewModel.swift Normal file
View file

@ -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
}

View file

@ -1,11 +0,0 @@
import SwiftUI
@main
struct dnsApp: App {
var body: some Scene {
WindowGroup {
HomeView()
}
}
}