diff options
Diffstat (limited to 'models/import.js')
-rw-r--r-- | models/import.js | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/models/import.js b/models/import.js index 86ef75b3..41c2204b 100644 --- a/models/import.js +++ b/models/import.js @@ -25,6 +25,8 @@ class TrelloCreator { this.labels = {}; // Map of lists Trello ID => Wekan ID this.lists = {}; + // Map of cards Trello ID => Wekan ID + this.cards = {}; // The comments, indexed by Trello card id (to map when importing cards) this.comments = {}; // the members, indexed by Trello member id => Wekan user ID @@ -119,6 +121,18 @@ class TrelloCreator { })]); } + checkChecklists(trelloChecklists) { + check(trelloChecklists, [Match.ObjectIncluding({ + idBoard: String, + idCard: String, + name: String, + checkItems: [Match.ObjectIncluding({ + state: String, + name: String, + })], + })]); + } + // You must call parseActions before calling this one. createBoardAndLabels(trelloBoard) { const boardToCreate = { @@ -241,6 +255,8 @@ class TrelloCreator { } // insert card const cardId = Cards.direct.insert(cardToCreate); + // keep track of Trello id => WeKan id + this.cards[card.id] = cardId; // log activity Activities.direct.insert({ activityType: 'importCard', @@ -280,7 +296,7 @@ class TrelloCreator { createdAt: this._now(commentToCreate.createdAt), // we attribute the addComment (not the import) // to the original author - it is needed by some UI elements. - userId: commentToCreate.userId, + userId: this._user(commentToCreate.userId), }); }); } @@ -365,6 +381,28 @@ class TrelloCreator { }); } + createChecklists(trelloChecklists) { + trelloChecklists.forEach((checklist) => { + // Create the checklist + const checklistToCreate = { + cardId: this.cards[checklist.idCard], + title: checklist.name, + createdAt: this._now(), + }; + const checklistId = Checklists.direct.insert(checklistToCreate); + // Now add the items to the checklist + const itemsToCreate = []; + checklist.checkItems.forEach((item) => { + itemsToCreate.push({ + _id: checklistId + itemsToCreate.length, + title: item.name, + isFinished: item.state === 'complete', + }); + }); + Checklists.direct.update(checklistId, {$set: {items: itemsToCreate}}); + }); + } + getAdmin(trelloMemberType) { return trelloMemberType === 'admin'; } @@ -446,6 +484,7 @@ Meteor.methods({ trelloCreator.checkLabels(trelloBoard.labels); trelloCreator.checkLists(trelloBoard.lists); trelloCreator.checkCards(trelloBoard.cards); + trelloCreator.checkChecklists(trelloBoard.checklists); } catch (e) { throw new Meteor.Error('error-json-schema'); } @@ -458,6 +497,7 @@ Meteor.methods({ const boardId = trelloCreator.createBoardAndLabels(trelloBoard); trelloCreator.createLists(trelloBoard.lists, boardId); trelloCreator.createCards(trelloBoard.cards, boardId); + trelloCreator.createChecklists(trelloBoard.checklists); // XXX add members return boardId; }, |