Skip to content

Commit 23f868e

Browse files
committed
Fix consecutive usage of shortcut & undo
1 parent 449e22c commit 23f868e

2 files changed

Lines changed: 16 additions & 5 deletions

File tree

packages/fleather/lib/src/widgets/autoformats.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@ class EmojiShortcuts extends AutoFormat {
540540
if (!candidate.endsWith(shortcut)) return null;
541541
final emoji = _emojiShortcut[shortcut]!;
542542
final change = Delta()
543-
..retain(documentPosition - candidate.length)
543+
..retain(documentPosition - shortcut.length)
544544
..delete(shortcut.length)
545545
..insert(emoji);
546546

@@ -551,8 +551,7 @@ class EmojiShortcuts extends AutoFormat {
551551
selection: TextSelection.collapsed(
552552
offset: documentPosition - shortcut.length + emoji.length),
553553
undo: undo,
554-
undoPositionCandidate:
555-
documentPosition - shortcut.length + emoji.length,
554+
undoPositionCandidate: documentPosition - emoji.length,
556555
undoSelection: TextSelection.collapsed(offset: documentPosition),
557556
undoReplacementTest: (length, data) =>
558557
data is String && data.isEmpty && length == emoji.length);

packages/fleather/test/widgets/controller_test.dart

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -486,12 +486,24 @@ void main() {
486486
const TextSelection.collapsed(offset: '😊'.length));
487487
});
488488

489+
test('Consecutive emoji shortcuts', () {
490+
controller.replaceText(0, 0, ':');
491+
controller.replaceText(1, 0, ')',
492+
selection: TextSelection.collapsed(offset: 1));
493+
controller.replaceText(2, 0, ':');
494+
controller.replaceText(3, 0, ')',
495+
selection: TextSelection.collapsed(offset: 3));
496+
expect(controller.document.toDelta(), Delta()..insert('😊😊\n'));
497+
expect(controller.selection,
498+
const TextSelection.collapsed(offset: '😊😊'.length));
499+
});
500+
489501
test('Undo emoji shortcuts', () {
490502
controller.replaceText(0, 0, ':');
491503
controller.replaceText(1, 0, ')',
492504
selection: TextSelection.collapsed(offset: 1));
493-
controller.replaceText('😊'.length, '😊'.length, '',
494-
selection: const TextSelection.collapsed(offset: '😊'.length));
505+
controller.replaceText(0, '😊'.length, '',
506+
selection: const TextSelection.collapsed(offset: 0));
495507
expect(controller.document.toDelta(), Delta()..insert(':)\n'));
496508
expect(controller.selection, const TextSelection.collapsed(offset: 2));
497509
});

0 commit comments

Comments
 (0)