فهرست منبع

refactor: move URLHintMapping settings view to its own object

Sam Jaffe 2 هفته پیش
والد
کامیت
0b9ac09d85
2فایلهای تغییر یافته به همراه53 افزوده شده و 35 حذف شده
  1. 52 0
      Todos/View/Settings/URLHintMappingView.swift
  2. 1 35
      Todos/View/SettingsView.swift

+ 52 - 0
Todos/View/Settings/URLHintMappingView.swift

@@ -0,0 +1,52 @@
+//
+//  URLHintMappingView.swift
+//  Todos
+//
+//  Created by Sam Jaffe on 3/2/26.
+//
+
+import SwiftUI
+
+struct URLHintMappingView: View {
+  @AppStorage(UserDefaultsKeys.UrlHints) var allHints = URLHintArray()
+  @State var active = URLHint()
+
+  var body: some View {
+    Text("Custom rules to expand a tag into a URL")
+    Table(of: Binding<URLHint>.self) {
+      TableColumn("Tag Prefix") { hint in
+        TextField("", text: hint.prefix)
+          .onSubmit(addHint)
+      }
+      TableColumn("URL Expansion") { hint in
+        TextField("", text: hint.replacement)
+          .onSubmit(addHint)
+      }
+      TableColumn("") { hint in
+        if hint.id != active.id {
+          Button() {
+            allHints.removeAll(where: { $0.id == hint.id })
+          } label: {
+            Label("", systemImage: "trash")
+          }
+        }
+      }.width(max: 20)
+    } rows: {
+      ForEach($allHints) { hint in
+        TableRow(hint)
+      }
+      TableRow($active)
+    }
+  }
+  
+  private func addHint() {
+    if active.valid {
+      allHints.append(active)
+      active = URLHint()
+    }
+  }
+}
+
+#Preview {
+  URLHintMappingView()
+}

+ 1 - 35
Todos/View/SettingsView.swift

@@ -8,47 +8,13 @@
 import SwiftUI
 
 struct SettingsView: View {
-  @AppStorage(UserDefaultsKeys.UrlHints) var allHints = URLHintArray()
-  @State var active = URLHint()
-  
   var body: some View {
     TabView {
       Tab("URL Hints", systemImage: "link") {
-        Text("Custom rules to expand a tag into a URL")
-        Table(of: Binding<URLHint>.self) {
-          TableColumn("Tag Prefix") { hint in
-            TextField("", text: hint.prefix)
-              .onSubmit(addHint)
-          }
-          TableColumn("URL Expansion") { hint in
-            TextField("", text: hint.replacement)
-              .onSubmit(addHint)
-          }
-          TableColumn("") { hint in
-            if hint.id != active.id {
-              Button() {
-                allHints.removeAll(where: { $0.id == hint.id })
-              } label: {
-                Label("", systemImage: "trash")
-              }
-            }
-          }.width(max: 20)
-        } rows: {
-          ForEach($allHints) { hint in
-            TableRow(hint)
-          }
-          TableRow($active)
-        }
+        URLHintMappingView()
       }
     }
   }
-  
-  private func addHint() {
-    if active.valid {
-      allHints.append(active)
-      active = URLHint()
-    }
-  }
 }
 
 #Preview {