reactiveCache.js 54 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569
  1. import { DataCache } from '@wekanteam/meteor-reactive-cache';
  2. // Server isn't reactive, so search for the data always.
  3. ReactiveCacheServer = {
  4. getBoard(idOrFirstObjectSelector = {}, options = {}) {
  5. const ret = Boards.findOne(idOrFirstObjectSelector, options);
  6. return ret;
  7. },
  8. getBoards(selector = {}, options = {}, getQuery = false) {
  9. let ret = Boards.find(selector, options);
  10. if (getQuery !== true) {
  11. ret = ret.fetch();
  12. }
  13. return ret;
  14. },
  15. getList(idOrFirstObjectSelector = {}, options = {}) {
  16. const ret = Lists.findOne(idOrFirstObjectSelector, options);
  17. return ret;
  18. },
  19. getLists(selector = {}, options = {}, getQuery = false) {
  20. let ret = Lists.find(selector, options);
  21. if (getQuery !== true) {
  22. ret = ret.fetch();
  23. }
  24. return ret;
  25. },
  26. getSwimlane(idOrFirstObjectSelector = {}, options = {}) {
  27. const ret = Swimlanes.findOne(idOrFirstObjectSelector, options);
  28. return ret;
  29. },
  30. getSwimlanes(selector = {}, options = {}, getQuery = false) {
  31. let ret = Swimlanes.find(selector, options);
  32. if (getQuery !== true) {
  33. ret = ret.fetch();
  34. }
  35. return ret;
  36. },
  37. getChecklist(idOrFirstObjectSelector = {}, options = {}) {
  38. const ret = Checklists.findOne(idOrFirstObjectSelector, options);
  39. return ret;
  40. },
  41. getChecklists(selector = {}, options = {}, getQuery = false) {
  42. let ret = Checklists.find(selector, options);
  43. if (getQuery !== true) {
  44. ret = ret.fetch();
  45. }
  46. return ret;
  47. },
  48. getChecklistItem(idOrFirstObjectSelector = {}, options = {}) {
  49. const ret = ChecklistItems.findOne(idOrFirstObjectSelector, options);
  50. return ret;
  51. },
  52. getChecklistItems(selector = {}, options = {}, getQuery = false) {
  53. let ret = ChecklistItems.find(selector, options);
  54. if (getQuery !== true) {
  55. ret = ret.fetch();
  56. }
  57. return ret;
  58. },
  59. getCard(idOrFirstObjectSelector = {}, options = {}) {
  60. const ret = Cards.findOne(idOrFirstObjectSelector, options);
  61. return ret;
  62. },
  63. getCards(selector = {}, options = {}, getQuery = false) {
  64. let ret = Cards.find(selector, options, options);
  65. if (getQuery !== true) {
  66. ret = ret.fetch();
  67. }
  68. return ret;
  69. },
  70. getCardComment(idOrFirstObjectSelector = {}, options = {}) {
  71. const ret = CardComments.findOne(idOrFirstObjectSelector, options);
  72. return ret;
  73. },
  74. getCardComments(selector = {}, options = {}, getQuery = false) {
  75. let ret = CardComments.find(selector, options);
  76. if (getQuery !== true) {
  77. ret = ret.fetch();
  78. }
  79. return ret;
  80. },
  81. getCardCommentReaction(idOrFirstObjectSelector = {}, options = {}) {
  82. const ret = CardCommentReactions.findOne(idOrFirstObjectSelector, options);
  83. return ret;
  84. },
  85. getCardCommentReactions(selector = {}, options = {}, getQuery = false) {
  86. let ret = CardCommentReactions.find(selector, options);
  87. if (getQuery !== true) {
  88. ret = ret.fetch();
  89. }
  90. return ret;
  91. },
  92. getCustomField(idOrFirstObjectSelector = {}, options = {}) {
  93. const ret = CustomFields.findOne(idOrFirstObjectSelector, options);
  94. return ret;
  95. },
  96. getCustomFields(selector = {}, options = {}, getQuery = false) {
  97. let ret = CustomFields.find(selector, options);
  98. if (getQuery !== true) {
  99. ret = ret.fetch();
  100. }
  101. return ret;
  102. },
  103. getAttachment(idOrFirstObjectSelector = {}, options = {}) {
  104. // Try new structure first
  105. let ret = Attachments.findOne(idOrFirstObjectSelector, options);
  106. if (!ret && typeof idOrFirstObjectSelector === 'string') {
  107. // Fall back to old structure for single attachment lookup
  108. ret = Attachments.getAttachmentWithBackwardCompatibility(idOrFirstObjectSelector);
  109. }
  110. return ret;
  111. },
  112. getAttachments(selector = {}, options = {}, getQuery = false) {
  113. // Try new structure first
  114. let ret = Attachments.find(selector, options);
  115. if (getQuery !== true) {
  116. ret = ret.fetch();
  117. // If no results and we have a cardId selector, try old structure
  118. if (ret.length === 0 && selector['meta.cardId']) {
  119. ret = Attachments.getAttachmentsWithBackwardCompatibility(selector);
  120. }
  121. }
  122. return ret;
  123. },
  124. getAvatar(idOrFirstObjectSelector = {}, options = {}) {
  125. const ret = Avatars.findOne(idOrFirstObjectSelector, options);
  126. return ret;
  127. },
  128. getAvatars(selector = {}, options = {}, getQuery = false) {
  129. let ret = Avatars.find(selector, options);
  130. if (getQuery !== true) {
  131. ret = ret.fetch();
  132. }
  133. return ret;
  134. },
  135. getUser(idOrFirstObjectSelector = {}, options = {}) {
  136. const ret = Users.findOne(idOrFirstObjectSelector, options);
  137. return ret;
  138. },
  139. getUsers(selector = {}, options = {}, getQuery = false) {
  140. let ret = Users.find(selector, options);
  141. if (getQuery !== true) {
  142. ret = ret.fetch();
  143. }
  144. return ret;
  145. },
  146. getOrg(idOrFirstObjectSelector = {}, options = {}) {
  147. const ret = Org.findOne(idOrFirstObjectSelector, options);
  148. return ret;
  149. },
  150. getOrgs(selector = {}, options = {}, getQuery = false) {
  151. let ret = Org.find(selector, options);
  152. if (getQuery !== true) {
  153. ret = ret.fetch();
  154. }
  155. return ret;
  156. },
  157. getTeam(idOrFirstObjectSelector = {}, options = {}) {
  158. const ret = Team.findOne(idOrFirstObjectSelector, options);
  159. return ret;
  160. },
  161. getTeams(selector = {}, options = {}, getQuery = false) {
  162. let ret = Team.find(selector, options);
  163. if (getQuery !== true) {
  164. ret = ret.fetch();
  165. }
  166. return ret;
  167. },
  168. getActivity(idOrFirstObjectSelector = {}, options = {}) {
  169. const ret = Activities.findOne(idOrFirstObjectSelector, options);
  170. return ret;
  171. },
  172. getActivities(selector = {}, options = {}, getQuery = false) {
  173. let ret = Activities.find(selector, options);
  174. if (getQuery !== true) {
  175. ret = ret.fetch();
  176. }
  177. return ret;
  178. },
  179. getRule(idOrFirstObjectSelector = {}, options = {}) {
  180. const ret = Rules.findOne(idOrFirstObjectSelector, options);
  181. return ret;
  182. },
  183. getRules(selector = {}, options = {}, getQuery = false) {
  184. let ret = Rules.find(selector, options);
  185. if (getQuery !== true) {
  186. ret = ret.fetch();
  187. }
  188. return ret;
  189. },
  190. getAction(idOrFirstObjectSelector = {}, options = {}) {
  191. const ret = Actions.findOne(idOrFirstObjectSelector, options);
  192. return ret;
  193. },
  194. getActions(selector = {}, options = {}, getQuery = false) {
  195. let ret = Actions.find(selector, options);
  196. if (getQuery !== true) {
  197. ret = ret.fetch();
  198. }
  199. return ret;
  200. },
  201. getTrigger(idOrFirstObjectSelector = {}, options = {}) {
  202. const ret = Triggers.findOne(idOrFirstObjectSelector, options);
  203. return ret;
  204. },
  205. getTriggers(selector = {}, options = {}, getQuery = false) {
  206. let ret = Triggers.find(selector, options);
  207. if (getQuery !== true) {
  208. ret = ret.fetch();
  209. }
  210. return ret;
  211. },
  212. getImpersonatedUser(idOrFirstObjectSelector = {}, options = {}) {
  213. const ret = ImpersonatedUsers.findOne(idOrFirstObjectSelector, options);
  214. return ret;
  215. },
  216. getImpersonatedUsers(selector = {}, options = {}, getQuery = false) {
  217. let ret = ImpersonatedUsers.find(selector, options);
  218. if (getQuery !== true) {
  219. ret = ret.fetch();
  220. }
  221. return ret;
  222. },
  223. getIntegration(idOrFirstObjectSelector = {}, options = {}) {
  224. const ret = Integrations.findOne(idOrFirstObjectSelector, options);
  225. return ret;
  226. },
  227. getIntegrations(selector = {}, options = {}, getQuery = false) {
  228. let ret = Integrations.find(selector, options);
  229. if (getQuery !== true) {
  230. ret = ret.fetch();
  231. }
  232. return ret;
  233. },
  234. getSessionData(idOrFirstObjectSelector = {}, options = {}) {
  235. const ret = SessionData.findOne(idOrFirstObjectSelector, options);
  236. return ret;
  237. },
  238. getSessionDatas(selector = {}, options = {}, getQuery = false) {
  239. let ret = SessionData.find(selector, options);
  240. if (getQuery !== true) {
  241. ret = ret.fetch();
  242. }
  243. return ret;
  244. },
  245. getInvitationCode(idOrFirstObjectSelector = {}, options = {}) {
  246. const ret = InvitationCodes.findOne(idOrFirstObjectSelector, options);
  247. return ret;
  248. },
  249. getInvitationCodes(selector = {}, options = {}, getQuery = false) {
  250. let ret = InvitationCodes.find(selector, options);
  251. if (getQuery !== true) {
  252. ret = ret.fetch();
  253. }
  254. return ret;
  255. },
  256. getCurrentSetting() {
  257. const ret = Settings.findOne();
  258. return ret;
  259. },
  260. getCurrentUser() {
  261. const ret = Meteor.user();
  262. return ret;
  263. },
  264. getTranslation(idOrFirstObjectSelector = {}, options = {}) {
  265. const ret = Translation.findOne(idOrFirstObjectSelector, options);
  266. return ret;
  267. },
  268. getTranslations(selector = {}, options = {}, getQuery = false) {
  269. let ret = Translation.find(selector, options);
  270. if (getQuery !== true) {
  271. ret = ret.fetch();
  272. }
  273. return ret;
  274. }
  275. }
  276. // only the Client is reactive
  277. // saving the result has a big advantage if the query is big and often searched for the same data again and again
  278. // if the data is changed in the client, the data is saved to the server and depending code is reactive called again
  279. ReactiveCacheClient = {
  280. getBoard(idOrFirstObjectSelector = {}, options = {}) {
  281. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  282. if (!this.__board) {
  283. this.__board = new DataCache(_idOrFirstObjectSelect => {
  284. const __select = EJSON.parse(_idOrFirstObjectSelect);
  285. const _ret = Boards.findOne(__select.idOrFirstObjectSelector, __select.options);
  286. return _ret;
  287. });
  288. }
  289. const ret = this.__board.get(EJSON.stringify(idOrFirstObjectSelect));
  290. return ret;
  291. },
  292. getBoards(selector = {}, options = {}, getQuery = false) {
  293. const select = {selector, options, getQuery}
  294. if (!this.__boards) {
  295. this.__boards = new DataCache(_select => {
  296. const __select = EJSON.parse(_select);
  297. let _ret = Boards.find(__select.selector, __select.options);
  298. if (__select.getQuery !== true) {
  299. _ret = _ret.fetch();
  300. }
  301. return _ret;
  302. });
  303. }
  304. const ret = this.__boards.get(EJSON.stringify(select));
  305. return ret;
  306. },
  307. getList(idOrFirstObjectSelector = {}, options = {}) {
  308. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  309. if (!this.__list) {
  310. this.__list = new DataCache(_idOrFirstObjectSelect => {
  311. const __select = EJSON.parse(_idOrFirstObjectSelect);
  312. const _ret = Lists.findOne(__select.idOrFirstObjectSelector, __select.options);
  313. return _ret;
  314. });
  315. }
  316. const ret = this.__list.get(EJSON.stringify(idOrFirstObjectSelect));
  317. return ret;
  318. },
  319. getLists(selector = {}, options = {}, getQuery = false) {
  320. const select = {selector, options, getQuery}
  321. if (!this.__lists) {
  322. this.__lists = new DataCache(_select => {
  323. const __select = EJSON.parse(_select);
  324. let _ret = Lists.find(__select.selector, __select.options);
  325. if (__select.getQuery !== true) {
  326. _ret = _ret.fetch();
  327. }
  328. return _ret;
  329. });
  330. }
  331. const ret = this.__lists.get(EJSON.stringify(select));
  332. return ret;
  333. },
  334. getSwimlane(idOrFirstObjectSelector = {}, options = {}) {
  335. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  336. if (!this.__swimlane) {
  337. this.__swimlane = new DataCache(_idOrFirstObjectSelect => {
  338. const __select = EJSON.parse(_idOrFirstObjectSelect);
  339. const _ret = Swimlanes.findOne(__select.idOrFirstObjectSelector, __select.options);
  340. return _ret;
  341. });
  342. }
  343. const ret = this.__swimlane.get(EJSON.stringify(idOrFirstObjectSelect));
  344. return ret;
  345. },
  346. getSwimlanes(selector = {}, options = {}, getQuery = false) {
  347. const select = {selector, options, getQuery}
  348. if (!this.__swimlanes) {
  349. this.__swimlanes = new DataCache(_select => {
  350. const __select = EJSON.parse(_select);
  351. let _ret = Swimlanes.find(__select.selector, __select.options);
  352. if (__select.getQuery !== true) {
  353. _ret = _ret.fetch();
  354. }
  355. return _ret;
  356. });
  357. }
  358. const ret = this.__swimlanes.get(EJSON.stringify(select));
  359. return ret;
  360. },
  361. getChecklist(idOrFirstObjectSelector = {}, options = {}) {
  362. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  363. if (!this.__checklist) {
  364. this.__checklist = new DataCache(_idOrFirstObjectSelect => {
  365. const __select = EJSON.parse(_idOrFirstObjectSelect);
  366. const _ret = Checklists.findOne(__select.idOrFirstObjectSelector, __select.options);
  367. return _ret;
  368. });
  369. }
  370. const ret = this.__checklist.get(EJSON.stringify(idOrFirstObjectSelect));
  371. return ret;
  372. },
  373. getChecklists(selector = {}, options = {}, getQuery = false) {
  374. const select = {selector, options, getQuery}
  375. if (!this.__checklists) {
  376. this.__checklists = new DataCache(_select => {
  377. const __select = EJSON.parse(_select);
  378. let _ret = Checklists.find(__select.selector, __select.options);
  379. if (__select.getQuery !== true) {
  380. _ret = _ret.fetch();
  381. }
  382. return _ret;
  383. });
  384. }
  385. const ret = this.__checklists.get(EJSON.stringify(select));
  386. return ret;
  387. },
  388. getChecklistItem(idOrFirstObjectSelector = {}, options = {}) {
  389. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  390. if (!this.__checklistItem) {
  391. this.__checklistItem = new DataCache(_idOrFirstObjectSelect => {
  392. const __select = EJSON.parse(_idOrFirstObjectSelect);
  393. const _ret = ChecklistItems.findOne(__select.idOrFirstObjectSelector, __select.options);
  394. return _ret;
  395. });
  396. }
  397. const ret = this.__checklistItem.get(EJSON.stringify(idOrFirstObjectSelect));
  398. return ret;
  399. },
  400. getChecklistItems(selector = {}, options = {}, getQuery = false) {
  401. const select = {selector, options, getQuery}
  402. if (!this.__checklistItems) {
  403. this.__checklistItems = new DataCache(_select => {
  404. const __select = EJSON.parse(_select);
  405. let _ret = ChecklistItems.find(__select.selector, __select.options);
  406. if (__select.getQuery !== true) {
  407. _ret = _ret.fetch();
  408. }
  409. return _ret;
  410. });
  411. }
  412. const ret = this.__checklistItems.get(EJSON.stringify(select));
  413. return ret;
  414. },
  415. getCard(idOrFirstObjectSelector = {}, options = {}) {
  416. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  417. if (!this.__card) {
  418. this.__card = new DataCache(_idOrFirstObjectSelect => {
  419. const __select = EJSON.parse(_idOrFirstObjectSelect);
  420. const _ret = Cards.findOne(__select.idOrFirstObjectSelector, __select.options);
  421. return _ret;
  422. });
  423. }
  424. const ret = this.__card.get(EJSON.stringify(idOrFirstObjectSelect));
  425. return ret;
  426. },
  427. getCards(selector = {}, options = {}, getQuery = false) {
  428. const select = {selector, options, getQuery}
  429. if (!this.__cards) {
  430. this.__cards = new DataCache(_select => {
  431. const __select = EJSON.parse(_select);
  432. let _ret = Cards.find(__select.selector, __select.options);
  433. if (__select.getQuery !== true) {
  434. _ret = _ret.fetch();
  435. }
  436. return _ret;
  437. });
  438. }
  439. const ret = this.__cards.get(EJSON.stringify(select));
  440. return ret;
  441. },
  442. getCardComment(idOrFirstObjectSelector = {}, options = {}) {
  443. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  444. if (!this.__cardComment) {
  445. this.__cardComment = new DataCache(_idOrFirstObjectSelect => {
  446. const __select = EJSON.parse(_idOrFirstObjectSelect);
  447. const _ret = CardComments.findOne(__select.idOrFirstObjectSelector, __select.options);
  448. return _ret;
  449. });
  450. }
  451. const ret = this.__cardComment.get(EJSON.stringify(idOrFirstObjectSelect));
  452. return ret;
  453. },
  454. getCardComments(selector = {}, options = {}, getQuery = false) {
  455. const select = {selector, options, getQuery}
  456. if (!this.__cardComments) {
  457. this.__cardComments = new DataCache(_select => {
  458. const __select = EJSON.parse(_select);
  459. let _ret = CardComments.find(__select.selector, __select.options);
  460. if (__select.getQuery !== true) {
  461. _ret = _ret.fetch();
  462. }
  463. return _ret;
  464. });
  465. }
  466. const ret = this.__cardComments.get(EJSON.stringify(select));
  467. return ret;
  468. },
  469. getCardCommentReaction(idOrFirstObjectSelector = {}, options = {}) {
  470. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  471. if (!this.__cardCommentReaction) {
  472. this.__cardCommentReaction = new DataCache(_idOrFirstObjectSelect => {
  473. const __select = EJSON.parse(_idOrFirstObjectSelect);
  474. const _ret = CardCommentReactions.findOne(__select.idOrFirstObjectSelector, __select.options);
  475. return _ret;
  476. });
  477. }
  478. const ret = this.__cardCommentReaction.get(EJSON.stringify(idOrFirstObjectSelect));
  479. return ret;
  480. },
  481. getCardCommentReactions(selector = {}, options = {}, getQuery = false) {
  482. const select = {selector, options, getQuery}
  483. if (!this.__cardCommentReactions) {
  484. this.__cardCommentReactions = new DataCache(_select => {
  485. const __select = EJSON.parse(_select);
  486. let _ret = CardCommentReactions.find(__select.selector, __select.options);
  487. if (__select.getQuery !== true) {
  488. _ret = _ret.fetch();
  489. }
  490. return _ret;
  491. });
  492. }
  493. const ret = this.__cardCommentReactions.get(EJSON.stringify(select));
  494. return ret;
  495. },
  496. getCustomField(idOrFirstObjectSelector = {}, options = {}) {
  497. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  498. if (!this.__customField) {
  499. this.__customField = new DataCache(_idOrFirstObjectSelect => {
  500. const __select = EJSON.parse(_idOrFirstObjectSelect);
  501. const _ret = CustomFields.findOne(__select.idOrFirstObjectSelector, __select.options);
  502. return _ret;
  503. });
  504. }
  505. const ret = this.__customField.get(EJSON.stringify(idOrFirstObjectSelect));
  506. return ret;
  507. },
  508. getCustomFields(selector = {}, options = {}, getQuery = false) {
  509. const select = {selector, options, getQuery}
  510. if (!this.__customFields) {
  511. this.__customFields = new DataCache(_select => {
  512. const __select = EJSON.parse(_select);
  513. let _ret = CustomFields.find(__select.selector, __select.options);
  514. if (__select.getQuery !== true) {
  515. _ret = _ret.fetch();
  516. }
  517. return _ret;
  518. });
  519. }
  520. const ret = this.__customFields.get(EJSON.stringify(select));
  521. return ret;
  522. },
  523. getAttachment(idOrFirstObjectSelector = {}, options = {}) {
  524. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  525. if (!this.__attachment) {
  526. this.__attachment = new DataCache(_idOrFirstObjectSelect => {
  527. const __select = EJSON.parse(_idOrFirstObjectSelect);
  528. // Try new structure first
  529. let _ret = Attachments.findOne(__select.idOrFirstObjectSelector, __select.options);
  530. if (!_ret && typeof __select.idOrFirstObjectSelector === 'string') {
  531. // Fall back to old structure for single attachment lookup
  532. _ret = Attachments.getAttachmentWithBackwardCompatibility(__select.idOrFirstObjectSelector);
  533. }
  534. return _ret;
  535. });
  536. }
  537. const ret = this.__attachment.get(EJSON.stringify(idOrFirstObjectSelect));
  538. return ret;
  539. },
  540. getAttachments(selector = {}, options = {}, getQuery = false) {
  541. const select = {selector, options, getQuery}
  542. if (!this.__attachments) {
  543. this.__attachments = new DataCache(_select => {
  544. const __select = EJSON.parse(_select);
  545. // Try new structure first
  546. let _ret = Attachments.find(__select.selector, __select.options);
  547. if (__select.getQuery !== true) {
  548. _ret = _ret.fetch();
  549. // If no results and we have a cardId selector, try old structure
  550. if (_ret.length === 0 && __select.selector['meta.cardId']) {
  551. _ret = Attachments.getAttachmentsWithBackwardCompatibility(__select.selector);
  552. }
  553. }
  554. return _ret;
  555. });
  556. }
  557. const ret = this.__attachments.get(EJSON.stringify(select));
  558. return ret;
  559. },
  560. getAvatar(idOrFirstObjectSelector = {}, options = {}) {
  561. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  562. if (!this.__avatar) {
  563. this.__avatar = new DataCache(_idOrFirstObjectSelect => {
  564. const __select = EJSON.parse(_idOrFirstObjectSelect);
  565. const _ret = Avatars.findOne(__select.idOrFirstObjectSelector, __select.options);
  566. return _ret;
  567. });
  568. }
  569. const ret = this.__avatar.get(EJSON.stringify(idOrFirstObjectSelect));
  570. return ret;
  571. },
  572. getAvatars(selector = {}, options = {}, getQuery = false) {
  573. const select = {selector, options, getQuery}
  574. if (!this.__avatars) {
  575. this.__avatars = new DataCache(_select => {
  576. const __select = EJSON.parse(_select);
  577. let _ret = Avatars.find(__select.selector, __select.options);
  578. if (__select.getQuery !== true) {
  579. _ret = _ret.fetch();
  580. }
  581. return _ret;
  582. });
  583. }
  584. const ret = this.__avatars.get(EJSON.stringify(select));
  585. return ret;
  586. },
  587. getUser(idOrFirstObjectSelector = {}, options = {}) {
  588. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  589. if (!this.__user) {
  590. this.__user = new DataCache(_idOrFirstObjectSelect => {
  591. const __select = EJSON.parse(_idOrFirstObjectSelect);
  592. const _ret = Users.findOne(__select.idOrFirstObjectSelector, __select.options);
  593. return _ret;
  594. });
  595. }
  596. const ret = this.__user.get(EJSON.stringify(idOrFirstObjectSelect));
  597. return ret;
  598. },
  599. getUsers(selector = {}, options = {}, getQuery = false) {
  600. const select = {selector, options, getQuery}
  601. if (!this.__users) {
  602. this.__users = new DataCache(_select => {
  603. const __select = EJSON.parse(_select);
  604. let _ret = Users.find(__select.selector, __select.options);
  605. if (__select.getQuery !== true) {
  606. _ret = _ret.fetch();
  607. }
  608. return _ret;
  609. });
  610. }
  611. const ret = this.__users.get(EJSON.stringify(select));
  612. return ret;
  613. },
  614. getOrg(idOrFirstObjectSelector = {}, options = {}) {
  615. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  616. if (!this.__org) {
  617. this.__org = new DataCache(_idOrFirstObjectSelect => {
  618. const __select = EJSON.parse(_idOrFirstObjectSelect);
  619. const _ret = Org.findOne(__select.idOrFirstObjectSelector, __select.options);
  620. return _ret;
  621. });
  622. }
  623. const ret = this.__org.get(EJSON.stringify(idOrFirstObjectSelect));
  624. return ret;
  625. },
  626. getOrgs(selector = {}, options = {}, getQuery = false) {
  627. const select = {selector, options, getQuery}
  628. if (!this.__orgs) {
  629. this.__orgs = new DataCache(_select => {
  630. const __select = EJSON.parse(_select);
  631. let _ret = Org.find(__select.selector, __select.options);
  632. if (__select.getQuery !== true) {
  633. _ret = _ret.fetch();
  634. }
  635. return _ret;
  636. });
  637. }
  638. const ret = this.__orgs.get(EJSON.stringify(select));
  639. return ret;
  640. },
  641. getTeam(idOrFirstObjectSelector = {}, options = {}) {
  642. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  643. if (!this.__team) {
  644. this.__team = new DataCache(_idOrFirstObjectSelect => {
  645. const __select = EJSON.parse(_idOrFirstObjectSelect);
  646. const _ret = Team.findOne(__select.idOrFirstObjectSelector, __select.options);
  647. return _ret;
  648. });
  649. }
  650. const ret = this.__team.get(EJSON.stringify(idOrFirstObjectSelect));
  651. return ret;
  652. },
  653. getTeams(selector = {}, options = {}, getQuery = false) {
  654. const select = {selector, options, getQuery}
  655. if (!this.__teams) {
  656. this.__teams = new DataCache(_select => {
  657. const __select = EJSON.parse(_select);
  658. let _ret = Team.find(__select.selector, __select.options);
  659. if (__select.getQuery !== true) {
  660. _ret = _ret.fetch();
  661. }
  662. return _ret;
  663. });
  664. }
  665. const ret = this.__teams.get(EJSON.stringify(select));
  666. return ret;
  667. },
  668. getActivity(idOrFirstObjectSelector = {}, options = {}) {
  669. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  670. if (!this.__activity) {
  671. this.__activity = new DataCache(_idOrFirstObjectSelect => {
  672. const __select = EJSON.parse(_idOrFirstObjectSelect);
  673. const _ret = Activities.findOne(__select.idOrFirstObjectSelector, __select.options);
  674. return _ret;
  675. });
  676. }
  677. const ret = this.__activity.get(EJSON.stringify(idOrFirstObjectSelect));
  678. return ret;
  679. },
  680. getActivities(selector = {}, options = {}, getQuery = false) {
  681. const select = {selector, options, getQuery}
  682. if (!this.__activities) {
  683. this.__activities = new DataCache(_select => {
  684. const __select = EJSON.parse(_select);
  685. let _ret = Activities.find(__select.selector, __select.options);
  686. if (__select.getQuery !== true) {
  687. _ret = _ret.fetch();
  688. }
  689. return _ret;
  690. });
  691. }
  692. const ret = this.__activities.get(EJSON.stringify(select));
  693. return ret;
  694. },
  695. getRule(idOrFirstObjectSelector = {}, options = {}) {
  696. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  697. if (!this.__rule) {
  698. this.__rule = new DataCache(_idOrFirstObjectSelect => {
  699. const __select = EJSON.parse(_idOrFirstObjectSelect);
  700. const _ret = Rules.findOne(__select.idOrFirstObjectSelector, __select.options);
  701. return _ret;
  702. });
  703. }
  704. const ret = this.__rule.get(EJSON.stringify(idOrFirstObjectSelect));
  705. return ret;
  706. },
  707. getRules(selector = {}, options = {}, getQuery = false) {
  708. const select = {selector, options, getQuery}
  709. if (!this.__rules) {
  710. this.__rules = new DataCache(_select => {
  711. const __select = EJSON.parse(_select);
  712. let _ret = Rules.find(__select.selector, __select.options);
  713. if (__select.getQuery !== true) {
  714. _ret = _ret.fetch();
  715. }
  716. return _ret;
  717. });
  718. }
  719. const ret = this.__rules.get(EJSON.stringify(select));
  720. return ret;
  721. },
  722. getAction(idOrFirstObjectSelector = {}, options = {}) {
  723. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  724. if (!this.__action) {
  725. this.__action = new DataCache(_idOrFirstObjectSelect => {
  726. const __select = EJSON.parse(_idOrFirstObjectSelect);
  727. const _ret = Actions.findOne(__select.idOrFirstObjectSelector, __select.options);
  728. return _ret;
  729. });
  730. }
  731. const ret = this.__action.get(EJSON.stringify(idOrFirstObjectSelect));
  732. return ret;
  733. },
  734. getActions(selector = {}, options = {}, getQuery = false) {
  735. const select = {selector, options, getQuery}
  736. if (!this.__actions) {
  737. this.__actions = new DataCache(_select => {
  738. const __select = EJSON.parse(_select);
  739. let _ret = Actions.find(__select.selector, __select.options);
  740. if (__select.getQuery !== true) {
  741. _ret = _ret.fetch();
  742. }
  743. return _ret;
  744. });
  745. }
  746. const ret = this.__actions.get(EJSON.stringify(select));
  747. return ret;
  748. },
  749. getTrigger(idOrFirstObjectSelector = {}, options = {}) {
  750. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  751. if (!this.__trigger) {
  752. this.__trigger = new DataCache(_idOrFirstObjectSelect => {
  753. const __select = EJSON.parse(_idOrFirstObjectSelect);
  754. const _ret = Triggers.findOne(__select.idOrFirstObjectSelector, __select.options);
  755. return _ret;
  756. });
  757. }
  758. const ret = this.__trigger.get(EJSON.stringify(idOrFirstObjectSelect));
  759. return ret;
  760. },
  761. getTriggers(selector = {}, options = {}, getQuery = false) {
  762. const select = {selector, options, getQuery}
  763. if (!this.__triggers) {
  764. this.__triggers = new DataCache(_select => {
  765. const __select = EJSON.parse(_select);
  766. let _ret = Triggers.find(__select.selector, __select.options);
  767. if (__select.getQuery !== true) {
  768. _ret = _ret.fetch();
  769. }
  770. return _ret;
  771. });
  772. }
  773. const ret = this.__triggers.get(EJSON.stringify(select));
  774. return ret;
  775. },
  776. getImpersonatedUser(idOrFirstObjectSelector = {}, options = {}) {
  777. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  778. if (!this.__impersonatedUser) {
  779. this.__impersonatedUser = new DataCache(_idOrFirstObjectSelect => {
  780. const __select = EJSON.parse(_idOrFirstObjectSelect);
  781. const _ret = ImpersonatedUsers.findOne(__select.idOrFirstObjectSelector, __select.options);
  782. return _ret;
  783. });
  784. }
  785. const ret = this.__impersonatedUser.get(EJSON.stringify(idOrFirstObjectSelect));
  786. return ret;
  787. },
  788. getImpersonatedUsers(selector = {}, options = {}, getQuery = false) {
  789. const select = {selector, options, getQuery}
  790. if (!this.__impersonatedUsers) {
  791. this.__impersonatedUsers = new DataCache(_select => {
  792. const __select = EJSON.parse(_select);
  793. let _ret = ImpersonatedUsers.find(__select.selector, __select.options);
  794. if (__select.getQuery !== true) {
  795. _ret = _ret.fetch();
  796. }
  797. return _ret;
  798. });
  799. }
  800. const ret = this.__impersonatedUsers.get(EJSON.stringify(select));
  801. return ret;
  802. },
  803. getIntegration(idOrFirstObjectSelector = {}, options = {}) {
  804. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  805. if (!this.__integration) {
  806. this.__integration = new DataCache(_idOrFirstObjectSelect => {
  807. const __select = EJSON.parse(_idOrFirstObjectSelect);
  808. const _ret = Integrations.findOne(__select.idOrFirstObjectSelector, __select.options);
  809. return _ret;
  810. });
  811. }
  812. const ret = this.__integration.get(EJSON.stringify(idOrFirstObjectSelect));
  813. return ret;
  814. },
  815. getIntegrations(selector = {}, options = {}, getQuery = false) {
  816. const select = {selector, options, getQuery}
  817. if (!this.__integrations) {
  818. this.__integrations = new DataCache(_select => {
  819. const __select = EJSON.parse(_select);
  820. let _ret = Integrations.find(__select.selector, __select.options);
  821. if (__select.getQuery !== true) {
  822. _ret = _ret.fetch();
  823. }
  824. return _ret;
  825. });
  826. }
  827. const ret = this.__integrations.get(EJSON.stringify(select));
  828. return ret;
  829. },
  830. getInvitationCode(idOrFirstObjectSelector = {}, options = {}) {
  831. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  832. if (!this.__invitationCode) {
  833. this.__invitationCode = new DataCache(_idOrFirstObjectSelect => {
  834. const __select = EJSON.parse(_idOrFirstObjectSelect);
  835. const _ret = InvitationCodes.findOne(__select.idOrFirstObjectSelector, __select.options);
  836. return _ret;
  837. });
  838. }
  839. const ret = this.__invitationCode.get(EJSON.stringify(idOrFirstObjectSelect));
  840. return ret;
  841. },
  842. getInvitationCodes(selector = {}, options = {}, getQuery = false) {
  843. const select = {selector, options, getQuery}
  844. if (!this.__invitationCodes) {
  845. this.__invitationCodes = new DataCache(_select => {
  846. const __select = EJSON.parse(_select);
  847. let _ret = InvitationCodes.find(__select.selector, __select.options);
  848. if (__select.getQuery !== true) {
  849. _ret = _ret.fetch();
  850. }
  851. return _ret;
  852. });
  853. }
  854. const ret = this.__invitationCodes.get(EJSON.stringify(select));
  855. return ret;
  856. },
  857. getCurrentSetting() {
  858. if (!this.__currentSetting || !this.__currentSetting.get()) {
  859. this.__currentSetting = new DataCache(() => {
  860. const _ret = Settings.findOne();
  861. return _ret;
  862. });
  863. }
  864. const ret = this.__currentSetting.get();
  865. return ret;
  866. },
  867. getCurrentUser() {
  868. if (!this.__currentUser || !this.__currentUser.get()) {
  869. this.__currentUser = new DataCache(() => {
  870. const _ret = Meteor.user();
  871. return _ret;
  872. });
  873. }
  874. const ret = this.__currentUser.get();
  875. return ret;
  876. },
  877. getTranslation(idOrFirstObjectSelector = {}, options = {}) {
  878. const idOrFirstObjectSelect = {idOrFirstObjectSelector, options}
  879. if (!this.__translation) {
  880. this.__translation = new DataCache(_idOrFirstObjectSelect => {
  881. const __select = EJSON.parse(_idOrFirstObjectSelect);
  882. const _ret = Translation.findOne(__select.idOrFirstObjectSelector, __select.options);
  883. return _ret;
  884. });
  885. }
  886. const ret = this.__translation.get(EJSON.stringify(idOrFirstObjectSelect));
  887. return ret;
  888. },
  889. getTranslations(selector = {}, options = {}, getQuery = false) {
  890. const select = {selector, options, getQuery}
  891. if (!this.__translations) {
  892. this.__translations = new DataCache(_select => {
  893. const __select = EJSON.parse(_select);
  894. let _ret = Translation.find(__select.selector, __select.options);
  895. if (__select.getQuery !== true) {
  896. _ret = _ret.fetch();
  897. }
  898. return _ret;
  899. });
  900. }
  901. const ret = this.__translations.get(EJSON.stringify(select));
  902. return ret;
  903. }
  904. }
  905. // global Reactive Cache class to avoid big overhead while searching for the same data often again
  906. // This class calls 2 implementation, for server and client code
  907. //
  908. // having this class here has several advantages:
  909. // - The Programmer hasn't to care about in which context he call's this class
  910. // - having all queries together in 1 class to make it possible to see which queries in Wekan happens, e.g. with console.log
  911. ReactiveCache = {
  912. getBoard(idOrFirstObjectSelector = {}, options = {}) {
  913. let ret;
  914. if (Meteor.isServer) {
  915. ret = ReactiveCacheServer.getBoard(idOrFirstObjectSelector, options);
  916. } else {
  917. ret = ReactiveCacheClient.getBoard(idOrFirstObjectSelector, options);
  918. }
  919. return ret;
  920. },
  921. getBoards(selector = {}, options = {}, getQuery = false) {
  922. let ret;
  923. if (Meteor.isServer) {
  924. ret = ReactiveCacheServer.getBoards(selector, options, getQuery);
  925. } else {
  926. ret = ReactiveCacheClient.getBoards(selector, options, getQuery);
  927. }
  928. return ret;
  929. },
  930. getList(idOrFirstObjectSelector = {}, options = {}) {
  931. let ret;
  932. if (Meteor.isServer) {
  933. ret = ReactiveCacheServer.getList(idOrFirstObjectSelector, options);
  934. } else {
  935. ret = ReactiveCacheClient.getList(idOrFirstObjectSelector, options);
  936. }
  937. return ret;
  938. },
  939. getLists(selector = {}, options = {}, getQuery = false) {
  940. let ret;
  941. if (Meteor.isServer) {
  942. ret = ReactiveCacheServer.getLists(selector, options, getQuery);
  943. } else {
  944. ret = ReactiveCacheClient.getLists(selector, options, getQuery);
  945. }
  946. return ret;
  947. },
  948. getSwimlane(idOrFirstObjectSelector = {}, options = {}) {
  949. let ret;
  950. if (Meteor.isServer) {
  951. ret = ReactiveCacheServer.getSwimlane(idOrFirstObjectSelector, options);
  952. } else {
  953. ret = ReactiveCacheClient.getSwimlane(idOrFirstObjectSelector, options);
  954. }
  955. return ret;
  956. },
  957. getSwimlanes(selector = {}, options = {}, getQuery = false) {
  958. let ret;
  959. if (Meteor.isServer) {
  960. ret = ReactiveCacheServer.getSwimlanes(selector, options, getQuery);
  961. } else {
  962. ret = ReactiveCacheClient.getSwimlanes(selector, options, getQuery);
  963. }
  964. return ret;
  965. },
  966. getChecklist(idOrFirstObjectSelector = {}, options = {}) {
  967. let ret;
  968. if (Meteor.isServer) {
  969. ret = ReactiveCacheServer.getChecklist(idOrFirstObjectSelector, options);
  970. } else {
  971. ret = ReactiveCacheClient.getChecklist(idOrFirstObjectSelector, options);
  972. }
  973. return ret;
  974. },
  975. getChecklists(selector = {}, options = {}, getQuery = false) {
  976. let ret;
  977. if (Meteor.isServer) {
  978. ret = ReactiveCacheServer.getChecklists(selector, options, getQuery);
  979. } else {
  980. ret = ReactiveCacheClient.getChecklists(selector, options, getQuery);
  981. }
  982. return ret;
  983. },
  984. getChecklistItem(idOrFirstObjectSelector = {}, options = {}) {
  985. let ret;
  986. if (Meteor.isServer) {
  987. ret = ReactiveCacheServer.getChecklistItem(idOrFirstObjectSelector, options);
  988. } else {
  989. ret = ReactiveCacheClient.getChecklistItem(idOrFirstObjectSelector, options);
  990. }
  991. return ret;
  992. },
  993. getChecklistItems(selector = {}, options = {}, getQuery = false) {
  994. let ret;
  995. if (Meteor.isServer) {
  996. ret = ReactiveCacheServer.getChecklistItems(selector, options, getQuery);
  997. } else {
  998. ret = ReactiveCacheClient.getChecklistItems(selector, options, getQuery);
  999. }
  1000. return ret;
  1001. },
  1002. getCard(idOrFirstObjectSelector = {}, options = {}, noCache = false) {
  1003. let ret;
  1004. if (Meteor.isServer || noCache === true) {
  1005. ret = ReactiveCacheServer.getCard(idOrFirstObjectSelector, options);
  1006. } else {
  1007. ret = ReactiveCacheClient.getCard(idOrFirstObjectSelector, options);
  1008. }
  1009. return ret;
  1010. },
  1011. getCards(selector = {}, options = {}, getQuery = false) {
  1012. let ret;
  1013. if (Meteor.isServer) {
  1014. ret = ReactiveCacheServer.getCards(selector, options, getQuery);
  1015. } else {
  1016. ret = ReactiveCacheClient.getCards(selector, options, getQuery);
  1017. }
  1018. return ret;
  1019. },
  1020. getCardComment(idOrFirstObjectSelector = {}, options = {}) {
  1021. let ret;
  1022. if (Meteor.isServer) {
  1023. ret = ReactiveCacheServer.getCardComment(idOrFirstObjectSelector, options);
  1024. } else {
  1025. ret = ReactiveCacheClient.getCardComment(idOrFirstObjectSelector, options);
  1026. }
  1027. return ret;
  1028. },
  1029. getCardComments(selector = {}, options = {}, getQuery = false) {
  1030. let ret;
  1031. if (Meteor.isServer) {
  1032. ret = ReactiveCacheServer.getCardComments(selector, options, getQuery);
  1033. } else {
  1034. ret = ReactiveCacheClient.getCardComments(selector, options, getQuery);
  1035. }
  1036. return ret;
  1037. },
  1038. getCardCommentReaction(idOrFirstObjectSelector = {}, options = {}) {
  1039. let ret;
  1040. if (Meteor.isServer) {
  1041. ret = ReactiveCacheServer.getCardCommentReaction(idOrFirstObjectSelector, options);
  1042. } else {
  1043. ret = ReactiveCacheClient.getCardCommentReaction(idOrFirstObjectSelector, options);
  1044. }
  1045. return ret;
  1046. },
  1047. getCardCommentReactions(selector = {}, options = {}, getQuery = false) {
  1048. let ret;
  1049. if (Meteor.isServer) {
  1050. ret = ReactiveCacheServer.getCardCommentReactions(selector, options, getQuery);
  1051. } else {
  1052. ret = ReactiveCacheClient.getCardCommentReactions(selector, options, getQuery);
  1053. }
  1054. return ret;
  1055. },
  1056. getCustomField(idOrFirstObjectSelector = {}, options = {}) {
  1057. let ret;
  1058. if (Meteor.isServer) {
  1059. ret = ReactiveCacheServer.getCustomField(idOrFirstObjectSelector, options);
  1060. } else {
  1061. ret = ReactiveCacheClient.getCustomField(idOrFirstObjectSelector, options);
  1062. }
  1063. return ret;
  1064. },
  1065. getCustomFields(selector = {}, options = {}, getQuery = false) {
  1066. let ret;
  1067. if (Meteor.isServer) {
  1068. ret = ReactiveCacheServer.getCustomFields(selector, options, getQuery);
  1069. } else {
  1070. ret = ReactiveCacheClient.getCustomFields(selector, options, getQuery);
  1071. }
  1072. return ret;
  1073. },
  1074. getAttachment(idOrFirstObjectSelector = {}, options = {}) {
  1075. let ret;
  1076. if (Meteor.isServer) {
  1077. ret = ReactiveCacheServer.getAttachment(idOrFirstObjectSelector, options);
  1078. } else {
  1079. ret = ReactiveCacheClient.getAttachment(idOrFirstObjectSelector, options);
  1080. }
  1081. return ret;
  1082. },
  1083. getAttachments(selector = {}, options = {}, getQuery = false) {
  1084. let ret;
  1085. if (Meteor.isServer) {
  1086. ret = ReactiveCacheServer.getAttachments(selector, options, getQuery);
  1087. } else {
  1088. ret = ReactiveCacheClient.getAttachments(selector, options, getQuery);
  1089. }
  1090. return ret;
  1091. },
  1092. getAvatar(idOrFirstObjectSelector = {}, options = {}) {
  1093. let ret;
  1094. if (Meteor.isServer) {
  1095. ret = ReactiveCacheServer.getAvatar(idOrFirstObjectSelector, options);
  1096. } else {
  1097. ret = ReactiveCacheClient.getAvatar(idOrFirstObjectSelector, options);
  1098. }
  1099. return ret;
  1100. },
  1101. getAvatars(selector = {}, options = {}, getQuery = false) {
  1102. let ret;
  1103. if (Meteor.isServer) {
  1104. ret = ReactiveCacheServer.getAvatars(selector, options, getQuery);
  1105. } else {
  1106. ret = ReactiveCacheClient.getAvatars(selector, options, getQuery);
  1107. }
  1108. return ret;
  1109. },
  1110. getUser(idOrFirstObjectSelector = {}, options = {}) {
  1111. let ret;
  1112. if (Meteor.isServer) {
  1113. ret = ReactiveCacheServer.getUser(idOrFirstObjectSelector, options);
  1114. } else {
  1115. ret = ReactiveCacheClient.getUser(idOrFirstObjectSelector, options);
  1116. }
  1117. return ret;
  1118. },
  1119. getUsers(selector = {}, options = {}, getQuery = false) {
  1120. let ret;
  1121. if (Meteor.isServer) {
  1122. ret = ReactiveCacheServer.getUsers(selector, options, getQuery);
  1123. } else {
  1124. ret = ReactiveCacheClient.getUsers(selector, options, getQuery);
  1125. }
  1126. return ret;
  1127. },
  1128. getOrg(idOrFirstObjectSelector = {}, options = {}) {
  1129. let ret;
  1130. if (Meteor.isServer) {
  1131. ret = ReactiveCacheServer.getOrg(idOrFirstObjectSelector, options);
  1132. } else {
  1133. ret = ReactiveCacheClient.getOrg(idOrFirstObjectSelector, options);
  1134. }
  1135. return ret;
  1136. },
  1137. getOrgs(selector = {}, options = {}, getQuery = false) {
  1138. let ret;
  1139. if (Meteor.isServer) {
  1140. ret = ReactiveCacheServer.getOrgs(selector, options, getQuery);
  1141. } else {
  1142. ret = ReactiveCacheClient.getOrgs(selector, options, getQuery);
  1143. }
  1144. return ret;
  1145. },
  1146. getTeam(idOrFirstObjectSelector = {}, options = {}) {
  1147. let ret;
  1148. if (Meteor.isServer) {
  1149. ret = ReactiveCacheServer.getTeam(idOrFirstObjectSelector, options);
  1150. } else {
  1151. ret = ReactiveCacheClient.getTeam(idOrFirstObjectSelector, options);
  1152. }
  1153. return ret;
  1154. },
  1155. getTeams(selector = {}, options = {}, getQuery = false) {
  1156. let ret;
  1157. if (Meteor.isServer) {
  1158. ret = ReactiveCacheServer.getTeams(selector, options, getQuery);
  1159. } else {
  1160. ret = ReactiveCacheClient.getTeams(selector, options, getQuery);
  1161. }
  1162. return ret;
  1163. },
  1164. getActivity(idOrFirstObjectSelector = {}, options = {}) {
  1165. let ret;
  1166. if (Meteor.isServer) {
  1167. ret = ReactiveCacheServer.getActivity(idOrFirstObjectSelector, options);
  1168. } else {
  1169. ret = ReactiveCacheClient.getActivity(idOrFirstObjectSelector, options);
  1170. }
  1171. return ret;
  1172. },
  1173. getActivities(selector = {}, options = {}, getQuery = false) {
  1174. let ret;
  1175. if (Meteor.isServer) {
  1176. ret = ReactiveCacheServer.getActivities(selector, options, getQuery);
  1177. } else {
  1178. ret = ReactiveCacheClient.getActivities(selector, options, getQuery);
  1179. }
  1180. return ret;
  1181. },
  1182. getRule(idOrFirstObjectSelector = {}, options = {}) {
  1183. let ret;
  1184. if (Meteor.isServer) {
  1185. ret = ReactiveCacheServer.getRule(idOrFirstObjectSelector, options);
  1186. } else {
  1187. ret = ReactiveCacheClient.getRule(idOrFirstObjectSelector, options);
  1188. }
  1189. return ret;
  1190. },
  1191. getRules(selector = {}, options = {}, getQuery = false) {
  1192. let ret;
  1193. if (Meteor.isServer) {
  1194. ret = ReactiveCacheServer.getRules(selector, options, getQuery);
  1195. } else {
  1196. ret = ReactiveCacheClient.getRules(selector, options, getQuery);
  1197. }
  1198. return ret;
  1199. },
  1200. getAction(idOrFirstObjectSelector = {}, options = {}) {
  1201. let ret;
  1202. if (Meteor.isServer) {
  1203. ret = ReactiveCacheServer.getAction(idOrFirstObjectSelector, options);
  1204. } else {
  1205. ret = ReactiveCacheClient.getAction(idOrFirstObjectSelector, options);
  1206. }
  1207. return ret;
  1208. },
  1209. getActions(selector = {}, options = {}, getQuery = false) {
  1210. let ret;
  1211. if (Meteor.isServer) {
  1212. ret = ReactiveCacheServer.getActions(selector, options, getQuery);
  1213. } else {
  1214. ret = ReactiveCacheClient.getActions(selector, options, getQuery);
  1215. }
  1216. return ret;
  1217. },
  1218. getTrigger(idOrFirstObjectSelector = {}, options = {}) {
  1219. let ret;
  1220. if (Meteor.isServer) {
  1221. ret = ReactiveCacheServer.getTrigger(idOrFirstObjectSelector, options);
  1222. } else {
  1223. ret = ReactiveCacheClient.getTrigger(idOrFirstObjectSelector, options);
  1224. }
  1225. return ret;
  1226. },
  1227. getTriggers(selector = {}, options = {}, getQuery = false) {
  1228. let ret;
  1229. if (Meteor.isServer) {
  1230. ret = ReactiveCacheServer.getTriggers(selector, options, getQuery);
  1231. } else {
  1232. ret = ReactiveCacheClient.getTriggers(selector, options, getQuery);
  1233. }
  1234. return ret;
  1235. },
  1236. getImpersonatedUser(idOrFirstObjectSelector = {}, options = {}) {
  1237. let ret;
  1238. if (Meteor.isServer) {
  1239. ret = ReactiveCacheServer.getImpersonatedUser(idOrFirstObjectSelector, options);
  1240. } else {
  1241. ret = ReactiveCacheClient.getImpersonatedUser(idOrFirstObjectSelector, options);
  1242. }
  1243. return ret;
  1244. },
  1245. getImpersonatedUsers(selector = {}, options = {}, getQuery = false) {
  1246. let ret;
  1247. if (Meteor.isServer) {
  1248. ret = ReactiveCacheServer.getImpersonatedUsers(selector, options, getQuery);
  1249. } else {
  1250. ret = ReactiveCacheClient.getImpersonatedUsers(selector, options, getQuery);
  1251. }
  1252. return ret;
  1253. },
  1254. getIntegration(idOrFirstObjectSelector = {}, options = {}) {
  1255. let ret;
  1256. if (Meteor.isServer) {
  1257. ret = ReactiveCacheServer.getIntegration(idOrFirstObjectSelector, options);
  1258. } else {
  1259. ret = ReactiveCacheClient.getIntegration(idOrFirstObjectSelector, options);
  1260. }
  1261. return ret;
  1262. },
  1263. getIntegrations(selector = {}, options = {}, getQuery = false) {
  1264. let ret;
  1265. if (Meteor.isServer) {
  1266. ret = ReactiveCacheServer.getIntegrations(selector, options, getQuery);
  1267. } else {
  1268. ret = ReactiveCacheClient.getIntegrations(selector, options, getQuery);
  1269. }
  1270. return ret;
  1271. },
  1272. getSessionData(idOrFirstObjectSelector = {}, options = {}) {
  1273. // no reactive cache, otherwise global search will not work anymore
  1274. let ret = ReactiveCacheServer.getSessionData(idOrFirstObjectSelector, options);
  1275. return ret;
  1276. },
  1277. getSessionDatas(selector = {}, options = {}, getQuery = false) {
  1278. // no reactive cache, otherwise global search will not work anymore
  1279. let ret = ReactiveCacheServer.getSessionDatas(selector, options, getQuery);
  1280. return ret;
  1281. },
  1282. getInvitationCode(idOrFirstObjectSelector = {}, options = {}) {
  1283. let ret;
  1284. if (Meteor.isServer) {
  1285. ret = ReactiveCacheServer.getInvitationCode(idOrFirstObjectSelector, options);
  1286. } else {
  1287. ret = ReactiveCacheClient.getInvitationCode(idOrFirstObjectSelector, options);
  1288. }
  1289. return ret;
  1290. },
  1291. getInvitationCodes(selector = {}, options = {}, getQuery = false) {
  1292. let ret;
  1293. if (Meteor.isServer) {
  1294. ret = ReactiveCacheServer.getInvitationCodes(selector, options, getQuery);
  1295. } else {
  1296. ret = ReactiveCacheClient.getInvitationCodes(selector, options, getQuery);
  1297. }
  1298. return ret;
  1299. },
  1300. getCurrentSetting() {
  1301. let ret;
  1302. if (Meteor.isServer) {
  1303. ret = ReactiveCacheServer.getCurrentSetting();
  1304. } else {
  1305. ret = ReactiveCacheClient.getCurrentSetting();
  1306. }
  1307. return ret;
  1308. },
  1309. getCurrentUser() {
  1310. let ret;
  1311. if (Meteor.isServer) {
  1312. ret = ReactiveCacheServer.getCurrentUser();
  1313. } else {
  1314. ret = ReactiveCacheClient.getCurrentUser();
  1315. }
  1316. return ret;
  1317. },
  1318. getTranslation(idOrFirstObjectSelector = {}, options = {}) {
  1319. let ret;
  1320. if (Meteor.isServer) {
  1321. ret = ReactiveCacheServer.getTranslation(idOrFirstObjectSelector, options);
  1322. } else {
  1323. ret = ReactiveCacheClient.getTranslation(idOrFirstObjectSelector, options);
  1324. }
  1325. return ret;
  1326. },
  1327. getTranslations(selector = {}, options = {}, getQuery = false) {
  1328. let ret;
  1329. if (Meteor.isServer) {
  1330. ret = ReactiveCacheServer.getTranslations(selector, options, getQuery);
  1331. } else {
  1332. ret = ReactiveCacheClient.getTranslations(selector, options, getQuery);
  1333. }
  1334. return ret;
  1335. },
  1336. }
  1337. // Server isn't reactive, so search for the data always.
  1338. ReactiveMiniMongoIndexServer = {
  1339. getSubTasksWithParentId(parentId, addSelect = {}, options = {}) {
  1340. let ret = []
  1341. if (parentId) {
  1342. ret = ReactiveCache.getCards(
  1343. { parentId,
  1344. ...addSelect,
  1345. }, options);
  1346. }
  1347. return ret;
  1348. },
  1349. getChecklistsWithCardId(cardId, addSelect = {}, options = {}) {
  1350. let ret = []
  1351. if (cardId) {
  1352. ret = ReactiveCache.getChecklists(
  1353. { cardId,
  1354. ...addSelect,
  1355. }, options);
  1356. }
  1357. return ret;
  1358. },
  1359. getChecklistItemsWithChecklistId(checklistId, addSelect = {}, options = {}) {
  1360. let ret = []
  1361. if (checklistId) {
  1362. ret = ReactiveCache.getChecklistItems(
  1363. { checklistId,
  1364. ...addSelect,
  1365. }, options);
  1366. }
  1367. return ret;
  1368. },
  1369. getCardCommentsWithCardId(cardId, addSelect = {}, options = {}) {
  1370. let ret = []
  1371. if (cardId) {
  1372. ret = ReactiveCache.getCardComments(
  1373. { cardId,
  1374. ...addSelect,
  1375. }, options);
  1376. }
  1377. return ret;
  1378. },
  1379. getActivityWithId(activityId, addSelect = {}, options = {}) {
  1380. let ret = []
  1381. if (activityId) {
  1382. ret = ReactiveCache.getActivities(
  1383. { _id: activityId,
  1384. ...addSelect,
  1385. }, options);
  1386. }
  1387. return ret;
  1388. }
  1389. }
  1390. // Client side little MiniMongo DB "Index"
  1391. ReactiveMiniMongoIndexClient = {
  1392. getSubTasksWithParentId(parentId, addSelect = {}, options = {}) {
  1393. let ret = []
  1394. if (parentId) {
  1395. const select = {addSelect, options}
  1396. if (!this.__subTasksWithId) {
  1397. this.__subTasksWithId = new DataCache(_select => {
  1398. const __select = EJSON.parse(_select);
  1399. const _subTasks = ReactiveCache.getCards(
  1400. { parentId: { $exists: true },
  1401. ...__select.addSelect,
  1402. }, __select.options);
  1403. const _ret = _.groupBy(_subTasks, 'parentId')
  1404. return _ret;
  1405. });
  1406. }
  1407. ret = this.__subTasksWithId.get(EJSON.stringify(select));
  1408. if (ret) {
  1409. ret = ret[parentId] || [];
  1410. }
  1411. }
  1412. return ret;
  1413. },
  1414. getChecklistsWithCardId(cardId, addSelect = {}, options = {}) {
  1415. let ret = []
  1416. if (cardId) {
  1417. const select = {addSelect, options}
  1418. if (!this.__checklistsWithId) {
  1419. this.__checklistsWithId = new DataCache(_select => {
  1420. const __select = EJSON.parse(_select);
  1421. const _checklists = ReactiveCache.getChecklists(
  1422. { cardId: { $exists: true },
  1423. ...__select.addSelect,
  1424. }, __select.options);
  1425. const _ret = _.groupBy(_checklists, 'cardId')
  1426. return _ret;
  1427. });
  1428. }
  1429. ret = this.__checklistsWithId.get(EJSON.stringify(select));
  1430. if (ret) {
  1431. ret = ret[cardId] || [];
  1432. }
  1433. }
  1434. return ret;
  1435. },
  1436. getChecklistItemsWithChecklistId(checklistId, addSelect = {}, options = {}) {
  1437. let ret = []
  1438. if (checklistId) {
  1439. const select = {addSelect, options}
  1440. if (!this.__checklistItemsWithId) {
  1441. this.__checklistItemsWithId = new DataCache(_select => {
  1442. const __select = EJSON.parse(_select);
  1443. const _checklistItems = ReactiveCache.getChecklistItems(
  1444. { checklistId: { $exists: true },
  1445. ...__select.addSelect,
  1446. }, __select.options);
  1447. const _ret = _.groupBy(_checklistItems, 'checklistId')
  1448. return _ret;
  1449. });
  1450. }
  1451. ret = this.__checklistItemsWithId.get(EJSON.stringify(select));
  1452. if (ret) {
  1453. if (Meteor.isServer) {
  1454. ret[checklistId] = ReactiveCache.getChecklistItems(
  1455. {checklistId: checklistId,
  1456. ...addSelect
  1457. }, options);
  1458. }
  1459. ret = ret[checklistId] || [];
  1460. }
  1461. }
  1462. return ret;
  1463. },
  1464. getCardCommentsWithCardId(cardId, addSelect = {}, options = {}) {
  1465. let ret = []
  1466. if (cardId) {
  1467. const select = {addSelect, options}
  1468. if (!this.__cardCommentsWithId) {
  1469. this.__cardCommentsWithId = new DataCache(_select => {
  1470. const __select = EJSON.parse(_select);
  1471. const _cardComments = ReactiveCache.getCardComments(
  1472. { cardId: { $exists: true },
  1473. ...__select.addSelect,
  1474. }, __select.options);
  1475. const _ret = _.groupBy(_cardComments, 'cardId')
  1476. return _ret;
  1477. });
  1478. }
  1479. ret = this.__cardCommentsWithId.get(EJSON.stringify(select));
  1480. if (ret) {
  1481. ret = ret[cardId] || [];
  1482. }
  1483. }
  1484. return ret;
  1485. },
  1486. getActivityWithId(activityId, addSelect = {}, options = {}) {
  1487. let ret = []
  1488. if (activityId) {
  1489. const select = {addSelect, options}
  1490. if (!this.__activityWithId) {
  1491. this.__activityWithId = new DataCache(_select => {
  1492. const __select = EJSON.parse(_select);
  1493. const _activities = ReactiveCache.getActivities(
  1494. { _id: { $exists: true },
  1495. ...__select.addSelect,
  1496. }, __select.options);
  1497. const _ret = _.indexBy(_activities, '_id')
  1498. return _ret;
  1499. });
  1500. }
  1501. ret = this.__activityWithId.get(EJSON.stringify(select));
  1502. if (ret) {
  1503. ret = ret[activityId];
  1504. }
  1505. }
  1506. return ret;
  1507. }
  1508. }
  1509. // global Reactive MiniMongo Index Cache class to avoid big overhead while searching for the same data often again
  1510. // This class calls 2 implementation, for server and client code
  1511. //
  1512. // having this class here has several advantages:
  1513. // - The Programmer hasn't to care about in which context he call's this class
  1514. // - having all queries together in 1 class to make it possible to see which queries in Wekan happens, e.g. with console.log
  1515. ReactiveMiniMongoIndex = {
  1516. getSubTasksWithParentId(parentId, addSelect = {}, options = {}) {
  1517. let ret;
  1518. if (Meteor.isServer) {
  1519. ret = ReactiveMiniMongoIndexServer.getSubTasksWithParentId(parentId, addSelect, options);
  1520. } else {
  1521. ret = ReactiveMiniMongoIndexClient.getSubTasksWithParentId(parentId, addSelect, options);
  1522. }
  1523. return ret;
  1524. },
  1525. getChecklistsWithCardId(cardId, addSelect = {}, options = {}) {
  1526. let ret;
  1527. if (Meteor.isServer) {
  1528. ret = ReactiveMiniMongoIndexServer.getChecklistsWithCardId(cardId, addSelect, options);
  1529. } else {
  1530. ret = ReactiveMiniMongoIndexClient.getChecklistsWithCardId(cardId, addSelect, options);
  1531. }
  1532. return ret;
  1533. },
  1534. getChecklistItemsWithChecklistId(checklistId, addSelect = {}, options = {}) {
  1535. let ret;
  1536. if (Meteor.isServer) {
  1537. ret = ReactiveMiniMongoIndexServer.getChecklistItemsWithChecklistId(checklistId, addSelect, options);
  1538. } else {
  1539. ret = ReactiveMiniMongoIndexClient.getChecklistItemsWithChecklistId(checklistId, addSelect, options);
  1540. }
  1541. return ret;
  1542. },
  1543. getCardCommentsWithCardId(cardId, addSelect = {}, options = {}) {
  1544. let ret;
  1545. if (Meteor.isServer) {
  1546. ret = ReactiveMiniMongoIndexServer.getCardCommentsWithCardId(cardId, addSelect, options);
  1547. } else {
  1548. ret = ReactiveMiniMongoIndexClient.getCardCommentsWithCardId(cardId, addSelect, options);
  1549. }
  1550. return ret;
  1551. },
  1552. getActivityWithId(activityId, addSelect = {}, options = {}) {
  1553. let ret;
  1554. if (Meteor.isServer) {
  1555. ret = ReactiveMiniMongoIndexServer.getActivityWithId(activityId, addSelect, options);
  1556. } else {
  1557. ret = ReactiveMiniMongoIndexClient.getActivityWithId(activityId, addSelect, options);
  1558. }
  1559. return ret;
  1560. }
  1561. }
  1562. export { ReactiveCache, ReactiveMiniMongoIndex };