Update task completion to use local kanban state update
- Add updatedTask field to TaskCompletionResponse model from API - Modify CompleteTaskView callback to pass back the updated task - Add updateTaskInKanban() function to AllTasksView and ResidenceDetailView - Move completed tasks to correct kanban column without additional API call - Remove debug print statements from ResidenceDetailView 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -49,9 +49,11 @@ struct AllTasksView: View {
|
||||
}
|
||||
}
|
||||
.sheet(item: $selectedTaskForComplete) { task in
|
||||
CompleteTaskView(task: task) {
|
||||
CompleteTaskView(task: task) { updatedTask in
|
||||
if let updatedTask = updatedTask {
|
||||
updateTaskInKanban(updatedTask)
|
||||
}
|
||||
selectedTaskForComplete = nil
|
||||
loadAllTasks()
|
||||
}
|
||||
}
|
||||
.sheet(isPresented: $showingUpgradePrompt) {
|
||||
@@ -271,6 +273,43 @@ struct AllTasksView: View {
|
||||
}
|
||||
}
|
||||
|
||||
private func updateTaskInKanban(_ updatedTask: TaskResponse) {
|
||||
guard let currentResponse = tasksResponse else { return }
|
||||
|
||||
let targetColumn = updatedTask.kanbanColumn ?? "completed_tasks"
|
||||
|
||||
var newColumns: [TaskColumn] = []
|
||||
|
||||
for column in currentResponse.columns {
|
||||
// Remove task from this column if it exists
|
||||
var filteredTasks = column.tasks.filter { $0.id != updatedTask.id }
|
||||
|
||||
// Add task to target column
|
||||
if column.name == targetColumn {
|
||||
filteredTasks.append(updatedTask)
|
||||
}
|
||||
|
||||
// Create new column with updated tasks and count
|
||||
let newColumn = TaskColumn(
|
||||
name: column.name,
|
||||
displayName: column.displayName,
|
||||
buttonTypes: column.buttonTypes,
|
||||
icons: column.icons,
|
||||
color: column.color,
|
||||
tasks: filteredTasks,
|
||||
count: Int32(filteredTasks.count)
|
||||
)
|
||||
newColumns.append(newColumn)
|
||||
}
|
||||
|
||||
// Update the response
|
||||
tasksResponse = TaskColumnsResponse(
|
||||
columns: newColumns,
|
||||
daysThreshold: currentResponse.daysThreshold,
|
||||
residenceId: currentResponse.residenceId
|
||||
)
|
||||
}
|
||||
|
||||
private func loadAllTasks(forceRefresh: Bool = false) {
|
||||
guard TokenStorage.shared.getToken() != nil else { return }
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import ComposeApp
|
||||
|
||||
struct CompleteTaskView: View {
|
||||
let task: TaskResponse
|
||||
let onComplete: () -> Void
|
||||
let onComplete: (TaskResponse?) -> Void // Pass back updated task
|
||||
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
@StateObject private var taskViewModel = TaskViewModel()
|
||||
@@ -333,10 +333,10 @@ struct CompleteTaskView: View {
|
||||
for await state in completionViewModel.createCompletionState {
|
||||
await MainActor.run {
|
||||
switch state {
|
||||
case is ApiResultSuccess<TaskCompletionResponse>:
|
||||
case let success as ApiResultSuccess<TaskCompletionResponse>:
|
||||
self.isSubmitting = false
|
||||
self.onComplete(success.data?.updatedTask) // Pass back updated task
|
||||
self.dismiss()
|
||||
self.onComplete()
|
||||
case let error as ApiResultError:
|
||||
self.errorMessage = error.message
|
||||
self.showError = true
|
||||
|
||||
Reference in New Issue
Block a user