From 6c43a62c0ff942329431cee709114b56bcda995f Mon Sep 17 00:00:00 2001 From: Chris Dobson Date: Mon, 13 Apr 2020 21:00:13 +0100 Subject: [PATCH] DevTools: Switch between "Rendered At" renders using keyboard arrow keys (#18586) * Add keyboard navigation to fibre info sidebar Co-authored-by: Brian Vaughn --- .../Profiler/SidebarSelectedFiberInfo.js | 41 ++++++++++++++++++- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/packages/react-devtools-shared/src/devtools/views/Profiler/SidebarSelectedFiberInfo.js b/packages/react-devtools-shared/src/devtools/views/Profiler/SidebarSelectedFiberInfo.js index 79244eb903..df6e6da169 100644 --- a/packages/react-devtools-shared/src/devtools/views/Profiler/SidebarSelectedFiberInfo.js +++ b/packages/react-devtools-shared/src/devtools/views/Profiler/SidebarSelectedFiberInfo.js @@ -8,7 +8,7 @@ */ import * as React from 'react'; -import {Fragment, useContext} from 'react'; +import {Fragment, useContext, useEffect, useRef} from 'react'; import WhatChanged from './WhatChanged'; import {ProfilerContext} from './ProfilerContext'; import {formatDuration, formatTime} from './utils'; @@ -31,12 +31,48 @@ export default function SidebarSelectedFiberInfo(_: Props) { selectFiber, } = useContext(ProfilerContext); const {profilingCache} = profilerStore; + const selectedListItemRef = useRef(null); const commitIndices = profilingCache.getFiberCommits({ fiberID: ((selectedFiberID: any): number), rootID: ((rootID: any): number), }); + const handleKeyDown = event => { + switch (event.key) { + case 'ArrowUp': + if (selectedCommitIndex !== null) { + const prevIndex = commitIndices.indexOf(selectedCommitIndex); + const nextIndex = + prevIndex > 0 ? prevIndex - 1 : commitIndices.length - 1; + selectCommitIndex(commitIndices[nextIndex]); + } + event.preventDefault(); + break; + case 'ArrowDown': + if (selectedCommitIndex !== null) { + const prevIndex = commitIndices.indexOf(selectedCommitIndex); + const nextIndex = + prevIndex < commitIndices.length - 1 ? prevIndex + 1 : 0; + selectCommitIndex(commitIndices[nextIndex]); + } + event.preventDefault(); + break; + default: + break; + } + }; + + useEffect(() => { + const selectedElement = selectedListItemRef.current; + if ( + selectedElement !== null && + typeof selectedElement.scrollIntoView === 'function' + ) { + selectedElement.scrollIntoView({block: 'nearest', inline: 'nearest'}); + } + }, [selectedCommitIndex]); + const listItems = []; let i = 0; for (i = 0; i < commitIndices.length; i++) { @@ -50,6 +86,7 @@ export default function SidebarSelectedFiberInfo(_: Props) { listItems.push( -
+
{listItems.length > 0 && (