From dc9c445f9ec98e014c643bce8682e70af65ed611 Mon Sep 17 00:00:00 2001 From: Luke De Feo Date: Mon, 6 Feb 2023 04:33:11 -0800 Subject: [PATCH] Highlight tree nodes when monitored event matches Summary: Tree node flashes to highlight an event occured Reviewed By: lblasa Differential Revision: D42996554 fbshipit-source-id: fc51a76ce7e33d041d094fedc91f05338b907bec --- .../public/ui-debugger/components/Tree.tsx | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/desktop/plugins/public/ui-debugger/components/Tree.tsx b/desktop/plugins/public/ui-debugger/components/Tree.tsx index b08905be6..ddb4e2997 100644 --- a/desktop/plugins/public/ui-debugger/components/Tree.tsx +++ b/desktop/plugins/public/ui-debugger/components/Tree.tsx @@ -64,6 +64,7 @@ export function Tree2({ const frameworkEventsMonitoring = useValue( instance.uiState.frameworkEventMonitoring, ); + const highlightedNodes = useValue(instance.uiState.highlightedNodes); const {treeNodes, refs} = useMemo(() => { const treeNodes = toTreeNodes( @@ -126,6 +127,7 @@ export function Tree2({ treeNode={treeNode} frameworkEvents={frameworkEvents} frameworkEventsMonitoring={frameworkEventsMonitoring} + highlightedNodes={highlightedNodes} selectedNode={selectedNode} hoveredNode={hoveredNode} isUsingKBToScroll={isUsingKBToScroll} @@ -150,6 +152,7 @@ const MemoTreeItemContainer = React.memo( prevProps.treeNode === nextProps.treeNode && prevProps.isContextMenuOpen === nextProps.isContextMenuOpen && prevProps.frameworkEvents === nextProps.frameworkEvents && + prevProps.highlightedNodes === nextProps.highlightedNodes && prevProps.frameworkEventsMonitoring === nextProps.frameworkEventsMonitoring && prevProps.hoveredNode !== id && //make sure that prev or next hover/selected node doesnt concern this tree node @@ -200,6 +203,7 @@ function TreeItemContainer({ treeNode, frameworkEvents, frameworkEventsMonitoring, + highlightedNodes, selectedNode, hoveredNode, isUsingKBToScroll, @@ -212,6 +216,7 @@ function TreeItemContainer({ innerRef: Ref; treeNode: TreeNode; frameworkEvents: Map; + highlightedNodes: Set; frameworkEventsMonitoring: Map; selectedNode?: Id; hoveredNode?: Id; @@ -227,8 +232,9 @@ function TreeItemContainer({ {treeNode.indentGuide != null && ( )} - { @@ -262,7 +268,7 @@ function TreeItemContainer({ frameworkEvents={frameworkEvents} frameworkEventsMonitoring={frameworkEventsMonitoring} /> - + ); } @@ -323,11 +329,12 @@ function InlineAttributes({attributes}: {attributes: Record}) { const TreeItemHeight = '26px'; const HalfTreeItemHeight = `calc(${TreeItemHeight} / 2)`; -const TreeItemContent = styled.li<{ +const TreeItemRow = styled.li<{ item: TreeNode; isHovered: boolean; isSelected: boolean; -}>(({item, isHovered, isSelected}) => ({ + isHighlighted: boolean; +}>(({item, isHovered, isSelected, isHighlighted}) => ({ display: 'flex', alignItems: 'baseline', height: TreeItemHeight, @@ -336,7 +343,12 @@ const TreeItemContent = styled.li<{ borderRadius: '3px', borderColor: isHovered ? theme.selectionBackgroundColor : 'transparent', borderStyle: 'solid', - backgroundColor: isSelected ? theme.selectionBackgroundColor : theme.white, + + backgroundColor: isHighlighted + ? 'rgba(255,0,0,.3)' + : isSelected + ? theme.selectionBackgroundColor + : theme.white, })); function ExpandedIconOrSpace(props: {