From 607dbbc6df3820d5511312afd4b1f0114493281d Mon Sep 17 00:00:00 2001 From: Jakub Benes Date: Mon, 8 Jul 2019 16:37:19 +0200 Subject: [PATCH] fix: minChar should work correctly for multichar triggers --- cypress/integration/textarea.js | 16 ++++++++++++++++ src/Textarea.jsx | 3 ++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/cypress/integration/textarea.js b/cypress/integration/textarea.js index ee09cb7..01c9e3e 100644 --- a/cypress/integration/textarea.js +++ b/cypress/integration/textarea.js @@ -36,6 +36,22 @@ describe("React Textarea Autocomplete", () => { cy.get('[data-test="minChar"]').clear({ force: true }); }); + it("minChar works correctly basned on the lenght of the trigger char", () => { + cy.get('[data-test="minChar"]').type("{uparrow}"); // set minChar to 1 + + cy.get(".rta__textarea").type("This is test ::"); + cy.get(".rta__autocomplete").should("not.be.visible"); + + cy.get(".rta__textarea").type("This is test ::a"); + cy.get(".rta__autocomplete").should("be.visible"); + + cy.get(".rta__textarea").type("This is test :"); + cy.get(".rta__autocomplete").should("not.be.visible"); + + cy.get(".rta__textarea").type("This is test :a"); + cy.get(".rta__autocomplete").should("be.visible"); + }); + it("basic test with keyboard", () => { cy.get(".rta__textarea") .type("This is test :ro{downarrow}{enter}") diff --git a/src/Textarea.jsx b/src/Textarea.jsx index 49abe82..e48d677 100644 --- a/src/Textarea.jsx +++ b/src/Textarea.jsx @@ -736,6 +736,7 @@ class ReactTextareaAutocomplete extends React.Component< let lastToken = tokenMatch && tokenMatch[0]; let currentTrigger = (tokenMatch && tokenMatch[1]) || null; + const currentTriggerLength = currentTrigger ? currentTrigger.length - 1 : 0; // with this approach we want to know if the user just inserted a new trigger sequence const newTrigger = this.tokenRegExpEnding.exec(affectedTextareaValue); @@ -751,7 +752,7 @@ class ReactTextareaAutocomplete extends React.Component< the autocomplete */ if ( - (!lastToken || lastToken.length <= minChar) && + (!lastToken || lastToken.length <= minChar + currentTriggerLength) && // check if our current trigger disallows whitespace ((this.state.currentTrigger && !trigger[this.state.currentTrigger].allowWhitespace) ||