Timothy Jaeryang Baek 5 月之前
父節點
當前提交
fa5e1f7452

+ 3 - 3
src/lib/components/common/RichTextInput.svelte

@@ -153,10 +153,10 @@
 				Placeholder.configure({ placeholder }),
 				AIAutocompletion.configure({
 					generateCompletion: async (text) => {
-						// Implement your AI text generation logic here
-						// This should return a Promise that resolves to the suggested text
+						if (text.trim().length === 0) {
+							return null;
+						}
 
-						console.log(text);
 						return 'AI-generated suggestion';
 					}
 				})

+ 37 - 27
src/lib/components/common/RichTextInput/AutoCompletion.js

@@ -50,8 +50,6 @@ export const AIAutocompletion = Extension.create({
         key: new PluginKey('aiAutocompletion'),
         props: {
           handleKeyDown: (view, event) => {
-            if (event.key !== 'Tab') return false
-
             const { state, dispatch } = view
             const { selection } = state
             const { $head } = selection
@@ -59,35 +57,47 @@ export const AIAutocompletion = Extension.create({
             if ($head.parent.type.name !== 'paragraph') return false
 
             const node = $head.parent
-            const prompt = node.textContent
 
-            if (!node.attrs['data-suggestion']) {
-              // Generate completion
-              this.options.generateCompletion(prompt).then(suggestion => {
-                if (suggestion && suggestion.trim() !== '') {
-                  dispatch(state.tr.setNodeMarkup($head.before(), null, {
-                    ...node.attrs,
-                    class: 'ai-autocompletion',
-                    'data-prompt': prompt,
-                    'data-suggestion': suggestion,
-                  }))
-                }
-              })
-            } else {
-              // Accept suggestion
-              const suggestion = node.attrs['data-suggestion']
-              dispatch(state.tr
-                .insertText(suggestion, $head.pos)
-                .setNodeMarkup($head.before(), null, {
-                  ...node.attrs,
-                  class: null,
-                  'data-prompt': null,
-                  'data-suggestion': null,
+            if (event.key === 'Tab') {
+              if (!node.attrs['data-suggestion']) {
+                // Generate completion
+                const prompt = node.textContent
+                this.options.generateCompletion(prompt).then(suggestion => {
+                  if (suggestion && suggestion.trim() !== '') {
+                    dispatch(state.tr.setNodeMarkup($head.before(), null, {
+                      ...node.attrs,
+                      class: 'ai-autocompletion',
+                      'data-prompt': prompt,
+                      'data-suggestion': suggestion,
+                    }))
+                  }
+                  // If suggestion is empty or null, do nothing
                 })
-              )
+              } else {
+                // Accept suggestion
+                const suggestion = node.attrs['data-suggestion']
+                dispatch(state.tr
+                  .insertText(suggestion, $head.pos)
+                  .setNodeMarkup($head.before(), null, {
+                    ...node.attrs,
+                    class: null,
+                    'data-prompt': null,
+                    'data-suggestion': null,
+                  })
+                )
+              }
+              return true
+            } else if (node.attrs['data-suggestion']) {
+              // Reset suggestion on any other key press
+              dispatch(state.tr.setNodeMarkup($head.before(), null, {
+                ...node.attrs,
+                class: null,
+                'data-prompt': null,
+                'data-suggestion': null,
+              }))
             }
 
-            return true
+            return false
           },
         },
       }),