fix(tasks): tapping anywhere on a task card opens it
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 1m29s
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:
1 parent
597b6816a7
commit
2303ccce68
2 files changed
+18
-12
No files matched your search
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in new issue
Block a user