From f3ca41dbeceb09038bb5f9f2e7dd37215afbe190 Mon Sep 17 00:00:00 2001 From: Roman Pominov Date: Mon, 15 Aug 2022 15:53:24 +0300 Subject: [PATCH] handle keyboard event (wip) --- .../app/designer/shared/tree/tree-node.tsx | 9 ++++- .../app/designer/shared/tree/tree.tsx | 38 ++++++++++++++++++- apps/designer/package.json | 2 +- yarn.lock | 18 ++++----- 4 files changed, 54 insertions(+), 13 deletions(-) diff --git a/apps/designer/app/designer/shared/tree/tree-node.tsx b/apps/designer/app/designer/shared/tree/tree-node.tsx index eac32fae33..8f15019fe2 100644 --- a/apps/designer/app/designer/shared/tree/tree-node.tsx +++ b/apps/designer/app/designer/shared/tree/tree-node.tsx @@ -252,14 +252,19 @@ export const TreeNode = forwardRef( followedByExpandButton={shouldRenderExpandButton} /> {shouldRenderExpandButton && ( - + {isExpanded ? : } )} event.currentTarget.focus()} enableHoverState={disableHoverStates === false} > diff --git a/apps/designer/app/designer/shared/tree/tree.tsx b/apps/designer/app/designer/shared/tree/tree.tsx index 724741301c..cd776bb5ab 100644 --- a/apps/designer/app/designer/shared/tree/tree.tsx +++ b/apps/designer/app/designer/shared/tree/tree.tsx @@ -31,6 +31,7 @@ import { PlacementIndicatorLine, PlacementIndicatorOutline, } from "./placement-indicator"; +import { useHotkeys } from "react-hotkeys-hook"; type TreeProps = { root: Instance; @@ -361,6 +362,38 @@ export const Tree = ({ useDragCursor(dragItem !== undefined); + const selectedInstance = useMemo(() => { + if (selectedInstanceId === undefined) { + return undefined; + } + return findInstanceById(root, selectedInstanceId); + }, [root, selectedInstanceId]); + + const hotkeysRef = useHotkeys( + "up,down,right,left,space", + (_, { shortcut }) => { + if (selectedInstance === undefined) { + return; + } + if (shortcut === "right" && getIsExpanded(selectedInstance) === false) { + setIsExpanded(selectedInstance, true); + } + if (shortcut === "left" && getIsExpanded(selectedInstance)) { + setIsExpanded(selectedInstance, false); + } + if (shortcut === "space") { + setIsExpanded(selectedInstance, !getIsExpanded(selectedInstance)); + } + if (shortcut === "up") { + // @todo + } + if (shortcut === "down") { + // @todo + } + }, + [selectedInstance, getIsExpanded, setIsExpanded] + ); + return ( { + autoScrollHandlers.targetRef(element); + hotkeysRef.current = element; + }} onScroll={dropHandlers.handleScroll} >