Skip to content

Commit 885e84b

Browse files
committed
Fix for run page highlight sync between step row and timeline
1 parent 7f7f993 commit 885e84b

File tree

1 file changed

+39
-17
lines changed
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam

1 file changed

+39
-17
lines changed

apps/webapp/app/routes/_app.orgs.$organizationSlug.projects.$projectParam.env.$envParam.runs.$runParam/route.tsx

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -644,6 +644,7 @@ function TasksTreeView({
644644
const [showDurations, setShowDurations] = useState(true);
645645
const [showQueueTime, setShowQueueTime] = useState(false);
646646
const [scale, setScale] = useState(0);
647+
const [hoveredNodeId, setHoveredNodeId] = useState<string | null>(null);
647648
const parentRef = useRef<HTMLDivElement>(null);
648649
const treeScrollRef = useRef<HTMLDivElement>(null);
649650
const timelineScrollRef = useRef<HTMLDivElement>(null);
@@ -769,19 +770,27 @@ function TasksTreeView({
769770
getNodeProps={getNodeProps}
770771
getTreeProps={getTreeProps}
771772
parentClassName="pl-3"
772-
renderNode={({ node, state, index }) => (
773-
<>
774-
<div
775-
className={cn(
776-
"flex h-8 cursor-pointer items-center overflow-hidden rounded-l-sm pr-2",
777-
state.selected
778-
? "bg-grid-dimmed hover:bg-grid-bright"
779-
: "bg-transparent hover:bg-grid-dimmed"
780-
)}
781-
onClick={() => {
782-
selectNode(node.id);
783-
}}
784-
>
773+
renderNode={({ node, state, index }) => {
774+
const isHovered = hoveredNodeId === node.id;
775+
return (
776+
<>
777+
<div
778+
className={cn(
779+
"flex h-8 cursor-pointer items-center overflow-hidden rounded-l-sm pr-2",
780+
state.selected
781+
? isHovered
782+
? "bg-grid-bright"
783+
: "bg-grid-dimmed"
784+
: isHovered
785+
? "bg-grid-dimmed"
786+
: "bg-transparent"
787+
)}
788+
onClick={() => {
789+
selectNode(node.id);
790+
}}
791+
onMouseEnter={() => setHoveredNodeId(node.id)}
792+
onMouseLeave={() => setHoveredNodeId(null)}
793+
>
785794
<div className="flex h-8 items-center">
786795
{Array.from({ length: node.level }).map((_, index) => (
787796
<TaskLine
@@ -837,7 +846,8 @@ function TasksTreeView({
837846
</div>
838847
</div>
839848
</>
840-
)}
849+
);
850+
}}
841851
onScroll={(scrollTop) => {
842852
//sync the scroll to the tree
843853
if (timelineScrollRef.current) {
@@ -870,6 +880,8 @@ function TasksTreeView({
870880
treeScrollRef={treeScrollRef}
871881
virtualizer={virtualizer}
872882
toggleNodeSelection={toggleNodeSelection}
883+
hoveredNodeId={hoveredNodeId}
884+
setHoveredNodeId={setHoveredNodeId}
873885
/>
874886
</ResizablePanel>
875887
</ResizablePanelGroup>
@@ -935,6 +947,8 @@ type TimelineViewProps = Pick<
935947
toggleNodeSelection: UseTreeStateOutput["toggleNodeSelection"];
936948
showDurations: boolean;
937949
treeScrollRef: React.RefObject<HTMLDivElement>;
950+
hoveredNodeId: string | null;
951+
setHoveredNodeId: (nodeId: string | null) => void;
938952
};
939953

940954
const tickCount = 5;
@@ -954,6 +968,8 @@ function TimelineView({
954968
showDurations,
955969
treeScrollRef,
956970
queuedDuration,
971+
hoveredNodeId,
972+
setHoveredNodeId,
957973
}: TimelineViewProps) {
958974
const timelineContainerRef = useRef<HTMLDivElement>(null);
959975
const initialTimelineDimensions = useInitialDimensions(timelineContainerRef);
@@ -1098,20 +1114,26 @@ function TimelineView({
10981114
parentClassName="h-full scrollbar-hide"
10991115
renderNode={({ node, state, index, virtualizer, virtualItem }) => {
11001116
const isTopSpan = node.id === events[0]?.id;
1117+
const isHovered = hoveredNodeId === node.id;
11011118

11021119
return (
11031120
<Timeline.Row
11041121
key={index}
11051122
className={cn(
11061123
"group flex h-8 items-center",
11071124
state.selected
1108-
? "bg-grid-dimmed hover:bg-grid-bright"
1109-
: "bg-transparent hover:bg-grid-dimmed"
1125+
? isHovered
1126+
? "bg-grid-bright"
1127+
: "bg-grid-dimmed"
1128+
: isHovered
1129+
? "bg-grid-dimmed"
1130+
: "bg-transparent"
11101131
)}
1111-
// onMouseOver={() => console.log(`hover ${index}`)}
11121132
onClick={(e) => {
11131133
toggleNodeSelection(node.id);
11141134
}}
1135+
onMouseEnter={() => setHoveredNodeId(node.id)}
1136+
onMouseLeave={() => setHoveredNodeId(null)}
11151137
>
11161138
{node.data.level === "TRACE" ? (
11171139
<>

0 commit comments

Comments
 (0)