diff --git a/packages/react-devtools-shared/src/devtools/views/SuspenseTab/SuspenseRects.js b/packages/react-devtools-shared/src/devtools/views/SuspenseTab/SuspenseRects.js index d67cc9a9fe3..00ca3e14594 100644 --- a/packages/react-devtools-shared/src/devtools/views/SuspenseTab/SuspenseRects.js +++ b/packages/react-devtools-shared/src/devtools/views/SuspenseTab/SuspenseRects.js @@ -98,6 +98,18 @@ function SuspenseRects({ }); } + function handleDoubleClick(event: SyntheticMouseEvent) { + if (event.defaultPrevented) { + // Already clicked on an inner rect + return; + } + event.preventDefault(); + suspenseTreeDispatch({ + type: 'TOGGLE_TIMELINE_FOR_ID', + payload: suspenseID, + }); + } + function handlePointerOver(event: SyntheticPointerEvent) { if (event.defaultPrevented) { // Already hovered an inner rect @@ -105,6 +117,10 @@ function SuspenseRects({ } event.preventDefault(); highlightHostInstance(suspenseID); + suspenseTreeDispatch({ + type: 'HOVER_TIMELINE_FOR_ID', + payload: suspenseID, + }); } function handlePointerLeave(event: SyntheticPointerEvent) { @@ -114,6 +130,10 @@ function SuspenseRects({ } event.preventDefault(); clearHighlightHostInstance(); + suspenseTreeDispatch({ + type: 'HOVER_TIMELINE_FOR_ID', + payload: -1, + }); } // TODO: Use the nearest Suspense boundary @@ -137,6 +157,7 @@ function SuspenseRects({ rect={rect} data-highlighted={selected} onClick={handleClick} + onDoubleClick={handleDoubleClick} onPointerOver={handlePointerOver} onPointerLeave={handlePointerLeave} // Reach-UI tooltip will go out of bounds of parent scroll container. diff --git a/packages/react-devtools-shared/src/devtools/views/SuspenseTab/SuspenseScrubber.css b/packages/react-devtools-shared/src/devtools/views/SuspenseTab/SuspenseScrubber.css index 94e51ef63d3..4668ede127d 100644 --- a/packages/react-devtools-shared/src/devtools/views/SuspenseTab/SuspenseScrubber.css +++ b/packages/react-devtools-shared/src/devtools/views/SuspenseTab/SuspenseScrubber.css @@ -51,6 +51,8 @@ background: var(--color-background-selected); } +.SuspenseScrubberStepHighlight > .SuspenseScrubberBead, +.SuspenseScrubberStepHighlight > .SuspenseScrubberBeadSelected, .SuspenseScrubberStep:hover > .SuspenseScrubberBead, .SuspenseScrubberStep:hover > .SuspenseScrubberBeadSelected { height: 0.75rem; diff --git a/packages/react-devtools-shared/src/devtools/views/SuspenseTab/SuspenseScrubber.js b/packages/react-devtools-shared/src/devtools/views/SuspenseTab/SuspenseScrubber.js index f1f96a33e00..cbb76e41647 100644 --- a/packages/react-devtools-shared/src/devtools/views/SuspenseTab/SuspenseScrubber.js +++ b/packages/react-devtools-shared/src/devtools/views/SuspenseTab/SuspenseScrubber.js @@ -18,6 +18,7 @@ export default function SuspenseScrubber({ min, max, value, + highlight, onBlur, onChange, onFocus, @@ -27,6 +28,7 @@ export default function SuspenseScrubber({ min: number, max: number, value: number, + highlight: number, onBlur: () => void, onChange: (index: number) => void, onFocus: () => void, @@ -53,7 +55,12 @@ export default function SuspenseScrubber({ steps.push(