* feat: Hubspot write to meeting object * fix: translate hardcoded strings and remove debug console.log Co-Authored-By: amit@cal.com <samit91848@gmail.com> * refactor * fix: improve static value detection for placeholder replacement - Changed condition from startsWith/endsWith to includes('{') to properly detect embedded placeholders - Strings like 'Hello {name}!' are now correctly processed for placeholder replacement - Pure placeholder tokens that can't be resolved return null - Partially resolved values are returned as-is Co-Authored-By: amit@cal.com <samit91848@gmail.com> * refactor: split WriteToObjectSettings into types and utils files - Extract interfaces, enums, and type definitions to WriteToObjectSettings.types.ts - Extract constants and utility functions to WriteToObjectSettings.utils.ts - Update main component to use the new utility functions - Improves code organization and maintainability Co-Authored-By: amit@cal.com <samit91848@gmail.com> * revert: restore original static value detection logic Per user request - the startsWith/endsWith check was intentional Co-Authored-By: amit@cal.com <samit91848@gmail.com> * test: add unit tests for HubSpot CRM service Tests cover: - ensureFieldsExistOnMeeting: field validation against HubSpot properties - getTextValueFromBookingTracking: UTM parameter extraction - getTextValueFromBookingResponse: placeholder replacement - getDateFieldValue: date field resolution for different date types - getFieldValue: main field value resolution for all field types - generateWriteToMeetingBody: write-to-meeting body generation - getContacts: contact search functionality Co-Authored-By: amit@cal.com <samit91848@gmail.com> * fix: correct type errors in HubSpot CRM service tests - Import WhenToWrite enum from crm-enums - Replace string literals with WhenToWrite.EVERY_BOOKING enum values - Add missing whenToWrite property to field config objects Co-Authored-By: amit@cal.com <samit91848@gmail.com> * fix: use type casting for intentional type errors in tests - Cast numeric fieldValue to string for testing non-string handling - Cast invalid field type string to CrmFieldType for testing unsupported types Co-Authored-By: amit@cal.com <samit91848@gmail.com> * fix: prevent unhandled promise rejections in HubSpot CRM tests - Re-apply mockGetAppKeysFromSlug implementation in beforeEach to ensure mock is always set correctly after clearAllMocks - Change vi.resetAllMocks() to vi.clearAllMocks() to preserve mock implementations between tests - Add explicit types to satisfy biome lint rules - This fixes the 'Cannot read properties of undefined (reading client_id)' errors that were causing CI to fail with exit code 1 Co-Authored-By: amit@cal.com <samit91848@gmail.com> * refactor: convert HubSpot tests to black-box testing through public methods Co-Authored-By: amit@cal.com <samit91848@gmail.com> * fix: properly type mock CalendarEvent in HubSpot tests Co-Authored-By: amit@cal.com <samit91848@gmail.com> * fix: properly type TFunction in mock CalendarEvent Co-Authored-By: amit@cal.com <samit91848@gmail.com> * chore: graceful owner fail test * refactor * fix: type check * fix: remove null fields * Update packages/app-store/hubspot/lib/CrmService.ts Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
38 lines
1.0 KiB
TypeScript
38 lines
1.0 KiB
TypeScript
/**
|
|
* CRM field types supported across different CRM integrations.
|
|
*
|
|
* Implementation notes:
|
|
* - TEXT, STRING, PHONE, TEXTAREA, CUSTOM: All handled identically as text fields
|
|
* - DATE, DATETIME: Both handled identically, return ISO 8601 datetime strings
|
|
* - CHECKBOX: Returns boolean values (true/false)
|
|
* - PICKLIST: Dropdown/select fields
|
|
*/
|
|
export enum CrmFieldType {
|
|
TEXT = "text",
|
|
STRING = "string",
|
|
DATE = "date",
|
|
DATETIME = "datetime",
|
|
PHONE = "phone",
|
|
CHECKBOX = "checkbox",
|
|
PICKLIST = "picklist",
|
|
CUSTOM = "custom",
|
|
TEXTAREA = "textarea",
|
|
}
|
|
|
|
export enum DateFieldType {
|
|
BOOKING_START_DATE = "booking_start_date",
|
|
BOOKING_CREATED_DATE = "booking_created_date",
|
|
BOOKING_CANCEL_DATE = "booking_cancel_date",
|
|
}
|
|
|
|
/**
|
|
* Controls when CRM field values should be written.
|
|
*
|
|
* - EVERY_BOOKING: Always write the value on every booking
|
|
* - FIELD_EMPTY: Only write if the field is currently empty (prevents overwrites)
|
|
*/
|
|
export enum WhenToWrite {
|
|
EVERY_BOOKING = "every_booking",
|
|
FIELD_EMPTY = "field_empty",
|
|
}
|