yuto-oweseek 4 лет назад
Родитель
Сommit
743a27ee5a

+ 23 - 4
packages/app/src/client/services/PageContainer.js

@@ -455,7 +455,7 @@ export default class PageContainer extends Container {
     return res;
   }
 
-  async saveAndReload(optionsToSave, markdownOnConflict) {
+  async saveAndReload(optionsToSave) {
     if (optionsToSave == null) {
       const msg = '\'saveAndReload\' requires the \'optionsToSave\' param';
       throw new Error(msg);
@@ -480,9 +480,6 @@ export default class PageContainer extends Container {
       options.isSyncRevisionToHackmd = true;
       revisionId = this.state.revisionIdHackmdSynced;
     }
-    else if (markdownOnConflict != null && markdownOnConflict.length >= 1) {
-      markdown = markdownOnConflict;
-    }
     else {
       const pageEditor = this.appContainer.getComponentInstance('PageEditor');
       markdown = pageEditor.getMarkdown();
@@ -660,4 +657,26 @@ export default class PageContainer extends Container {
   retrieveMyBookmarkList() {
   }
 
+  async resolveConflict(pageId, revisionId, markdown, optionalParams) {
+
+    const { path } = this.state;
+
+    const params = Object.assign(optionalParams, {
+      page_id: pageId,
+      revision_id: revisionId,
+      body: markdown,
+    });
+
+    const res = await this.appContainer.apiPost('/pages.update', params);
+    if (!res.ok) {
+      throw new Error(res.error);
+    }
+
+    const editorContainer = this.appContainer.getContainer('EditorContainer');
+    editorContainer.clearDraft(path);
+    window.location.href = path;
+
+    return res;
+  }
+
 }

+ 11 - 13
packages/app/src/components/PageEditor/ConflictDiffModal.tsx

@@ -8,7 +8,6 @@ import { useTranslation } from 'react-i18next';
 import { UnControlled as CodeMirror } from 'react-codemirror2';
 import PageContainer from '../../client/services/PageContainer';
 import EditorContainer from '../../client/services/EditorContainer';
-import { toastError } from '../../client/util/apiNotification';
 
 require('codemirror/mode/htmlmixed/htmlmixed');
 
@@ -46,20 +45,19 @@ export const ConflictDiffModal: FC<ConflictDiffModalProps> = (props) => {
     }
   };
 
-  const onResolveConflict = () : void => {
+  const onResolveConflict = async() : Promise<void> => {
     // disable button after clicked
     setIsRevisionSelected(false);
-    pageContainer.setState({
-      revisionId: pageContainer.state.revisionsOnConflict?.latest.revisionId,
-    }, async() => {
-      try {
-        await pageContainer.saveAndReload(editorContainer.getCurrentOptionsToSave(), resolvedRevision.current);
-        window.location.href = pageContainer.state.path || '/';
-      }
-      catch (error) {
-        toastError(error);
-      }
-    });
+    try {
+      await pageContainer.resolveConflict(
+        pageContainer.state.pageId,
+        latest.revisionId,
+        resolvedRevision.current, editorContainer.getCurrentOptionsToSave(),
+      );
+    }
+    catch (error) {
+      pageContainer.showErrorToastr(error);
+    }
   };
 
   return (