From 538e1971475f17ad4fb7d4076c1a107a567bcae7 Mon Sep 17 00:00:00 2001 From: Martin Filser Date: Sun, 12 Mar 2023 20:07:53 +0100 Subject: [PATCH] Move every Avatars.find(idOrFirstObjectSelector, options) to the ReactiveCache --- client/components/users/userAvatar.js | 3 +- imports/reactiveCache.js | 56 +++++++++++++++++++++++++++ server/publications/avatars.js | 2 +- 3 files changed, 59 insertions(+), 2 deletions(-) diff --git a/client/components/users/userAvatar.js b/client/components/users/userAvatar.js index 91b532dad..8682f4a27 100644 --- a/client/components/users/userAvatar.js +++ b/client/components/users/userAvatar.js @@ -172,7 +172,8 @@ BlazeComponent.extendComponent({ }, uploadedAvatars() { - return Avatars.find({ userId: Meteor.userId() }).each(); + const ret = ReactiveCache.getAvatars({ userId: Meteor.userId() }, {}, true).each(); + return ret; }, isSelected() { diff --git a/imports/reactiveCache.js b/imports/reactiveCache.js index 706d54090..50a230b21 100644 --- a/imports/reactiveCache.js +++ b/imports/reactiveCache.js @@ -113,6 +113,17 @@ ReactiveCacheServer = { } return ret; }, + getAvatar(idOrFirstObjectSelector, options) { + const ret = Avatars.findOne(idOrFirstObjectSelector, options); + return ret; + }, + getAvatars(selector, options, getQuery) { + let ret = Avatars.find(selector, options); + if (getQuery !== true) { + ret = ret.fetch(); + } + return ret; + }, getUser(idOrFirstObjectSelector, options) { const ret = Users.findOne(idOrFirstObjectSelector, options); return ret; @@ -518,6 +529,33 @@ ReactiveCacheClient = { const ret = this.__attachments.get(Jsons.stringify(select)); return ret; }, + getAvatar(idOrFirstObjectSelector, options) { + const idOrFirstObjectSelect = {idOrFirstObjectSelector, options} + if (!this.__avatar) { + this.__avatar = new DataCache(_idOrFirstObjectSelect => { + const __select = Jsons.parse(_idOrFirstObjectSelect); + const _ret = Avatars.findOne(__select.idOrFirstObjectSelector, __select.options); + return _ret; + }); + } + const ret = this.__avatar.get(Jsons.stringify(idOrFirstObjectSelect)); + return ret; + }, + getAvatars(selector, options, getQuery) { + const select = {selector, options, getQuery} + if (!this.__avatars) { + this.__avatars = new DataCache(_select => { + const __select = Jsons.parse(_select); + let _ret = Avatars.find(__select.selector, __select.options); + if (__select.getQuery !== true) { + _ret = _ret.fetch(); + } + return _ret; + }); + } + const ret = this.__avatars.get(Jsons.stringify(select)); + return ret; + }, getUser(idOrFirstObjectSelector, options) { const idOrFirstObjectSelect = {idOrFirstObjectSelector, options} if (!this.__user) { @@ -997,6 +1035,24 @@ ReactiveCache = { } return ret; }, + getAvatar(idOrFirstObjectSelector, options) { + let ret; + if (Meteor.isServer) { + ret = ReactiveCacheServer.getAvatar(idOrFirstObjectSelector, options); + } else { + ret = ReactiveCacheClient.getAvatar(idOrFirstObjectSelector, options); + } + return ret; + }, + getAvatars(selector, options, getQuery) { + let ret; + if (Meteor.isServer) { + ret = ReactiveCacheServer.getAvatars(selector, options, getQuery); + } else { + ret = ReactiveCacheClient.getAvatars(selector, options, getQuery); + } + return ret; + }, getUser(idOrFirstObjectSelector, options) { let ret; if (Meteor.isServer) { diff --git a/server/publications/avatars.js b/server/publications/avatars.js index 22c05d3db..47f9f0bdd 100644 --- a/server/publications/avatars.js +++ b/server/publications/avatars.js @@ -1,5 +1,5 @@ import Avatars from '../../models/avatars'; Meteor.publish('my-avatars', function() { - const ret = Avatars.find({ userId: this.userId }).cursor; + const ret = ReactiveCache.getAvatars({ userId: this.userId }, {}, true).cursor; return ret; });