edit geneset

This commit is contained in:
Colin Megill
2021-02-11 00:23:11 -08:00
parent 9170653296
commit f5e13d0a71
5 changed files with 130 additions and 10 deletions
@@ -6,6 +6,7 @@ import { Button } from "@blueprintjs/core";
import GeneSet from "./geneSet"; import GeneSet from "./geneSet";
import CreateGenesetDialogue from "./menus/createGenesetDialogue"; import CreateGenesetDialogue from "./menus/createGenesetDialogue";
import EditGenesetNameDialogue from "./menus/editGenesetNameDialogue";
@connect((state) => { @connect((state) => {
return { return {
@@ -67,6 +68,7 @@ class GeneExpression extends React.Component {
</div> </div>
) : null} ) : null}
<CreateGenesetDialogue /> <CreateGenesetDialogue />
<EditGenesetNameDialogue />
</div> </div>
<div>{this.renderDiffexpGeneSets()}</div> <div>{this.renderDiffexpGeneSets()}</div>
<div>{this.renderGeneSets()}</div> <div>{this.renderGeneSets()}</div>
@@ -77,15 +77,16 @@ class CreateGenesetDialogue extends React.PureComponent {
<> <>
<AnnoDialog <AnnoDialog
isActive={genesetsUI.createGenesetModeActive} isActive={genesetsUI.createGenesetModeActive}
inputProps={{ "data-testid": `${metadataField}:create-label-dialog` }} inputProps={{
primaryButtonProps={{ "data-testid": `${metadataField}:create-geneset-dialog`,
"data-testid": `${metadataField}:submit-label`,
}} }}
title="Create new gene set" primaryButtonProps={{
instruction="Give your gene set a name" /* todo genesets this.instruction(genesetName) */ "data-testid": `${metadataField}:submit-geneset`,
cancelTooltipContent="Close this dialog without creating a gene set." }}
primaryButtonText="Create gene set" title="Edit gene set name"
handleSecondaryButtonSubmit={this.addLabelAndAssignCells} instruction="Type a new name for your gene set" /* todo genesets this.instruction(genesetName) */
cancelTooltipContent="Close this dialog without editing the gene set."
primaryButtonText="Edit gene set same"
text={genesetName} text={genesetName}
validationError={false} validationError={false}
annoInput={ annoInput={
@@ -97,7 +98,7 @@ class CreateGenesetDialogue extends React.PureComponent {
intent: "none", intent: "none",
autoFocus: true, autoFocus: true,
}} }}
newLabelMessage="New gene set" newLabelMessage="Edit gene set name"
/> />
} }
secondaryInstructions="Optionally add a list of comma separated genes to populate the gene set" secondaryInstructions="Optionally add a list of comma separated genes to populate the gene set"
@@ -0,0 +1,104 @@
import React from "react";
import { connect } from "react-redux";
import AnnoDialog from "../../categorical/annoDialog";
import LabelInput from "../../categorical/labelInput";
// import LabelInput from "../labelInput";
// import { genesetPrompt, isGenesetErroneous } from "../genesetUtil";
@connect((state) => ({
annotations: state.annotations,
schema: state.annoMatrix?.schema,
ontology: state.ontology,
obsCrossfilter: state.obsCrossfilter,
genesetsUI: state.genesetsUI,
}))
class RenameGeneset extends React.PureComponent {
constructor(props) {
super(props);
this.state = {
genesetName: "",
};
}
disableEditGenesetNameMode = (e) => {
const { dispatch } = this.props;
this.setState({
genesetName: "",
});
dispatch({
type: "geneset: disable rename geneset mode",
});
if (e) e.preventDefault();
};
renameGeneset = (e) => {
const { dispatch, genesetsUI } = this.props;
const { genesetName } = this.state;
dispatch({
type: "geneset: rename",
name: genesetsUI.isEditingGenesetName,
newName: genesetName,
});
dispatch({
type: "geneset: disable rename geneset mode",
});
e.preventDefault();
};
genesetNameError = () => {
/* todo genesets validation */
return false;
};
handleChange = (e) => {
this.setState({ genesetName: e });
};
instruction = () => {
return "New, unique geneset name";
/* todo genesets */
// return genesetPrompt(this.genesetNameError(geneset), "New, unique geneset", ":");
};
render() {
const { genesetName } = this.state;
const { genesetsUI } = this.props;
return (
<>
<AnnoDialog
isActive={genesetsUI.isEditingGenesetName}
inputProps={{
"data-testid": `${genesetsUI.isEditingGenesetName}:rename-geneset-dialog`,
}}
primaryButtonProps={{
"data-testid": `${genesetsUI.isEditingGenesetName}:submit-geneset`,
}}
title="Rename gene set"
instruction={`Rename ${genesetsUI.isEditingGenesetName}`} /* todo genesets this.instruction(genesetName) */
cancelTooltipContent="Close this dialog without renaming the gene set."
primaryButtonText="Rename gene set"
text={genesetName}
validationError={false}
annoInput={
<LabelInput
onChange={this.handleChange}
inputProps={{
"data-testid": "rename-geneset-modal",
leftIcon: "manually-entered-data",
intent: "none",
autoFocus: true,
}}
newLabelMessage="Rename gene set"
/>
}
handleSubmit={this.renameGeneset}
handleCancel={this.disableEditGenesetNameMode}
/>
</>
);
}
}
export default RenameGeneset;
@@ -37,7 +37,7 @@ class GenesetMenus extends React.PureComponent {
const { dispatch, geneset } = this.props; const { dispatch, geneset } = this.props;
dispatch({ dispatch({
type: "geneset: activate geneset edit mode", type: "geneset: activate rename geneset mode",
data: geneset, data: geneset,
}); });
}; };
+13
View File
@@ -28,6 +28,19 @@ const GeneSetsUI = (
isAddingGenesToGeneset: action.geneset, isAddingGenesToGeneset: action.geneset,
}; };
} }
case "geneset: activate rename geneset mode": {
console.log("reducer", action);
return {
...state,
isEditingGenesetName: action.data,
};
}
case "geneset: disable rename geneset mode": {
return {
...state,
isEditingGenesetName: null,
};
}
case "geneset: disable add new genes mode": { case "geneset: disable add new genes mode": {
return { return {
...state, ...state,