Add two way binding of activities, comments, and attachments

This commit is contained in:
Andrés Manelli 2018-04-18 01:35:46 -03:00
parent 49c415f023
commit 74a01691e3
4 changed files with 46 additions and 10 deletions

View file

@ -21,11 +21,18 @@ BlazeComponent.extendComponent({
'submit .js-new-comment-form'(evt) { 'submit .js-new-comment-form'(evt) {
const input = this.getInput(); const input = this.getInput();
const text = input.val().trim(); const text = input.val().trim();
const card = this.currentData();
let boardId = card.boardId;
let cardId = card._id;
if (card.isImportedCard()) {
boardId = Cards.findOne(card.importedId).boardId;
cardId = card.importedId;
}
if (text) { if (text) {
CardComments.insert({ CardComments.insert({
text, text,
boardId: this.currentData().boardId, boardId,
cardId: this.currentData()._id, cardId,
}); });
resetCommentInput(input); resetCommentInput(input);
Tracker.flush(); Tracker.flush();

View file

@ -57,8 +57,13 @@ Template.cardAttachmentsPopup.events({
const card = this; const card = this;
FS.Utility.eachFile(evt, (f) => { FS.Utility.eachFile(evt, (f) => {
const file = new FS.File(f); const file = new FS.File(f);
file.boardId = card.boardId; if (card.isImportedCard()) {
file.cardId = card._id; file.boardId = Cards.findOne(card.importedId).boardId;
file.cardId = card.importedId;
} else {
file.boardId = card.boardId;
file.cardId = card._id;
}
file.userId = Meteor.userId(); file.userId = Meteor.userId();
const attachment = Attachments.insert(file); const attachment = Attachments.insert(file);

View file

@ -181,19 +181,33 @@ Cards.helpers({
}, },
isAssigned(memberId) { isAssigned(memberId) {
return _.contains(this.members, memberId); return _.contains(this.getMembers(), memberId);
}, },
activities() { activities() {
return Activities.find({cardId: this._id}, {sort: {createdAt: -1}}); if (this.isImportedCard()) {
return Activities.find({cardId: this.importedId}, {sort: {createdAt: -1}});
} else if (this.isImportedBoard()) {
return Activities.find({boardId: this.importedId}, {sort: {createdAt: -1}});
} else {
return Activities.find({cardId: this._id}, {sort: {createdAt: -1}});
}
}, },
comments() { comments() {
return CardComments.find({cardId: this._id}, {sort: {createdAt: -1}}); if (this.isImportedCard()) {
return CardComments.find({cardId: this.importedId}, {sort: {createdAt: -1}});
} else {
return CardComments.find({cardId: this._id}, {sort: {createdAt: -1}});
}
}, },
attachments() { attachments() {
return Attachments.find({cardId: this._id}, {sort: {uploadedAt: -1}}); if (this.isImportedCard()) {
return Attachments.find({cardId: this.importedId}, {sort: {uploadedAt: -1}});
} else {
return Attachments.find({cardId: this._id}, {sort: {uploadedAt: -1}});
}
}, },
cover() { cover() {

View file

@ -99,8 +99,18 @@ Meteor.publishRelations('board', function(boardId) {
// And in the meantime our code below works pretty well -- it's not even a // And in the meantime our code below works pretty well -- it's not even a
// hack! // hack!
this.cursor(Cards.find({ boardId }), function(cardId, card) { this.cursor(Cards.find({ boardId }), function(cardId, card) {
this.cursor(Cards.find({_id: card.importedId})); if (card.type === 'cardType-importedCard') {
this.cursor(Boards.find({_id: card.importedId})); const impCardId = card.importedId;
this.cursor(Cards.find({ _id: impCardId }));
this.cursor(CardComments.find({ cardId: impCardId }));
this.cursor(Activities.find({ cardId: impCardId }));
this.cursor(Attachments.find({ cardId: impCardId }));
this.cursor(Checklists.find({ cardId: impCardId }));
this.cursor(ChecklistItems.find({ cardId: impCardId }));
} else if (card.type === 'cardType-importedBoard') {
this.cursor(Boards.find({ _id: card.importedId}));
}
this.cursor(Activities.find({ cardId }));
this.cursor(CardComments.find({ cardId })); this.cursor(CardComments.find({ cardId }));
this.cursor(Attachments.find({ cardId })); this.cursor(Attachments.find({ cardId }));
this.cursor(Checklists.find({ cardId })); this.cursor(Checklists.find({ cardId }));