Просмотр исходного кода

Provide accept and reject logic with useEditorAssistant

Shun Miyazawa 1 год назад
Родитель
Сommit
4e246c1662

+ 7 - 8
apps/app/src/features/openai/client/components/AiAssistant/AiAssistantSidebar/AiAssistantSidebar.tsx

@@ -4,7 +4,6 @@ import {
 } from 'react';
 } from 'react';
 
 
 import { GlobalCodeMirrorEditorKey } from '@growi/editor';
 import { GlobalCodeMirrorEditorKey } from '@growi/editor';
-import { acceptChange, rejectChange } from '@growi/editor/dist/client/services/unified-merge-view';
 import { useCodeMirrorEditorIsolated } from '@growi/editor/dist/client/stores/codemirror-editor';
 import { useCodeMirrorEditorIsolated } from '@growi/editor/dist/client/stores/codemirror-editor';
 import { useForm, Controller } from 'react-hook-form';
 import { useForm, Controller } from 'react-hook-form';
 import { useTranslation } from 'react-i18next';
 import { useTranslation } from 'react-i18next';
@@ -80,7 +79,9 @@ const AiAssistantSidebarSubstance: React.FC<AiAssistantSidebarSubstanceProps> =
   const { mutate: mutateIsEnableUnifiedMergeView } = useIsEnableUnifiedMergeView();
   const { mutate: mutateIsEnableUnifiedMergeView } = useIsEnableUnifiedMergeView();
 
 
   const { postMessage: postMessageForKnowledgeAssistant, processMessage: processMessageForKnowledgeAssistant } = useKnowledgeAssistant();
   const { postMessage: postMessageForKnowledgeAssistant, processMessage: processMessageForKnowledgeAssistant } = useKnowledgeAssistant();
-  const { postMessage: postMessageForEditorAssistant, processMessage: processMessageForEditorAssistant } = useEditorAssistant();
+  const {
+    postMessage: postMessageForEditorAssistant, processMessage: processMessageForEditorAssistant, accept, reject,
+  } = useEditorAssistant();
 
 
   const form = useForm<FormData>({
   const form = useForm<FormData>({
     defaultValues: {
     defaultValues: {
@@ -314,14 +315,12 @@ const AiAssistantSidebarSubstance: React.FC<AiAssistantSidebarSubstanceProps> =
   }, [submit]);
   }, [submit]);
 
 
   const clickAcceptHandler = useCallback(() => {
   const clickAcceptHandler = useCallback(() => {
-    acceptChange(codeMirrorEditor?.view);
-    mutateIsEnableUnifiedMergeView(false);
-  }, [codeMirrorEditor?.view, mutateIsEnableUnifiedMergeView]);
+    accept();
+  }, [accept]);
 
 
   const clickDiscardHandler = useCallback(() => {
   const clickDiscardHandler = useCallback(() => {
-    rejectChange(codeMirrorEditor?.view);
-    mutateIsEnableUnifiedMergeView(false);
-  }, [codeMirrorEditor?.view, mutateIsEnableUnifiedMergeView]);
+    reject();
+  }, [reject]);
 
 
   const selectAiAssistantHandler = useCallback((aiAssistant?: AiAssistantHasId) => {
   const selectAiAssistantHandler = useCallback((aiAssistant?: AiAssistantHasId) => {
     setSelectedAiAssistant(aiAssistant);
     setSelectedAiAssistant(aiAssistant);

+ 18 - 1
apps/app/src/features/openai/client/services/editor-assistant.ts

@@ -1,5 +1,8 @@
 import { useCallback, useEffect, useState } from 'react';
 import { useCallback, useEffect, useState } from 'react';
 
 
+import { GlobalCodeMirrorEditorKey } from '@growi/editor';
+import { acceptChange, rejectChange } from '@growi/editor/dist/client/services/unified-merge-view';
+import { useCodeMirrorEditorIsolated } from '@growi/editor/dist/client/stores/codemirror-editor';
 import { useSecondaryYdocs } from '@growi/editor/dist/client/stores/use-secondary-ydocs';
 import { useSecondaryYdocs } from '@growi/editor/dist/client/stores/use-secondary-ydocs';
 
 
 import {
 import {
@@ -34,11 +37,12 @@ type DetectedDiff = Array<{
   id: string,
   id: string,
 }>
 }>
 
 
-export const useEditorAssistant = (): { postMessage: PostMessage, processMessage: ProcessMessage } => {
+export const useEditorAssistant = (): {postMessage: PostMessage, processMessage: ProcessMessage, accept: () => void, reject: () => void } => {
   const [detectedDiff, setDetectedDiff] = useState<DetectedDiff>();
   const [detectedDiff, setDetectedDiff] = useState<DetectedDiff>();
 
 
   const { data: currentPageId } = useCurrentPageId();
   const { data: currentPageId } = useCurrentPageId();
   const { data: isEnableUnifiedMergeView, mutate: mutateIsEnableUnifiedMergeView } = useIsEnableUnifiedMergeView();
   const { data: isEnableUnifiedMergeView, mutate: mutateIsEnableUnifiedMergeView } = useIsEnableUnifiedMergeView();
+  const { data: codeMirrorEditor } = useCodeMirrorEditorIsolated(GlobalCodeMirrorEditorKey.MAIN);
   const ydocs = useSecondaryYdocs(isEnableUnifiedMergeView ?? false, { pageId: currentPageId ?? undefined, useSecondary: isEnableUnifiedMergeView ?? false });
   const ydocs = useSecondaryYdocs(isEnableUnifiedMergeView ?? false, { pageId: currentPageId ?? undefined, useSecondary: isEnableUnifiedMergeView ?? false });
 
 
   const postMessage: PostMessage = useCallback(async(threadId, userMessage, markdown) => {
   const postMessage: PostMessage = useCallback(async(threadId, userMessage, markdown) => {
@@ -74,6 +78,17 @@ export const useEditorAssistant = (): { postMessage: PostMessage, processMessage
     });
     });
   }, [mutateIsEnableUnifiedMergeView]);
   }, [mutateIsEnableUnifiedMergeView]);
 
 
+  const accept = useCallback(() => {
+    acceptChange(codeMirrorEditor?.view);
+    mutateIsEnableUnifiedMergeView(false);
+  }, [codeMirrorEditor?.view, mutateIsEnableUnifiedMergeView]);
+
+  const reject = useCallback(() => {
+    rejectChange(codeMirrorEditor?.view);
+    mutateIsEnableUnifiedMergeView(false);
+  }, [codeMirrorEditor?.view, mutateIsEnableUnifiedMergeView]);
+
+
   useEffect(() => {
   useEffect(() => {
     const pendingDetectedDiff: DetectedDiff | undefined = detectedDiff?.filter(diff => diff.applied === false);
     const pendingDetectedDiff: DetectedDiff | undefined = detectedDiff?.filter(diff => diff.applied === false);
     if (ydocs?.secondaryDoc != null && pendingDetectedDiff != null && pendingDetectedDiff.length > 0) {
     if (ydocs?.secondaryDoc != null && pendingDetectedDiff != null && pendingDetectedDiff.length > 0) {
@@ -113,5 +128,7 @@ export const useEditorAssistant = (): { postMessage: PostMessage, processMessage
   return {
   return {
     postMessage,
     postMessage,
     processMessage,
     processMessage,
+    accept,
+    reject,
   };
   };
 };
 };