Browse Source

Merge pull request #4832 from weseek/fix/82069-82980-fix-tag-search

fix: fix tag search
yuto-o 4 years ago
parent
commit
f3deed9f33

+ 26 - 11
packages/app/src/client/services/PageContainer.js

@@ -374,15 +374,6 @@ export default class PageContainer extends Container {
     }
   }
 
-  // TODO : temporaly use only
-  updateStateAfterTagAdded(page) {
-    const newState = {
-      updatedAt: page.updatedAt,
-      revisionAuthor: page.revision.author,
-    };
-    this.setState(newState);
-  }
-
   /**
    * save success handler
    * @param {object} page Page instance
@@ -398,6 +389,7 @@ export default class PageContainer extends Container {
       revisionId: revision._id,
       revisionCreatedAt: new Date(revision.createdAt).getTime() / 1000,
       remoteRevisionId: revision._id,
+      revisionAuthor: revision.author,
       revisionIdHackmdSynced: page.revisionHackmdSynced,
       hasDraftOnHackmd: page.hasDraftOnHackmd,
       markdown: revision.body,
@@ -425,8 +417,31 @@ export default class PageContainer extends Container {
       }
     }
 
-    // hidden input
-    $('input[name="revision_id"]').val(newState.revisionId);
+  }
+
+  /**
+   * update page meta data
+   * @param {object} page Page instance
+   * @param {object} revision Revision instance
+   * @param {String[]} tags Array of Tag
+   */
+  updatePageMetaData(page, revision, tags) {
+
+    const newState = {
+      revisionId: revision._id,
+      revisionCreatedAt: new Date(revision.createdAt).getTime() / 1000,
+      remoteRevisionId: revision._id,
+      revisionAuthor: revision.author,
+      revisionIdHackmdSynced: page.revisionHackmdSynced,
+      hasDraftOnHackmd: page.hasDraftOnHackmd,
+      updatedAt: page.updatedAt,
+    };
+    if (tags != null) {
+      newState.tags = tags;
+    }
+
+    this.setState(newState);
+
   }
 
   /**

+ 1 - 7
packages/app/src/components/Page/TagLabels.jsx

@@ -54,23 +54,17 @@ class TagLabels extends React.Component {
     if (editorMode === 'edit') {
       return editorContainer.setState({ tags: newTags });
     }
-    let page;
     try {
       const { tags, savedPage } = await appContainer.apiPost('/tags.update', {
         pageId, tags: newTags, revisionId,
       });
-      page = savedPage;
-      // update pageContainer.state
-      pageContainer.setState({ tags });
-      // update editorContainer.state
       editorContainer.setState({ tags });
-
+      pageContainer.updatePageMetaData(savedPage, savedPage.revision, tags);
       toastSuccess('updated tags successfully');
     }
     catch (err) {
       toastError(err, 'fail to update tags');
     }
-    pageContainer.updateStateAfterTagAdded(page);
   }
 
 

+ 2 - 0
packages/app/src/server/service/page.js

@@ -20,6 +20,7 @@ class PageService {
   constructor(crowi) {
     this.crowi = crowi;
     this.pageEvent = crowi.event('page');
+    this.tagEvent = crowi.event('tag');
 
     // init
     this.pageEvent.on('create', this.pageEvent.onCreate);
@@ -271,6 +272,7 @@ class PageService {
     if (originTags != null) {
       await PageTagRelation.updatePageTags(createdPage.id, originTags);
       savedTags = await PageTagRelation.listTagNamesByPage(createdPage.id);
+      this.tagEvent.emit('update', createdPage, savedTags);
     }
 
     const result = serializePageSecurely(createdPage);