|
import defineAction from '../../../../helpers/define-action.js'; |
|
import { filterProvidedFields } from '../../common/filter-provided-fields.js'; |
|
|
|
export default defineAction({ |
|
name: 'Create lead', |
|
key: 'createLead', |
|
description: 'Creates a new lead.', |
|
arguments: [ |
|
{ |
|
label: 'Title', |
|
key: 'title', |
|
type: 'string', |
|
required: true, |
|
description: '', |
|
variables: true, |
|
}, |
|
{ |
|
label: 'Person', |
|
key: 'personId', |
|
type: 'dropdown', |
|
required: false, |
|
description: |
|
'Lead must be associated with at least one person or organization.', |
|
variables: true, |
|
source: { |
|
type: 'query', |
|
name: 'getDynamicData', |
|
arguments: [ |
|
{ |
|
name: 'key', |
|
value: 'listPersons', |
|
}, |
|
], |
|
}, |
|
}, |
|
{ |
|
label: 'Organization', |
|
key: 'organizationId', |
|
type: 'dropdown', |
|
required: false, |
|
description: |
|
'Lead must be associated with at least one person or organization.', |
|
variables: true, |
|
source: { |
|
type: 'query', |
|
name: 'getDynamicData', |
|
arguments: [ |
|
{ |
|
name: 'key', |
|
value: 'listOrganizations', |
|
}, |
|
], |
|
}, |
|
}, |
|
{ |
|
label: 'Owner', |
|
key: 'ownerId', |
|
type: 'dropdown', |
|
required: false, |
|
description: |
|
'Select user who will be marked as the owner of this lead. If omitted, the authorized user will be used.', |
|
variables: true, |
|
source: { |
|
type: 'query', |
|
name: 'getDynamicData', |
|
arguments: [ |
|
{ |
|
name: 'key', |
|
value: 'listUsers', |
|
}, |
|
], |
|
}, |
|
}, |
|
{ |
|
label: 'Lead Labels', |
|
key: 'labelIds', |
|
type: 'dynamic', |
|
required: false, |
|
description: '', |
|
fields: [ |
|
{ |
|
label: 'Label', |
|
key: 'leadLabelId', |
|
type: 'dropdown', |
|
required: false, |
|
variables: true, |
|
source: { |
|
type: 'query', |
|
name: 'getDynamicData', |
|
arguments: [ |
|
{ |
|
name: 'key', |
|
value: 'listLeadLabels', |
|
}, |
|
], |
|
}, |
|
}, |
|
], |
|
}, |
|
{ |
|
label: 'Expected Close Date', |
|
key: 'expectedCloseDate', |
|
type: 'string', |
|
required: false, |
|
description: 'E.g. 2023-10-23', |
|
variables: true, |
|
}, |
|
{ |
|
label: 'Lead Value', |
|
key: 'value', |
|
type: 'string', |
|
required: false, |
|
description: 'E.g. 150', |
|
variables: true, |
|
}, |
|
{ |
|
label: 'Lead Value Currency', |
|
key: 'currency', |
|
type: 'dropdown', |
|
required: false, |
|
description: 'This field is required if a Lead Value amount is provided.', |
|
variables: true, |
|
source: { |
|
type: 'query', |
|
name: 'getDynamicData', |
|
arguments: [ |
|
{ |
|
name: 'key', |
|
value: 'listCurrencies', |
|
}, |
|
], |
|
}, |
|
}, |
|
], |
|
|
|
async run($) { |
|
const { |
|
title, |
|
personId, |
|
organizationId, |
|
ownerId, |
|
labelIds, |
|
expectedCloseDate, |
|
value, |
|
currency, |
|
} = $.step.parameters; |
|
|
|
const onlyLabelIds = labelIds |
|
.map((labelId) => labelId.leadLabelId) |
|
.filter(Boolean); |
|
|
|
const labelValue = {}; |
|
|
|
if (value) { |
|
labelValue.amount = Number(value); |
|
} |
|
if (currency) { |
|
labelValue.currency = currency; |
|
} |
|
|
|
const fields = { |
|
title: title, |
|
person_id: Number(personId), |
|
organization_id: Number(organizationId), |
|
owner_id: Number(ownerId), |
|
expected_close_date: expectedCloseDate, |
|
label_ids: onlyLabelIds, |
|
value: labelValue, |
|
}; |
|
|
|
const body = filterProvidedFields(fields); |
|
|
|
const { |
|
data: { data }, |
|
} = await $.http.post('/api/v1/leads', body); |
|
|
|
$.setActionItem({ |
|
raw: data, |
|
}); |
|
}, |
|
}); |
|
|