|
|
@@ -17,6 +17,7 @@ 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 {
|
|
|
@@ -44,9 +45,17 @@ struct TaskView: View {
|
|
|
|
|
|
TextField("Task Name", text: $task.name)
|
|
|
.focused($isFocused)
|
|
|
- Button(action: addItem) {
|
|
|
- Image(systemName: "plus")
|
|
|
- .help("Add a Subtask")
|
|
|
+ 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")
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -78,17 +87,19 @@ struct TaskView: View {
|
|
|
}
|
|
|
|
|
|
VStack {
|
|
|
- ForEach($task.subtasks) { subtask in
|
|
|
- SubTaskView(task: subtask)
|
|
|
- .padding(.leading, 5)
|
|
|
- .contextMenu {
|
|
|
- Button(action: {
|
|
|
+ ForEach($task.subtasks, id: \.self) { subtask in
|
|
|
+ HStack {
|
|
|
+ SubTaskView(task: subtask)
|
|
|
+ .padding(.leading, 5)
|
|
|
+ if isMoveMode {
|
|
|
+ Button {
|
|
|
deleteItem(item: subtask.wrappedValue, fromTask: task)
|
|
|
- }) {
|
|
|
- Label("Delete", systemImage: "trash")
|
|
|
- }
|
|
|
+ } label: {
|
|
|
+ Image(systemName: "trash")
|
|
|
+ }.help("Delete Subtask '\(subtask.name.wrappedValue)'")
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -101,6 +112,15 @@ 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 })
|
|
|
@@ -110,7 +130,8 @@ struct TaskView: View {
|
|
|
}
|
|
|
|
|
|
#Preview {
|
|
|
+ @Previewable @State var isMoveMode = false
|
|
|
@Previewable @State var task = Task(name: "New Task")
|
|
|
- TaskView(task: $task)
|
|
|
+ TaskView(task: $task, isMoveMode: $isMoveMode)
|
|
|
.frame(minHeight: 100) // Preview does not resize window properly
|
|
|
}
|