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

fix/feat: proper relationship ownership, add delete for task/subtask

Sam Jaffe пре 2 недеља
родитељ
комит
f26c8329d9
4 измењених фајлова са 14 додато и 1 уклоњено
  1. 1 0
      Todos/Model/Project.swift
  2. 1 0
      Todos/Model/Task.swift
  3. 5 0
      Todos/View/ProjectPanelView.swift
  4. 7 1
      Todos/View/TaskView.swift

+ 1 - 0
Todos/Model/Project.swift

@@ -13,6 +13,7 @@ final class Project : Codable {
   var timestamp: Date
   var category: String = ""
   var name: String = "New Project"
+  @Relationship(deleteRule: .nullify)
   var tasks: [Task] = []
   
   init(timestamp: Date) {

+ 1 - 0
Todos/Model/Task.swift

@@ -80,6 +80,7 @@ struct Tag : Codable, Identifiable {
 final class Task : Codable {
   var name: String
   var tags: [Tag] = []
+  @Relationship(deleteRule: .nullify)
   var subtasks: [SubTask] = []
   var notes: String = ""
   var status: Status = Status.Todo

+ 5 - 0
Todos/View/ProjectPanelView.swift

@@ -42,6 +42,11 @@ struct ProjectPanelView: View {
     List {
       ForEach($item.tasks) { task in
         TaskView(task: task)
+        .contextMenu {
+          Button(action: { item.tasks.removeAll(where: { $0.id == task.id }) }) {
+            Label("Delete", systemImage: "trash")
+          }
+        }
       }
     }
   }

+ 7 - 1
Todos/View/TaskView.swift

@@ -6,6 +6,7 @@
 //
 
 import SwiftUI
+import SwiftData
 
 struct TaskView: View {
   @Binding var task: Task
@@ -71,7 +72,12 @@ struct TaskView: View {
         ForEach($task.subtasks) { subtask in
           SubTaskView(task: subtask)
             .padding(.leading, 5)
-        }
+            .contextMenu {
+                Button(action: { task.subtasks.removeAll(where: { $0.id == subtask.id }) }) {
+                Label("Delete", systemImage: "trash")
+              }
+            }
+         }
       }
     }
   }