From c9a28db3ab5650178c933fc3d2284958dd0fd84d Mon Sep 17 00:00:00 2001 From: Giacomo Vespignani Date: Wed, 27 May 2020 11:13:09 +0200 Subject: Added an API to get the cards for a specific custom field value --- client/lib/exportHTML.js | 2 +- models/cards.js | 55 +++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/client/lib/exportHTML.js b/client/lib/exportHTML.js index b3c8d011..0cca4b04 100644 --- a/client/lib/exportHTML.js +++ b/client/lib/exportHTML.js @@ -2,7 +2,7 @@ const JSZip = require('jszip'); window.ExportHtml = Popup => { const saveAs = function(blob, filename) { - let dl = document.createElement('a'); + const dl = document.createElement('a'); dl.href = window.URL.createObjectURL(blob); dl.onclick = event => document.body.removeChild(event.target); dl.style.display = 'none'; diff --git a/models/cards.js b/models/cards.js index 939d1be3..b6cc27b7 100644 --- a/models/cards.js +++ b/models/cards.js @@ -1276,9 +1276,9 @@ Cards.mutations({ if (lastCardDom) sortIndex = Utils.calculateIndex(lastCardDom, null).base; return this.moveOptionalArgs({ - boardId: boardId, - swimlaneId: swimlaneId, - listId: listId, + boardId, + swimlaneId, + listId, sort: sortIndex, }); }, @@ -1293,8 +1293,7 @@ Cards.mutations({ swimlaneId = board.getDefaultSwimline()._id; } listId = listId || this.listId; - if (sort === undefined || sort === null) - sort = this.sort; + if (sort === undefined || sort === null) sort = this.sort; return this.move(boardId, swimlaneId, listId, sort); }, @@ -2683,6 +2682,52 @@ if (Meteor.isServer) { }); }, ); + + /** + * @operation get_cards_by_custom_field + * @summary Get all Cards that matchs a value of a specific custom field + * + * @param {string} boardId the board ID + * @param {string} customFieldId the list ID + * @param {string} customFieldValue the value to look for + * @return_type [{_id: string, + * title: string, + * description: string, + * listId: string + * swinlaneId: string}] + */ + JsonRoutes.add( + 'GET', + '/api/boards/:boardId/cardsByCustomField/:customFieldId/:customFieldValue', + function(req, res) { + const paramBoardId = req.params.boardId; + const paramCustomFieldId = req.params.customFieldId; + const paramCustomFieldValue = req.params.customFieldValue; + + Authentication.checkBoardAccess(req.userId, paramBoardId); + JsonRoutes.sendResult(res, { + code: 200, + data: Cards.find({ + boardId: paramBoardId, + customFields: { + $elemMatch: { + _id: paramCustomFieldId, + value: paramCustomFieldValue, + }, + }, + archived: false, + }).map(function(doc) { + return { + _id: doc._id, + title: doc.title, + description: doc.description, + listId: doc.listId, + swinlaneId: doc.swinlaneId, + }; + }), + }); + }, + ); } export default Cards; -- cgit v1.2.3-1-g7c22