Allow description and member two way binding

This commit is contained in:
Andrés Manelli 2018-04-17 01:55:57 -03:00
parent a93de07fb9
commit 0a62089df0
6 changed files with 82 additions and 14 deletions

View file

@ -55,7 +55,7 @@ template(name="cardDetails")
.card-details-items
.card-details-item.card-details-item-members
h3.card-details-item-title {{_ 'members'}}
each members
each getMembers
+userAvatar(userId=this cardId=../_id)
| {{! XXX Hack to hide syntaxic coloration /// }}
if canModifyCard
@ -92,15 +92,15 @@ template(name="cardDetails")
h3.card-details-item-title {{_ 'description'}}
+inlinedCardDescription(classNames="card-description js-card-description")
+editor(autofocus=true)
| {{getUnsavedValue 'cardDescription' _id description}}
| {{getUnsavedValue 'cardDescription' _id getDescription}}
.edit-controls.clearfix
button.primary(type="submit") {{_ 'save'}}
a.fa.fa-times-thin.js-close-inlined-form
else
a.js-open-inlined-form
if description
if getDescription
+viewer
= description
= getDescription
else
| {{_ 'edit'}}
if (hasUnsavedValue 'cardDescription' _id)

View file

@ -43,8 +43,7 @@ BlazeComponent.extendComponent({
},
canModifyCard() {
return Meteor.user() && Meteor.user().isBoardMember() &&
!Meteor.user().isCommentOnly() && !this.currentData().isImported();
return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
},
scrollParentContainer() {
@ -275,7 +274,7 @@ BlazeComponent.extendComponent({
close(isReset = false) {
if (this.isOpen.get() && !isReset) {
const draft = this.getValue().trim();
if (draft !== Cards.findOne(Session.get('currentCard')).description) {
if (draft !== Cards.findOne(Session.get('currentCard')).getDescription()) {
UnsavedEdits.set(this._getUnsavedEditKey(), this.getValue());
}
}

View file

@ -57,9 +57,9 @@ template(name="minicard")
+viewer
= trueValue
if members
if getMembers
.minicard-members.js-minicard-members
each members
each getMembers
+userAvatar(userId=this)
.badges

View file

@ -300,9 +300,10 @@ BlazeComponent.extendComponent({
// Swimlane where to insert card
const swimlane = $(Popup._getTopStack().openerElement).closest('.js-swimlane');
this.swimlaneId = '';
if (board.view === 'board-view-swimlanes')
const boardView = Meteor.user().profile.boardView;
if (boardView === 'board-view-swimlanes')
this.swimlaneId = Blaze.getData(swimlane[0])._id;
else
else if (boardView === 'board-view-lists')
this.swimlaneId = Swimlanes.findOne({boardId: this.boardId})._id;
},
@ -382,7 +383,6 @@ BlazeComponent.extendComponent({
sort: Lists.findOne(this.listId).cards().count(),
type: 'cardType-importedBoard',
importedId: impBoardId,
description: Boards.findOne({_id: impBoardId}).description,
});
Filter.addException(_id);
Popup.close();

View file

@ -134,8 +134,9 @@ BlazeComponent.extendComponent({
Template.cardMembersPopup.helpers({
isCardMember() {
const cardId = Template.parentData()._id;
const cardMembers = Cards.findOne(cardId).members || [];
const card = Template.parentData();
const cardMembers = card.getMembers();
return _.contains(cardMembers, this.userId);
},

View file

@ -406,6 +406,18 @@ Cards.helpers({
return this.isImportedCard() || this.isImportedBoard();
},
setDescription(description) {
if (this.isImportedCard()) {
const card = Cards.findOne({_id: this.importedId});
return Cards.update({_id: this.importedId}, {$set: {description}});
} else if (this.isImportedBoard()) {
const board = Boards.findOne({_id: this.importedId});
return Boards.update({_id: this.importedId}, {$set: {description}});
} else {
return {$set: {description}};
}
},
getDescription() {
if (this.isImportedCard()) {
const card = Cards.findOne({_id: this.importedId});
@ -426,6 +438,62 @@ Cards.helpers({
return null;
}
},
getMembers() {
if (this.isImportedCard()) {
const card = Cards.findOne({_id: this.importedId});
return card.members;
} else if (this.isImportedBoard()) {
const board = Boards.findOne({_id: this.importedId});
return board.activeMembers().map((member) => {
return member.userId;
});
} else {
return this.members;
}
},
assignMember(memberId) {
if (this.isImportedCard()) {
return Cards.update(
{ _id: this.importedId },
{ $addToSet: { members: memberId }}
);
} else if (this.isImportedBoard()) {
const board = Boards.findOne({_id: this.importedId});
return board.addMember(memberId);
} else {
return Cards.update(
{ _id: this._id },
{ $addToSet: { members: memberId}}
);
}
},
unassignMember(memberId) {
if (this.isImportedCard()) {
return Cards.update(
{ _id: this.importedId },
{ $pull: { members: memberId }}
);
} else if (this.isImportedBoard()) {
const board = Boards.findOne({_id: this.importedId});
return board.removeMember(memberId);
} else {
return Cards.update(
{ _id: this._id },
{ $pull: { members: memberId}}
);
}
},
toggleMember(memberId) {
if (this.getMembers() && this.getMembers().indexOf(memberId) > -1) {
return this.unassignMember(memberId);
} else {
return this.assignMember(memberId);
}
},
});
Cards.mutations({