lists.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. Lists = new Mongo.Collection('lists');
  2. Lists.attachSchema(new SimpleSchema({
  3. title: {
  4. type: String,
  5. },
  6. archived: {
  7. type: Boolean,
  8. },
  9. boardId: {
  10. type: String,
  11. },
  12. createdAt: {
  13. type: Date,
  14. denyUpdate: true,
  15. },
  16. sort: {
  17. type: Number,
  18. decimal: true,
  19. // XXX We should probably provide a default
  20. optional: true,
  21. },
  22. updatedAt: {
  23. type: Date,
  24. denyInsert: true,
  25. optional: true,
  26. },
  27. }));
  28. Lists.allow({
  29. insert(userId, doc) {
  30. return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
  31. },
  32. update(userId, doc) {
  33. return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
  34. },
  35. remove(userId, doc) {
  36. return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
  37. },
  38. fetch: ['boardId'],
  39. });
  40. Lists.helpers({
  41. cards() {
  42. return Cards.find(Filter.mongoSelector({
  43. listId: this._id,
  44. archived: false,
  45. }), { sort: ['sort'] });
  46. },
  47. allCards() {
  48. return Cards.find({ listId: this._id });
  49. },
  50. board() {
  51. return Boards.findOne(this.boardId);
  52. },
  53. });
  54. Lists.mutations({
  55. rename(title) {
  56. return { $set: { title }};
  57. },
  58. archive() {
  59. return { $set: { archived: true }};
  60. },
  61. restore() {
  62. return { $set: { archived: false }};
  63. },
  64. });
  65. Lists.hookOptions.after.update = { fetchPrevious: false };
  66. Lists.before.insert((userId, doc) => {
  67. doc.createdAt = new Date();
  68. doc.archived = false;
  69. if (!doc.userId)
  70. doc.userId = userId;
  71. });
  72. Lists.before.update((userId, doc, fieldNames, modifier) => {
  73. modifier.$set = modifier.$set || {};
  74. modifier.$set.modifiedAt = new Date();
  75. });
  76. if (Meteor.isServer) {
  77. Lists.after.insert((userId, doc) => {
  78. Activities.insert({
  79. userId,
  80. type: 'list',
  81. activityType: 'createList',
  82. boardId: doc.boardId,
  83. listId: doc._id,
  84. });
  85. });
  86. Lists.after.update((userId, doc) => {
  87. if (doc.archived) {
  88. Activities.insert({
  89. userId,
  90. type: 'list',
  91. activityType: 'archivedList',
  92. listId: doc._id,
  93. boardId: doc.boardId,
  94. });
  95. }
  96. });
  97. }