@@ -19,6 +19,7 @@ import { EuiPanel, EuiTitle, EuiSpacer, EuiLoadingSpinner } from "@elastic/eui";
1919import { FEAST_FCO_TYPES } from "../parsers/types" ;
2020import { EntityRelation } from "../parsers/parseEntityRelationships" ;
2121import { feast } from "../protos" ;
22+ import { useTheme } from "../contexts/ThemeContext" ;
2223
2324const edgeAnimationStyle = `
2425 @keyframes dashdraw {
@@ -369,28 +370,44 @@ const getLayoutedElements = (
369370 } ;
370371} ;
371372const Legend = ( ) => {
373+ const { colorMode } = useTheme ( ) ;
372374 const types = [
373375 { type : FEAST_FCO_TYPES . featureService , label : "Feature Service" } ,
374376 { type : FEAST_FCO_TYPES . featureView , label : "Feature View" } ,
375377 { type : FEAST_FCO_TYPES . entity , label : "Entity" } ,
376378 { type : FEAST_FCO_TYPES . dataSource , label : "Data Source" } ,
377379 ] ;
378380
381+ const isDarkMode = colorMode === "dark" ;
382+ const backgroundColor = isDarkMode ? "#1D1E24" : "white" ;
383+ const borderColor = isDarkMode ? "#343741" : "#ddd" ;
384+ const textColor = isDarkMode ? "#DFE5EF" : "#333" ;
385+ const boxShadow = isDarkMode
386+ ? "0 2px 5px rgba(0,0,0,0.3)"
387+ : "0 2px 5px rgba(0,0,0,0.1)" ;
388+
379389 return (
380390 < div
381391 style = { {
382392 position : "absolute" ,
383393 left : 10 ,
384394 top : 10 ,
385- background : "white" ,
386- border : " 1px solid #ddd" ,
395+ background : backgroundColor ,
396+ border : ` 1px solid ${ borderColor } ` ,
387397 borderRadius : 5 ,
388398 padding : 10 ,
389399 zIndex : 10 ,
390- boxShadow : "0 2px 5px rgba(0,0,0,0.1)" ,
400+ boxShadow : boxShadow ,
391401 } }
392402 >
393- < div style = { { fontSize : 14 , fontWeight : 600 , marginBottom : 5 } } >
403+ < div
404+ style = { {
405+ fontSize : 14 ,
406+ fontWeight : 600 ,
407+ marginBottom : 5 ,
408+ color : textColor ,
409+ } }
410+ >
394411 Legend
395412 </ div >
396413 { types . map ( ( item ) => (
@@ -414,7 +431,7 @@ const Legend = () => {
414431 >
415432 { getNodeIcon ( item . type ) }
416433 </ div >
417- < div style = { { fontSize : 12 } } > { item . label } </ div >
434+ < div style = { { fontSize : 12 , color : textColor } } > { item . label } </ div >
418435 </ div >
419436 ) ) }
420437 </ div >
@@ -600,13 +617,45 @@ const RegistryVisualization: React.FC<RegistryVisualizationProps> = ({
600617
601618 // Filter relationships based on filterNode if provided
602619 if ( filterNode ) {
620+ const connectedNodes = new Set < string > ( ) ;
621+
622+ const filterNodeId = `${ getNodePrefix ( filterNode . type ) } -${ filterNode . name } ` ;
623+ connectedNodes . add ( filterNodeId ) ;
624+
625+ // Function to recursively find all connected nodes
626+ const findConnectedNodes = ( nodeId : string , isDownstream : boolean ) => {
627+ relationshipsToShow . forEach ( ( rel ) => {
628+ const sourceId = `${ getNodePrefix ( rel . source . type ) } -${ rel . source . name } ` ;
629+ const targetId = `${ getNodePrefix ( rel . target . type ) } -${ rel . target . name } ` ;
630+
631+ if (
632+ isDownstream &&
633+ sourceId === nodeId &&
634+ ! connectedNodes . has ( targetId )
635+ ) {
636+ connectedNodes . add ( targetId ) ;
637+ findConnectedNodes ( targetId , isDownstream ) ;
638+ }
639+
640+ if (
641+ ! isDownstream &&
642+ targetId === nodeId &&
643+ ! connectedNodes . has ( sourceId )
644+ ) {
645+ connectedNodes . add ( sourceId ) ;
646+ findConnectedNodes ( sourceId , isDownstream ) ;
647+ }
648+ } ) ;
649+ } ;
650+
651+ findConnectedNodes ( filterNodeId , true ) ;
652+
653+ findConnectedNodes ( filterNodeId , false ) ;
654+
603655 relationshipsToShow = relationshipsToShow . filter ( ( rel ) => {
604- return (
605- ( rel . source . type === filterNode . type &&
606- rel . source . name === filterNode . name ) ||
607- ( rel . target . type === filterNode . type &&
608- rel . target . name === filterNode . name )
609- ) ;
656+ const sourceId = `${ getNodePrefix ( rel . source . type ) } -${ rel . source . name } ` ;
657+ const targetId = `${ getNodePrefix ( rel . target . type ) } -${ rel . target . name } ` ;
658+ return connectedNodes . has ( sourceId ) && connectedNodes . has ( targetId ) ;
610659 } ) ;
611660 }
612661
0 commit comments