diff --git a/server/api/controllers/cards/create.js b/server/api/controllers/cards/create.js index 7ff91013..9c542c6d 100755 --- a/server/api/controllers/cards/create.js +++ b/server/api/controllers/cards/create.js @@ -53,6 +53,9 @@ module.exports = { type: 'json', custom: isStopwatch, }, + customFields: { + type: 'ref', + }, }, exits: { @@ -96,6 +99,10 @@ module.exports = { 'stopwatch', ]); + if (inputs.customFields) { + values.customFields = inputs.customFields; + } + const card = await sails.helpers.cards.createOne .with({ project, diff --git a/server/api/helpers/cards/create-one.js b/server/api/helpers/cards/create-one.js index ae05a43e..602ce4db 100644 --- a/server/api/helpers/cards/create-one.js +++ b/server/api/helpers/cards/create-one.js @@ -75,6 +75,33 @@ module.exports = { listChangedAt: new Date().toISOString(), }); + if (values.customFields) { + const customFieldGroups = await CustomFieldGroup.qm.getByBoardId(values.board.id); + const customFieldGroupMap = _.keyBy(customFieldGroups, 'name'); + const customFieldGroupIds = customFieldGroups.map((g) => g.id); + const customFields = await CustomField.qm.getByCustomFieldGroupIds(customFieldGroupIds); + const customFieldMap = _.keyBy(customFields, (f) => `${f.customFieldGroupId}:${f.name}`); + + const createValuePromises = []; + Object.entries(values.customFields).forEach(([groupName, fields]) => { + const group = customFieldGroupMap[groupName]; + if (!group) return; + Object.entries(fields).forEach(([fieldName, content]) => { + const field = customFieldMap[`${group.id}:${fieldName}`]; + if (!field) return; + createValuePromises.push( + CustomFieldValue.create({ + cardId: card.id, + customFieldGroupId: group.id, + customFieldId: field.id, + content: String(content), + }), + ); + }); + }); + await Promise.all(createValuePromises); + } + sails.sockets.broadcast( `board:${card.boardId}`, 'cardCreate',