Просмотр исходного кода

feat: add Task skeleton, ability to alter name and check-off doneness

Sam Jaffe 3 недель назад
Родитель
Сommit
e9327fbf2c

+ 2 - 2
Todos/Model/Category.swift

@@ -11,10 +11,10 @@ import SwiftData
 @Model
 final class Category {
   var timestamp: Date
-  var name: String
+  var name: String = "New Category"
+  var tasks: [Task] = []
   
   init(timestamp: Date) {
     self.timestamp = timestamp
-    self.name = "New Category"
   }
 }

+ 20 - 0
Todos/Model/Task.swift

@@ -0,0 +1,20 @@
+//
+//  Task.swift
+//  Todos
+//
+//  Created by Sam Jaffe on 2/28/26.
+//
+
+import Foundation
+import SwiftData
+
+@Model
+final class Task {
+  var name: String
+  var notes: String = ""
+  var isComplete: Bool = false
+  
+  init(name: String) {
+    self.name = name;
+  }
+}

+ 19 - 2
Todos/VIew/CategoryPanelView.swift

@@ -9,11 +9,28 @@ import SwiftUI
 import SwiftData
 
 struct CategoryPanelView: View {
-  @State var item: Category
+  @Bindable var item: Category
 
   var body: some View {
     let style = Date.FormatStyle(date: .numeric, time: .standard)
-    Text("Item at \(item.timestamp, format: style): \(item.name)")
+    HStack {
+      Text("\(item.name): created on \(item.timestamp, format: style)")
+      Button(action: addItem) {
+        Label("Add Task", systemImage: "plus")
+      }
+    }
+    List {
+      ForEach($item.tasks) { task in
+        HStack {
+          Toggle("", isOn: task.isComplete)
+          TextField("Task Name", text: task.name)
+        }
+      }
+    }
+  }
+  
+  private func addItem() {
+    self.item.tasks.append(Task(name: "New Task"))
   }
 }
 

+ 5 - 1
Todos/VIew/ContentView.swift

@@ -28,7 +28,7 @@ struct ContentView: View {
       .toolbar {
         ToolbarItem {
           Button(action: addItem) {
-            Label("Add Item", systemImage: "plus")
+            Label("New Category", systemImage: "plus")
           }
         }
       }
@@ -40,6 +40,10 @@ struct ContentView: View {
   private func addItem() {
     withAnimation {
       let newItem = Category(timestamp: Date())
+      let count = items.count(where: { $0.name.starts(with: "New Category") })
+      if (count > 0) {
+        newItem.name += " (\(count))"
+      }
       modelContext.insert(newItem)
     }
   }