prepopulate geneset with genes from modal

This commit is contained in:
Colin Megill
2021-01-28 15:07:31 -08:00
parent 84fcbb8652
commit fec1736820
6 changed files with 55 additions and 15 deletions
@@ -18,6 +18,8 @@ class AnnoDialog extends React.PureComponent {
validationError, validationError,
annoSelect, annoSelect,
annoInput, annoInput,
secondaryInstructions,
secondaryInput,
handleCancel, handleCancel,
handleSubmit, handleSubmit,
primaryButtonText, primaryButtonText,
@@ -46,6 +48,10 @@ class AnnoDialog extends React.PureComponent {
> >
{errorMessage} {errorMessage}
</p> </p>
<p style={{ marginTop: secondaryInstructions ? 20 : 0 }}>
{secondaryInstructions || null}
</p>
{secondaryInput || null}
</div> </div>
{annoSelect || null} {annoSelect || null}
</div> </div>
+12 -9
View File
@@ -74,6 +74,7 @@ class Gene extends React.Component {
isColorAccessor, isColorAccessor,
isScatterplotXXaccessor, isScatterplotXXaccessor,
isScatterplotYYaccessor, isScatterplotYYaccessor,
isDiffexp,
} = this.props; } = this.props;
const { geneIsExpanded } = this.state; const { geneIsExpanded } = this.state;
return ( return (
@@ -127,15 +128,17 @@ class Gene extends React.Component {
) : null} ) : null}
</span> </span>
<span> <span>
<AnchorButton {!isDiffexp ? (
minimal <AnchorButton
small minimal
data-testid={`delete-from-geneset-${gene}`} small
onClick={this.handleDeleteGeneFromSet} data-testid={`delete-from-geneset-${gene}`}
intent="danger" onClick={this.handleDeleteGeneFromSet}
style={{ fontWeight: 700, marginRight: 2 }} intent="danger"
icon={<Icon icon="trash" iconSize={10} />} style={{ fontWeight: 700, marginRight: 2 }}
/> icon={<Icon icon="trash" iconSize={10} />}
/>
) : null}
<AnchorButton <AnchorButton
minimal minimal
small small
@@ -102,7 +102,7 @@ class GeneSet extends React.Component {
}; };
render() { render() {
const { setName, setGenes } = this.props; const { setName, setGenes, isDiffexp } = this.props;
const { isOpen, toggleSummaryHisto } = this.state; const { isOpen, toggleSummaryHisto } = this.state;
return ( return (
<div style={{ marginBottom: 3 }}> <div style={{ marginBottom: 3 }}>
@@ -181,7 +181,14 @@ class GeneSet extends React.Component {
{isOpen && !toggleSummaryHisto {isOpen && !toggleSummaryHisto
? _.map(setGenes, (gene) => { ? _.map(setGenes, (gene) => {
return <Gene key={gene} gene={gene} geneset={setName} />; return (
<Gene
key={gene}
gene={gene}
geneset={setName}
isDiffexp={isDiffexp}
/>
);
}) })
: null} : null}
</div> </div>
@@ -39,6 +39,7 @@ class GeneExpression extends React.Component {
<GeneSet <GeneSet
key="Temp DiffExp Set" key="Temp DiffExp Set"
setGenes={setGenes} setGenes={setGenes}
isDiffexp
setName="Temp DiffExp Set" setName="Temp DiffExp Set"
/> />
) : null; ) : null;
@@ -1,4 +1,5 @@
import React from "react"; import React from "react";
import _ from "lodash";
import { connect } from "react-redux"; import { connect } from "react-redux";
import AnnoDialog from "../../categorical/annoDialog"; import AnnoDialog from "../../categorical/annoDialog";
import LabelInput from "../../categorical/labelInput"; import LabelInput from "../../categorical/labelInput";
@@ -27,7 +28,7 @@ class AddGeneToGenesetDialogue extends React.PureComponent {
dispatch({ dispatch({
type: "geneset: add genes", type: "geneset: add genes",
name: geneset, name: geneset,
genes: genesToAdd.split(","), genes: _.pull(_.uniq(genesToAdd.split(/[ ,]+/)), ""),
}); });
dispatch({ dispatch({
type: "geneset: disable add new genes mode", type: "geneset: disable add new genes mode",
@@ -1,3 +1,4 @@
import _ from "lodash";
import React from "react"; import React from "react";
import { connect } from "react-redux"; import { connect } from "react-redux";
import AnnoDialog from "../../categorical/annoDialog"; import AnnoDialog from "../../categorical/annoDialog";
@@ -24,6 +25,7 @@ class CreateGenesetDialogue extends React.PureComponent {
const { dispatch } = this.props; const { dispatch } = this.props;
this.setState({ this.setState({
genesetName: "", genesetName: "",
genesToPopulateGeneset: "",
}); });
dispatch({ dispatch({
type: "geneset: disable create geneset mode", type: "geneset: disable create geneset mode",
@@ -33,9 +35,13 @@ class CreateGenesetDialogue extends React.PureComponent {
createGeneset = (e) => { createGeneset = (e) => {
const { dispatch } = this.props; const { dispatch } = this.props;
const { genesetName } = this.state; const { genesetName, genesToPopulateGeneset } = this.state;
dispatch({ type: "geneset: create", name: genesetName }); dispatch({
type: "geneset: create",
name: genesetName,
genes: _.pull(_.uniq(genesToPopulateGeneset.split(/[ ,]+/)), "") || null,
});
dispatch({ dispatch({
type: "geneset: disable create geneset mode", type: "geneset: disable create geneset mode",
}); });
@@ -51,6 +57,10 @@ class CreateGenesetDialogue extends React.PureComponent {
this.setState({ genesetName: e }); this.setState({ genesetName: e });
}; };
handleGenesetInputChange = (e) => {
this.setState({ genesToPopulateGeneset: e });
};
instruction = () => { instruction = () => {
return "New, unique geneset"; return "New, unique geneset";
/* todo genesets */ /* todo genesets */
@@ -80,7 +90,7 @@ class CreateGenesetDialogue extends React.PureComponent {
<LabelInput <LabelInput
onChange={this.handleChange} onChange={this.handleChange}
inputProps={{ inputProps={{
"data-testid": "add-genes", "data-testid": "create-geneset-modal",
leftIcon: "manually-entered-data", leftIcon: "manually-entered-data",
intent: "none", intent: "none",
autoFocus: true, autoFocus: true,
@@ -88,6 +98,18 @@ class CreateGenesetDialogue extends React.PureComponent {
newLabelMessage="New geneset" newLabelMessage="New geneset"
/> />
} }
secondaryInstructions="Optionally add a list of comma separated genes to populate the geneset"
secondaryInput={
<LabelInput
onChange={this.handleGenesetInputChange}
inputProps={{
"data-testid": "add-genes",
intent: "none",
autoFocus: false,
}}
newLabelMessage="populate geneset with genes"
/>
}
handleSubmit={this.createGeneset} handleSubmit={this.createGeneset}
handleCancel={this.disableCreateGenesetMode} handleCancel={this.disableCreateGenesetMode}
/> />