From 6e3f25c7711adf5e920c186a74c8617612a900ea Mon Sep 17 00:00:00 2001 From: Jochen Sukrow Date: Wed, 21 Dec 2022 16:21:17 +0100 Subject: [PATCH] Add link card feature to rules --- .../rules/actions/boardActions.jade | 23 +++++++++++++++++++ .../components/rules/actions/boardActions.js | 23 +++++++++++++++++++ imports/i18n/data/en.i18n.json | 1 + server/rulesHelper.js | 23 ++++++++++++++++++- 4 files changed, 69 insertions(+), 1 deletion(-) diff --git a/client/components/rules/actions/boardActions.jade b/client/components/rules/actions/boardActions.jade index fda150627..0a09d98e8 100644 --- a/client/components/rules/actions/boardActions.jade +++ b/client/components/rules/actions/boardActions.jade @@ -77,6 +77,29 @@ template(name="boardActions") div.trigger-button.js-create-card-action.js-goto-rules i.fa.fa-plus + div.trigger-item + div.trigger-content + div.trigger-text + | {{_'r-link-card'}} + div.trigger-text + | {{_'r-the-board'}} + div.trigger-dropdown + select(id="board-id-link") + each boards + if $eq _id currentBoard._id + option(value="{{_id}}" selected) {{_ 'current'}} + else + option(value="{{_id}}") {{title}} + div.trigger-text + | {{_'r-in-list'}} + div.trigger-dropdown + input(id="listName-link",type=text,placeholder="{{_'r-name'}}") + div.trigger-text + | {{_'r-in-swimlane'}} + div.trigger-dropdown + input(id="swimlaneName-link",type=text,placeholder="{{_'r-name'}}") + div.trigger-button.js-link-card-action.js-goto-rules + i.fa.fa-plus diff --git a/client/components/rules/actions/boardActions.js b/client/components/rules/actions/boardActions.js index 5675873f3..fb71f579f 100644 --- a/client/components/rules/actions/boardActions.js +++ b/client/components/rules/actions/boardActions.js @@ -178,6 +178,29 @@ BlazeComponent.extendComponent({ }); } }, + 'click .js-link-card-action'(event) { + const ruleName = this.data().ruleName.get(); + const trigger = this.data().triggerVar.get(); + const swimlaneName = this.find('#swimlaneName-link').value || '*'; + const listName = this.find('#listName-link').value || '*'; + const boardId = Session.get('currentBoard'); + const destBoardId = this.find('#board-id-link').value; + const desc = Utils.getTriggerActionDesc(event, this); + const triggerId = Triggers.insert(trigger); + const actionId = Actions.insert({ + actionType: 'linkCard', + listName, + swimlaneName, + boardId: destBoardId, + desc, + }); + Rules.insert({ + title: ruleName, + triggerId, + actionId, + boardId, + }); + }, }, ]; }, diff --git a/imports/i18n/data/en.i18n.json b/imports/i18n/data/en.i18n.json index d9743943c..b165a2035 100644 --- a/imports/i18n/data/en.i18n.json +++ b/imports/i18n/data/en.i18n.json @@ -846,6 +846,7 @@ "r-df-received-at": "received", "r-to-current-datetime": "to current date/time", "r-remove-value-from": "Remove value from", + "r-link-card": "Link card to", "ldap": "LDAP", "oauth2": "OAuth2", "cas": "CAS", diff --git a/server/rulesHelper.js b/server/rulesHelper.js index 1d3df2090..6b6ffb53d 100644 --- a/server/rulesHelper.js +++ b/server/rulesHelper.js @@ -371,8 +371,29 @@ RulesHelper = { listId, swimlaneId, sort: 0, - boardId, + boardId }); } + if (action.actionType === 'linkCard') { + const list = Lists.findOne({ title: action.listName, boardId: action.boardId }); + const card = Cards.findOne({ _id: activity.cardId }); + let listId = ''; + let swimlaneId = ''; + const swimlane = Swimlanes.findOne({ + title: action.swimlaneName, + boardId: action.boardId, + }); + if (list === undefined) { + listId = ''; + } else { + listId = list._id; + } + if (swimlane === undefined) { + swimlaneId = Swimlanes.findOne({ title: 'Default', boardId: action.boardId })._id; + } else { + swimlaneId = swimlane._id; + } + card.link(action.boardId, swimlaneId, listId); + } }, };