From ed66ae6e4a1371ce9aaed59fccaa12dc832d89ee Mon Sep 17 00:00:00 2001 From: Colin Megill Date: Fri, 26 Oct 2018 19:21:39 -0400 Subject: [PATCH] tooltips, copy, scatterplot tray (#383) * tooltips, copy, scatterplot tray * reset interface * copy --- client/src/actions/index.js | 29 +++-- .../components/brushableHistogram/index.js | 16 +-- client/src/components/categorical/category.js | 16 +-- .../geneExpression/cellSetButtons.js | 15 ++- .../geneExpression/expressionButtons.js | 46 ++++--- client/src/components/geneExpression/index.js | 18 +-- client/src/components/graph/graph.js | 118 ++++++++++-------- .../src/components/scatterplot/scatterplot.js | 9 +- client/src/globals.js | 2 +- client/src/reducers/controls.js | 15 +++ 10 files changed, 178 insertions(+), 106 deletions(-) diff --git a/client/src/actions/index.js b/client/src/actions/index.js index 30725123..f82b7e6e 100644 --- a/client/src/actions/index.js +++ b/client/src/actions/index.js @@ -115,12 +115,6 @@ const regraph = () => (dispatch, getState) => { }); }; -const resetGraph = () => (dispatch, getState) => - dispatch({ - type: "reset World to eq Universe", - universe: getState().controls.universe - }); - /* Fetch expression vectors for each gene in genes. This is NOT an action function, but rather a helper to be called from an action helper that @@ -302,9 +296,30 @@ const requestDifferentialExpression = (set1, set2, num_genes = 10) => async ( } }; +const resetInterface = () => (dispatch, getState) => { + const { universe } = getState().controls; + + dispatch({ + type: "clear all user defined genes" + }); + dispatch({ + type: "clear differential expression" + }); + dispatch({ + type: "reset colorscale" + }); + dispatch({ + type: "clear scatterplot" + }); + dispatch({ + type: "reset World to eq Universe", + universe + }); +}; + export default { regraph, - resetGraph, + resetInterface, requestSingleGeneExpressionCountsForColoringPOST, requestGeneExpressionCountsPOST, requestDifferentialExpression, diff --git a/client/src/components/brushableHistogram/index.js b/client/src/components/brushableHistogram/index.js index 9aed42af..25672e6b 100644 --- a/client/src/components/brushableHistogram/index.js +++ b/client/src/components/brushableHistogram/index.js @@ -6,7 +6,7 @@ https://bl.ocks.org/SpaceActuary/2f004899ea1b2bd78d6f1dbb2febf771 // jshint esversion: 6 import React from "react"; import _ from "lodash"; -import { Button, ButtonGroup } from "@blueprintjs/core"; +import { Button, ButtonGroup, Tooltip } from "@blueprintjs/core"; import { connect } from "react-redux"; import * as d3 from "d3"; import memoize from "memoize-one"; @@ -283,12 +283,14 @@ class HistogramBrush extends React.Component { remove ) : null} - - + ); } } diff --git a/client/src/components/geneExpression/expressionButtons.js b/client/src/components/geneExpression/expressionButtons.js index 575c66fd..60045b69 100644 --- a/client/src/components/geneExpression/expressionButtons.js +++ b/client/src/components/geneExpression/expressionButtons.js @@ -1,7 +1,7 @@ // jshint esversion: 6 import React from "react"; import _ from "lodash"; -import { Button } from "@blueprintjs/core"; +import { Button, AnchorButton, Tooltip } from "@blueprintjs/core"; import { connect } from "react-redux"; import * as globals from "../../globals"; import actions from "../../actions"; @@ -60,27 +60,37 @@ class Expression extends React.Component { {!differential.diffExp ? ( - + + Compute Differential Expression + + ) : null} {differential.diffExp ? ( - + + ) : null} ); diff --git a/client/src/components/geneExpression/index.js b/client/src/components/geneExpression/index.js index a543dc0a..03f7c113 100644 --- a/client/src/components/geneExpression/index.js +++ b/client/src/components/geneExpression/index.js @@ -5,6 +5,7 @@ import React from "react"; import _ from "lodash"; import * as d3 from "d3"; import { connect } from "react-redux"; +import { Button, Tooltip } from "@blueprintjs/core"; import HistogramBrush from "../brushableHistogram"; import * as globals from "../../globals"; import actions from "../../actions"; @@ -85,7 +86,7 @@ class GeneExpression extends React.Component { margin: 0 })} > - Custom genes + Selected Genes

- + + {world && userDefinedGenes.length > 0 ? _.map(userDefinedGenes, (geneName, index) => { diff --git a/client/src/components/graph/graph.js b/client/src/components/graph/graph.js index 1593bddf..2dd0d034 100644 --- a/client/src/components/graph/graph.js +++ b/client/src/components/graph/graph.js @@ -5,7 +5,7 @@ import * as d3 from "d3"; import { connect } from "react-redux"; import mat4 from "gl-mat4"; import _regl from "regl"; -import { Button } from "@blueprintjs/core"; +import { Button, AnchorButton, Tooltip } from "@blueprintjs/core"; import { worldEqUniverse } from "../../util/stateManager/world"; import setupSVGandBrushElements from "./setupSVGandBrush"; @@ -327,8 +327,13 @@ class Graph extends React.Component { }); } + resetInterface() { + const { dispatch } = this.props; + dispatch(actions.resetInterface()); + } + render() { - const { dispatch, responsive, world, universe, crossfilter } = this.props; + const { dispatch, responsive, crossfilter } = this.props; const { mode } = this.state; return (
@@ -347,56 +352,69 @@ class Graph extends React.Component { alignItems: "baseline" }} > - - + + reset + +
-
@@ -408,9 +426,7 @@ class Graph extends React.Component { zIndex: -9999, position: "fixed", right: this.graphPaddingRight, - bottom: this.graphPaddingBottom, - borderLeft: "2px solid rgb(233,233,233)", - borderBottom: "2px solid rgb(233,233,233)" + bottom: this.graphPaddingBottom }} >
diff --git a/client/src/globals.js b/client/src/globals.js index 189f7880..7f19c851 100644 --- a/client/src/globals.js +++ b/client/src/globals.js @@ -78,7 +78,7 @@ export const maxControlsWidth = 800; export const graphMargin = { top: 20, right: 10, bottom: 30, left: 40 }; export const graphWidth = 700; export const graphHeight = 700; -export const scatterplotPaddingLeft = 14; +export const scatterplotMarginLeft = 25; export const leftSidebarWidth = 365; export const leftSidebarSectionHeading = { diff --git a/client/src/reducers/controls.js b/client/src/reducers/controls.js index 0d60fe8d..e7b36df0 100644 --- a/client/src/reducers/controls.js +++ b/client/src/reducers/controls.js @@ -330,6 +330,21 @@ const Controls = ( userDefinedGenes: newUserDefinedGenes }; } + case "clear all user defined genes": { + const { userDefinedGenes, dimensionMap } = state; + + _.forEach(userDefinedGenes, gene => { + const dimension = dimensionMap[userDefinedDimensionName(gene)]; + dimension.dispose(); + delete dimensionMap[userDefinedDimensionName(gene)]; + }); + + return { + ...state, + dimensionMap, + userDefinedGenes: [] + }; + } case "reset colorscale": { const { world } = state; const colorName = new Array(world.nObs).fill(globals.defaultCellColor);