SettingsView.swift 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. //
  2. // URLHintPreferencePane.swift
  3. // Todos
  4. //
  5. // Created by Sam Jaffe on 3/1/26.
  6. //
  7. import SwiftUI
  8. struct SettingsView: View {
  9. @EnvironmentObject var allHints: URLHintArray
  10. @State var active = URLHint()
  11. var body: some View {
  12. TabView {
  13. Tab("URL Hints", systemImage: "link") {
  14. Text("Custom rules to expand a tag into a URL")
  15. Table(of: Binding<URLHint>.self) {
  16. TableColumn("Tag Prefix") { hint in
  17. TextField("", text: hint.prefix)
  18. .onSubmit(addHint)
  19. }
  20. TableColumn("URL Expansion") { hint in
  21. TextField("", text: hint.replacement)
  22. .onSubmit(addHint)
  23. }
  24. TableColumn("") { hint in
  25. if hint.id != active.id {
  26. Button() {
  27. allHints.array.removeAll(where: { $0.id == hint.id })
  28. UserDefaults.standard.set(allHints.serial,
  29. forKey: UserDefaultsKeys.UrlHints)
  30. } label: {
  31. Label("", systemImage: "trash")
  32. }
  33. }
  34. }.width(max: 20)
  35. } rows: {
  36. ForEach($allHints.array) { hint in
  37. TableRow(hint)
  38. }
  39. TableRow($active)
  40. }
  41. }
  42. }
  43. }
  44. private func addHint() {
  45. if active.valid {
  46. allHints.array.append(active)
  47. UserDefaults.standard.set(allHints.serial,
  48. forKey: UserDefaultsKeys.UrlHints)
  49. active = URLHint()
  50. }
  51. }
  52. }
  53. #Preview {
  54. SettingsView()
  55. .environmentObject(URLHintArray())
  56. }