Browse Source

use ReactiveMiniMongoIndex for notifications

Martin Filser 1 year ago
parent
commit
c4882707e9
2 changed files with 24 additions and 2 deletions
  1. 22 0
      imports/reactiveCache.js
  2. 2 2
      models/users.js

+ 22 - 0
imports/reactiveCache.js

@@ -1410,6 +1410,28 @@ ReactiveMiniMongoIndex = {
       }
     }
     return ret;
+  },
+  getActivityWithId(activityId, addSelect = {}, options) {
+    let ret = []
+    if (activityId) {
+      const select = {addSelect, options}
+      if (!this.__activityWithId) {
+        this.__activityWithId = new DataCache(_select => {
+          const __select = EJSON.parse(_select);
+          const _activities = ReactiveCache.getActivities(
+            { _id: { $exists: true },
+              ...__select.addSelect,
+            }, __select.options);
+          const _ret = _.indexBy(_activities, '_id')
+          return _ret;
+        });
+      }
+      ret = this.__activityWithId.get(EJSON.stringify(select));
+      if (ret) {
+        ret = ret[activityId];
+      }
+    }
+    return ret;
   }
 }
 

+ 2 - 2
models/users.js

@@ -1,4 +1,4 @@
-import { ReactiveCache } from '/imports/reactiveCache';
+import { ReactiveCache, ReactiveMiniMongoIndex } from '/imports/reactiveCache';
 import { SyncedCron } from 'meteor/percolate:synced-cron';
 import { TAPi18n } from '/imports/i18n';
 import ImpersonatedUsers from './impersonatedUsers';
@@ -853,7 +853,7 @@ Users.helpers({
       // this preserves their db sort order for editing
       notification.dbIndex = index;
       if (!notification.activityObj && typeof(notification.activity) === 'string') {
-        notification.activityObj = ReactiveCache.getActivity(notification.activity);
+        notification.activityObj = ReactiveMiniMongoIndex.getActivityWithId(notification.activity);
       }
     }
     // this sorts them newest to oldest to match Trello's behavior