diff --git a/client/src/components/annoDialog.js b/client/src/components/annoDialog.js index 8064b146..a3d47f7e 100644 --- a/client/src/components/annoDialog.js +++ b/client/src/components/annoDialog.js @@ -42,7 +42,7 @@ class AnnoDialog extends React.PureComponent {

diff --git a/client/src/components/geneExpression/geneSet.js b/client/src/components/geneExpression/geneSet.js index 13bc22b1..ced7cd59 100644 --- a/client/src/components/geneExpression/geneSet.js +++ b/client/src/components/geneExpression/geneSet.js @@ -125,8 +125,8 @@ class GeneSet extends React.Component { )} {isOpen && !genesetIsEmpty && this.renderGenes()} ); diff --git a/client/src/components/geneExpression/menus/createGenesetDialogue.js b/client/src/components/geneExpression/menus/createGenesetDialogue.js index e5363868..1c12383d 100644 --- a/client/src/components/geneExpression/menus/createGenesetDialogue.js +++ b/client/src/components/geneExpression/menus/createGenesetDialogue.js @@ -90,14 +90,15 @@ class CreateGenesetDialogue extends React.PureComponent { this.setState({ genesetDescription: e }); }; - instruction = (genesetName, genesets) => genesets.has(genesetName) + instruction = (genesetName, genesets) => + genesets.has(genesetName) ? "Gene set name must be unique." : "New, unique gene set name"; validate = (genesetName, genesets) => { if (genesets.has(genesetName)) { this.setState({ - nameErrorMessage: "There is already a geneset with that name", + nameErrorMessage: "There is already a gene set with that name", }); return false; } diff --git a/client/src/components/geneExpression/menus/editGenesetNameDialogue.js b/client/src/components/geneExpression/menus/editGenesetNameDialogue.js index b005aa82..03967782 100644 --- a/client/src/components/geneExpression/menus/editGenesetNameDialogue.js +++ b/client/src/components/geneExpression/menus/editGenesetNameDialogue.js @@ -14,16 +14,18 @@ class RenameGeneset extends React.PureComponent { constructor(props) { super(props); this.state = { - newGenesetName: props.parentGeneset, - newGenesetDescription: props.parentGenesetDescription, + newGenesetName: props.originalGenesetName, + newGenesetDescription: props.originalGenesetDescription, + nameErrorMessage: "", }; } disableEditGenesetNameMode = (e) => { const { dispatch } = this.props; + const { originalGenesetDescription, originalGenesetName } = this.props; this.setState({ - newGenesetName: "", - newGenesetDescription: "", + newGenesetName: originalGenesetName, + newGenesetDescription: originalGenesetDescription, }); dispatch({ type: "geneset: disable rename geneset mode", @@ -59,22 +61,57 @@ class RenameGeneset extends React.PureComponent { this.setState({ newGenesetDescription: e }); }; - validate = (genesetName, genesets) => ( - !genesets.has(genesetName) && + validate = ( + originalGenesetName, + newGenesetName, + originalGenesetDescription, + newGenesetDescription, + genesets + ) => { + if ( + originalGenesetName !== newGenesetName && + genesets.has(newGenesetName) + ) { + this.setState({ + nameErrorMessage: `There is already a gene set with that name`, + }); + return true; + } + if ( // eslint-disable-next-line no-control-regex -- unicode 0-31 127-65535 - genesetName.match(/^\s|[\u0000-\u001F\u007F-\uFFFF]|[ ]{2,}|^$|\s$/g) - ?.length - ); + newGenesetName.match(/^[\u0000-\u001F\u007F-\uFFFF]|[ ]{2,}/g)?.length + ) { + this.setState({ + nameErrorMessage: + "Gene set names can only contain alphanumeric characters and the following special characters: ! ” # $ % ’ ( ) * + , - . / : ; < = > ? @ ] ^ _ ` | ~", + }); + return true; + } + this.setState({ + nameErrorMessage: "", + }); + if ( + originalGenesetName === newGenesetName && + originalGenesetDescription === newGenesetDescription + ) + return true; + return false; + }; render() { - const { newGenesetName, newGenesetDescription } = this.state; - const { genesetsUI, parentGeneset, parentGenesetDescription, genesets } = - this.props; + const { newGenesetName, newGenesetDescription, nameErrorMessage } = + this.state; + const { + genesetsUI, + originalGenesetName, + originalGenesetDescription, + genesets, + } = this.props; return ( <> + Rename {genesetsUI.isEditingGenesetName} + + } cancelTooltipContent="Close this dialog without renaming the gene set." primaryButtonText="Edit gene set name and description" text={newGenesetName} secondaryText={newGenesetDescription} - validationError={ - this.validate(newGenesetName, genesets) && - parentGenesetDescription === newGenesetDescription - } + validationError={this.validate( + originalGenesetName, + newGenesetName, + originalGenesetDescription, + newGenesetDescription, + genesets + )} + errorMessage={nameErrorMessage} annoInput={