Explorar o código

implement useDocString hook

Yuki Takei hai 9 meses
pai
achega
c0960dc8d8

+ 2 - 2
apps/app/src/client/components/PageComment/CommentEditor.tsx

@@ -152,7 +152,7 @@ export const CommentEditor = (props: CommentEditorProps): JSX.Element => {
   }, [onCanceled, initializeEditor]);
 
   const postCommentHandler = useCallback(async() => {
-    const commentBodyToPost = codeMirrorEditor?.getDoc() ?? '';
+    const commentBodyToPost = codeMirrorEditor?.getDocString() ?? '';
 
     try {
       if (currentCommentId != null) {
@@ -276,7 +276,7 @@ export const CommentEditor = (props: CommentEditorProps): JSX.Element => {
           </TabPane>
           <TabPane tabId="comment_preview">
             <div className="comment-preview-container">
-              <CommentPreview markdown={codeMirrorEditor?.getDoc() ?? ''} />
+              <CommentPreview markdown={codeMirrorEditor?.getDocString() ?? ''} />
             </div>
           </TabPane>
         </TabContent>

+ 1 - 1
apps/app/src/client/components/PageEditor/ConflictDiffModal.tsx

@@ -60,7 +60,7 @@ const ConflictDiffModalCore = (props: ConflictDiffModalCoreProps): JSX.Element =
   }, [isRevisionselected]);
 
   const resolveConflictHandler = useCallback(async() => {
-    const newBody = codeMirrorEditor?.getDoc();
+    const newBody = codeMirrorEditor?.getDocString();
     if (newBody == null) {
       return;
     }

+ 3 - 3
apps/app/src/client/components/PageEditor/PageEditor.tsx

@@ -156,7 +156,7 @@ export const PageEditorSubstance = (props: Props): JSX.Element => {
 
   const { data: codeMirrorEditor } = useCodeMirrorEditorIsolated(GlobalCodeMirrorEditorKey.MAIN);
 
-  const [markdownToPreview, setMarkdownToPreview] = useState<string>(codeMirrorEditor?.getDoc() ?? '');
+  const [markdownToPreview, setMarkdownToPreview] = useState<string>(codeMirrorEditor?.getDocString() ?? '');
   const setMarkdownPreviewWithDebounce = useMemo(() => debounce(100, throttle(150, (value: string) => {
     setMarkdownToPreview(value);
   })), []);
@@ -217,7 +217,7 @@ export const PageEditorSubstance = (props: Props): JSX.Element => {
   }, [pageId, selectedGrant, mutateWaitingSaveProcessing, updatePage, mutateIsGrantNormalized, t]);
 
   const saveAndReturnToViewHandler = useCallback(async(opts: SaveOptions) => {
-    const markdown = codeMirrorEditor?.getDoc();
+    const markdown = codeMirrorEditor?.getDocString();
     const revisionId = isRevisionIdRequiredForPageUpdate ? currentRevisionId : undefined;
     const page = await save(revisionId, markdown, opts, onConflict);
     if (page == null) {
@@ -229,7 +229,7 @@ export const PageEditorSubstance = (props: Props): JSX.Element => {
   }, [codeMirrorEditor, currentRevisionId, isRevisionIdRequiredForPageUpdate, mutateEditorMode, onConflict, save, updateStateAfterSave]);
 
   const saveWithShortcut = useCallback(async() => {
-    const markdown = codeMirrorEditor?.getDoc();
+    const markdown = codeMirrorEditor?.getDocString();
     const revisionId = isRevisionIdRequiredForPageUpdate ? currentRevisionId : undefined;
     const page = await save(revisionId, markdown, undefined, onConflict);
     if (page == null) {

+ 1 - 1
apps/app/src/client/components/PageEditor/conflict.tsx

@@ -97,7 +97,7 @@ export const useConflictEffect = (): void => {
         closePageStatusAlert();
       };
 
-      const markdown = codeMirrorEditor?.getDoc();
+      const markdown = codeMirrorEditor?.getDocString();
       openConflictDiffModal(markdown ?? '', resolveConflictHandler);
     };
 

+ 8 - 3
apps/app/src/features/openai/client/services/editor-assistant/use-editor-assistant.tsx

@@ -157,9 +157,14 @@ export const useEditorAssistant: UseEditorAssistant = () => {
 
   const postMessage: PostMessage = useCallback(async(threadId, formData) => {
     const getPageBody = (): string | undefined => {
-      // TODO: Reduce to character limit
-      // refs: https://redmine.weseek.co.jp/issues/167688
-      return codeMirrorEditor?.getDoc();
+      const length = codeMirrorEditor?.getDoc().length ?? 0;
+
+      if (length > 10000) {
+        // TODO: カーソル位置を基準に、カーソル前2000文字、カーソル後8000文字を取得する
+        return codeMirrorEditor?.getDoc().slice(0, 10000).toString();
+      }
+
+      return codeMirrorEditor?.getDocString();
     };
 
     // Disable UnifiedMergeView when a Form is submitted with UnifiedMergeView enabled

+ 1 - 1
packages/editor/src/client/components-internal/playground/Playground.tsx

@@ -68,7 +68,7 @@ export const Playground = (): JSX.Element => {
   // set handler to save with shortcut key
   const saveHandler = useCallback(() => {
     // eslint-disable-next-line no-console
-    console.log({ doc: codeMirrorEditor?.getDoc() });
+    console.log({ doc: codeMirrorEditor?.getDocString() });
     toast.success('Saved.', { autoClose: 2000 });
   }, [codeMirrorEditor]);
 

+ 5 - 1
packages/editor/src/client/services/use-codemirror-editor/use-codemirror-editor.ts

@@ -11,7 +11,8 @@ import { useAppendExtensions, type AppendExtensions } from './utils/append-exten
 import { useFocus, type Focus } from './utils/focus';
 import type { FoldDrawio } from './utils/fold-drawio';
 import { useFoldDrawio } from './utils/fold-drawio';
-import { useGetDoc, type GetDoc } from './utils/get-doc';
+import type { GetDocString } from './utils/get-doc';
+import { useGetDoc, type GetDoc, useGetDocString } from './utils/get-doc';
 import { useInitDoc, type InitDoc } from './utils/init-doc';
 import { useInsertMarkdownElements, type InsertMarkdowElements } from './utils/insert-markdown-elements';
 import { useInsertPrefix, type InsertPrefix } from './utils/insert-prefix';
@@ -24,6 +25,7 @@ type UseCodeMirrorEditorUtils = {
   initDoc: InitDoc,
   appendExtensions: AppendExtensions,
   getDoc: GetDoc,
+  getDocString: GetDocString,
   focus: Focus,
   setCaretLine: SetCaretLine,
   insertText: InsertText,
@@ -65,6 +67,7 @@ export const useCodeMirrorEditor = (props?: UseCodeMirror): UseCodeMirrorEditor
   const initDoc = useInitDoc(view);
   const appendExtensions = useAppendExtensions(view);
   const getDoc = useGetDoc(view);
+  const getDocString = useGetDocString(view);
   const focus = useFocus(view);
   const setCaretLine = useSetCaretLine(view);
   const insertText = useInsertText(view);
@@ -79,6 +82,7 @@ export const useCodeMirrorEditor = (props?: UseCodeMirror): UseCodeMirrorEditor
     initDoc,
     appendExtensions,
     getDoc,
+    getDocString,
     focus,
     setCaretLine,
     insertText,

+ 12 - 2
packages/editor/src/client/services/use-codemirror-editor/utils/get-doc.ts

@@ -1,13 +1,23 @@
 import { useCallback } from 'react';
 
+import { Text } from '@codemirror/state';
 import type { EditorView } from '@codemirror/view';
 
-export type GetDoc = () => string;
+export type GetDoc = () => Text;
+export type GetDocString = () => string;
 
 export const useGetDoc = (view?: EditorView): GetDoc => {
 
   return useCallback(() => {
-    return view?.state.doc.toString() ?? '';
+    return view?.state.doc ?? Text.empty;
+  }, [view]);
+
+};
+
+export const useGetDocString = (view?: EditorView): GetDocString => {
+
+  return useCallback(() => {
+    return (view?.state.doc ?? Text.empty).toString();
   }, [view]);
 
 };