diff --git a/packages/backend/src/apps/notion/actions/create-database-item/index.ts b/packages/backend/src/apps/notion/actions/create-database-item/index.ts new file mode 100644 index 00000000..43111a9b --- /dev/null +++ b/packages/backend/src/apps/notion/actions/create-database-item/index.ts @@ -0,0 +1,100 @@ +import { IJSONArray, IJSONObject } from '@automatisch/types'; +import defineAction from '../../../../helpers/define-action'; + +type TBody = { + parent: IJSONObject; + properties: IJSONObject; + children: IJSONArray; +}; + +export default defineAction({ + name: 'Create Database Item', + key: 'createDatabaseItem', + description: 'Creates an item in a database.', + arguments: [ + { + label: 'Database', + key: 'databaseId', + type: 'dropdown' as const, + required: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listDatabases', + }, + ], + }, + }, + { + label: 'Name', + key: 'name', + type: 'string' as const, + required: false, + description: + 'This field has a 2000 character limit. Any characters beyond 2000 will not be included.', + variables: true, + }, + { + label: 'Content', + key: 'content', + type: 'string' as const, + required: false, + description: + 'The text to add to the page body. The max length for this field is 2000 characters. Any characters beyond 2000 will not be included.', + variables: true, + }, + ], + + async run($) { + const name = $.step.parameters.name as string; + const truncatedName = name.slice(0, 2000); + const content = $.step.parameters.content as string; + const truncatedContent = content.slice(0, 2000); + + const body: TBody = { + parent: { + database_id: $.step.parameters.databaseId, + }, + properties: {}, + children: [], + }; + + if (name) { + body.properties.Name = { + title: [ + { + text: { + content: truncatedName, + }, + }, + ], + }; + } + + if (content) { + body.children = [ + { + object: 'block', + paragraph: { + rich_text: [ + { + text: { + content: truncatedContent, + }, + }, + ], + }, + }, + ]; + } + + const { data } = await $.http.post('/v1/pages', body); + + $.setActionItem({ + raw: data, + }); + }, +}); diff --git a/packages/backend/src/apps/notion/actions/index.ts b/packages/backend/src/apps/notion/actions/index.ts new file mode 100644 index 00000000..751f0258 --- /dev/null +++ b/packages/backend/src/apps/notion/actions/index.ts @@ -0,0 +1,3 @@ +import createDatabaseItem from './create-database-item'; + +export default [createDatabaseItem]; diff --git a/packages/backend/src/apps/notion/index.ts b/packages/backend/src/apps/notion/index.ts index b26b178c..d9d6ef4f 100644 --- a/packages/backend/src/apps/notion/index.ts +++ b/packages/backend/src/apps/notion/index.ts @@ -3,6 +3,7 @@ import addAuthHeader from './common/add-auth-header'; import addNotionVersionHeader from './common/add-notion-version-header'; import auth from './auth'; import triggers from './triggers'; +import actions from './actions'; import dynamicData from './dynamic-data'; export default defineApp({ @@ -14,11 +15,9 @@ export default defineApp({ authDocUrl: 'https://automatisch.io/docs/apps/notion/connection', primaryColor: '000000', supportsConnections: true, - beforeRequest: [ - addAuthHeader, - addNotionVersionHeader, - ], + beforeRequest: [addAuthHeader, addNotionVersionHeader], auth, triggers, + actions, dynamicData, }); diff --git a/packages/docs/pages/.vitepress/config.js b/packages/docs/pages/.vitepress/config.js index 1af34b4f..7ba17216 100644 --- a/packages/docs/pages/.vitepress/config.js +++ b/packages/docs/pages/.vitepress/config.js @@ -157,6 +157,7 @@ export default defineConfig({ collapsed: true, items: [ { text: 'Triggers', link: '/apps/notion/triggers' }, + { text: 'Actions', link: '/apps/notion/actions' }, { text: 'Connection', link: '/apps/notion/connection' }, ], }, diff --git a/packages/docs/pages/apps/notion/actions.md b/packages/docs/pages/apps/notion/actions.md new file mode 100644 index 00000000..02a221fe --- /dev/null +++ b/packages/docs/pages/apps/notion/actions.md @@ -0,0 +1,12 @@ +--- +favicon: /favicons/notion.svg +items: + - name: Create database item + desc: Creates an item in a database. +--- + + + +