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

refactor: separate out add/delete function callbacks...

Sam Jaffe пре 2 недеља
родитељ
комит
b2ca908470
2 измењених фајлова са 29 додато и 7 уклоњено
  1. 10 1
      Todos/View/ProjectPanelView.swift
  2. 19 6
      Todos/View/TaskView.swift

+ 10 - 1
Todos/View/ProjectPanelView.swift

@@ -44,7 +44,9 @@ struct ProjectPanelView: View {
       ForEach($item.tasks) { task in
         TaskView(task: task)
         .contextMenu {
-          Button(action: { item.tasks.removeAll(where: { $0.id == task.id }) }) {
+          Button(action: {
+            deleteItem(item: task.wrappedValue, fromProject: item)
+          }) {
             Label("Delete", systemImage: "trash")
           }
         }
@@ -59,6 +61,13 @@ struct ProjectPanelView: View {
       item.tasks.append(newTask)
     }
   }
+
+  private func deleteItem(item: Task, fromProject: Project) {
+    withAnimation {
+      fromProject.tasks.removeAll(where: { $0.id == item.id })
+      modelContext.delete(item)
+    }
+  }
 }
 
 #Preview {

+ 19 - 6
Todos/View/TaskView.swift

@@ -39,11 +39,7 @@ struct TaskView: View {
         
         TextField("Task Name", text: $task.name)
           .focused($isFocused)
-        Button() {
-          let newSubtask = SubTask(name: "Subtask")
-          modelContext.insert(newSubtask)
-          task.subtasks.append(newSubtask)
-        } label: {
+        Button(action: addItem) {
           Image(systemName: "plus")
             .help("Add a Subtask")
         }
@@ -76,7 +72,9 @@ struct TaskView: View {
           SubTaskView(task: subtask)
             .padding(.leading, 5)
             .contextMenu {
-                Button(action: { task.subtasks.removeAll(where: { $0.id == subtask.id }) }) {
+              Button(action: {
+                deleteItem(item: subtask.wrappedValue, fromTask: task)
+              }) {
                 Label("Delete", systemImage: "trash")
               }
             }
@@ -84,6 +82,21 @@ struct TaskView: View {
       }
     }
   }
+
+  private func addItem() {
+    withAnimation {
+      let newSubtask = SubTask(name: "Subtask")
+      modelContext.insert(newSubtask)
+      task.subtasks.append(newSubtask)
+    }
+  }
+
+  private func deleteItem(item: SubTask, fromTask: Task) {
+    withAnimation {
+      fromTask.subtasks.removeAll(where: { $0.id == item.id })
+      modelContext.delete(item)
+    }
+  }
 }
 
 #Preview {