fix caret positionning after autocompletion

This commit is contained in:
Nicolas Constant 2020-06-03 19:50:12 -04:00
parent c8c17ca44e
commit 5674127e28
No known key found for this signature in database
GPG Key ID: 1E9F677FB01A5688
2 changed files with 13 additions and 16 deletions

View File

@ -289,4 +289,13 @@ describe('CreateStatusComponent', () => {
expect(result).toBe(`@nicolasconstant@social.nicolas-constant.com${newLine}${newLine}data`);
});
it('should autocomplete - complex', () => {
const newLine = String.fromCharCode(13, 10);
let text = `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque ullamcorper nulla eu metus euismod, non lobortis${newLine}quam congue. @sengi Ut hendrerit, nulla vel feugiat lobortis, diam ligula congue lacus, sed facilisis nisl dui at mauris.${newLine}Cras non hendrerit tellus. Donec eleifend metus quis nibh commodo${newLine}${newLine}data`;
let pattern = '@sengi';
let autosuggest = '@sengi@mastodon.social';
const result = <string>(<any>component).replacePatternWithAutosuggest(text, pattern, autosuggest);
expect(result).toBe(`Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque ullamcorper nulla eu metus euismod, non lobortis${newLine}quam congue. @sengi@mastodon.social Ut hendrerit, nulla vel feugiat lobortis, diam ligula congue lacus, sed facilisis nisl dui at mauris.${newLine}Cras non hendrerit tellus. Donec eleifend metus quis nibh commodo${newLine}${newLine}data`);
});
});

View File

@ -685,21 +685,12 @@ export class CreateStatusComponent implements OnInit, OnDestroy {
suggestionSelected(selection: AutosuggestSelection) {
if (this.status.includes(selection.pattern)) {
// let transformedStatus = this.status;
// transformedStatus = transformedStatus.replace(new RegExp(` ${selection.pattern} `), ` ${selection.autosuggest} `).replace(' ', ' ');
// transformedStatus = transformedStatus.replace(new RegExp(`${selection.pattern} `), `${selection.autosuggest} `).replace(' ', ' ');
// transformedStatus = transformedStatus.replace(new RegExp(`${selection.pattern}$`), `${selection.autosuggest} `).replace(' ', ' ');
// const newLine = String.fromCharCode(13, 10);
// transformedStatus = transformedStatus.replace(new RegExp(`${selection.pattern}${newLine}`), `${selection.autosuggest}${newLine}`).replace(' ', ' ');
// this.status = transformedStatus;
this.status = this.replacePatternWithAutosuggest(this.status, selection.pattern, selection.autosuggest);
let newCaretPosition = this.status.indexOf(`${selection.autosuggest} `) + selection.autosuggest.length + 1;
if (newCaretPosition > this.status.length) newCaretPosition = this.status.length;
let cleanStatus = this.status.replace(/\r?\n/g, ' ');
console.warn([cleanStatus]);
let newCaretPosition = cleanStatus.indexOf(`${selection.autosuggest}`) + selection.autosuggest.length;
if (newCaretPosition > cleanStatus.length) newCaretPosition = cleanStatus.length;
this.autosuggestData = null;
this.hasSuggestions = false;
@ -727,12 +718,9 @@ export class CreateStatusComponent implements OnInit, OnDestroy {
let words = line.split(' ');
words = words.map(word => {
console.warn(`+${word}+`);
return word.replace(regex, `${autosuggest}`);
});
console.log(words);
statusPerLinesPerWords.push(words);
});