From ec0cc38a9253d490bcc323f2aa7b673a2cb2fcdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Wed, 8 May 2024 12:14:32 +0200 Subject: [PATCH 1/9] feat(monday): add create board action --- .../apps/monday/actions/create-board/index.js | 70 +++++++++++++++++++ .../backend/src/apps/monday/actions/index.js | 3 + packages/backend/src/apps/monday/index.js | 2 + packages/docs/pages/.vitepress/config.js | 1 + packages/docs/pages/apps/monday/actions.md | 12 ++++ 5 files changed, 88 insertions(+) create mode 100644 packages/backend/src/apps/monday/actions/create-board/index.js create mode 100644 packages/backend/src/apps/monday/actions/index.js create mode 100644 packages/docs/pages/apps/monday/actions.md diff --git a/packages/backend/src/apps/monday/actions/create-board/index.js b/packages/backend/src/apps/monday/actions/create-board/index.js new file mode 100644 index 00000000..2afd0d85 --- /dev/null +++ b/packages/backend/src/apps/monday/actions/create-board/index.js @@ -0,0 +1,70 @@ +import defineAction from '../../../../helpers/define-action.js'; + +export default defineAction({ + name: 'Create board', + key: 'createBoard', + description: 'Creates a new board.', + arguments: [ + { + label: 'Board Name', + key: 'boardName', + type: 'string', + required: true, + description: 'Title for the board.', + variables: true, + }, + { + label: 'Board Kind', + key: 'boardKind', + type: 'dropdown', + required: true, + description: '', + variables: true, + options: [ + { + label: 'Main', + value: 'public', + }, + { + label: 'Private', + value: 'private', + }, + { + label: 'Shareable', + value: 'share', + }, + ], + }, + { + label: 'Template ID', + key: 'templateId', + type: 'string', + required: false, + description: + "When you switch on developer mode, you'll spot the template IDs in your template store. Additionally, you have the option to utilize the Board ID from any board you've saved as a template.", + variables: true, + }, + ], + + async run($) { + const { boardName, boardKind, templateId } = $.step.parameters; + + const body = { + query: `mutation { + create_board (board_name: "${boardName}", board_kind: ${boardKind}${ + templateId ? `, template_id: ${templateId}` : '' + }) { + id + name + board_kind + } + }`, + }; + + const { data } = 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 new file mode 100644 index 00000000..b0e55486 --- /dev/null +++ b/packages/backend/src/apps/monday/actions/index.js @@ -0,0 +1,3 @@ +import createBoard from './create-board/index.js'; + +export default [createBoard]; diff --git a/packages/backend/src/apps/monday/index.js b/packages/backend/src/apps/monday/index.js index 556f9930..c193e10d 100644 --- a/packages/backend/src/apps/monday/index.js +++ b/packages/backend/src/apps/monday/index.js @@ -2,6 +2,7 @@ import defineApp from '../../helpers/define-app.js'; 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'; export default defineApp({ name: 'Monday', @@ -15,4 +16,5 @@ export default defineApp({ beforeRequest: [addAuthHeader], auth, triggers, + actions, }); diff --git a/packages/docs/pages/.vitepress/config.js b/packages/docs/pages/.vitepress/config.js index c63ccbb6..aada214b 100644 --- a/packages/docs/pages/.vitepress/config.js +++ b/packages/docs/pages/.vitepress/config.js @@ -345,6 +345,7 @@ export default defineConfig({ collapsible: true, collapsed: true, items: [ + { text: 'Actions', link: '/apps/monday/actions' }, { text: 'Triggers', link: '/apps/monday/triggers' }, { text: 'Connection', link: '/apps/monday/connection' }, ], diff --git a/packages/docs/pages/apps/monday/actions.md b/packages/docs/pages/apps/monday/actions.md new file mode 100644 index 00000000..de3ef6ca --- /dev/null +++ b/packages/docs/pages/apps/monday/actions.md @@ -0,0 +1,12 @@ +--- +favicon: /favicons/monday.svg +items: + - name: Create board + desc: Creates a new board. +--- + + + + From 4beb1011ca62ded34a595f0f7249709c2ef44140 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Thu, 9 May 2024 14:02:47 +0200 Subject: [PATCH 2/9] feat(monday): add create item action --- .../apps/monday/actions/create-item/index.js | 112 ++++++++++++++++++ .../backend/src/apps/monday/actions/index.js | 3 +- .../src/apps/monday/dynamic-data/index.js | 4 + .../monday/dynamic-data/list-boards/index.js | 34 ++++++ .../monday/dynamic-data/list-groups/index.js | 40 +++++++ packages/backend/src/apps/monday/index.js | 2 + packages/docs/pages/apps/monday/actions.md | 2 + 7 files changed, 196 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/apps/monday/actions/create-item/index.js create mode 100644 packages/backend/src/apps/monday/dynamic-data/index.js create mode 100644 packages/backend/src/apps/monday/dynamic-data/list-boards/index.js create mode 100644 packages/backend/src/apps/monday/dynamic-data/list-groups/index.js 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. ---