ソースを参照

Add clickable list titles

John R. Supplee 4 年 前
コミット
52f920db12

+ 6 - 2
client/components/main/globalSearch.jade

@@ -32,11 +32,15 @@ template(name="globalSearch")
               +resultCard(card)
       else
         .global-search-instructions
-          +viewer
-            = searchInstructions
+          h2 Label Colors
           .palette-colors: each label in labelColors
             span.card-label.palette-color.js-palette-color(class="card-label-{{label.color}}")
               = label.name
+          h2 Lists
+          .lists-wrapper
+            each title in myLists.get
+              span.card-label.list-title.js-list-title
+                = title
 
 template(name="globalSearchViewChangePopup")
   if currentUser

+ 13 - 0
client/components/main/globalSearch.js

@@ -42,6 +42,7 @@ BlazeComponent.extendComponent({
     this.query = new ReactiveVar('');
     this.resultsHeading = new ReactiveVar('');
     this.searchLink = new ReactiveVar(null);
+    this.myLists = new ReactiveVar([]);
     this.queryParams = null;
     this.parsingErrors = [];
     this.resultsCount = 0;
@@ -55,6 +56,13 @@ BlazeComponent.extendComponent({
     // }
     // // eslint-disable-next-line no-console
     // console.log('colorMap:', this.colorMap);
+
+    Meteor.call('myLists', (err, data) => {
+      if (!err) {
+        this.myLists.set(data);
+      }
+    });
+
     Meteor.subscribe('setting');
     if (Session.get('globalQuery')) {
       this.searchAllBoards(Session.get('globalQuery'));
@@ -375,6 +383,11 @@ BlazeComponent.extendComponent({
             `${this.query.get()} label:"${evt.currentTarget.textContent}"`,
           );
         },
+        'click .js-list-title'(evt) {
+          this.query.set(
+            `${this.query.get()} list:"${evt.currentTarget.textContent}"`,
+          );
+        },
       },
     ];
   },

+ 3 - 0
client/components/main/globalSearch.styl

@@ -95,3 +95,6 @@ code
   background-color: lightgrey
   padding: 0.1rem !important
   font-size: 0.7rem !important
+
+.list-title
+  background-color: darkgray

+ 14 - 0
models/lists.js

@@ -362,6 +362,20 @@ Meteor.methods({
     const list = Lists.findOne({ _id: listId });
     list.toggleSoftLimit(!list.getWipLimit('soft'));
   },
+
+  myLists() {
+    // my lists
+    return _.uniq(
+      Lists.find(
+        { boardId: { $in: Boards.userBoardIds(this.userId) } },
+        { fields: { title: 1 } },
+      )
+        .fetch()
+        .map(list => {
+          return list.title;
+        }),
+    );
+  },
 });
 
 Lists.hookOptions.after.update = { fetchPrevious: false };