From 9f092ff6330d5d80c8f332a3b7aeb9ff5875c18c Mon Sep 17 00:00:00 2001 From: "Konrad M." Date: Tue, 21 Apr 2026 21:57:46 +0200 Subject: [PATCH] fix(dashboard): FAB shortcut opens add modal directly on target page After navigating to tasks/calendar/shopping/notes via FAB, the page's primary add-button is programmatically clicked so the new-item modal opens without a second tap. FAB container right-margin doubled to avoid overlap with the browser's edge-swipe gesture zone. --- public/pages/dashboard.js | 15 ++++++++++++++- public/styles/dashboard.css | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/public/pages/dashboard.js b/public/pages/dashboard.js index 3037ada..0977a2a 100644 --- a/public/pages/dashboard.js +++ b/public/pages/dashboard.js @@ -471,6 +471,14 @@ function initFab(container, signal) { const fabBackdrop = container.querySelector('#fab-backdrop'); if (!fabMain) return; + // "Neu"-Button-Selector auf der jeweiligen Zielseite + const FAB_NEW_BTN = { + '/tasks': '#btn-new-task', + '/calendar': '#fab-new-event', + '/shopping': '#fab-new-item', + '/notes': '#fab-new-note', + }; + let open = false; function toggleFab(force) { @@ -489,7 +497,12 @@ function initFab(container, signal) { fabMain.addEventListener('click', (e) => { e.stopPropagation(); toggleFab(); }); fabActions.querySelectorAll('[data-route]').forEach((el) => { - const go = () => { toggleFab(false); window.oikos.navigate(el.dataset.route); }; + const go = async () => { + toggleFab(false); + await window.oikos.navigate(el.dataset.route); + const btnSelector = FAB_NEW_BTN[el.dataset.route]; + if (btnSelector) document.querySelector(btnSelector)?.click(); + }; el.addEventListener('click', go); el.addEventListener('keydown', (e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); go(); } diff --git a/public/styles/dashboard.css b/public/styles/dashboard.css index 3d2a39d..d44ecb8 100644 --- a/public/styles/dashboard.css +++ b/public/styles/dashboard.css @@ -934,7 +934,7 @@ .fab-container { position: fixed; bottom: calc(var(--nav-bottom-height) + 24px + var(--safe-area-inset-bottom)); - right: var(--space-4); + right: calc(var(--space-4) * 2); z-index: calc(var(--z-nav) - 1); display: flex; flex-direction: column-reverse;