Bladeren bron

fix: smart edit bugs (#1911)

Lucas.Xu 2 jaren geleden
bovenliggende
commit
fd41459a30

+ 3 - 1
frontend/appflowy_flutter/lib/plugins/document/document_page.dart

@@ -177,7 +177,9 @@ class _AppFlowyEditorPageState extends State<_AppFlowyEditorPage> {
         ]
       ],
       toolbarItems: [
-        smartEditItem,
+        if (openAIKey != null && openAIKey!.isNotEmpty) ...[
+          smartEditItem,
+        ]
       ],
       themeData: theme.copyWith(extensions: [
         ...theme.extensions.values,

+ 41 - 34
frontend/appflowy_flutter/lib/plugins/document/presentation/plugins/openai/widgets/smart_edit_toolbar_item.dart

@@ -42,11 +42,13 @@ class _SmartEditWidgetState extends State<_SmartEditWidget> {
           .toList(),
       buildChild: (controller) {
         return FlowyIconButton(
+          hoverColor: Colors.transparent,
           tooltipText: 'Smart Edit',
           preferBelow: false,
           icon: const Icon(
-            Icons.edit,
-            size: 14,
+            Icons.lightbulb_outline,
+            size: 13,
+            color: Colors.white,
           ),
           onPressed: () {
             controller.show();
@@ -55,39 +57,44 @@ class _SmartEditWidgetState extends State<_SmartEditWidget> {
       },
       onSelected: (action, controller) {
         controller.close();
-        final selection =
-            widget.editorState.service.selectionService.currentSelection.value;
-        if (selection == null) {
-          return;
-        }
-        final textNodes = widget
-            .editorState.service.selectionService.currentSelectedNodes
-            .whereType<TextNode>()
-            .toList(growable: false);
-        final input = widget.editorState.getTextInSelection(
-          textNodes.normalized,
-          selection.normalized,
-        );
-        final transaction = widget.editorState.transaction;
-        transaction.insertNode(
-          selection.normalized.end.path.next,
-          Node(
-            type: kSmartEditType,
-            attributes: {
-              kSmartEditInstructionType: action.inner.toInstruction,
-              kSmartEditInputType: input,
-            },
-          ),
-        );
-        widget.editorState.apply(
-          transaction,
-          options: const ApplyOptions(
-            recordUndo: false,
-            recordRedo: false,
-          ),
-          withUpdateCursor: false,
-        );
+        _insertSmartEditNode(action);
       },
     );
   }
+
+  Future<void> _insertSmartEditNode(
+      SmartEditActionWrapper actionWrapper) async {
+    final selection =
+        widget.editorState.service.selectionService.currentSelection.value;
+    if (selection == null) {
+      return;
+    }
+    final textNodes = widget
+        .editorState.service.selectionService.currentSelectedNodes
+        .whereType<TextNode>()
+        .toList(growable: false);
+    final input = widget.editorState.getTextInSelection(
+      textNodes.normalized,
+      selection.normalized,
+    );
+    final transaction = widget.editorState.transaction;
+    transaction.insertNode(
+      selection.normalized.end.path.next,
+      Node(
+        type: kSmartEditType,
+        attributes: {
+          kSmartEditInstructionType: actionWrapper.inner.toInstruction,
+          kSmartEditInputType: input,
+        },
+      ),
+    );
+    return widget.editorState.apply(
+      transaction,
+      options: const ApplyOptions(
+        recordUndo: false,
+        recordRedo: false,
+      ),
+      withUpdateCursor: false,
+    );
+  }
 }

+ 9 - 3
frontend/appflowy_flutter/packages/appflowy_editor/lib/src/commands/command_extension.dart

@@ -59,12 +59,18 @@ extension CommandExtension on EditorState {
     List<String> res = [];
     if (!selection.isCollapsed) {
       for (var i = 0; i < textNodes.length; i++) {
+        final plainText = textNodes[i].toPlainText();
         if (i == 0) {
-          res.add(textNodes[i].toPlainText().substring(selection.startIndex));
+          res.add(
+            plainText.substring(
+              selection.startIndex,
+              plainText.length,
+            ),
+          );
         } else if (i == textNodes.length - 1) {
-          res.add(textNodes[i].toPlainText().substring(0, selection.endIndex));
+          res.add(plainText.substring(0, selection.endIndex));
         } else {
-          res.add(textNodes[i].toPlainText());
+          res.add(plainText);
         }
       }
     }