fix(tasks): tapping anywhere on a task card opens it
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 1m29s

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
sandrodachandClaude Opus 5.5 committed 2026-10-31 09:38:54 +01:00
1 parent 597b6816a7
commit 2303ccce68
2 files changed
+18 -12

No files matched your search

+1
View File
@@ -11,6 +11,7 @@ Das Format folgt [Keep a Changelog](https://keepachangelog.com/de/1.1.0/), die V
### Fixed ### Fixed
- Triage am Handy: Die Warteschlange lässt sich wieder zuklappen („Warteschlange ausblenden“) und fährt beim Auf- und Zuklappen weich auf bzw. zu. - Triage am Handy: Die Warteschlange lässt sich wieder zuklappen („Warteschlange ausblenden“) und fährt beim Auf- und Zuklappen weich auf bzw. zu.
- Triage auf dem Desktop: Notizen, die auf einem anderen Gerät einsortiert oder gelöscht wurden, verschwinden jetzt sofort auch hier (bisher wurde nur der Aufgaben-Tab aktualisiert). Kommt der Tab wieder in den Vordergrund, lädt er außerdem neu, falls Änderungen im Hintergrund verpasst wurden. - Triage auf dem Desktop: Notizen, die auf einem anderen Gerät einsortiert oder gelöscht wurden, verschwinden jetzt sofort auch hier (bisher wurde nur der Aufgaben-Tab aktualisiert). Kommt der Tab wieder in den Vordergrund, lädt er außerdem neu, falls Änderungen im Hintergrund verpasst wurden.
- Aufgaben: Ein Tipp irgendwo auf die Aufgabe öffnet sie jetzt zuverlässig, nicht nur auf den Text. Bisher schluckten die Zeile mit Datum/Tags und in Kanban die Pfeil-Leiste jeden Tipp, und am Handy konnte ein etwas längerer Tipp als Ziehen gewertet werden (Ziehen gibt es nur noch mit Maus oder Stift).
## [0.15.0] - 2026-10-31 ## [0.15.0] - 2026-10-31
+17 -12
View File
@@ -37,6 +37,17 @@ import { CountBadge } from '../../components/CountBadge';
import { FormSheet } from '../../components/FormSheet'; import { FormSheet } from '../../components/FormSheet';
import { useMobileActions } from '../../context/MobileActionContext'; import { useMobileActions } from '../../context/MobileActionContext';
// Drag & drop needs a mouse or pen; on touch-only devices a draggable row can swallow a slightly
// longer tap, so the row would not open
const canDragTasks =
typeof window !== 'undefined' && !!window.matchMedia?.('(any-pointer: fine)').matches;
// Rows inside a task card keep taps on their own controls; taps on empty space or plain labels
// (due date, webhook) reach the card and open the task
const stopOnControl = (e: React.MouseEvent) => {
if ((e.target as HTMLElement).closest('button, select, a, input')) e.stopPropagation();
};
interface TasksViewProps { interface TasksViewProps {
currentUser?: User | null; currentUser?: User | null;
onRefreshStats: () => void; onRefreshStats: () => void;
@@ -1093,7 +1104,7 @@ export const TasksView: React.FC<TasksViewProps> = ({
return ( return (
<div <div
key={task.id} key={task.id}
draggable={!readOnly} draggable={canDragTasks && !readOnly}
onDragStart={(e) => handleTaskDragStart(e, task)} onDragStart={(e) => handleTaskDragStart(e, task)}
onDragEnd={() => { onDragEnd={() => {
setDraggingTaskId(null); setDraggingTaskId(null);
@@ -1143,13 +1154,7 @@ export const TasksView: React.FC<TasksViewProps> = ({
</button> </button>
{/* Clickable Title & Metadata */} {/* Clickable Title & Metadata */}
<div <div className="min-w-0 flex-1 cursor-pointer space-y-1">
onClick={() => {
setDetailTaskId(task.id);
setShowDetailModal(true);
}}
className="min-w-0 flex-1 cursor-pointer space-y-1"
>
<div className="flex items-center gap-2 flex-wrap"> <div className="flex items-center gap-2 flex-wrap">
<p <p
className={`text-sm break-words leading-tight ${ className={`text-sm break-words leading-tight ${
@@ -1166,7 +1171,7 @@ export const TasksView: React.FC<TasksViewProps> = ({
{/* Interactive Badges Bar */} {/* Interactive Badges Bar */}
<div <div
className="flex flex-wrap items-center gap-1.5 pt-0.5 empty:hidden" className="flex flex-wrap items-center gap-1.5 pt-0.5 empty:hidden"
onClick={(e) => e.stopPropagation()} onClick={stopOnControl}
> >
{(task.convertedType === 'document_block' || task.docId) && ( {(task.convertedType === 'document_block' || task.docId) && (
<button <button
@@ -2163,7 +2168,7 @@ export const TasksView: React.FC<TasksViewProps> = ({
return ( return (
<div <div
key={task.id} key={task.id}
draggable={!readOnly} draggable={canDragTasks && !readOnly}
onDragStart={(e) => handleTaskDragStart(e, task)} onDragStart={(e) => handleTaskDragStart(e, task)}
onDragEnd={() => { onDragEnd={() => {
setDraggingTaskId(null); setDraggingTaskId(null);
@@ -2230,7 +2235,7 @@ export const TasksView: React.FC<TasksViewProps> = ({
)} )}
{/* Badges: In Notiz, Priority, Status, Tags */} {/* Badges: In Notiz, Priority, Status, Tags */}
<div className="flex flex-wrap items-center gap-1 pt-0.5" onClick={(e) => e.stopPropagation()}> <div className="flex flex-wrap items-center gap-1 pt-0.5" onClick={stopOnControl}>
{(task.convertedType === 'document_block' || task.docId) && ( {(task.convertedType === 'document_block' || task.docId) && (
<button <button
type="button" type="button"
@@ -2315,7 +2320,7 @@ export const TasksView: React.FC<TasksViewProps> = ({
{!readOnly && ( {!readOnly && (
<div <div
className="flex items-center justify-between pt-1 border-t border-border text-[10px]" className="flex items-center justify-between pt-1 border-t border-border text-[10px]"
onClick={(e) => e.stopPropagation()} onClick={stopOnControl}
> >
<button <button
type="button" type="button"