kaho-y 4 年 前
コミット
a5a74f85eb

+ 10 - 0
src/client/js/components/Sidebar/RecentChanges.jsx

@@ -66,6 +66,15 @@ class RecentChanges extends React.Component {
       locked = <span><i className="icon-lock" /></span>;
       locked = <span><i className="icon-lock" /></span>;
     }
     }
 
 
+    const tags = page.tags;
+    const tagElements = tags.map((tag) => {
+      return (
+        <a key={tag} href={`/_search?q=tag:${tag.name}`} className="grw-tag-label badge badge-secondary mr-2">
+          {tag.name}
+        </a>
+      );
+    });
+
     return (
     return (
       <li className="list-group-item p-2">
       <li className="list-group-item p-2">
         <div className="d-flex w-100">
         <div className="d-flex w-100">
@@ -81,6 +90,7 @@ class RecentChanges extends React.Component {
               <span className="seen-user-count">{pageContainer.state.countOfSeenUsers}</span>
               <span className="seen-user-count">{pageContainer.state.countOfSeenUsers}</span>
               <i className="icon-bubble"></i>
               <i className="icon-bubble"></i>
               <span>{page.commentCount}</span>
               <span>{page.commentCount}</span>
+              { tagElements }
               <br />
               <br />
               <FormattedDistanceDate id={page.id} date={page.updatedAt} />
               <FormattedDistanceDate id={page.id} date={page.updatedAt} />
             </div>
             </div>

+ 8 - 1
src/server/models/page.js

@@ -767,7 +767,14 @@ module.exports = function(crowi) {
     // find
     // find
     builder.addConditionToPagenate(opt.offset, opt.limit, sortOpt);
     builder.addConditionToPagenate(opt.offset, opt.limit, sortOpt);
     builder.populateDataToList(User.USER_FIELDS_EXCEPT_CONFIDENTIAL);
     builder.populateDataToList(User.USER_FIELDS_EXCEPT_CONFIDENTIAL);
-    const pages = await builder.query.exec('find');
+    const pages = await builder.query.lean().exec('find');
+    const PageTagRelation = mongoose.model('PageTagRelation');
+    await Promise.all(pages.map(async(page) => {
+      const relations = await PageTagRelation.find({ relatedPage: page._id }).populate('relatedTag');
+      page.tags = relations.map((relation) => {
+        return relation.relatedTag;
+      });
+    }));
 
 
     const result = {
     const result = {
       pages, totalCount, offset: opt.offset, limit: opt.limit,
       pages, totalCount, offset: opt.offset, limit: opt.limit,