* incompleteBooking only search for leads if contact is not found
* Fix logic
* Abstract to functions
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* perf: Avoid leading wildcard for Salesforce
* use limit of 1 since we need 1 record
* use LOWER to check exact website match
* Revert the usage of LOWER since we need wider searches
* Add limits to queries
* Update packages/app-store/salesforce/lib/CrmService.ts
* Remove unneeded LIMIT statements
* Update packages/app-store/salesforce/lib/CrmService.ts
* Apply suggestions from code review
* Update packages/app-store/salesforce/lib/CrmService.ts
---------
Co-authored-by: Joe Au-Yeung <j.auyeung419@gmail.com>
* Allow user to select custom field type
* Get field value and write to field - ignoring field type
* Only validate field length if present
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* Add booking incomplete actions table
* Add incomplete booking page tab
* Add `getincompleteBookingSettings` trpc endpoints
* Add incomplete booking page
* Abstract enabled apps array
* Handle no enabled credentials and no actions
* Add enabled field to incomplete booking action db record
* Add new write record entries
* UI add separation between switch and inputs
* Fix typo
* clean up
* Add saveIncompleteBookingSettings endpoint
* Save incomplete booking settings
* Fix language around when to write to field
* Add `credentialId` to action record
* Choose which credential to assign to action
* Save credential to action
* Revert "Save credential to action"
This reverts commit ba6a1c808baed54f6d3d4c6155cf192c813d0696.
* Revert "Choose which credential to assign to action"
This reverts commit 968f6e5295d098c64abe95268afd1fa139a175ba.
* Revert "Add `credentialId` to action record"
This reverts commit 579f9ff4167b65aa987659e4e8f8c26f9e773317.
* Add credentialId to action record - rewrite migration file
* Revert "Add credentialId to action record - rewrite migration file"
This reverts commit 2843a92c61820e7f7a1614a557d3f7ea96342107.
* Revert "Add booking incomplete actions table"
This reverts commit 7ec75bef4a0f0a9d07be0142da64c49d739439ea.
* Revert "Add enabled field to incomplete booking action db record"
This reverts commit d279a1da05819eafa8fc5d664e3be733e0687e8d.
* Write migration in single commit
* Rename table
* Rename table - remove underscores
* Remove credential relationship
* Type fix - changing table name
* Fix table name
* Change writeToRecordObject to object
* Salesforce add incomplete booking, write to record
* Add incomplete booking actions to `triggerFormSubmittedNoEventWebhooks`
* Remove console.log
* Type fixes
* Type fixes
* Iterate if incompleteBookingActions
* Choose which credential to assign to action
* Save credential to action
* Fix getServerSideProp changes
* Type fix
* Type fix
* Type fix
* Type fix
---------
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* Add email domain array
* Create numbered email domain object
* Check email domain
* Rename function
* Add tests
* Frontend enable skip ownership check if free email domain
* Backend ignore adding ownership to return records if free email domain check is enabled
* feat: Only require confirmation for free email domains (#17917)
* Add requiresConfirmationForFreeEmail to db
* Add option to event type settings
* Get requiresConfirmationForFreeEmail for event type page
* Include requiresConfirmationForFreeEmail in fetching event type
* Pass bookerEmail to `getRequiresConfirmationFlags`
* Add free email domain check to `determineRequiresConfirmation`
* Add `requiresConfirmationForFreeEmail` to types
* Add severity to Watchlist table
* Add migration for watchlist severity
* Add `getEmailDomainInWatchlist` method to watchlist repository
* Use watchlist repository to check for free email domain
* Mock watchlist repository in test
* Update test
* Rename method
* Add severity to blocked list
* Move check free email domain to async
* Type checks
* Adjust for promise returned
* Fix tests
* Fix
* Fix tests
* Catch undefined app option properties
* Add `getCompanyNameFromBookingResponse` method
* Pass bookingResponse when Lead is being created
* Pass bookingResponse from CRMManager
* Handle empty company response
* Return the company value
* move types to types file
* Create salesforce routing form components
* Save salesforce data to routing form
* Fixes
* Add event type service
* Change commenting
* Pass data from routing form to CRM
* Init Salesforce routing form booking form handler
* Salesforce find user associated with lookup field
* Add looking up the contact owner
* If salesforce is disabled then don't change the Salesforce option
* Small refactor
* Refactor getting event type app metadata
* Refactor eventType service
* Type fix
* Clean up
* Add translations
Co-authored-by: Alex van Andel <emrysal@users.noreply.github.com>
---------
Co-authored-by: Alex van Andel <emrysal@users.noreply.github.com>
* Create data type
* Start FE component
* Rename and add new enums
* Add new schema for write on record options
* Add options on the frontend
* Backend write to custom fields
* refactor: Salesforce - on booking write to fields on person record (#17481)
* Add translations
* fix: type err
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Udit Takkar <udit222001@gmail.com>
* fix: salesforce event creation duplicate error
* chore: message
* If contact was created, don't create a new lead
* Add boolean for no accountId
* Remove debug artifact
---------
Co-authored-by: Udit Takkar <udit222001@gmail.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Bailey Pumfleet <bailey@pumfleet.co.uk>
* Refactor get SF user and create event
* Add new Salesforce options
* Pass app options to CrmService
* Add record enum
* Add creating new lead and contact under an account
* Handle if the contact already exists but not connected to account
* Create a lead if an account doesn't exist
* Merge fix
* Refactor - add generateCreateRecordBody
* Type fix
* Clean up
* Add getAppOptions to other CRM services
* Type fixes
* Fix typo
* feat: Salesforce round robin skip - choose which entity to search on (#17038)
* Add option to search which entity for the owner
* Add logic to search entity for skipping RR assignment
* Type fixes
* Disable license
* Skip license check in component
* Revert license changes
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* fix timezone display on booking page to reflect event availability timezone
* migrate fetching event owner's schedule to server side
* migrate fetching event owner's schedule to server side
* fix e2e test errors
* Add WEBAPP_URL_FOR_OAUTH to salesforce auth
* In event manager constructor include "_crm" credentials as calendar creds
* Change crm apps to type to end with `_crm`
* Move sendgrid out of CRM
* Add zoho bigin to CRM apps
* When getting apps, use slug
* Add `crm` variants
* Hubspot Oauth use `WEBAPP_URL_FOR_OAUTH`
* Refactor creating credentials
* Fix empty CRM page
* Use credentials with `_crm`
* Abstract getAppCategoryTitle
* Add integration.handler changes
* Init crmManager
* Change salesforce to CrmService
* Create crmManager
* Create contact on new event
* Create event
* Create new CRM reference
* - Fix create new contact for salesforce
- Add reschedule to crmManager
* Create deleteAllCRMEvents
* When searching for credential, look for current credentials in class
* On cancel, delete 3rd party events
* Add delete method
* Type fix
* Type fix
* Convert Close.com to CrmService
* Convert Close.com to CrmService
* Move hubspot to CrmService
* Convert Pipedrive to CrmService
* Rename classes to CrmService
* Move ZohoCrm to CrmService
* Move Bigin to CrmService
* Type return for CrmServices
* Fix type errors
* Close.com create leads and contacts
* Fix tests
* Type fix
* Zoho bug fixes
* Clean up
* Type fixes
* Remove apiDeletes
* Type fixes
* Specific typing
* Type fix
* Type fix
* Type fix
* Type fix
* Type fix
* feat: Enable CRM apps on a per event type basis (#14450)
* Add Salesforce to be an event type app
* Handle new booking, only get enabled CRM credentials
* Abstract generating search params
* Add close.com to event type
* Clean up
* Move hubspot to event type
* Add pipedrive to event type
* Add zoho bigin to event type
* Add zoho crm to event type
* Remove console.log
* Add deleting CRM apps from event type
* Delete event type apps
* Fix deleting credentials
* Add CRM app data to event type metadata
* Backwards compatibility: add CRM credential if doesn't exist on event type
* Don't include user CRM credentials for backwards comp
* Backwards compatibility show CRM app is enabled and dirty field
* Clean up
* Type fixes
* Type fixes
* Type fix
* Type fix
* Remove console.log
* Test fix
* Upgrade embed-react vite version - dev
* Change build can't find error message
* Add back omni install prop
* Clean up
* Refactor `writeAppDataToEventType`
* Use eventType repository in writeAppDataToEventType
* Clean up old comments
* Add error logging
* createCRMEvents pass event uid as created event uid
* Use `getUid`
* Clean up props in create crm event
* Small changes to `crmManager`
* Fix zoho CRM
* refactor crmManager
* Undo vite config change
* Fix teamId query
* Fix bigin error
* Remove need for `writeAppDataToEventType`
* Add `getAllCredentials` test
* Add crmManager tests
* Type fixes
* Fix type errors
* Fix getAllCredentials test
* Fix tests
* Skip CRM manager tests for now
* feat: Skip RR Assignment if Contact Exists In Salesforce (#14556)
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* Update yarn.lock
* @zomars feedback - use new URL for state params
* fix: update hook to not produce enabled === undefined
* fix: update app card interfaces to use the new enabled from useIsAppEnabled
* fix: feedback for crm RR skip (#15160)
* code clean up
* fix type any
* test setup for RR lead skip
* code clean up
* simplify code
* type error
* finshed first test for RR lead skip
* add seconds test
* add test for handleNewBooking
* test if teamMember is set
* fix missing enabled key
* fix tests
* fix type error
* use setSystemTime instead of getDate
* remove nested if
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* fix type error
* fix: remove app metadata from all eventTypes on deleting the app
* fix: update hook to not produce enabled === undefined (default to false)
---------
Co-authored-by: Shaik-Sirajuddin <sirajuddinshaik30gmail.com>
Co-authored-by: Shaik-Sirajuddin <sirajudddinshaik30@gmail.com>
Co-authored-by: Shaik-Sirajuddin <89742297+Shaik-Sirajuddin@users.noreply.github.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
Co-authored-by: Omar López <zomars@me.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: sean-brydon <sean@cal.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: Somay Chauhan <somaychauhan98@gmail.com>
* feat(appStore): add isOAuth config
* refactor(appStore): EventTypeAppSettngsInterface
* refactor(qr_code): split EventTypeAppCardInterface and EventTypeAppSettingsInterface
* feat(appStore): redirect to onboarding for stripe and basecam
* fix(ui/ScrollableArea): overflow indicator not working
* feat(apps): new install app flow
* fix(configureStep): get disabled props for settings
* fix: getAppInstallsBySlug now use teamIds
* chore: Alby to AppSettingsInterface
* chore: Giphy to appsettings interface
* chore: GTM migration
* chore: GT4 - migration
* chore: fathom migration
* chore: paypal
* feat: basecamp migration
* feat: metapixel migration
* feat:plausable
* feat:stripe
* fix merge issues
* fix merge issues in new app install flow steps
* wip: callback to onboarding
* fix: imports
* fix: more imports
* feat: use redirect to onboarding on install flow
* fix: redirect to event-type after oauth flow
* When clicking on install new app button, only redirect to the new app install flow if it is an oAuth app or an app that extends the EventType feature in it's config
* code refactor, skip event-type step
* removed extra consoles
* so that no one can change the eventTypeId in url
* theme support enabled
* only pass eventTypeId instead of whole evetType obj to OmniInstallAppButton
* fix: clicking on event-type gives error and redirects to /apps
* saved appOnboardingRedirectUrl to OAuth State
* fix: a user having no team breaks the onboarding flow
* add optional chaining to appMetadata.extendsFeature and appMetadata.isOAuth;
* encode appOnboardingRedirectUrl
* fix: dark theme ui issues
* skip configure step if no-event types
if user/team does not have event-type then skip configure step and goto apps/installed/[category]
* exclude calendars from apps- onboarding flow
* Update getAppOnboardingRedirectUrl.ts
* fix: On configure step, inputs aren't showing errors
* change route from `apps/onboarding` to `apps/installation`
* fix: flow not correctly working for teams
* should only allow team ADMIN or OWER to install an app to team
* Prevent two payment apps to be enabled
* removed loading state
* Fix type error
* undo new-app-flow from OmniInstallAppButton
* remove OAuth Step, handle step numbering
* fix: redirect url
* getAppOnboardingRedirectUrl refactor
* for debugging
* Revert "for debugging"
This reverts commit b9362c1a8f47f2280e684c213d7ec08d04a8ac4c.
* fix: added toaster
* feat: added support to select multiple events (almost)
* hide button
* Move inner form outside outer form using portal
Due to limitations with nested forms in React Hook Form, moved the inner form outside the outer form using a portal to ensure proper form handling.
* submit buttons refs madness
* removed configure step
we had to use query params to manage selected event-types, between routes which was causing 2 issues:
* each time we selected or unselected an event the whole page was reloaded including getserversideprops being called again and again
* the form was reloaded causing more issues
* removed extra unwanted code
* small fix
* fix: type error
* fix: types
* implemented suggested changes
* removed step footer
* fixed error.message
* removed commented styles
* removed step footer
* fix: Display team event types instead of user's on event types step when team selected
* fix: typo
* removed shouldLockDisableProps
* refactor setUpdatedEventTypesStatus, fix type
* removed extra code
* can't delete while saving
* added translations
* fix: loading in select account step, fix handle onSelect params type
* Fix typo
* feat: add skip button to event-types step
* use set-up-later button in tests
* added skip button to configure step as well
* feat: add test for analytics apps using the new app install flow
* feat: add test for stripe 1
* feat: add test for stripe 2
* Fix: Redirect only those apps that extend 'EventType' to the new app install flow (#14527)
* fix: type errors
* fix: failing tests
* fix: tests
* fix test flakiness
* better naming and code refactor for analytics apps tests
* run tests parallelly
* removed network idle, giving error
* another shot at test flakiness
* Fix: can't install apps without team selector dropdown on main app store page.
* fix: test flakiness
* fix: account select loading issue
* removed getPaymentCredential (unused)
* fix: only redirect after the app has been added to all the event-types
* remove overflowIndicatorStyles
* fixed failing test
* fix: exclude org team events
* undo some random merge changes
---------
Co-authored-by: Morgan Vernay <morgan@cal.com>
Co-authored-by: sean-brydon <sean@cal.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Joe Au-Yeung <j.auyeung419@gmail.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Omar López <zomars@me.com>