Ver Fonte

Global Search Card Popup has now every data if the search was opened from another board

- the global search only returns the card details data needed to display
  the search results, but for opening the popup card details a lot more
  information is needed. It already worked if the data was already in the
  minimongo, but if not, nearly nothing was displayed
Martin Filser há 3 anos atrás
pai
commit
4733afe4eb

+ 1 - 0
client/components/cards/cardDetails.js

@@ -547,6 +547,7 @@ Template.cardDetails.helpers({
 });
 Template.cardDetailsPopup.onDestroyed(() => {
   Session.delete('popupCard');
+  Session.delete('popupCardBoardId');
 });
 Template.cardDetailsPopup.helpers({
   popupCard() {

+ 10 - 2
client/components/cards/resultCard.js

@@ -7,8 +7,16 @@ Template.resultCard.helpers({
 BlazeComponent.extendComponent({
   clickOnMiniCard(evt) {
     evt.preventDefault();
-    Session.set('popupCard', this.currentData()._id);
-    this.cardDetailsPopup(evt);
+    const this_ = this;
+    const cardId = this.currentData()._id;
+    const boardId = this.currentData().boardId;
+    Meteor.subscribe('popupCardData', cardId, {
+      onReady() {
+        Session.set('popupCard', cardId);
+        Session.set('popupCardBoardId', boardId);
+        this_.cardDetailsPopup(evt);
+      },
+    });
   },
 
   cardDetailsPopup(event) {

+ 2 - 6
client/config/blazeHelpers.js

@@ -1,10 +1,6 @@
 Blaze.registerHelper('currentBoard', () => {
-  const boardId = Session.get('currentBoard');
-  if (boardId) {
-    return Boards.findOne(boardId);
-  } else {
-    return null;
-  }
+  const ret = Utils.getCurrentBoard();
+  return ret;
 });
 
 Blaze.registerHelper('currentCard', () => {

+ 20 - 0
client/lib/utils.js

@@ -1,4 +1,16 @@
 Utils = {
+  /** returns the current board id
+   * <li> returns the current board id or the board id of the popup card if set
+   */
+  getCurrentBoardId() {
+    let popupCardBoardId = Session.get('popupCardBoardId');
+    let currentBoard = Session.get('currentBoard');
+    let ret = currentBoard;
+    if (popupCardBoardId) {
+      ret = popupCardBoardId;
+    }
+    return ret;
+  },
   getCurrentCardId(ignorePopupCard) {
     let ret = Session.get('currentCard');
     if (!ret && !ignorePopupCard) {
@@ -10,6 +22,14 @@ Utils = {
     const ret = Session.get('popupCard');
     return ret;
   },
+  /** returns the current board
+   * <li> returns the current board or the board of the popup card if set
+   */
+  getCurrentBoard() {
+    const boardId = Utils.getCurrentBoardId();
+    const ret = Boards.findOne(boardId);
+    return ret;
+  },
   getCurrentCard(ignorePopupCard) {
     const cardId = Utils.getCurrentCardId(ignorePopupCard);
     const ret = Cards.findOne(cardId);

+ 9 - 0
config/router.js

@@ -13,6 +13,7 @@ FlowRouter.route('/', {
     Session.set('currentList', null);
     Session.set('currentCard', null);
     Session.set('popupCard', null);
+    Session.set('popupCardBoardId', null);
 
     Filter.reset();
     Session.set('sortBy', '');
@@ -36,6 +37,7 @@ FlowRouter.route('/public', {
     Session.set('currentList', null);
     Session.set('currentCard', null);
     Session.set('popupCard', null);
+    Session.set('popupCardBoardId', null);
 
     Filter.reset();
     Session.set('sortBy', '');
@@ -59,6 +61,7 @@ FlowRouter.route('/b/:id/:slug', {
     Session.set('currentBoard', currentBoard);
     Session.set('currentCard', null);
     Session.set('popupCard', null);
+    Session.set('popupCardBoardId', null);
 
     // If we close a card, we'll execute again this route action but we don't
     // want to excape every current actions (filters, etc.)
@@ -88,6 +91,7 @@ FlowRouter.route('/b/:boardId/:slug/:cardId', {
     Session.set('currentBoard', params.boardId);
     Session.set('currentCard', params.cardId);
     Session.set('popupCard', null);
+    Session.set('popupCardBoardId', null);
 
     Utils.manageCustomUI();
     Utils.manageMatomo();
@@ -217,6 +221,7 @@ FlowRouter.route('/import/:source', {
     Session.set('currentList', null);
     Session.set('currentCard', null);
     Session.set('popupCard', null);
+    Session.set('popupCardBoardId', null);
     Session.set('importSource', params.source);
 
     Filter.reset();
@@ -238,6 +243,7 @@ FlowRouter.route('/setting', {
       Session.set('currentList', null);
       Session.set('currentCard', null);
       Session.set('popupCard', null);
+      Session.set('popupCardBoardId', null);
 
       Filter.reset();
       Session.set('sortBy', '');
@@ -262,6 +268,7 @@ FlowRouter.route('/information', {
       Session.set('currentList', null);
       Session.set('currentCard', null);
       Session.set('popupCard', null);
+      Session.set('popupCardBoardId', null);
 
       Filter.reset();
       Session.set('sortBy', '');
@@ -285,6 +292,7 @@ FlowRouter.route('/people', {
       Session.set('currentList', null);
       Session.set('currentCard', null);
       Session.set('popupCard', null);
+      Session.set('popupCardBoardId', null);
 
       Filter.reset();
       Session.set('sortBy', '');
@@ -308,6 +316,7 @@ FlowRouter.route('/admin-reports', {
       Session.set('currentList', null);
       Session.set('currentCard', null);
       Session.set('popupCard', null);
+      Session.set('popupCardBoardId', null);
 
       Filter.reset();
       Session.set('sortBy', '');

+ 16 - 1
server/publications/cards.js

@@ -52,7 +52,22 @@ const escapeForRegex = require('escape-string-regexp');
 
 Meteor.publish('card', cardId => {
   check(cardId, String);
-  return Cards.find({ _id: cardId });
+  const ret = Cards.find({ _id: cardId });
+  return ret;
+});
+
+/** publish all data which is necessary to display card details as popup
+ * @returns array of cursors
+ */
+Meteor.publishRelations('popupCardData', function(cardId) {
+  check(cardId, String);
+  this.cursor(
+    Cards.find({_id: cardId}),
+    function(cardId, card) {
+      this.cursor(Boards.find({_id: card.boardId}));
+    },
+  );
+  return this.ready()
 });
 
 Meteor.publish('myCards', function(sessionId) {