mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-09-26 03:18:11 +08:00
* update to webpack 5 * update babel * update eslint * update cheerio * update npm min to v7 * revert engine change * generate package lock with npm v6 (lockfileVersion 1) * add region to test setup * update blueprint popover2 * tabindex changes due to blueprint popover2 revision * update snapshots * update lodash and pako * fix typo * fix lodash refactoring * more lodash refactoring * update babel and blueprintjs * update jest support packages * update puppeteer * update regl * update react-icons and react-helmet * update react and react-dom
148 lines
3.9 KiB
JavaScript
148 lines
3.9 KiB
JavaScript
import pull from "lodash.pull";
|
|
import uniq from "lodash.uniq";
|
|
import React from "react";
|
|
import { connect } from "react-redux";
|
|
import AnnoDialog from "../../annoDialog";
|
|
import LabelInput from "../../labelInput";
|
|
import actions from "../../../actions";
|
|
|
|
@connect((state) => ({
|
|
annotations: state.annotations,
|
|
schema: state.annoMatrix?.schema,
|
|
ontology: state.ontology,
|
|
obsCrossfilter: state.obsCrossfilter,
|
|
genesets: state.genesets.genesets,
|
|
genesetsUI: state.genesetsUI,
|
|
}))
|
|
class CreateGenesetDialogue extends React.PureComponent {
|
|
constructor(props) {
|
|
super(props);
|
|
this.state = {
|
|
genesetName: "",
|
|
genesToPopulateGeneset: "",
|
|
};
|
|
}
|
|
|
|
disableCreateGenesetMode = (e) => {
|
|
const { dispatch } = this.props;
|
|
this.setState({
|
|
genesetName: "",
|
|
genesToPopulateGeneset: "",
|
|
});
|
|
dispatch({
|
|
type: "geneset: disable create geneset mode",
|
|
});
|
|
if (e) e.preventDefault();
|
|
};
|
|
|
|
createGeneset = (e) => {
|
|
const { dispatch } = this.props;
|
|
const { genesetName, genesToPopulateGeneset } = this.state;
|
|
|
|
dispatch({
|
|
type: "geneset: create",
|
|
genesetName,
|
|
genesetDescription: "",
|
|
});
|
|
if (genesToPopulateGeneset) {
|
|
const genesTmpHardcodedFormat = [];
|
|
|
|
const genesArrayFromString = pull(
|
|
uniq(genesToPopulateGeneset.split(/[ ,]+/)),
|
|
""
|
|
);
|
|
|
|
genesArrayFromString.forEach((_gene) => {
|
|
genesTmpHardcodedFormat.push({
|
|
geneSymbol: _gene,
|
|
});
|
|
});
|
|
|
|
dispatch(actions.genesetAddGenes(genesetName, genesTmpHardcodedFormat));
|
|
}
|
|
dispatch({
|
|
type: "geneset: disable create geneset mode",
|
|
});
|
|
this.setState({
|
|
genesetName: "",
|
|
genesToPopulateGeneset: "",
|
|
});
|
|
e.preventDefault();
|
|
};
|
|
|
|
genesetNameError = () => {
|
|
return false;
|
|
};
|
|
|
|
handleChange = (e) => {
|
|
this.setState({ genesetName: e });
|
|
};
|
|
|
|
handleGenesetInputChange = (e) => {
|
|
this.setState({ genesToPopulateGeneset: e });
|
|
};
|
|
|
|
instruction = (genesetName, genesets) => {
|
|
return genesets.has(genesetName)
|
|
? "Geneset name must be unique."
|
|
: "New, unique geneset name";
|
|
};
|
|
|
|
validate = (genesetName, genesets) => {
|
|
return genesets.has(genesetName);
|
|
};
|
|
|
|
render() {
|
|
const { genesetName } = this.state;
|
|
const { metadataField, genesetsUI, genesets } = this.props;
|
|
|
|
return (
|
|
<>
|
|
<AnnoDialog
|
|
isActive={genesetsUI.createGenesetModeActive}
|
|
inputProps={{
|
|
"data-testid": `${metadataField}:create-geneset-dialog`,
|
|
}}
|
|
primaryButtonProps={{
|
|
"data-testid": `${metadataField}:submit-geneset`,
|
|
}}
|
|
title="Create gene set"
|
|
instruction={this.instruction(genesetName, genesets)}
|
|
cancelTooltipContent="Close this dialog without creating a new gene set."
|
|
primaryButtonText="Create gene set"
|
|
text={genesetName}
|
|
validationError={this.validate(genesetName, genesets)}
|
|
annoInput={
|
|
<LabelInput
|
|
onChange={this.handleChange}
|
|
inputProps={{
|
|
"data-testid": "create-geneset-modal",
|
|
leftIcon: "manually-entered-data",
|
|
intent: "none",
|
|
autoFocus: true,
|
|
}}
|
|
newLabelMessage="Create gene set"
|
|
/>
|
|
}
|
|
secondaryInstructions="Optionally add a list of comma separated genes to populate the gene set"
|
|
secondaryInput={
|
|
<LabelInput
|
|
onChange={this.handleGenesetInputChange}
|
|
inputProps={{
|
|
"data-testid": "add-genes",
|
|
intent: "none",
|
|
autoFocus: false,
|
|
}}
|
|
newLabelMessage="populate geneset with genes"
|
|
/>
|
|
}
|
|
handleSubmit={this.createGeneset}
|
|
handleCancel={this.disableCreateGenesetMode}
|
|
/>
|
|
</>
|
|
);
|
|
}
|
|
}
|
|
|
|
export default CreateGenesetDialogue;
|