triggers.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import { ReactiveCache } from '/imports/reactiveCache';
  2. import { Meteor } from 'meteor/meteor';
  3. Triggers = new Mongo.Collection('triggers');
  4. Triggers.mutations({
  5. rename(description) {
  6. return {
  7. $set: {
  8. description,
  9. },
  10. };
  11. },
  12. });
  13. Triggers.before.insert((userId, doc) => {
  14. doc.createdAt = new Date();
  15. doc.updatedAt = doc.createdAt;
  16. });
  17. Triggers.before.update((userId, doc, fieldNames, modifier) => {
  18. modifier.$set = modifier.$set || {};
  19. modifier.$set.updatedAt = new Date();
  20. });
  21. Triggers.allow({
  22. insert(userId, doc) {
  23. return allowIsBoardAdmin(userId, ReactiveCache.getBoard(doc.boardId));
  24. },
  25. update(userId, doc) {
  26. return allowIsBoardAdmin(userId, ReactiveCache.getBoard(doc.boardId));
  27. },
  28. remove(userId, doc) {
  29. return allowIsBoardAdmin(userId, ReactiveCache.getBoard(doc.boardId));
  30. },
  31. });
  32. Triggers.helpers({
  33. description() {
  34. return this.desc;
  35. },
  36. getRule() {
  37. return Rules.findOne({
  38. triggerId: this._id,
  39. });
  40. },
  41. fromList() {
  42. return Lists.findOne(this.fromId);
  43. },
  44. toList() {
  45. return Lists.findOne(this.toId);
  46. },
  47. findList(title) {
  48. return Lists.findOne({
  49. title,
  50. });
  51. },
  52. labels() {
  53. const boardLabels = this.board().labels;
  54. const cardLabels = _.filter(boardLabels, label => {
  55. return _.contains(this.labelIds, label._id);
  56. });
  57. return cardLabels;
  58. },
  59. });
  60. if (Meteor.isServer) {
  61. Meteor.startup(() => {
  62. Triggers._collection.createIndex({ modifiedAt: -1 });
  63. });
  64. }
  65. export default Triggers;