1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- ChecklistItems = new Mongo.Collection('checklistItems');
- ChecklistItems.attachSchema(new SimpleSchema({
- title: {
- type: String,
- },
- sort: {
- type: Number,
- decimal: true,
- },
- isFinished: {
- type: Boolean,
- defaultValue: false,
- },
- checklistId: {
- type: String,
- },
- cardId: {
- type: String,
- },
- }));
- ChecklistItems.allow({
- insert(userId, doc) {
- return allowIsBoardMemberByCard(userId, Cards.findOne(doc.cardId));
- },
- update(userId, doc) {
- return allowIsBoardMemberByCard(userId, Cards.findOne(doc.cardId));
- },
- remove(userId, doc) {
- return allowIsBoardMemberByCard(userId, Cards.findOne(doc.cardId));
- },
- fetch: ['userId', 'cardId'],
- });
- ChecklistItems.before.insert((userId, doc) => {
- if (!doc.userId) {
- doc.userId = userId;
- }
- });
- // Mutations
- ChecklistItems.mutations({
- setTitle(title) {
- return { $set: { title } };
- },
- toggleItem() {
- return { $set: { isFinished: !this.isFinished } };
- },
- move(checklistId, sortIndex) {
- const cardId = Checklists.findOne(checklistId).cardId;
- const mutatedFields = {
- cardId,
- checklistId,
- sort: sortIndex,
- };
- return {$set: mutatedFields};
- },
- });
- // Activities helper
- function itemCreation(userId, doc) {
- const card = Cards.findOne(doc.cardId);
- const boardId = card.boardId;
- Activities.insert({
- userId,
- activityType: 'addChecklistItem',
- cardId: doc.cardId,
- boardId,
- checklistId: doc.checklistId,
- checklistItemId: doc._id,
- });
- }
- function itemRemover(userId, doc) {
- Activities.remove({
- checklistItemId: doc._id,
- });
- }
- // Activities
- if (Meteor.isServer) {
- Meteor.startup(() => {
- ChecklistItems._collection._ensureIndex({ checklistId: 1 });
- });
- ChecklistItems.after.insert((userId, doc) => {
- itemCreation(userId, doc);
- });
- ChecklistItems.after.remove((userId, doc) => {
- itemRemover(userId, doc);
- });
- }
|