From 034bc6a79eb393bcde3df8a6299409dfea90a5db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Fri, 20 Oct 2023 19:25:06 +0300 Subject: [PATCH] refactor(pipedrive): make filterProvidedFields func reusable --- .../actions/create-activity/index.ts | 10 +--------- .../pipedrive/actions/create-deal/index.ts | 10 +--------- .../pipedrive/actions/create-lead/index.ts | 20 +++---------------- .../pipedrive/actions/create-note/index.ts | 10 +--------- .../actions/create-organization/index.ts | 10 +--------- .../pipedrive/actions/create-person/index.ts | 10 +--------- .../common/filter-provided-fields.ts | 18 +++++++++++++++++ 7 files changed, 26 insertions(+), 62 deletions(-) create mode 100644 packages/backend/src/apps/pipedrive/common/filter-provided-fields.ts diff --git a/packages/backend/src/apps/pipedrive/actions/create-activity/index.ts b/packages/backend/src/apps/pipedrive/actions/create-activity/index.ts index 8dbef113..5860e4ab 100644 --- a/packages/backend/src/apps/pipedrive/actions/create-activity/index.ts +++ b/packages/backend/src/apps/pipedrive/actions/create-activity/index.ts @@ -1,13 +1,5 @@ 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; - }, {}); -} +import { filterProvidedFields } from '../../common/filter-provided-fields'; export default defineAction({ name: 'Create activity', diff --git a/packages/backend/src/apps/pipedrive/actions/create-deal/index.ts b/packages/backend/src/apps/pipedrive/actions/create-deal/index.ts index 8105c240..8f6472bb 100644 --- a/packages/backend/src/apps/pipedrive/actions/create-deal/index.ts +++ b/packages/backend/src/apps/pipedrive/actions/create-deal/index.ts @@ -1,13 +1,5 @@ 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; - }, {}); -} +import { filterProvidedFields } from '../../common/filter-provided-fields'; export default defineAction({ name: 'Create deal', diff --git a/packages/backend/src/apps/pipedrive/actions/create-lead/index.ts b/packages/backend/src/apps/pipedrive/actions/create-lead/index.ts index 6bcef5d4..2cc5a922 100644 --- a/packages/backend/src/apps/pipedrive/actions/create-lead/index.ts +++ b/packages/backend/src/apps/pipedrive/actions/create-lead/index.ts @@ -1,18 +1,10 @@ import defineAction from '../../../../helpers/define-action'; +import { filterProvidedFields } from '../../common/filter-provided-fields'; type LabelIds = { __id: string; leadLabelId: string }[]; type LabelValue = { amount?: number; currency?: string }; -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 lead', key: 'createLead', @@ -176,18 +168,12 @@ export default defineAction({ organization_id: Number(organizationId), owner_id: Number(ownerId), expected_close_date: expectedCloseDate as string, + label_ids: onlyLabelIds, + value: labelValue, }; const body = filterProvidedFields(fields); - if (onlyLabelIds.length) { - body.label_ids = onlyLabelIds; - } - - if (Object.keys(labelValue).length) { - body.value = labelValue; - } - const { data: { data }, } = await $.http.post('/api/v1/leads', body); diff --git a/packages/backend/src/apps/pipedrive/actions/create-note/index.ts b/packages/backend/src/apps/pipedrive/actions/create-note/index.ts index 237e28a3..caaaaacf 100644 --- a/packages/backend/src/apps/pipedrive/actions/create-note/index.ts +++ b/packages/backend/src/apps/pipedrive/actions/create-note/index.ts @@ -1,13 +1,5 @@ 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; - }, {}); -} +import { filterProvidedFields } from '../../common/filter-provided-fields'; export default defineAction({ name: 'Create note', diff --git a/packages/backend/src/apps/pipedrive/actions/create-organization/index.ts b/packages/backend/src/apps/pipedrive/actions/create-organization/index.ts index 2c856ca7..3a43bda3 100644 --- a/packages/backend/src/apps/pipedrive/actions/create-organization/index.ts +++ b/packages/backend/src/apps/pipedrive/actions/create-organization/index.ts @@ -1,13 +1,5 @@ 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; - }, {}); -} +import { filterProvidedFields } from '../../common/filter-provided-fields'; export default defineAction({ name: 'Create organization', diff --git a/packages/backend/src/apps/pipedrive/actions/create-person/index.ts b/packages/backend/src/apps/pipedrive/actions/create-person/index.ts index 10878fa3..171780ad 100644 --- a/packages/backend/src/apps/pipedrive/actions/create-person/index.ts +++ b/packages/backend/src/apps/pipedrive/actions/create-person/index.ts @@ -1,4 +1,5 @@ import defineAction from '../../../../helpers/define-action'; +import { filterProvidedFields } from '../../common/filter-provided-fields'; type TEmail = { __id: string; @@ -10,15 +11,6 @@ type TPhone = { phone: string; }[]; -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 person', key: 'createPerson', diff --git a/packages/backend/src/apps/pipedrive/common/filter-provided-fields.ts b/packages/backend/src/apps/pipedrive/common/filter-provided-fields.ts new file mode 100644 index 00000000..fa88c8ee --- /dev/null +++ b/packages/backend/src/apps/pipedrive/common/filter-provided-fields.ts @@ -0,0 +1,18 @@ +import isObject from 'lodash/isObject'; + +export function filterProvidedFields(body: Record) { + return Object.keys(body).reduce>((result, key) => { + const value = body[key]; + if (isObject(value)) { + const filteredNestedObj = filterProvidedFields( + value as Record + ); + if (Object.keys(filteredNestedObj).length > 0) { + result[key] = filteredNestedObj; + } + } else if (body[key]) { + result[key] = value; + } + return result; + }, {}); +}