Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
9b00cff2d9 | ||
![]() |
ff0dd0b415 | ||
![]() |
f0b5d85a7a |
@@ -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,
|
||||
});
|
||||
},
|
||||
});
|
112
packages/backend/src/apps/monday/actions/create-item/index.js
Normal file
112
packages/backend/src/apps/monday/actions/create-item/index.js
Normal file
@@ -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,
|
||||
});
|
||||
},
|
||||
});
|
4
packages/backend/src/apps/monday/actions/index.js
Normal file
4
packages/backend/src/apps/monday/actions/index.js
Normal file
@@ -0,0 +1,4 @@
|
||||
import createBoard from './create-board/index.js';
|
||||
import createItem from './create-item/index.js';
|
||||
|
||||
export default [createBoard, createItem];
|
4
packages/backend/src/apps/monday/dynamic-data/index.js
Normal file
4
packages/backend/src/apps/monday/dynamic-data/index.js
Normal file
@@ -0,0 +1,4 @@
|
||||
import listBoards from './list-boards/index.js';
|
||||
import listGroups from './list-groups/index.js';
|
||||
|
||||
export default [listBoards, listGroups];
|
@@ -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;
|
||||
},
|
||||
};
|
@@ -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;
|
||||
},
|
||||
};
|
@@ -1,6 +1,9 @@
|
||||
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';
|
||||
import dynamicData from './dynamic-data/index.js';
|
||||
|
||||
export default defineApp({
|
||||
name: 'Monday',
|
||||
@@ -13,4 +16,7 @@ export default defineApp({
|
||||
primaryColor: 'F62B54',
|
||||
beforeRequest: [addAuthHeader],
|
||||
auth,
|
||||
triggers,
|
||||
actions,
|
||||
dynamicData,
|
||||
});
|
||||
|
3
packages/backend/src/apps/monday/triggers/index.js
Normal file
3
packages/backend/src/apps/monday/triggers/index.js
Normal file
@@ -0,0 +1,3 @@
|
||||
import newBoards from './new-boards/index.js';
|
||||
|
||||
export default [newBoards];
|
@@ -0,0 +1,29 @@
|
||||
import defineTrigger from '../../../../helpers/define-trigger.js';
|
||||
|
||||
export default defineTrigger({
|
||||
name: 'New board',
|
||||
key: 'newBoard',
|
||||
pollInterval: 15,
|
||||
description: 'Triggers when a new board is created.',
|
||||
|
||||
async run($) {
|
||||
const body = {
|
||||
query: 'query { boards { id, name } }',
|
||||
};
|
||||
|
||||
const { data } = await $.http.post('/', body);
|
||||
|
||||
if (!data?.data?.boards?.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const board of data.data.boards) {
|
||||
$.pushTriggerItem({
|
||||
raw: board,
|
||||
meta: {
|
||||
internalId: board.id,
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
@@ -228,7 +228,11 @@ export default defineConfig({
|
||||
text: 'Monday',
|
||||
collapsible: true,
|
||||
collapsed: true,
|
||||
items: [{ text: 'Connection', link: '/apps/monday/connection' }],
|
||||
items: [
|
||||
{ text: 'Actions', link: '/apps/monday/actions' },
|
||||
{ text: 'Triggers', link: '/apps/monday/triggers' },
|
||||
{ text: 'Connection', link: '/apps/monday/connection' },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: 'Notion',
|
||||
|
14
packages/docs/pages/apps/monday/actions.md
Normal file
14
packages/docs/pages/apps/monday/actions.md
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
favicon: /favicons/monday.svg
|
||||
items:
|
||||
- name: Create board
|
||||
desc: Creates a new board.
|
||||
- name: Create item
|
||||
desc: Creates a new item in a board.
|
||||
---
|
||||
|
||||
<script setup>
|
||||
import CustomListing from '../../components/CustomListing.vue'
|
||||
</script>
|
||||
|
||||
<CustomListing />
|
12
packages/docs/pages/apps/monday/triggers.md
Normal file
12
packages/docs/pages/apps/monday/triggers.md
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
favicon: /favicons/monday.svg
|
||||
items:
|
||||
- name: New board
|
||||
desc: Triggers when a new board is created.
|
||||
---
|
||||
|
||||
<script setup>
|
||||
import CustomListing from '../../components/CustomListing.vue'
|
||||
</script>
|
||||
|
||||
<CustomListing />
|
@@ -23,6 +23,7 @@ The following integrations are currently supported by Automatisch.
|
||||
- [Invoice Ninja](/apps/invoice-ninja/triggers)
|
||||
- [Mattermost](/apps/mattermost/actions)
|
||||
- [Miro](/apps/miro/actions)
|
||||
- [Monday](/apps/monday/triggers)
|
||||
- [Notion](/apps/notion/triggers)
|
||||
- [Ntfy](/apps/ntfy/actions)
|
||||
- [Odoo](/apps/odoo/actions)
|
||||
|
Reference in New Issue
Block a user