Browse Source

Move every Rules.findOne(idOrFirstObjectSelector, options) to the ReactiveCache

Martin Filser 2 years ago
parent
commit
c262620993
3 changed files with 55 additions and 9 deletions
  1. 4 6
      client/components/rules/ruleDetails.js
  2. 50 0
      imports/reactiveCache.js
  3. 1 3
      models/triggers.js

+ 4 - 6
client/components/rules/ruleDetails.js

@@ -1,3 +1,5 @@
+import { ReactiveCache } from '/imports/reactiveCache';
+
 BlazeComponent.extendComponent({
   onCreated() {
     this.subscribe('allRules');
@@ -7,9 +9,7 @@ BlazeComponent.extendComponent({
 
   trigger() {
     const ruleId = this.data().ruleId;
-    const rule = Rules.findOne({
-      _id: ruleId.get(),
-    });
+    const rule = ReactiveCache.getRule(ruleId.get());
     const trigger = Triggers.findOne({
       _id: rule.triggerId,
     });
@@ -19,9 +19,7 @@ BlazeComponent.extendComponent({
   },
   action() {
     const ruleId = this.data().ruleId;
-    const rule = Rules.findOne({
-      _id: ruleId.get(),
-    });
+    const rule = ReactiveCache.getRule(ruleId.get());
     const action = Actions.findOne({
       _id: rule.actionId,
     });

+ 50 - 0
imports/reactiveCache.js

@@ -107,6 +107,14 @@ ReactiveCacheServer = {
     const ret = Activities.find(selector, options).fetch();
     return ret;
   },
+  getRule(idOrFirstObjectSelector, options) {
+    const ret = Rules.findOne(idOrFirstObjectSelector, options);
+    return ret;
+  },
+  getRules(selector, options) {
+    const ret = Rules.find(selector, options).fetch();
+    return ret;
+  },
   getCurrentSetting() {
     const ret = Settings.findOne();
     return ret;
@@ -433,6 +441,30 @@ ReactiveCacheClient = {
     const ret = this.__activities.get(Jsons.stringify(select));
     return ret;
   },
+  getRule(idOrFirstObjectSelector, options) {
+    const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
+    if (!this.__rule) {
+      this.__rule = new DataCache(_idOrFirstObjectSelect => {
+        const __select = Jsons.parse(_idOrFirstObjectSelect);
+        const _ret = Rules.findOne(__select.idOrFirstObjectSelector, __select.options);
+        return _ret;
+      });
+    }
+    const ret = this.__rule.get(Jsons.stringify(idOrFirstObjectSelect));
+    return ret;
+  },
+  getRules(selector, options) {
+    const select = {selector, options}
+    if (!this.__rules) {
+      this.__rules = new DataCache(_select => {
+        const __select = Jsons.parse(_select);
+        const _ret = Rules.find(__select.selector, __select.options).fetch();
+        return _ret;
+      });
+    }
+    const ret = this.__rules.get(Jsons.stringify(select));
+    return ret;
+  },
   getCurrentSetting() {
     if (!this.__currentSetting || !this.__currentSetting.get()) {
       this.__currentSetting = new DataCache(() => {
@@ -696,6 +728,24 @@ ReactiveCache = {
     }
     return ret;
   },
+  getRule(idOrFirstObjectSelector, options) {
+    let ret;
+    if (Meteor.isServer) {
+      ret = ReactiveCacheServer.getRule(idOrFirstObjectSelector, options);
+    } else {
+      ret = ReactiveCacheClient.getRule(idOrFirstObjectSelector, options);
+    }
+    return ret;
+  },
+  getRules(selector, options) {
+    let ret;
+    if (Meteor.isServer) {
+      ret = ReactiveCacheServer.getRules(selector, options);
+    } else {
+      ret = ReactiveCacheClient.getRules(selector, options);
+    }
+    return ret;
+  },
   getCurrentSetting() {
     let ret;
     if (Meteor.isServer) {

+ 1 - 3
models/triggers.js

@@ -41,9 +41,7 @@ Triggers.helpers({
   },
 
   getRule() {
-    return Rules.findOne({
-      triggerId: this._id,
-    });
+    return ReactiveCache.getRule({ triggerId: this._id });
   },
 
   fromList() {