diff options
-rw-r--r-- | client/components/lists/listHeader.js | 43 | ||||
-rw-r--r-- | models/boards.js | 10 |
2 files changed, 41 insertions, 12 deletions
diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js index 745d1255..b716f70c 100644 --- a/client/components/lists/listHeader.js +++ b/client/components/lists/listHeader.js @@ -50,14 +50,14 @@ Template.listActionPopup.events({ }); Template.listImportCardPopup.events({ - submit(evt, template) { + submit(evt) { // 1. get the json data out of the form and parse it evt.preventDefault(); const jsonData = $(evt.currentTarget).find('textarea').val(); const data = JSON.parse(jsonData); // 2. map all fields for the card to create const firstCardDom = $(`#js-list-${this._id} .js-minicard:first`).get(0); - sortIndex = Utils.calculateIndex(null, firstCardDom).base; + const sortIndex = Utils.calculateIndex(null, firstCardDom).base; const cardToCreate = { title: data.name, description: data.desc, @@ -65,20 +65,43 @@ Template.listImportCardPopup.events({ boardId: this.boardId, userId: Meteor.userId(), sort: sortIndex, - } - // 3. insert new card into list + }; + // 3. map labels + data.labels.forEach((current) => { + const color = current.color; + const name = current.name; + const existingLabel = this.board().getLabel(name, color); + let labelId = undefined; + if (existingLabel) { + labelId = existingLabel._id; + } else { + let labelCreated = this.board().addLabel(name, color); + // XXX currently mutations return no value so we have to fetch the label we just created + // waiting on https://github.com/mquandalle/meteor-collection-mutations/issues/1 to remove... + labelCreated = this.board().getLabel(name, color); + labelId = labelCreated._id; + } + if(labelId) { + if (!cardToCreate.labelIds) { + cardToCreate.labelIds = []; + } + cardToCreate.labelIds.push(labelId); + } + }); + // 4. insert new card into list const _id = Cards.insert(cardToCreate); - // 4. parse actions and add comments/activities - if any - data.actions.forEach((current, i, actions)=>{ - if(current.type == 'commentCard') { + // 5. parse actions and add comments + data.actions.forEach((current) => { + if(current.type === 'commentCard') { const commentToCreate = { boardId: this.boardId, cardId: _id, userId: Meteor.userId(), - text: current.data.text - } + text: current.data.text, + }; CardComments.insert(commentToCreate); } + // XXX add other type of activities? Popup.close(); }); @@ -87,7 +110,7 @@ Template.listImportCardPopup.events({ // card will disappear instantly. // See https://github.com/wekan/wekan/issues/80 Filter.addException(_id); - } + }, }); Template.listMoveCardsPopup.events({ diff --git a/models/boards.js b/models/boards.js index 4baec280..8d2b63e4 100644 --- a/models/boards.js +++ b/models/boards.js @@ -92,6 +92,12 @@ Boards.helpers({ return _.where(this.members, {isActive: true}); }, + getLabel(name, color) { + return this.labels.find((current) => { + return ((current.name === name) && (current.color === color)); + }); + }, + labelIndex(labelId) { return _.indexOf(_.pluck(this.labels, '_id'), labelId); }, @@ -293,8 +299,8 @@ if (Meteor.isServer) { }); }); - // If the user remove one label from a board, we cant to remove reference of - // this label in any card of this board. + // If the user removes a label from a board, we have to remove references to + // this label in all cards of the board. Boards.after.update((userId, doc, fieldNames, modifier) => { if (!_.contains(fieldNames, 'labels') || !modifier.$pull || |