From 876ceb4d8b9449947c9a7608a1616de4d9ca1818 Mon Sep 17 00:00:00 2001
From: Colin Megill
Date: Wed, 21 Apr 2021 16:50:29 -0700
Subject: [PATCH] Create / edit geneset description (#2139)
* geneset description add
* edit geneset description
* default state for desc
* remove log
* naming, todo
* check for both dup name and desc
* fixes
* do not store gene set modal state in history stack
* Update createGenesetDialogue.js
* Update editGenesetNameDialogue.js
Co-authored-by: bkmartinjr
---
client/__tests__/reducers/genesets.test.js | 2 +-
client/src/components/annoDialog.js | 2 +
.../src/components/geneExpression/geneSet.js | 20 ++-
client/src/components/geneExpression/index.js | 1 +
.../menus/createGenesetDialogue.js | 148 ++++++++++++------
.../menus/editGenesetNameDialogue.js | 48 ++++--
.../geneExpression/menus/genesetMenus.js | 2 +-
client/src/reducers/genesets.js | 15 +-
client/src/reducers/index.js | 1 -
9 files changed, 170 insertions(+), 69 deletions(-)
diff --git a/client/__tests__/reducers/genesets.test.js b/client/__tests__/reducers/genesets.test.js
index 7df76c6c..ad377f6c 100644
--- a/client/__tests__/reducers/genesets.test.js
+++ b/client/__tests__/reducers/genesets.test.js
@@ -276,7 +276,7 @@ describe("geneset: update", () => {
},
}
);
- }).toThrow("update specified existing name");
+ }).toThrow("update specified existing name and description");
});
});
diff --git a/client/src/components/annoDialog.js b/client/src/components/annoDialog.js
index e3842611..8064b146 100644
--- a/client/src/components/annoDialog.js
+++ b/client/src/components/annoDialog.js
@@ -48,6 +48,7 @@ class AnnoDialog extends React.PureComponent {
>
{errorMessage}
+ {/* we might rename, secondary button and secondary input are not related */}
{secondaryInstructions && (
{secondaryInstructions}
@@ -62,6 +63,7 @@ class AnnoDialog extends React.PureComponent {
Cancel
+ {/* we might rename, secondary button and secondary input are not related */}
{handleSecondaryButtonSubmit && secondaryButtonText ? (
-
+
{isOpen && !genesetIsEmpty && (
-
-
+
)}
{isOpen && genesetIsEmpty && (
@@ -223,7 +228,10 @@ class GeneSet extends React.Component {
setGenes={setGenes}
/>
))}
-
+
);
}
diff --git a/client/src/components/geneExpression/index.js b/client/src/components/geneExpression/index.js
index 59d7f400..666d32ad 100644
--- a/client/src/components/geneExpression/index.js
+++ b/client/src/components/geneExpression/index.js
@@ -23,6 +23,7 @@ class GeneExpression extends React.Component {
setGenes={Array.from(geneset.genes.keys())}
setGenesWithDescriptions={geneset.genes}
setName={name}
+ genesetDescription={geneset.genesetDescription}
/>
);
}
diff --git a/client/src/components/geneExpression/menus/createGenesetDialogue.js b/client/src/components/geneExpression/menus/createGenesetDialogue.js
index beda0fba..5d7b6fca 100644
--- a/client/src/components/geneExpression/menus/createGenesetDialogue.js
+++ b/client/src/components/geneExpression/menus/createGenesetDialogue.js
@@ -2,7 +2,8 @@ import pull from "lodash.pull";
import uniq from "lodash.uniq";
import React from "react";
import { connect } from "react-redux";
-import AnnoDialog from "../../annoDialog";
+import { Button, Dialog, Classes, Colors } from "@blueprintjs/core";
+import { Tooltip2 } from "@blueprintjs/popover2";
import LabelInput from "../../labelInput";
import actions from "../../../actions";
@@ -20,6 +21,7 @@ class CreateGenesetDialogue extends React.PureComponent {
this.state = {
genesetName: "",
genesToPopulateGeneset: "",
+ genesetDescription: "",
};
}
@@ -28,6 +30,7 @@ class CreateGenesetDialogue extends React.PureComponent {
this.setState({
genesetName: "",
genesToPopulateGeneset: "",
+ genesetDescription: "",
});
dispatch({
type: "geneset: disable create geneset mode",
@@ -37,12 +40,16 @@ class CreateGenesetDialogue extends React.PureComponent {
createGeneset = (e) => {
const { dispatch } = this.props;
- const { genesetName, genesToPopulateGeneset } = this.state;
+ const {
+ genesetName,
+ genesToPopulateGeneset,
+ genesetDescription,
+ } = this.state;
dispatch({
type: "geneset: create",
genesetName,
- genesetDescription: "",
+ genesetDescription,
});
if (genesToPopulateGeneset) {
const genesTmpHardcodedFormat = [];
@@ -82,10 +89,14 @@ class CreateGenesetDialogue extends React.PureComponent {
this.setState({ genesToPopulateGeneset: e });
};
+ handleDescriptionInputChange = (e) => {
+ this.setState({ genesetDescription: e });
+ };
+
instruction = (genesetName, genesets) => {
return genesets.has(genesetName)
- ? "Geneset name must be unique."
- : "New, unique geneset name";
+ ? "Gene set name must be unique."
+ : "New, unique gene set name";
};
validate = (genesetName, genesets) => {
@@ -98,47 +109,94 @@ class CreateGenesetDialogue extends React.PureComponent {
return (
<>
-
- }
- secondaryInstructions="Optionally add a list of comma separated genes to populate the gene set"
- secondaryInput={
-
- }
- handleSubmit={this.createGeneset}
- handleCancel={this.disableCreateGenesetMode}
- />
+ isOpen={genesetsUI.createGenesetModeActive}
+ onClose={this.disableCreateGenesetMode}
+ >
+
+
>
);
}
diff --git a/client/src/components/geneExpression/menus/editGenesetNameDialogue.js b/client/src/components/geneExpression/menus/editGenesetNameDialogue.js
index c4dc321d..276492d4 100644
--- a/client/src/components/geneExpression/menus/editGenesetNameDialogue.js
+++ b/client/src/components/geneExpression/menus/editGenesetNameDialogue.js
@@ -14,14 +14,16 @@ class RenameGeneset extends React.PureComponent {
constructor(props) {
super(props);
this.state = {
- genesetName: props.parentGeneset,
+ newGenesetName: props.parentGeneset,
+ newGenesetDescription: props.parentGenesetDescription,
};
}
disableEditGenesetNameMode = (e) => {
const { dispatch } = this.props;
this.setState({
- genesetName: "",
+ newGenesetName: "",
+ newGenesetDescription: "",
});
dispatch({
type: "geneset: disable rename geneset mode",
@@ -31,12 +33,15 @@ class RenameGeneset extends React.PureComponent {
renameGeneset = (e) => {
const { dispatch, genesetsUI } = this.props;
- const { genesetName } = this.state;
+ const { newGenesetName, newGenesetDescription } = this.state;
dispatch({
type: "geneset: update",
genesetName: genesetsUI.isEditingGenesetName,
- update: { genesetName },
+ update: {
+ genesetName: newGenesetName,
+ genesetDescription: newGenesetDescription,
+ },
});
dispatch({
type: "geneset: disable rename geneset mode",
@@ -49,12 +54,16 @@ class RenameGeneset extends React.PureComponent {
};
handleChange = (e) => {
- this.setState({ genesetName: e });
+ this.setState({ newGenesetName: e });
+ };
+
+ handleChangeDescription = (e) => {
+ this.setState({ newGenesetDescription: e });
};
render() {
- const { genesetName } = this.state;
- const { genesetsUI, parentGeneset } = this.props;
+ const { newGenesetName, newGenesetDescription } = this.state;
+ const { genesetsUI, parentGeneset, parentGenesetDescription } = this.props;
return (
<>
@@ -66,15 +75,19 @@ class RenameGeneset extends React.PureComponent {
primaryButtonProps={{
"data-testid": `${genesetsUI.isEditingGenesetName}:submit-geneset`,
}}
- title="Rename gene set"
+ title="Edit gene set name and description"
instruction={`Rename ${genesetsUI.isEditingGenesetName}`}
cancelTooltipContent="Close this dialog without renaming the gene set."
- primaryButtonText="Rename gene set"
- text={genesetName}
- validationError={genesetsUI.isEditingGenesetName === genesetName}
+ primaryButtonText="Edit gene set name and description"
+ text={newGenesetName}
+ secondaryText={newGenesetDescription}
+ validationError={
+ genesetsUI.isEditingGenesetName === newGenesetName &&
+ parentGenesetDescription === newGenesetDescription
+ }
annoInput={
+ }
+ secondaryInstructions="Edit description"
+ secondaryInput={
+
}
handleSubmit={this.renameGeneset}
diff --git a/client/src/components/geneExpression/menus/genesetMenus.js b/client/src/components/geneExpression/menus/genesetMenus.js
index 7f48948d..129098d6 100644
--- a/client/src/components/geneExpression/menus/genesetMenus.js
+++ b/client/src/components/geneExpression/menus/genesetMenus.js
@@ -82,7 +82,7 @@ class GenesetMenus extends React.PureComponent {
data-testclass="activateEditGenesetNameMode"
data-testid={`${geneset}:edit-genesetName-mode`}
onClick={this.activateEditGenesetNameMode}
- text="Edit gene set name"
+ text="Edit gene set name and description"
/>