Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_31381699-d85b-44df-aa21-d678660dc7d6) |
There was a problem hiding this comment.
Code Review
This pull request introduces a new CRM integration for Crove CRM, adding the necessary components, configurations, services, schemas, and icons. The review feedback highlights a few improvement opportunities: adding optional chaining when mapping over event.attendees in CrmService.ts to prevent potential runtime errors, and declaring missing workspace dependencies (@calcom/features and @calcom/lib) in package.json to ensure correct dependency resolution and task execution.
| attendees: event.attendees.map((a) => ({ | ||
| email: a.email, | ||
| name: a.name, | ||
| timeZone: a.timeZone, | ||
| })), |
There was a problem hiding this comment.
Using event.attendees.map directly can lead to a runtime error if event.attendees is undefined or null. It is safer to use optional chaining and provide a fallback empty array, similar to how it is handled in deleteEvent.
| attendees: event.attendees.map((a) => ({ | |
| email: a.email, | |
| name: a.name, | |
| timeZone: a.timeZone, | |
| })), | |
| attendees: event.attendees?.map((a) => ({ | |
| email: a.email, | |
| name: a.name, | |
| timeZone: a.timeZone, | |
| })) || [], |
| attendees: event.attendees.map((a) => ({ | ||
| email: a.email, | ||
| name: a.name, | ||
| timeZone: a.timeZone, | ||
| })), |
There was a problem hiding this comment.
Using event.attendees.map directly can lead to a runtime error if event.attendees is undefined or null. It is safer to use optional chaining and provide a fallback empty array, similar to how it is handled in deleteEvent.
| attendees: event.attendees.map((a) => ({ | |
| email: a.email, | |
| name: a.name, | |
| timeZone: a.timeZone, | |
| })), | |
| attendees: event.attendees?.map((a) => ({ | |
| email: a.email, | |
| name: a.name, | |
| timeZone: a.timeZone, | |
| })) || [], |
| "devDependencies": { | ||
| "@calcom/types": "workspace:*" | ||
| } |
There was a problem hiding this comment.
The package imports from @calcom/features and @calcom/lib, but these workspace dependencies are not declared in package.json. To ensure correct Turbo task graph execution, caching, and dependency resolution, please add them to devDependencies.
"devDependencies": {
"@calcom/features": "workspace:*",
"@calcom/lib": "workspace:*",
"@calcom/types": "workspace:*"
}
Summary
Test plan
Note
Medium Risk
Introduces outbound sync of booking and attendee data to a third-party CRM using stored API credentials, on the same path as other CRM apps but worth verifying credential handling and sync failure behavior.
Overview
Adds Crove CRM as a first-class App Store CRM app (
crovecrm), including store metadata, zod schemas for optionalapi_key/api_url, and autogenerated registry entries (metadata, schemas,EventTypeAddonMap,CrmServiceMap).The new
CroveCrmIntegrationServicedelegates to@calcom/features/crove-crmto push booking created, rescheduled, and cancelled events to Crove and to upsert contacts on create; contact lookup and calendar availability are left as no-ops. Event types get a standard enable/disable app card on the Apps tab.Reviewed by Cursor Bugbot for commit ea63716. Configure here.