Преглед изворни кода

feat: add Category selection to Project(s)

Sam Jaffe пре 2 недеља
родитељ
комит
013e618456
2 измењених фајлова са 23 додато и 3 уклоњено
  1. 8 2
      Todos/Model/Project.swift
  2. 15 1
      Todos/View/ProjectPanelView.swift

+ 8 - 2
Todos/Model/Project.swift

@@ -11,6 +11,7 @@ import SwiftData
 @Model
 final class Project {
   var timestamp: Date
+  var category: String = ""
   var name: String = "New Project"
   var tasks: [Task] = []
   
@@ -19,7 +20,12 @@ final class Project {
   }
   
   func yaml(_ indent: Int = 0) -> String {
-    return String(repeating: "  ", count: indent) +
-      "\(name):\n" + tasks.map({ $0.yaml(indent + 1) }).joined()
+    let h1 = String(repeating: "  ", count: indent)
+    var rval = h1 + "\(name):\n"
+    if !category.isEmpty {
+      rval += h1 + "  # In Category: \(category)\n"
+    }
+    rval += tasks.map({ $0.yaml(indent + 1) }).joined()
+    return rval
   }
 }

+ 15 - 1
Todos/View/ProjectPanelView.swift

@@ -9,7 +9,9 @@ import SwiftUI
 import SwiftData
 
 struct ProjectPanelView: View {
+  @AppStorage(UserDefaultsKeys.Category) var allGroups = CodableArray<Category>()
   @Bindable var item: Project
+  @State private var empty = Category()
 
   var body: some View {
     let style = Date.FormatStyle(date: .numeric, time: .standard)
@@ -24,7 +26,19 @@ struct ProjectPanelView: View {
         .help("New Task")
         .padding(.trailing, 10)
     }
-    Text("Created on \(item.timestamp, format: style)")
+    HStack {
+      if !item.category.isEmpty {
+        let grp = $allGroups.first(where: { $0.name.wrappedValue == item.category })
+        ColorPicker("", selection: grp!.color).disabled(true)
+      }
+      Picker("", selection: $item.category) {
+        Text(empty.name).tag("")
+        ForEach(allGroups) { group in
+          Text(group.name)
+        }
+      }
+      Text("Created on \(item.timestamp, format: style)")
+    }
     List {
       ForEach($item.tasks) { task in
         TaskView(task: task)