diff --git a/public/locales/en.json b/public/locales/en.json
index 0da3ce8..29f870b 100644
--- a/public/locales/en.json
+++ b/public/locales/en.json
@@ -153,6 +153,7 @@
"markDone": "Mark {{title}} as done",
"markOpen": "Mark {{title}} as open",
"editButton": "Edit task",
+ "archiveButton": "Archive task",
"swipeOpen": "Reopen",
"swipeDone": "Done",
"swipeEdit": "Edit",
@@ -163,6 +164,7 @@
"savedToast": "Task saved.",
"createdToast": "Task created.",
"deletedToast": "Task deleted.",
+ "archivedToast": "Task archived.",
"loadError": "Task could not be loaded.",
"subtaskPrompt": "Subtask:",
"kanbanOpen": "Open",
@@ -920,4 +922,4 @@
"birthdays": "Add birthdays — you will receive a reminder in time.",
"recipes": "Create recipes and link them to your meal planner."
}
-}
\ No newline at end of file
+}
diff --git a/public/locales/pt.json b/public/locales/pt.json
index a684908..d4db15c 100644
--- a/public/locales/pt.json
+++ b/public/locales/pt.json
@@ -153,6 +153,7 @@
"markDone": "Marcar {{title}} como concluído",
"markOpen": "Marcar {{title}} como pendente",
"editButton": "Editar tarefa",
+ "archiveButton": "Arquivar tarefa",
"swipeOpen": "Abrir",
"swipeDone": "Concluído",
"swipeEdit": "Editar",
@@ -163,6 +164,7 @@
"savedToast": "Tarefa salva.",
"createdToast": "Tarefa criada.",
"deletedToast": "Tarefa excluída.",
+ "archivedToast": "Tarefa arquivada.",
"loadError": "Falha ao carregar a tarefa.",
"subtaskPrompt": "Subtarefa:",
"kanbanOpen": "Aberto",
@@ -902,4 +904,4 @@
"emptyHint": {
"recipes": "Crie receitas e vincule-as ao seu planejador de refeições."
}
-}
\ No newline at end of file
+}
diff --git a/public/pages/tasks.js b/public/pages/tasks.js
index ebc5909..2d513b1 100644
--- a/public/pages/tasks.js
+++ b/public/pages/tasks.js
@@ -209,6 +209,11 @@ function renderTaskCard(task, opts = {}) {
aria-label="${t('tasks.editButton')}">
+ ${task.status !== 'archived' ? `
+ ` : ''}
${progress !== null ? `
@@ -1511,6 +1516,16 @@ function wireTaskList(container) {
}
}
+ if (action === 'archive-task') {
+ try {
+ await api.patch(`/tasks/${id}/status`, { status: 'archived' });
+ window.oikos.showToast(t('tasks.archivedToast'), 'success');
+ await loadTasks(container);
+ } catch (err) {
+ window.oikos.showToast(err.message, 'danger');
+ }
+ }
+
if (action === 'add-subtask') {
await handleAddSubtask(target.dataset.parent, container);
}