diff --git a/packages/backend/src/apps/pipedrive/actions/create-organization/index.ts b/packages/backend/src/apps/pipedrive/actions/create-organization/index.ts new file mode 100644 index 00000000..b31461fa --- /dev/null +++ b/packages/backend/src/apps/pipedrive/actions/create-organization/index.ts @@ -0,0 +1,85 @@ +import defineAction from '../../../../helpers/define-action'; + +function filterProvidedFields(body: Record) { + return Object.keys(body).reduce>((result, key) => { + if (body[key]) { + result[key] = body[key]; + } + return result; + }, {}); +} + +export default defineAction({ + name: 'Create organization', + key: 'createOrganization', + description: 'Creates a new organization.', + arguments: [ + { + label: 'Name', + key: 'name', + type: 'string' as const, + required: true, + description: '', + variables: true, + }, + { + label: 'Owner', + key: 'ownerId', + type: 'dropdown' as const, + required: false, + description: '', + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listUsers', + }, + ], + }, + }, + { + label: 'Label', + key: 'labelId', + type: 'dropdown' as const, + required: false, + description: '', + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listOrganizationLabelField', + }, + ], + }, + }, + ], + + async run($) { + const { name, ownerId, labelId } = $.step.parameters; + + const fields = { + name: name, + owner_id: ownerId, + label: labelId, + }; + + const body = filterProvidedFields(fields); + + const { + data: { data }, + } = await $.http.post( + `${$.auth.data.apiDomain}/api/v1/organizations`, + body + ); + + $.setActionItem({ + raw: data, + }); + }, +}); diff --git a/packages/backend/src/apps/pipedrive/actions/index.ts b/packages/backend/src/apps/pipedrive/actions/index.ts index ecc301fd..950d7e95 100644 --- a/packages/backend/src/apps/pipedrive/actions/index.ts +++ b/packages/backend/src/apps/pipedrive/actions/index.ts @@ -2,5 +2,12 @@ import createActivity from './create-activity'; import createDeal from './create-deal'; import createLead from './create-lead'; import createNote from './create-note'; +import createOrganization from './create-organization'; -export default [createActivity, createDeal, createLead, createNote]; +export default [ + createActivity, + createDeal, + createLead, + createNote, + createOrganization, +]; diff --git a/packages/backend/src/apps/pipedrive/dynamic-data/index.ts b/packages/backend/src/apps/pipedrive/dynamic-data/index.ts index 11f5ff52..76bdc182 100644 --- a/packages/backend/src/apps/pipedrive/dynamic-data/index.ts +++ b/packages/backend/src/apps/pipedrive/dynamic-data/index.ts @@ -4,6 +4,7 @@ import listDeals from './list-deals'; import listLeads from './list-leads'; import listLeadLabels from './list-lead-labels'; import listOrganizations from './list-organizations'; +import listOrganizationLabelField from './list-organization-label-field'; import listPersons from './list-persons'; import listUsers from './list-users'; @@ -14,6 +15,7 @@ export default [ listLeads, listLeadLabels, listOrganizations, + listOrganizationLabelField, listPersons, listUsers, ]; diff --git a/packages/backend/src/apps/pipedrive/dynamic-data/list-organization-label-field/index.ts b/packages/backend/src/apps/pipedrive/dynamic-data/list-organization-label-field/index.ts new file mode 100644 index 00000000..b0d401ef --- /dev/null +++ b/packages/backend/src/apps/pipedrive/dynamic-data/list-organization-label-field/index.ts @@ -0,0 +1,34 @@ +import { IGlobalVariable, IJSONObject } from '@automatisch/types'; + +export default { + name: 'List organization label field', + key: 'listOrganizationLabelField', + + async run($: IGlobalVariable) { + const labelFields: { + data: IJSONObject[]; + } = { + data: [], + }; + + const { data } = await $.http.get( + `${$.auth.data.apiDomain}/api/v1/organizationFields` + ); + + const labelField = data.data.filter( + (field: IJSONObject) => field.key === 'label' + ); + const labelOptions = labelField[0].options; + + if (labelOptions?.length) { + for (const label of labelOptions) { + labelFields.data.push({ + value: label.id, + name: label.label, + }); + } + } + + return labelFields; + }, +}; diff --git a/packages/docs/pages/apps/pipedrive/actions.md b/packages/docs/pages/apps/pipedrive/actions.md index 58a047d9..98d8c1bd 100644 --- a/packages/docs/pages/apps/pipedrive/actions.md +++ b/packages/docs/pages/apps/pipedrive/actions.md @@ -9,6 +9,8 @@ items: desc: Creates a new lead. - name: Create note desc: Creates a new note. + - name: Create organization + desc: Creates a new organization. ---