Ejemplo de zoom de reescritura de d3.js en la versión 4

Ejemplo de arrastrar y soltar

Estoy tratando de reescribir parte de este ejemplo anterior para usar en mi código, específicamente esta pieza:

function centerNode(source) {
        scale = zoomListener.scale();
        x = -source.y0;
        y = -source.x0;
        x = x * scale + viewerWidth / 2;
        y = y * scale + viewerHeight / 2;
        d3.select('g').transition()
            .duration(duration)
            .attr("transform", "translate(" + x + "," + y + ")scale(" + scale + ")");
        zoomListener.scale(scale);
        zoomListener.translate([x, y]);
    }

Sin embargo, me estoy atascando ya que el paquete v4 ha cambiado bastante. Escribí mi función zoomListener para ser

    var zoomListener = d3.zoom()
                 .scaleExtent([0.3,2])
                 .on("zoom", zoomed);

    function zoomed() {
       transform = d3.event.transform;
       console.log(d3.event);
         svg.attr("transform", transform);
    } 

function centerNode(source){
  t = transform;
  console.log(t);
  x = t.x*t.k; //I only want things to be centered vertically
  y = (t.y + -source.x0)*t.k + (viewerHeight)/2 ;
  svg.transition()
     .duration(duration)
     .attr("transform","translate(" + x + "," + y +")scale(" + t.k + ")");

  transform.scale(t.k); //DOES NOT WORK
  transform.translate([x, y]); //DOES NOT WORK

}

y sé que según el documento las cosas han cambiado y la información ya no se almacena en lo que sería mi zoomListenerNota de lanzamiento de D3 V4 en zoom Supongo que estoy confundido sobre cómo se supone que debo hacerlo con la nueva versión. Las últimas líneas de mi función centerNode no funcionan, lo que tiene como efecto que cuando centro el nodo, el zoom y la panorámica se restablecen ...

¿Cualquier sugerencia?

Respuestas a la pregunta(2)

Su respuesta a la pregunta