diff --git a/backend/utils/tw/add_task.go b/backend/utils/tw/add_task.go index d362f903..e506534a 100644 --- a/backend/utils/tw/add_task.go +++ b/backend/utils/tw/add_task.go @@ -3,7 +3,6 @@ package tw import ( "ccsync_backend/models" "ccsync_backend/utils" - "encoding/json" "fmt" "os" "strings" @@ -64,9 +63,6 @@ func AddTaskToTaskwarrior(req models.AddTaskRequestBody, dueDate string) error { } cmdArgs = append(cmdArgs, "wait:"+wait) } - if req.End != "" { - cmdArgs = append(cmdArgs, "end:"+req.End) - } if req.Recur != "" && dueDate != "" { cmdArgs = append(cmdArgs, "recur:"+req.Recur) } @@ -83,24 +79,28 @@ func AddTaskToTaskwarrior(req models.AddTaskRequestBody, dueDate string) error { return fmt.Errorf("failed to add task: %v\n %v", err, cmdArgs) } - if len(req.Annotations) > 0 { - output, err := utils.ExecCommandForOutputInDir(tempDir, "task", "export") + var taskID string + if req.End != "" || len(req.Annotations) > 0 { + output, err := utils.ExecCommandForOutputInDir(tempDir, "task", "+LATEST", "_ids") if err != nil { - return fmt.Errorf("failed to export tasks: %v", err) + return fmt.Errorf("failed to get latest task Id: %v", err) } - var tasks []models.Task - if err := json.Unmarshal(output, &tasks); err != nil { - return fmt.Errorf("failed to parse exported tasks: %v", err) - } + taskID = strings.TrimSpace(string(output)) + } - if len(tasks) == 0 { - return fmt.Errorf("no tasks found after creation") + if req.End != "" { + end, err := utils.ConvertISOToTaskwarriorFormat(req.End) + if err != nil { + return fmt.Errorf("unexpected end date format error: %v", err) } + doneArgs := []string{"rc.confirmation=off", taskID, "done", "end:" + end} + if err := utils.ExecCommandInDir(tempDir, "task", doneArgs...); err != nil { + return fmt.Errorf("failed to complete task with end date: %v", err) + } + } - lastTask := tasks[len(tasks)-1] - taskID := fmt.Sprintf("%d", lastTask.ID) - + if len(req.Annotations) > 0 { for _, annotation := range req.Annotations { if annotation.Description != "" { annotateArgs := []string{"rc.confirmation=off", taskID, "annotate", annotation.Description} diff --git a/frontend/src/components/HomeComponents/Tasks/AddTaskDialog.tsx b/frontend/src/components/HomeComponents/Tasks/AddTaskDialog.tsx index 77b57c56..559457f8 100644 --- a/frontend/src/components/HomeComponents/Tasks/AddTaskDialog.tsx +++ b/frontend/src/components/HomeComponents/Tasks/AddTaskDialog.tsx @@ -1,7 +1,6 @@ import { useState, useEffect, useRef } from 'react'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; -import { DatePicker } from '@/components/ui/date-picker'; import { DateTimePicker } from '@/components/ui/date-time-picker'; import { Dialog, @@ -401,17 +400,36 @@ export const AddTaskdialog = ({ End
+ Task will be marked as completed +
+