@@ -85,6 +85,7 @@ class Lineage extends React.Component<LineageProps, LineageState> {
8585 const nodeName = this . props . match . params . nodeName
8686 const namespace = this . props . match . params . namespace
8787 const nodeType = this . props . match . params . nodeType
88+
8889 if ( nodeName && namespace && nodeType ) {
8990 const nodeId = generateNodeId (
9091 this . props . match . params . nodeType . toUpperCase ( ) as JobOrDataset ,
@@ -114,6 +115,7 @@ class Lineage extends React.Component<LineageProps, LineageState> {
114115 this . props . match . params . namespace ,
115116 this . props . match . params . nodeName
116117 )
118+ this . getEdges ( )
117119 }
118120 }
119121
@@ -129,6 +131,48 @@ class Lineage extends React.Component<LineageProps, LineageState> {
129131 } )
130132 }
131133
134+ getEdges = ( ) => {
135+ const selectedPaths = this . getSelectedPaths ( )
136+
137+ return g ?. edges ( ) . map ( e => {
138+ const isSelected = selectedPaths . some ( ( r : any ) => e . v === r [ 0 ] && e . w === r [ 1 ] )
139+ return Object . assign ( g . edge ( e ) , { isSelected : isSelected } )
140+ } )
141+ }
142+
143+ getSelectedPaths = ( ) => {
144+ const paths = [ ] as Array < [ string , string ] >
145+
146+ const getSuccessors = ( node : string ) => {
147+ const successors = g ?. successors ( node )
148+ if ( successors ?. length ) {
149+ for ( let i = 0 ; i < node . length - 1 ; i ++ ) {
150+ if ( successors [ i ] ) {
151+ paths . push ( [ node , ( successors [ i ] as unknown ) as string ] )
152+ getSuccessors ( ( successors [ i ] as unknown ) as string )
153+ }
154+ }
155+ }
156+ }
157+
158+ const getPredecessors = ( node : string ) => {
159+ const predecessors = g ?. predecessors ( node )
160+ if ( predecessors ?. length ) {
161+ for ( let i = 0 ; i < node . length - 1 ; i ++ ) {
162+ if ( predecessors [ i ] ) {
163+ paths . push ( [ ( predecessors [ i ] as unknown ) as string , node ] )
164+ getPredecessors ( ( predecessors [ i ] as unknown ) as string )
165+ }
166+ }
167+ }
168+ }
169+
170+ getSuccessors ( this . props . selectedNode )
171+ getPredecessors ( this . props . selectedNode )
172+
173+ return paths
174+ }
175+
132176 buildGraphAll = ( graph : LineageNode [ ] ) => {
133177 // nodes
134178 for ( let i = 0 ; i < graph . length ; i ++ ) {
@@ -150,14 +194,15 @@ class Lineage extends React.Component<LineageProps, LineageState> {
150194
151195 this . setState ( {
152196 graph : g ,
153- edges : g . edges ( ) . map ( e => g . edge ( e ) ) ,
197+ edges : this . getEdges ( ) ,
154198 nodes : g . nodes ( ) . map ( v => g . node ( v ) )
155199 } )
156200 }
157201
158202 render ( ) {
159203 const { classes } = this . props
160204 const i18next = require ( 'i18next' )
205+
161206 return (
162207 < Box className = { classes . lineageContainer } >
163208 { this . props . selectedNode === null && (
@@ -227,9 +272,6 @@ class Lineage extends React.Component<LineageProps, LineageState> {
227272 < Node
228273 key = { node . data . name }
229274 node = { node }
230- edgeEnds = { this . state . edges . map (
231- edge => edge . points [ edge . points . length - 1 ]
232- ) }
233275 selectedNode = { this . props . selectedNode }
234276 />
235277 ) ) }
@@ -262,9 +304,4 @@ const mapDispatchToProps = (dispatch: Redux.Dispatch) =>
262304 dispatch
263305 )
264306
265- export default withStyles ( styles ) (
266- connect (
267- mapStateToProps ,
268- mapDispatchToProps
269- ) ( withRouter ( Lineage ) )
270- )
307+ export default withStyles ( styles ) ( connect ( mapStateToProps , mapDispatchToProps ) ( withRouter ( Lineage ) ) )
0 commit comments