@@ -2,7 +2,7 @@ import React from "react";
2
2
3
3
import { drag as d3Drag } from "d3-drag" ;
4
4
import { forceLink as d3ForceLink } from "d3-force" ;
5
- import { select as d3Select , selectAll as d3SelectAll , event as d3Event } from "d3-selection" ;
5
+ import { select as d3Select , selectAll as d3SelectAll } from "d3-selection" ;
6
6
import { zoom as d3Zoom } from "d3-zoom" ;
7
7
8
8
import CONST from "./graph.const" ;
@@ -181,7 +181,10 @@ export default class Graph extends React.Component {
181
181
. on ( "end" , this . _onDragEnd ) ;
182
182
183
183
d3Select ( `#${ this . state . id } -${ CONST . GRAPH_WRAPPER_ID } ` )
184
- . selectAll ( ".node" )
184
+ . selectAll ( "g.node[id]" )
185
+ . datum ( function ( ) {
186
+ return this . id ; // The variable `this` will be equal to each of the selected `HTMLElement`s!
187
+ } )
185
188
. call ( customNodeDrag ) ;
186
189
}
187
190
@@ -218,22 +221,19 @@ export default class Graph extends React.Component {
218
221
/**
219
222
* Handles d3 'drag' event.
220
223
* {@link https://github.com/d3/d3-drag/blob/master/README.md#drag_subject|more about d3 drag}
221
- * @param {Object } ev - if not undefined it will contain event data.
222
- * @param {number } index - index of the node that is being dragged.
223
- * @param { Array.<Object> } nodeList - array of d3 nodes. This list of nodes is provided by d3, each
224
- * node contains all information that was previously fed by rd3g .
224
+ * @param {Object } d3Event - `DragEvent` contains d3 event data.
225
+ * @param {string } datum - The datum we configured inside, our d3Select call,
226
+ * currently happening inside _graphNodeDragConfig function.
227
+ * in our case the datum, will be equal to the nodeId .
225
228
* @returns {undefined }
226
229
*/
227
- _onDragMove = ( ev , index , nodeList ) => {
228
- const id = nodeList [ index ] . id ;
229
-
230
+ _onDragMove = ( d3Event , datum ) => {
230
231
if ( ! this . state . config . staticGraph ) {
231
232
// this is where d3 and react bind
232
- let draggedNode = this . state . nodes [ id ] ;
233
+ let draggedNode = this . state . nodes [ datum ] ;
233
234
234
235
draggedNode . oldX = draggedNode . x ;
235
236
draggedNode . oldY = draggedNode . y ;
236
-
237
237
draggedNode . x += d3Event . dx ;
238
238
draggedNode . y += d3Event . dy ;
239
239
@@ -302,9 +302,10 @@ export default class Graph extends React.Component {
302
302
303
303
/**
304
304
* Handler for 'zoom' event within zoom config.
305
+ * @param {Object } d3Event - `ZoomEvent` contains d3 event data
305
306
* @returns {Object } returns the transformed elements within the svg graph area.
306
307
*/
307
- _zoomed = ( ) => {
308
+ _zoomed = d3Event => {
308
309
const transform = d3Event . transform ;
309
310
310
311
d3SelectAll ( `#${ this . state . id } -${ CONST . GRAPH_CONTAINER_ID } ` ) . attr ( "transform" , transform ) ;
0 commit comments