feat(tasks): mark tasks as completed

This commit is contained in:
Elian Doran 2025-02-19 19:22:38 +02:00
parent d4ef15212f
commit 7c0b43db85
No known key found for this signature in database
6 changed files with 40 additions and 1 deletions

View File

@ -75,6 +75,7 @@ export default class BTask extends AbstractBeccaEntity<BOption> {
parentNoteId: this.parentNoteId,
title: this.title,
dueDate: this.dueDate,
isDone: this.isDone,
isDeleted: this.isDeleted,
utcDateModified: this.utcDateModified
};

View File

@ -5,3 +5,7 @@ export async function createNewTask(title: string) {
title
});
}
export async function toggleTaskDone(taskId: string) {
await server.post(`tasks/${taskId}/toggle`);
}

View File

@ -48,12 +48,19 @@ const TPL = `
border-bottom: 1px solid var(--main-background-color);
padding: 0.5em 1em;
}
.note-detail-task-list .task-container li .check {
margin-right: 0.5em;
}
</style>
</div>
`;
function buildTask(task: FTask) {
return `<li class="task">${task.title}</li>`;
return `\
<li class="task">
<input type="checkbox" class="check" data-task-id="${task.taskId}" /> ${task.title}
</li>`;
}
export default class TaskListWidget extends TypeWidget {
@ -73,6 +80,17 @@ export default class TaskListWidget extends TypeWidget {
this.#createNewTask(String(this.$addNewTask.val()));
}
});
this.$taskContainer.on("change", "input", (e) => {
const target = e.target as HTMLInputElement;
const taskId = target.dataset.taskId;
if (!taskId) {
return;
}
taskService.toggleTaskDone(taskId);
});
}
async #createNewTask(title: string) {

View File

@ -8,3 +8,12 @@ export function getTasks() {
export function createNewTask(req: Request) {
return tasksService.createNewTask(req.body);
}
export function toggleTaskDone(req: Request) {
const { taskId } = req.params;
if (!taskId) {
return;
}
return tasksService.toggleTaskDone(taskId);
}

View File

@ -282,6 +282,7 @@ function register(app: express.Application) {
apiRoute(GET, "/api/tasks", tasksRoute.getTasks);
apiRoute(PST, "/api/tasks", tasksRoute.createNewTask);
apiRoute(PST, "/api/tasks/:taskId/toggle", tasksRoute.toggleTaskDone);
// in case of local electron, local calls are allowed unauthenticated, for server they need auth
const clipperMiddleware = isElectron ? [] : [auth.checkEtapiToken];

View File

@ -19,3 +19,9 @@ export function createNewTask(params: CreateTaskParams) {
task
}
}
export function toggleTaskDone(taskId: string) {
const task = becca.tasks[taskId];
task.isDone = !task.isDone;
task.save();
}