mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-09-26 18:48:11 +08:00
* save graph selection in redux state * fix old graph brush select regressions * refactor graph brush selection to work with undo/redo * update tests to match new crossfilter spatial select API * graph selection state now in redux * remove dead code * sync graph selection with redux state; improvements to undoable machinery * fix regression in undoable * differentiate graph selection cancel from deselect action * simplify calculation * remove debugging code * fix responsive repaint bug in graph selection tool * undoable debugging and code cleanliness * undoable action filter state now merges, rather than replaces * improve comments * add debounce to undoable action filter; improve comments and debug sanity check code * comments * fix undoable bug with clear scatterplot actions * disable undoable debug flag * cleanup API and comments around statemachine * add test id attribute to lasso * add better error handling for gene fetch requests
63 lines
1.6 KiB
JavaScript
63 lines
1.6 KiB
JavaScript
// jshint esversion: 6
|
|
import * as d3 from "d3";
|
|
import styles from "./graph.css";
|
|
import Lasso from "./setupLasso";
|
|
|
|
/******************************************
|
|
*******************************************
|
|
put svg & brush in DOM
|
|
*******************************************
|
|
******************************************/
|
|
|
|
export default (
|
|
selectionToolType,
|
|
handleStartAction,
|
|
handleDragAction,
|
|
handleEndAction,
|
|
handleCancelAction,
|
|
responsive,
|
|
graphPaddingRight
|
|
) => {
|
|
const svg = d3
|
|
.select("#graphAttachPoint")
|
|
.append("svg")
|
|
.attr("data-testid", "layout-overlay")
|
|
.attr("width", responsive.width - graphPaddingRight)
|
|
.attr("height", responsive.height)
|
|
.attr("class", `${styles.graphSVG}`);
|
|
|
|
if (selectionToolType === "brush") {
|
|
const brush = d3
|
|
.brush()
|
|
.extent([
|
|
[0, 0],
|
|
[responsive.width - graphPaddingRight, responsive.height]
|
|
])
|
|
.on("start", handleStartAction)
|
|
.on("brush", handleDragAction)
|
|
// FYI, brush doesn't generate cancel
|
|
.on("end", handleEndAction);
|
|
|
|
const brushContainer = svg
|
|
.append("g")
|
|
.attr("class", "graph_brush")
|
|
.call(brush);
|
|
|
|
return { svg, container: brushContainer, tool: brush };
|
|
}
|
|
|
|
if (selectionToolType === "lasso") {
|
|
const lasso = Lasso()
|
|
.on("end", handleEndAction)
|
|
// FYI, Lasso doesn't generate drag
|
|
.on("start", handleStartAction)
|
|
.on("cancel", handleCancelAction);
|
|
|
|
const lassoContainer = svg.call(lasso);
|
|
|
|
return { svg, container: lassoContainer, tool: lasso };
|
|
}
|
|
|
|
throw new Error("unknown graph selection tool");
|
|
};
|