diff --git a/client/components/rules/ruleDetails.js b/client/components/rules/ruleDetails.js index f0e13de35..0f8275985 100644 --- a/client/components/rules/ruleDetails.js +++ b/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, }); diff --git a/imports/reactiveCache.js b/imports/reactiveCache.js index a0d7722ff..df9ae8d37 100644 --- a/imports/reactiveCache.js +++ b/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) { diff --git a/models/triggers.js b/models/triggers.js index b08cedfb5..6983955c6 100644 --- a/models/triggers.js +++ b/models/triggers.js @@ -41,9 +41,7 @@ Triggers.helpers({ }, getRule() { - return Rules.findOne({ - triggerId: this._id, - }); + return ReactiveCache.getRule({ triggerId: this._id }); }, fromList() {