enhancement
major
minor
defect
critical
major
minor
Problem
Hat ein Gantt-Diagramm der Flow-Engine fixierte Kopfzeilen (frozenRows > 0, z. B. Monats- und KW-Achse), lässt sich kein Element per Mausklick auswählen (Balken, Meilenstein-Marke, Kante). Der Klick erreicht weder den selection-Kanal noch einen onClick-Handler.
Mit frozenRows: 0 funktioniert dieselbe Auswahl.
Version: 8.0.0-alpha12, Module tl-react-flow-client / tl-react-flow-common / tl-react-flow-server. Laut Quellen ist 8.0-SNAPSHOT an dieser Stelle gleich.
Reproduktion
- Gantt-Diagramm (reactFlowChart mit Gantt-Layout) mit frozenRows: 2 und einem selection-Kanal, an den eine Tabelle oder ein Formular gebunden ist.
- Mit der echten Maus auf eine Meilenstein-Marke (reactFlowGanttSpan o. ä.) klicken.
- Erwartet: Das Model-Objekt der Marke wird im selection-Kanal ausgewählt.
- Tatsächlich: Es passiert nichts.
- Mit frozenRows: 0 wiederholen: Die Auswahl funktioniert.
Analyse
- Bei fixierten Zeilen startet ein Mouse-down auf einem Element einen Pan/Drag. Danach wird das Click-Event unterdrückt, auch wenn sich die Maus nicht bewegt hat.
- Synthetische Click-Events (ohne vorheriges Mouse-down) wählen in beiden Fällen korrekt aus. Das Problem liegt also in der Pan-Erkennung beim Pointer-Down.
Erwartetes Verhalten
- Ein Klick ohne nennenswerte Bewegung (Schwelle von einigen Pixeln) ist ein Klick und kein Pan, unabhängig von frozenRows.
- Pan beginnt erst bei echter Bewegung. Alternativ startet er nur auf dem Hintergrund, nicht auf Elementen.
Auswirkung
Ohne Klick-Auswahl lässt sich im Terminplan kein Meilenstein direkt im Diagramm bearbeiten. Die fixierte Zeitachse ist für einen lesbaren Terminplan aber Pflicht. Derzeit geht es nur mit einem Workaround (Meilensteintabelle neben dem Diagramm).
Lösung
Ursache: Der DragHandler des Flow-Diagramms startete beim Pointer-Down sofort eine Pan- bzw. Drag-Sitzung und fing den Zeiger ein (setPointerCapture). Ein eingefangener Klick wird vom Browser nicht mehr an das Element zugestellt, auf dem er begann. Mit fixierten Zeilen bietet das Gantt-Layout Pan an, deshalb trat der Fehler dort bei jedem nicht verschiebbaren Element auf; bei verschiebbaren Elementen ging der Klick ebenso verloren, weil sofort ein Drag begann.
Jetzt merkt sich ein Pointer-Down nur, was er starten würde. Pan bzw. Verschieben/Größenänderung beginnt erst, wenn sich der Zeiger mehr als FlowDiagramClientControl.DRAG_THRESHOLD (4 Bildschirmpixel) bewegt hat; erst dann wird der Zeiger eingefangen. Ein Loslassen davor ist ein Klick und erreicht das Element. Nach einem echten Drag oder Pan wird der anschließende Klick unterdrückt, wie schon beim Auswahlrechteck, das dieselbe Schwelle nutzt.
Die Gantt-Demo in tl-demo-react (fixierte Zeilen) zeigt die Auswahl der Elemente Spec, Build, QA und Beta unter dem Diagramm an.