Pārlūkot izejas kodu

feat: delete slash when using the popuplist and pressing enter key

Lucas.Xu 2 gadi atpakaļ
vecāks
revīzija
6e71ec23a1

+ 1 - 1
frontend/app_flowy/packages/flowy_editor/lib/render/rich_text/flowy_rich_text.dart

@@ -35,7 +35,7 @@ class FlowyRichText extends StatefulWidget {
     this.cursorHeight,
     this.cursorWidth = 2.0,
     this.textSpanDecorator,
-    this.placeholderText = ' ',
+    this.placeholderText = 'Type \'/\' for commands',
     this.placeholderTextSpanDecorator,
     required this.textNode,
     required this.editorState,

+ 17 - 0
frontend/app_flowy/packages/flowy_editor/lib/service/internal_key_event_handlers/slash_handler.dart

@@ -211,6 +211,7 @@ class _PopupListWidgetState extends State<PopupListWidget> {
 
     if (event.logicalKey == LogicalKeyboardKey.enter) {
       if (0 <= selectedIndex && selectedIndex < widget.items.length) {
+        _deleteSlash();
         widget.items[selectedIndex].handler(widget.editorState);
         return KeyEventResult.handled;
       }
@@ -239,6 +240,22 @@ class _PopupListWidgetState extends State<PopupListWidget> {
     }
     return KeyEventResult.ignored;
   }
+
+  void _deleteSlash() {
+    final selection =
+        widget.editorState.service.selectionService.currentSelection.value;
+    final nodes =
+        widget.editorState.service.selectionService.currentSelectedNodes;
+    if (selection != null && nodes.length == 1) {
+      TransactionBuilder(widget.editorState)
+        ..deleteText(
+          nodes.first as TextNode,
+          selection.start.offset - 1,
+          1,
+        )
+        ..commit();
+    }
+  }
 }
 
 class _PopupListItemWidget extends StatelessWidget {