diff --git a/public/pages/dashboard.js b/public/pages/dashboard.js
index dbc22ae..3037ada 100644
--- a/public/pages/dashboard.js
+++ b/public/pages/dashboard.js
@@ -626,11 +626,50 @@ function openCustomizeModal(currentConfig, onSave) {
});
}
+// --------------------------------------------------------
+// Task Quick-Action Modal
+// --------------------------------------------------------
+
+function openTaskQuickAction(taskId, taskTitle, rerender) {
+ openModal({
+ title: taskTitle,
+ size: 'sm',
+ content: `
+
+
+
+
+ `,
+ onSave: (panel) => {
+ panel.querySelector('[data-action="done"]').addEventListener('click', async () => {
+ try {
+ await api.patch(`/tasks/${taskId}/status`, { status: 'done' });
+ closeModal();
+ window.oikos?.showToast(t('tasks.swipedDoneToast'), 'success');
+ rerender();
+ } catch (err) {
+ window.oikos?.showToast(err.message, 'danger');
+ }
+ });
+ panel.querySelector('[data-action="edit"]').addEventListener('click', () => {
+ closeModal();
+ window.oikos.navigate(`/tasks?open=${taskId}`);
+ });
+ },
+ });
+}
+
// --------------------------------------------------------
// Navigations-Links verdrahten
// --------------------------------------------------------
-function wireLinks(container) {
+function wireLinks(container, rerender) {
container.querySelectorAll('[data-route]').forEach((el) => {
if (el.id === 'fab-main' || el.closest('#fab-actions')) return;
const go = () => window.oikos.navigate(el.dataset.route);
@@ -643,6 +682,15 @@ function wireLinks(container) {
});
}
});
+
+ // Task-Items öffnen Quick-Action-Modal statt direkt zu navigieren
+ container.querySelectorAll('.task-item[data-task-id]').forEach((el) => {
+ const show = () => openTaskQuickAction(el.dataset.taskId, el.dataset.taskTitle, rerender);
+ el.addEventListener('click', show);
+ el.addEventListener('keydown', (e) => {
+ if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); show(); }
+ });
+ });
}
// --------------------------------------------------------