diff --git a/packages/backend/src/apps/monday/actions/create-item/index.js b/packages/backend/src/apps/monday/actions/create-item/index.js new file mode 100644 index 00000000..605148ee --- /dev/null +++ b/packages/backend/src/apps/monday/actions/create-item/index.js @@ -0,0 +1,112 @@ +import defineAction from '../../../../helpers/define-action.js'; + +export default defineAction({ + name: 'Create item', + key: 'createItem', + description: 'Creates a new item in a board.', + arguments: [ + { + label: 'Board', + key: 'boardId', + type: 'dropdown', + required: true, + description: '', + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listBoards', + }, + ], + }, + }, + { + label: 'Group', + key: 'groupId', + type: 'dropdown', + required: false, + description: '', + dependsOn: ['parameters.boardId'], + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listGroups', + }, + { + name: 'parameters.boardId', + value: '{parameters.boardId}', + }, + ], + }, + }, + { + label: 'Item Name', + key: 'itemName', + type: 'string', + required: true, + description: '', + variables: true, + }, + { + label: 'Subitem Names', + key: 'subitemNames', + type: 'dynamic', + required: false, + description: '', + fields: [ + { + label: 'Subitem Name', + key: 'subitemName', + type: 'string', + required: false, + description: '', + variables: true, + }, + ], + }, + ], + + async run($) { + const { boardId, groupId, itemName, subitemNames } = $.step.parameters; + const allSubitems = subitemNames.map((entry) => entry.subitemName); + + const body = { + query: ` + mutation { + create_item (board_id: ${boardId}${ + groupId ? `, group_id: "${groupId}"` : '' + }, item_name: "${itemName}") { + id + } + }`, + }; + + const { data } = await $.http.post('/', body); + + const itemId = data.data.create_item.id; + + for (let subitemName of allSubitems) { + let body = { + query: ` + mutation { + create_subitem (parent_item_id:${itemId}, item_name:"${subitemName}") { + id + } + }`, + }; + + await $.http.post('/', body); + } + + $.setActionItem({ + raw: data, + }); + }, +}); diff --git a/packages/backend/src/apps/monday/actions/index.js b/packages/backend/src/apps/monday/actions/index.js index b0e55486..ea519d7d 100644 --- a/packages/backend/src/apps/monday/actions/index.js +++ b/packages/backend/src/apps/monday/actions/index.js @@ -1,3 +1,4 @@ import createBoard from './create-board/index.js'; +import createItem from './create-item/index.js'; -export default [createBoard]; +export default [createBoard, createItem]; diff --git a/packages/backend/src/apps/monday/dynamic-data/index.js b/packages/backend/src/apps/monday/dynamic-data/index.js new file mode 100644 index 00000000..c686d52a --- /dev/null +++ b/packages/backend/src/apps/monday/dynamic-data/index.js @@ -0,0 +1,4 @@ +import listBoards from './list-boards/index.js'; +import listGroups from './list-groups/index.js'; + +export default [listBoards, listGroups]; diff --git a/packages/backend/src/apps/monday/dynamic-data/list-boards/index.js b/packages/backend/src/apps/monday/dynamic-data/list-boards/index.js new file mode 100644 index 00000000..2fe596f7 --- /dev/null +++ b/packages/backend/src/apps/monday/dynamic-data/list-boards/index.js @@ -0,0 +1,34 @@ +export default { + name: 'List boards', + key: 'listBoards', + + async run($) { + const boards = { + data: [], + }; + + const body = { + query: ` + query { + boards { + id + name + } + } + `, + }; + + const { data } = await $.http.post('/', body); + + if (data.data.boards?.length) { + for (const board of data.data.boards) { + boards.data.push({ + value: board.id, + name: board.name, + }); + } + } + + return boards; + }, +}; diff --git a/packages/backend/src/apps/monday/dynamic-data/list-groups/index.js b/packages/backend/src/apps/monday/dynamic-data/list-groups/index.js new file mode 100644 index 00000000..96135cab --- /dev/null +++ b/packages/backend/src/apps/monday/dynamic-data/list-groups/index.js @@ -0,0 +1,40 @@ +export default { + name: 'List groups', + key: 'listGroups', + + async run($) { + const groups = { + data: [], + }; + const boardId = $.step.parameters.parameters.boardId; + + if (!boardId) { + return groups; + } + + const body = { + query: `query { + boards (ids: ${boardId}) { + groups { + title + id + } + } + } + `, + }; + + const { data } = await $.http.post('/', body); + + if (data.data.boards[0].groups.length) { + for (const group of data.data.boards[0].groups) { + groups.data.push({ + value: group.id, + name: group.title, + }); + } + } + + return groups; + }, +}; diff --git a/packages/backend/src/apps/monday/index.js b/packages/backend/src/apps/monday/index.js index c193e10d..2ee81ebb 100644 --- a/packages/backend/src/apps/monday/index.js +++ b/packages/backend/src/apps/monday/index.js @@ -3,6 +3,7 @@ import addAuthHeader from './common/add-auth-header.js'; import auth from './auth/index.js'; import triggers from './triggers/index.js'; import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Monday', @@ -17,4 +18,5 @@ export default defineApp({ auth, triggers, actions, + dynamicData, }); diff --git a/packages/docs/pages/apps/monday/actions.md b/packages/docs/pages/apps/monday/actions.md index de3ef6ca..09f09a81 100644 --- a/packages/docs/pages/apps/monday/actions.md +++ b/packages/docs/pages/apps/monday/actions.md @@ -3,6 +3,8 @@ favicon: /favicons/monday.svg items: - name: Create board desc: Creates a new board. + - name: Create item + desc: Creates a new item in a board. ---