From c89a0eb694ff68eecceabae599bfcb96e2d8bab5 Mon Sep 17 00:00:00 2001 From: "John R. Supplee" Date: Mon, 18 Jan 2021 16:41:35 +0200 Subject: [PATCH] Initial work on import of custom fields from Trello * start adding import functionality * Add checkbox type to customFields --- client/components/cards/cardCustomFields.jade | 11 ++++++++++ client/components/cards/cardCustomFields.js | 21 ++++++++++++++++++- models/customFields.js | 9 +++++++- models/trelloCreator.js | 20 ++++++++++++++++++ 4 files changed, 59 insertions(+), 2 deletions(-) diff --git a/client/components/cards/cardCustomFields.jade b/client/components/cards/cardCustomFields.jade index e4e485357..b6fa0bc2b 100644 --- a/client/components/cards/cardCustomFields.jade +++ b/client/components/cards/cardCustomFields.jade @@ -52,6 +52,17 @@ template(name="cardCustomField-number") if value = value +template(name="cardCustomField-checkbox") + if canModifyCard + +inlinedForm(classNames="js-card-customfield-checkbox") + input(type="checkbox" value=data.value) + .edit-controls.clearfix + button.primary(type="submit") {{_ 'save'}} + a.fa.fa-times-thin.js-close-inlined-form + else + if value + = value + template(name="cardCustomField-currency") if canModifyCard +inlinedForm(classNames="js-card-customfield-currency") diff --git a/client/components/cards/cardCustomFields.js b/client/components/cards/cardCustomFields.js index 45f207622..49f577fea 100644 --- a/client/components/cards/cardCustomFields.js +++ b/client/components/cards/cardCustomFields.js @@ -78,7 +78,26 @@ CardCustomField.register('cardCustomField'); }, ]; } -}.register('cardCustomField-number')); +}.register('cardCustomField-checkbox')); + +// cardCustomField-checkbox +(class extends CardCustomField { + onCreated() { + super.onCreated(); + } + + events() { + return [ + { + 'submit .js-card-customfield-checkbox'(event) { + event.preventDefault(); + const value = this.find('input').value !== ''; + this.card.setCustomField(this.customFieldId, value); + }, + }, + ]; + } +}.register('cardCustomField-checkbox')); // cardCustomField-currency (class extends CardCustomField { diff --git a/models/customFields.js b/models/customFields.js index 83b47fc0a..61ed41c88 100644 --- a/models/customFields.js +++ b/models/customFields.js @@ -22,7 +22,14 @@ CustomFields.attachSchema( * type of the custom field */ type: String, - allowedValues: ['text', 'number', 'date', 'dropdown', 'currency'], + allowedValues: [ + 'text', + 'number', + 'date', + 'dropdown', + 'checkbox', + 'currency', + ], }, settings: { /** diff --git a/models/trelloCreator.js b/models/trelloCreator.js index 1c5bcd931..0f394a2a3 100644 --- a/models/trelloCreator.js +++ b/models/trelloCreator.js @@ -40,6 +40,8 @@ export class TrelloCreator { // maps a trelloCardId to an array of trelloAttachments this.attachments = {}; + + this.customFields = {}; } /** @@ -161,6 +163,7 @@ export class TrelloCreator { // very old boards won't have a creation activity so no creation date createdAt: this._now(this.createdAt.board), labels: [], + customFields: [], members: [ { userId: Meteor.userId(), @@ -216,6 +219,19 @@ export class TrelloCreator { this.labels[label.id] = labelToCreate._id; boardToCreate.labels.push(labelToCreate); }); + trelloBoard.customFields.forEach(field => { + const fieldToCreate = { + _id: Random.id(6), + trelloId: field.id, + name: field.name, + showOnCard: field.display.cardFront, + type: field.type, + }; + // We need to remember them by Trello ID, as this is the only ref we have + // when importing cards. + this.customFields[field.id] = fieldToCreate._id; + boardToCreate.customFields.push(fieldToCreate); + }); const boardId = Boards.direct.insert(boardToCreate); Boards.direct.update(boardId, { $set: { modifiedAt: this._now() } }); // log activity @@ -309,6 +325,10 @@ export class TrelloCreator { } } + if (card.customFieldItems) { + card.customFieldItems.forEach(item => {}); + } + // insert card const cardId = Cards.direct.insert(cardToCreate); // keep track of Trello id => Wekan id