Jelajahi Sumber

Revert "feat: implement deleting task/subtask via a toggle menu control instead of context menu... since it mis-aligns"

This reverts commit d0f4ba00213a63c0f4ddad2fcb26e1c778ed49ea.
Sam Jaffe 2 minggu lalu
induk
melakukan
7f2143ae7b

+ 0 - 7
Todos/TodosApp.swift

@@ -17,8 +17,6 @@ struct UserDefaultsKeys {
 
 @main
 struct TodosApp: App {
-  @State private var isMoveMode = false
-
   var sharedModelContainer: ModelContainer = {
     let schema = Schema([
       Project.self,
@@ -58,11 +56,6 @@ struct TodosApp: App {
         ImportMenu()
           .modelContainer(sharedModelContainer)
       }
-      CommandGroup(replacing: .toolbar) {
-        Toggle(isOn: $isMoveMode) {
-          Label("Move/Delete Tasks", systemImage: "pencil")
-        }
-      }
     }
     
     #if os(macOS)

+ 2 - 4
Todos/View/ContentView.swift

@@ -13,7 +13,6 @@ struct ContentView: View {
   @AppStorage(UserDefaultsKeys.WeekStart) private var weekStart = Date()
   let inPreview = ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] == "1"
   
-  @Binding var isMoveMode: Bool
   @Query private var items: [Project]
   @State private var selection: Project?
 
@@ -41,7 +40,7 @@ struct ContentView: View {
       }
     } detail: {
       if let selection = selection {
-        ProjectPanelView(item: selection, isMoveMode: $isMoveMode)
+        ProjectPanelView(item: selection)
       } else {
         let header = items.isEmpty ? "Create a New Project" : "Select a project from the sidebar"
         ContentUnavailableView(header, systemImage: "doc.text.image.fill")
@@ -119,7 +118,6 @@ struct ContentView: View {
 }
 
 #Preview {
-  @Previewable @State var isMoveMode = false
-  ContentView(isMoveMode: $isMoveMode)
+  ContentView()
       .modelContainer(for: Project.self, inMemory: true)
 }

+ 18 - 7
Todos/View/ProjectPanelView.swift

@@ -15,8 +15,6 @@ struct ProjectPanelView: View {
   @Bindable var item: Project
   @State private var empty = Category()
 
-  @Binding var isMoveMode: Bool
-
   var body: some View {
     let style = Date.FormatStyle(date: .numeric, time: .standard)
     HStack {
@@ -42,13 +40,20 @@ struct ProjectPanelView: View {
       }.help("Default category for new Tasks")
       Text("Created on \(item.timestamp, format: style)")
     }
-    VStack {
+    List {
       ForEach($item.tasks) { task in
-        TaskView(task: task, isMoveMode: $isMoveMode)
+        TaskView(task: task)
+        .contextMenu {
+          Button(action: {
+            deleteItem(item: task.wrappedValue, fromProject: item)
+          }) {
+            Label("Delete", systemImage: "trash")
+          }
+        }
       }
     }
   }
-
+  
   private func addItem() {
     withAnimation {
       let newTask = Task(name: "New Task", parent: item)
@@ -56,10 +61,16 @@ 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 {
-  @Previewable @State var isMoveMode = false
   @Previewable @State var item = Project(timestamp: Date())
-  ProjectPanelView(item: item, isMoveMode: $isMoveMode)
+  ProjectPanelView(item: item)
 }

+ 13 - 34
Todos/View/TaskView.swift

@@ -17,7 +17,6 @@ struct TaskView: View {
   @State private var hideNotes: Bool = false
   @State private var empty = Category()
 
-  @Binding var isMoveMode: Bool
   @FocusState private var isFocused: Bool
 
   var body: some View {
@@ -45,17 +44,9 @@ struct TaskView: View {
         
         TextField("Task Name", text: $task.name)
           .focused($isFocused)
-        if isMoveMode {
-          Button {
-            deleteItem(item: task)
-          } label: {
-            Image(systemName: "trash")
-          }.help("Delete Task '\(task.name)'")
-        } else {
-          Button(action: addItem) {
-            Image(systemName: "plus")
-              .help("Add a Subtask")
-          }
+        Button(action: addItem) {
+          Image(systemName: "plus")
+            .help("Add a Subtask")
         }
       }
       
@@ -87,19 +78,17 @@ struct TaskView: View {
       }
       
       VStack {
-        ForEach($task.subtasks, id: \.self) { subtask in
-          HStack {
-            SubTaskView(task: subtask)
-              .padding(.leading, 5)
-            if isMoveMode {
-              Button {
+        ForEach($task.subtasks) { subtask in
+          SubTaskView(task: subtask)
+            .padding(.leading, 5)
+            .contextMenu {
+              Button(action: {
                 deleteItem(item: subtask.wrappedValue, fromTask: task)
-              } label: {
-                Image(systemName: "trash")
-              }.help("Delete Subtask '\(subtask.name.wrappedValue)'")
+              }) {
+                Label("Delete", systemImage: "trash")
+              }
             }
-          }
-        }
+         }
       }
     }
   }
@@ -112,15 +101,6 @@ struct TaskView: View {
     }
   }
 
-  private func deleteItem(item: Task) {
-    withAnimation {
-      if let fromProject = item.project {
-        fromProject.tasks.removeAll(where: { $0.id == item.id })
-        modelContext.delete(item)
-      }
-    }
-  }
-
   private func deleteItem(item: SubTask, fromTask: Task) {
     withAnimation {
       fromTask.subtasks.removeAll(where: { $0.id == item.id })
@@ -130,8 +110,7 @@ struct TaskView: View {
 }
 
 #Preview {
-  @Previewable @State var isMoveMode = false
   @Previewable @State var task = Task(name: "New Task")
-  TaskView(task: $task, isMoveMode: $isMoveMode)
+  TaskView(task: $task)
       .frame(minHeight: 100) // Preview does not resize window properly
 }