1- import React from 'react'
1+ import React , { useCallback } from 'react'
22
33import { observer } from 'mobx-react'
44
55import type { LinearMafDisplayModel } from '../../stateModel'
6+ import type { HierarchyNode } from 'd3-hierarchy'
7+ import type { NodeWithIdsAndLength } from '../../types'
68
79const Tree = observer ( function ( { model } : { model : LinearMafDisplayModel } ) {
810 const {
@@ -16,6 +18,17 @@ const Tree = observer(function ({ model }: { model: LinearMafDisplayModel }) {
1618 nodeDescendantNames,
1719 } = model
1820
21+ const clearHighlight = useCallback ( ( ) => {
22+ model . setHighlightedRowNames ( undefined )
23+ } , [ model ] )
24+
25+ const makeMouseEnterHandler = useCallback (
26+ ( node : HierarchyNode < NodeWithIdsAndLength > ) => ( ) => {
27+ model . setHighlightedRowNames ( nodeDescendantNames . get ( node ) )
28+ } ,
29+ [ model , nodeDescendantNames ] ,
30+ )
31+
1932 return (
2033 < >
2134 { hierarchy
@@ -38,14 +51,8 @@ const Tree = observer(function ({ model }: { model: LinearMafDisplayModel }) {
3851 x2 = { sx }
3952 y2 = { ty }
4053 style = { { pointerEvents : 'all' , cursor : 'pointer' } }
41- onMouseEnter = { ( ) => {
42- model . setHighlightedRowNames (
43- nodeDescendantNames . get ( source ) ,
44- )
45- } }
46- onMouseLeave = { ( ) => {
47- model . setHighlightedRowNames ( undefined )
48- } }
54+ onMouseEnter = { makeMouseEnterHandler ( source ) }
55+ onMouseLeave = { clearHighlight }
4956 />
5057 < line
5158 stroke = "black"
@@ -54,14 +61,8 @@ const Tree = observer(function ({ model }: { model: LinearMafDisplayModel }) {
5461 x2 = { tx }
5562 y2 = { ty }
5663 style = { { pointerEvents : 'all' , cursor : 'pointer' } }
57- onMouseEnter = { ( ) => {
58- model . setHighlightedRowNames (
59- nodeDescendantNames . get ( target ) ,
60- )
61- } }
62- onMouseLeave = { ( ) => {
63- model . setHighlightedRowNames ( undefined )
64- } }
64+ onMouseEnter = { makeMouseEnterHandler ( target ) }
65+ onMouseLeave = { clearHighlight }
6566 />
6667 </ React . Fragment >
6768 )
0 commit comments