in src/parallel/parallel.tsx [317:384]
function create_drag_beh() {
return d3.drag().on("start", function(d: string) {
me.setState({
dragging: {
col: d,
pos: me.xscale(d),
origin: me.xscale(d),
dragging: false
}
});
d3.select(me.foreground_ref.current).style("opacity", "0.35");
})
.on("drag", function(d: string) {
const eventdx = d3.event.dx;
const brushEl = d3.select(this).select("." + style.brush);
me.setState(function(prevState, _) { return {
dragging: {
col: d,
pos: Math.min(me.w, Math.max(0, prevState.dragging.pos + eventdx)),
origin: prevState.dragging.origin,
dragging: true
}
};}, function() {
// Feedback for axis deletion if dropped
if (me.state.dragging.pos < 12 || me.state.dragging.pos > me.w-12) {
brushEl.style('fill', 'red');
} else {
brushEl.style('fill', null);
}
});
var new_dimensions = Array.from(me.state.dimensions);
new_dimensions.sort(function(a, b) { return me.position(a) - me.position(b); });
if (!new_dimensions.every(function(val, idx) { return val == me.state.dimensions[idx]; })) {
me.setState({dimensions: new_dimensions});
}
me.dimensions_dom.attr("transform", function(d) { return "translate(" + me.position(d) + ")"; });
redrawAllForeignObjectsIfSafari();
})
.on("end", function(d: string) {
if (!me.state.dragging.dragging) {
// no movement, invert axis
var extent = invert_axis(d);
} else {
// reorder axes
var drag: any = d3.select(this);
if (!IS_SAFARI) {
drag = drag.transition();
}
drag.attr("transform", "translate(" + me.xscale(d) + ")");
var extents = brush_extends();
extent = extents[d];
}
// remove axis if dragged all the way left
if (me.state.dragging.pos < 12 || me.state.dragging.pos > me.w-12) {
me.remove_axis(d);
} else {
me.setState({order: Array.from(me.state.dimensions)});
}
me.update_ticks(d, extent);
// rerender
d3.select(me.foreground_ref.current).style("opacity", null);
me.setState({dragging: null});
});
}