feat(event-types): allow email invites in team assignment#1
Merged
JITENDRAGAHERWAR03 merged 122 commits intomainfrom Mar 30, 2026
Merged
Conversation
…m#27727) * migrate booker layout selector * move schedule hooks and types * migrate feature opt in components * migrate feedback dialog * update * migrate schedule hooks * migrate useSegments * update * update import paths * fix import paths * mv useTimesForSchedule back to features * fix
…#27567) * fix: resolve organizer default conferencing app credential for location update - Fix Google Meet credential lookup in EventManager to properly map 'google:meet' to 'google_video' type - Add automatic credential ID resolution when selecting 'Organizer Default App' as location - Fixes 'Location update failed' error when editing round-robin team event location to organizer default app (Google Meet) with multiple Google Calendar connections Co-Authored-By: anik@cal.com <adhabal2002@gmail.com> * fix update --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…m#27729) * docs: add code comment guidelines to AGENTS.md Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> * docs: extract comment guidelines into agents/rules and reference from AGENTS.md Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…26448) (calcom#27569) * fix: allow deleting first time slot in availability schedule (calcom#26448) * code updated --------- Co-authored-by: Sahitya Chandra <sahityajb@gmail.com>
…ion to refer page (calcom#26431) * Add action‑item support to mobile “More” page and hide arrow on copy‑link button * updated code * fix code * updated code * remove unused import and formatting --------- Co-authored-by: Dhairyashil <dhairyashil10101010@gmail.com>
… form questions (calcom#27592) * fix: css property for the scroll bar and label for multi select * chore --------- Co-authored-by: Romit <romitgabani1.work@gmail.com>
…calcom#27463) * fix(booking): make provider label and location link visible on mobile * correct order * remove comments --------- Co-authored-by: Sahitya Chandra <sahityajb@gmail.com> Co-authored-by: Dhairyashil <dhairyashil10101010@gmail.com>
…alcom#27749) * fix: prevent textarea resize overlapping buttons in rejection dialog The rejection reason textarea in the booking rejection dialog allows manual resizing via the drag handle, which can cause it to expand over the dialog footer buttons. Adding resize-none prevents this overlap. Fixes calcom#17536 * Update RejectionReasonDialog.tsx --------- Co-authored-by: Sahitya Chandra <sahityajb@gmail.com>
Remove 4 duplicate keys that existed in the English translations file: - routing_forms: identical duplicate removed - submit_feedback: kept "Submit feedback" (consistent casing) - skip_trial: kept "Skip trial" (used as button label) - availability_schedule: kept "Availability schedule" (sentence case), removed duplicate with inconsistent capitalization Fixes calcom#23478
) - Remove unused attendeeIds field and unnecessary prisma.booking.findUnique from beforeEach - Store booking.id in testData to avoid re-querying booking in test body - Track additional attendee emails via additionalAttendeeEmails array for proper afterEach cleanup - Remove fragile prisma.attendee.delete (throws P2025 on missing record) from test body - Use deleteMany-based cleanupTestData for second attendee cleanup instead The test was flaky because: 1. It used prisma.attendee.delete (singular) which throws if record is already gone 2. It re-queried the booking via findUnique mid-test which could fail if cascade-deleted 3. The second attendee email was not tracked in afterEach cleanup Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…om#27760) Add aria-label to the TimeFormatToggle and LayoutToggle components on the booking page so screen readers can identify these radio groups. Uses existing translation keys "time_format" and "layout". Fixes calcom#20703
…m#27765) * fix: defer email validation to after first blur on signup form Change react-hook-form validation mode from "onChange" to "onTouched" so that the "Invalid email" error only appears after the user has interacted with the field and moved away, not on every keystroke. Password strength hints still update in real-time since onTouched validates on change after the field has been touched (blurred once). Fixes calcom#19163 * test: add unit tests for signup email validation mode Verify the onTouched form validation behavior: - No error shown while user is typing - Error appears only after blur with invalid email - No error for valid email after blur - Revalidation on each keystroke after first blur * remove eslint comment --------- Co-authored-by: Dhairyashil <dhairyashil10101010@gmail.com>
…ating blocklist UI and useEvent hook (calcom#27775) * migrate blocklist components to web * migrate useEvent * fix * fix * rm barrel file * dead code
* feat: add comprehensive E2E tests for routing form attribute conditions Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> * refactor: assert routedTeamMemberIds in URL instead of email in results Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> * refactor: assert both routedTeamMemberIds in URL and email in results Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> * fix: include users without attribute assignments in exclusion condition evaluation Users with no attribute assigned were excluded from the team members list entirely, causing exclusion operators (not_equals, not_some_in, not_like, not_between, etc.) to never match them. Now getAttributesAssignmentData includes all team members, even those without attribute assignments. Also adds unit tests and E2E tests for this scenario. Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> * fix: update getAttributes test to reflect new behavior for empty attributes Users without attribute assignments are now included with empty attributes so exclusion operators can match them. Updated test expectation accordingly. Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> * refactor: remove redundant usersWithAssignments code (fix already in _prepareAssignmentData from main) Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…ilters (calcom#27680) * test: add E2E tests for assignAllTeamMembers with attribute segment filters Cover all 4 attribute types (SINGLE_SELECT, MULTI_SELECT, TEXT, NUMBER) with booking flow verification plus edge cases (no match, all match). Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> * fix: use auto-retrying assertion for no-match edge case test Replace flaky waitForTimeout(2000) + count check with Playwright's toHaveCount(0, { timeout: 15000 }) which retries until availability settles, preventing CI timing issues. Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> * test: add exclusion tests for members without attribute assigned Add 4 new E2E tests covering the case where team members have no attribute assigned at all (not just a different value). Each attribute type (SINGLE_SELECT, MULTI_SELECT, TEXT, NUMBER) is tested to verify that members without the attribute are excluded from the booking pool. Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> * test: add negation operator tests and restructure exclusion tests - Restructure 'Members without attribute assigned' tests: assign matching attribute to teammate-1 (not owner) so round-robin can't coincidentally pass when the bug exists - Add 4 negation operator tests (select_not_any_in, multiselect_not_some_in, not_equal for TEXT and NUMBER) that verify unassigned members should match negation filters. Marked with test.fail() as they confirm a known bug where getLogicResultForAllMembers skips members without attribute assignments entirely. - Add edge case: no members have attribute assigned -> no available slots Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> * test: remove test.fail() markers from negation tests after bug fix Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* fix: broken style on availability delete button * fix/final
* fix: disable save button when workflow has no changes * test: wait for save button to be enabled before clicking * test: ensure input value is set before pressing Enter * test fix * fix: add shouldDirty to enable save button on name change * test: clean up workflow test fixtures * fix: disable save button when workflow has no changes * test: update workflow E2E tests * test: fix workflow E2E * fix: enable save button when workflow form fields change * fix tests * fix: disable save button when workflow has no changes * remove comments * chore: improve fixture logic * cleanup: remove unnecessary changes * update workflow fixture to handle team workflow creation --------- Co-authored-by: Pallav <90088723+Pallava-Joshi@users.noreply.github.com> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Rajiv Sahal <sahalrajiv-extc@atharvacoe.ac.in> Co-authored-by: Romit <romitgabani@icloud.com> Co-authored-by: Romit <romitgabani1.work@gmail.com> Co-authored-by: Romit <85230081+romitg2@users.noreply.github.com>
calcom#27725) * test: prevent Closing rpc while * update
…m @calcom/features (calcom#27728) * migrate booker layout selector * move schedule hooks and types * migrate feature opt in components * migrate feedback dialog * update * migrate schedule hooks * migrate useSegments * update * update import paths * fix import paths * mv useTimesForSchedule back to features * fix * add useEvent to web * remove the old file * update imports * clean up * migrate Segment * update imports * update imports * fix name * fix tests * fix * fix * update imports * remove trpc/react * remove trpc dependency from package.json * rm * wip * wip * fix types * fix * migrate PhoneInput * mv LocationInput * remove dead file * update import paths * rm dead import * rm useApp hook * cleanup * wip * restore * wip * remove dead code * fix * simplify * fix * fix * fix * fix * fix * fix * format * format * restore * remove prop
…t and add comprehensive tests (calcom#27752) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…in folders (calcom#27570) * refactor: move repositories from lib to features domain folders - Move HolidayRepository to features/holidays/repositories - Move PrismaTrackingRepository to features/bookings/repositories - Move PrismaBookingPaymentRepository to features/bookings/repositories - Move PrismaRoutingFormResponseRepository to features/routing-forms/repositories - Move PrismaAssignmentReasonRepository to features/assignment-reason/repositories - Move VerificationTokenRepository to features/auth/repositories - Move WorkspacePlatformRepository to features/workspace-platform/repositories - Move DTO files to their respective feature domains - Merge lib DestinationCalendarRepository into features version - Merge lib SelectedCalendarRepository into features version - Update all import paths across the codebase This follows the vertical slice architecture pattern by organizing repositories by domain rather than by technical layer. Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: update VerificationTokenService import path to new location Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: update test file imports to use new repository locations Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * mv * fix structure * fix * refactor: merge unit tests for SelectedCalendarRepository into single file Co-Authored-By: benny@cal.com <sldisek783@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…alcom#27500) * fix: prevent 500 error when deleting calendar events with empty uid This fix addresses a 500 error that occurs when trying to delete a Google Calendar event with an empty event ID, which results in a malformed API URL. Root cause: When calendar event creation fails or returns without an ID, booking references were being created with empty uids. Later, when trying to delete these events (e.g., during reschedule), the empty uid caused a 404 from Google Calendar API which was then thrown as a 500 error. Changes: 1. CalendarManager.deleteEvent: Added validation to skip deletion if bookingRefUid is empty, with appropriate error logging. This is a safety net for existing bad data in the database. 2. EventManager.create: Added filtering to exclude booking references with empty uids from being stored, with error logging to help diagnose the root cause of missing event IDs. 3. EventManager.updateLocation: Same filtering applied for consistency. Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: revert EventManager filtering to preserve existing behavior The test expects that booking references with empty uids are still created when calendar event creation fails. This is intentional behavior to track failed calendar syncs. The CalendarManager.deleteEvent fix handles the deletion case gracefully by skipping the API call when uid is empty. Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: throw ErrorWithCode instead of silently returning when bookingRefUid is empty Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: validate uid before calling calendar.deleteEvent to prevent 500 error - Add uid check in lastAttendeeDeleteBooking.ts before calling calendar.deleteEvent - Add uid check in EventManager.updateAllCalendarEvents before calling calendar.deleteEvent - Revert CalendarManager.deleteEvent changes (validation at call sites is the proper fix) Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: add error logging safeguard in CalendarManager.deleteEvent for empty bookingRefUid Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: move bookingRefUid check before getCalendar call Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: prevent storing booking references with empty uid when calendar event creation fails Root cause fix: Change the check from 'if (createdEvent)' to 'if (createdEvent.createdEvent)' in createAllCalendarEvents to prevent failed calendar events from being added to results. This prevents empty uids from being stored in the database in the first place, which was causing 500 errors when trying to delete non-existent calendar events later. Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * test: update test to expect no calendar reference when calendar event creation fails The root cause fix changes behavior so that failed calendar events no longer create booking references with empty uids. This test now expects an empty references array when calendar event creation fails, which is the correct behavior that prevents 500 errors later when trying to delete non-existent calendar events. Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * refactor: use createdEvent.success instead of createdEvent.createdEvent Using success is more semantically clear since it explicitly checks the success status rather than checking if the nested object exists. Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * refactor: use optional chaining for createdEvent?.success Using optional chaining is safer in case createdEvent is somehow undefined. Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * revert: remove root cause fix to preserve backfilling script compatibility The root cause fix (checking createdEvent?.success instead of createdEvent) would break the backfilling script that relies on booking references with empty uids to identify which bookings need backfilling. This PR now only includes defensive checks to prevent 500 errors when deleting calendar events with empty uids. Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * revert * fix --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…heck in producer (calcom#26524) * fix: remove IS_PRODUCTION gate from BookingAuditProducer Remove the IS_PRODUCTION check that was preventing booking audits from being queued in production. Audits are still properly gated by: 1. Organization check: Audits are skipped for non-organization bookings (organizationId === null) 2. Feature flag: The BookingAuditTaskConsumer checks if the 'booking-audit' feature is enabled for the organization via featuresRepository.checkIfTeamHasFeature() The IS_PRODUCTION gate was intentionally added to prevent logs from being created in production while the action data versioning was being actively reviewed and finalized. Without proper versioning handling, the Booking History UI could crash when encountering unversioned data. Now that the versioning system is in place, this gate can be safely removed. Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: revert formatting, keep only IS_PRODUCTION removal Reverts the unintended formatting changes from the previous commit. Only removes the IS_PRODUCTION gate without changing indentation. Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * feat: add booking-audit feature flag check in producer to avoid unnecessary task creation - Query booking-audit and booking-email-sms-tasker flags in parallel before fireBookingEvents - Pass isBookingAuditEnabled through BookingEventHandler to producer's queueTask method - Add conditional check in queueTask with debug log when skipping audit - Reuse pre-queried isBookingEmailSmsTaskerEnabled flag instead of querying again Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * feat: make isBookingAuditEnabled required and pass it through all booking audit flows - Make isBookingAuditEnabled a required property in BookingAuditProducerService interface - Update all BookingEventHandler methods to require isBookingAuditEnabled - Add feature flag check in all flows that call booking audit: - handleSeats (seat booking/rescheduling) - RecurringBookingService (bulk bookings) - handleCancelBooking (booking cancellation) - handleConfirmation (booking acceptance) - roundRobinReassignment (automatic reassignment) - roundRobinManualReassignment (manual reassignment) - trpc handlers: addGuests, confirm, editLocation, requestReschedule - Skip queueing audit tasks when feature is disabled with debug logging Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: add featuresRepository dependency to RecurringBookingService DI module Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * refactor: make isBookingAuditEnabled optional for non-main flows Keep feature flag check only in main flows (handleSeats, RegularBookingService, RecurringBookingService) which are frequently triggered. For other flows (handleCancelBooking, handleConfirmation, roundRobinReassignment, etc.), rely on the existing consumer-level check. Changes: - Revert feature flag check from non-main flows - Make isBookingAuditEnabled optional in interface for non-main flow methods - Keep isBookingAuditEnabled required for main flow methods (queueCreatedAudit, queueRescheduledAudit, queueSeatBookedAudit, queueSeatRescheduledAudit, queueBulkCreatedAudit, queueBulkRescheduledAudit) - Update BookingEventHandlerService to use required params for main flows and optional for non-main flows Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * refactor: remove isBookingAuditEnabled from non-main flow methods Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * feat: make isBookingAuditEnabled required in all BookingEventHandlerService methods - Add isBookingAuditEnabled as required parameter in all BookingAuditProducerService interface methods - Update BookingAuditTaskerProducerService to use simplified check (!params.isBookingAuditEnabled) - Update BookingEventHandlerService to require isBookingAuditEnabled in all methods - Update all callers to query booking-audit feature flag and pass isBookingAuditEnabled: - handleCancelBooking - handleConfirmation - roundRobinReassignment - roundRobinManualReassignment - addGuests.handler - confirm.handler - editLocation.handler - requestReschedule.handler - Inject featuresRepository in API V2's booking-location.service.ts Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * test: update roundRobinReassignment tests to include isBookingAuditEnabled Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * test: update roundRobinManualReassignment tests to include isBookingAuditEnabled Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: inject featuresRepository in API V2 RecurringBookingService Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: import PrismaWorkerModule for PrismaFeaturesRepository dependency Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: use booking's organization for feature flag check in addGuests handler Use booking.user?.profiles?.[0]?.organizationId instead of user.organizationId to check the booking-audit feature flag. This ensures the feature flag is checked against the booking's organization rather than the actor's organization, which is consistent with other handlers in this PR. Addresses Cubic AI review feedback (confidence 9/10). Co-Authored-By: unknown <> * Add comment * fix: use user.organizationId for feature flag check in addGuests handler Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: use booking's organizationId for feature flag check in addGuests handler Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: revert to user.organizationId for feature flag check in addGuests handler Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: add isBookingAuditEnabled to onNoShowUpdated calls after main merge Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: add isBookingAuditEnabled to onNoShowUpdated calls and update tests Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* fix: allow unmarking host as no-show and filter invalid attendees in updateAttendees Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * revert: remove updateAttendees change per review feedback Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…com#27629) * feat: show routing trace dialog on assignment reason badge click Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> * fix: remove duplicate RoutingTraceSheet rendering - Remove RoutingTraceSheet from BookingListItem.tsx to avoid duplicate rendering - Move RoutingTraceSheet in BookingActionsDropdown.tsx outside of isBookingFromRoutingForm condition - Use booking.assignmentReason.length > 0 condition for RoutingTraceSheet rendering - Remove unused isOpenRoutingTraceSheet getter and RoutingTraceSheet import from BookingListItem.tsx Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* feat: add routing trace seeding to seed-insights and standalone seed script Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * chore: remove standalone seed-routing-trace.ts (now in seed-insights) Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: track skipped routing trace creates for accurate log output Co-Authored-By: unknown <> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* fix: hide cal branding on platform workflows * refactor: rely on existing with platform variables code * revert: comment * fix e2e * chore: remove unit results
…b modules (calcom#27833) * refactor: move data-table hooks/contexts/provider from features to web modules Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> * fix: update broken useColumnResizing import path in DataTable.tsx Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> * fix: update remaining broken import paths for moved hooks Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> * docs: update GUIDE.md import paths and file references for moved modules Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…alcom#27900) * fix: update data-table hook imports after refactor (calcom#27833) The data-table hooks (useDataTable, useFilterValue) were moved from @calcom/features/data-table to ~/data-table/hooks/ in calcom#27833 but this file was missed. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: update DataTableProvider import path in insights-wrong-routing-view Another import missed in calcom#27833 refactor — DataTableProvider moved from @calcom/features/data-table/ to ~/data-table/. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fixed text issue * matched style of api keys page * organised the out of office page * Clean up unused imports in OutOfOfficeEntriesList Removed unused imports from OutOfOfficeEntriesList.tsx * fixed import issues * remove unused imports --------- Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Romit <romitgabani1.work@gmail.com> Co-authored-by: Romit <85230081+romitg2@users.noreply.github.com>
* Pruned the 'License' section and Pushed it before 'Acknowledgement' to avoid confusion and Clarity * Improves README file by pruning License Section and Aligning Properly * Remove License section from README.md --------- Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
…alcom#27910) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* feat: add signup watchlist review feature flag and handler logic - Add 'signup-watchlist-review' global feature flag - Add SIGNUP to WatchlistSource enum in Prisma schema - When flag enabled, lock new signups and add email to watchlist - Show 'account under review' message on signup page - Add i18n strings for review UI - Create seed migration for the feature flag Co-Authored-By: alex@cal.com <me@alexvanandel.com> * test: add isAccountUnderReview tests to fetchSignup test suite Co-Authored-By: alex@cal.com <me@alexvanandel.com> * fix: address Cubic AI review feedback (confidence >= 9/10) - Remove 'import process from node:process' in signup-view.tsx (P0 bug in 'use client' component) - Move watchlist review check before checkoutSessionId early return in calcomSignupHandler (P1 premium bypass) - Revert selfHostedHandler to original state (out of scope per user request) - Add test mocks for FeaturesRepository and GlobalWatchlistRepository Co-Authored-By: alex@cal.com <me@alexvanandel.com> * fix: remove node:process import from useFlags.ts (client-side file) Co-Authored-By: alex@cal.com <me@alexvanandel.com> * fix: remove !token condition from watchlist review check Token is present in normal email-verified signups, so the !token condition was incorrectly skipping watchlist review for verified users. Co-Authored-By: alex@cal.com <me@alexvanandel.com> * Apply suggestion from @cubic-dev-ai[bot] Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> * refactor: move user lock to UserRepository.lockByEmail Co-Authored-By: alex@cal.com <me@alexvanandel.com> * refactor: use cached getFeatureRepository() instead of deprecated FeaturesRepository Co-Authored-By: alex@cal.com <me@alexvanandel.com> * refactor: remove user locking, keep only watchlist addition on signup review Co-Authored-By: alex@cal.com <me@alexvanandel.com> * feat: lock user on signup review, remove watchlist entry on unlock Co-Authored-By: alex@cal.com <me@alexvanandel.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>
…7919) * fix: exclude test files from CODEOWNERS foundation approval Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: add *.test.* to CODEOWNERS test file exclusions Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> * fix: add *.integration-test.* to CODEOWNERS test file exclusions Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…7918) * fix(app-store): preserve existing enabled state during seed * Update seed-app-store.ts --------- Co-authored-by: Sahitya Chandra <sahityajb@gmail.com>
…nique constraint flake (calcom#27916) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
…27926) * add e2e-spec pattern to CODEOWNERS * Add pattern for test-suite files in CODEOWNERS
… button alignment (calcom#27924) * fix: resolve insights page UI regressions for plus button size and download alignment Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> * fix: default icon size to 16px in createIcon wrapper Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
… entry removal (calcom#27923) * fix: resolve signup watchlist review issues with deleteEntry, email verification ordering, and unlock flow Co-Authored-By: ali@cal.com <alishahbaz7@gmail.com> * fix: scope sendEmailVerification to non-invite signups only Co-Authored-By: ali@cal.com <alishahbaz7@gmail.com> * feat: auto-unlock users when SIGNUP-source watchlist entries are removed Co-Authored-By: ali@cal.com <alishahbaz7@gmail.com> * fix: remove PII from error logging in unlockSignupUser Co-Authored-By: ali@cal.com <alishahbaz7@gmail.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…eet (calcom#27909) * fix: display phone numbers and localized timezone in BookingDetailsSheet Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> * refactor: replace selectAll with explicit column selects for Attendee query Co-Authored-By: eunjae@cal.com <hey@eunjae.dev> * Update apps/web/modules/bookings/components/BookingDetailsSheet.tsx Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> * Add tests: packages/lib/dayjs/formatToLocalizedTimezone.test.ts Generated by Paragon from proposal for PR calcom#27909 * Revert "refactor: replace selectAll with explicit column selects for Attendee query" This reverts commit f810ba8. --------- 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>
* feat: enable onboarding-v3 globally and update e2e tests - Add migration to set onboarding-v3 feature flag enabled=true - Rewrite onboarding.e2e.ts for v3 flow (Plan Selection → Personal Settings → Calendar) - Update URL assertions in signup, team-invitation, org-invitation, ab-tests-redirect, and auth tests to accept both old and new onboarding paths Co-Authored-By: sean@cal.com <Sean@brydon.io> * fix: use pathname-only matching in waitForURL to prevent false matches on callbackUrl query param Co-Authored-By: sean@cal.com <Sean@brydon.io> * use test IDs --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
…calcom#27880) * refactor: apply biome formatting to small packages + packages/lib Format packages/sms, packages/prisma, packages/platform/libraries, packages/platform/examples, packages/platform/types, packages/emails, and packages/lib. Excludes packages/platform/examples/base/src/pages/[bookingUid].tsx due to pre-existing lint errors. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * revert: remove packages/platform formatting changes Revert biome formatting for packages/platform as requested. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…com#27894) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…x Vitest RPC errors (calcom#27931) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* chore: bump axios to 1.13.5 * chore: bump axios in apps/api/v2 * chore: dedupe follow-redirects to 1.15.11
* feat(companion): add configurable landing page feature - Add useUserPreferences hook for persistent storage of landing page preference - Add LandingPagePicker component for both iOS and Android/web platforms - Update tabs index to redirect based on user preference - Update bookings index to accept initial filter from URL params - Add App Settings section in More screen with landing page selector - Clear user preferences on logout for fresh state * fix(companion): remove try-finally for React Compiler compatibility * fix(companion): use router.replace for dynamic landing page redirect Replace Redirect component with router.replace() to fix TypeScript strict typing issue with expo-router's Href type for dynamic routes. * fix(companion): use literal route strings for TypeScript strict typing Use switch statement with literal route strings instead of dynamic string variable to satisfy expo-router's strict Href type checking. * working fix * better css
This reverts commit 227ed64.
…calcom#27946) Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…alue (calcom#27961) Signed-off-by: Aritra Dey <adey01027@gmail.com> Co-authored-by: Romit <85230081+romitg2@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
Description
CheckedTeamSelect.tsxto parse input, validate with the existing email validator, create stable invite option ids (invite:email), dedupe invites, and forward existingreact-selectprops (e.g.onInputChange,onKeyDown,isOptionDisabled).checkedTeamSelectEmailUtils.tsthat tokenizes comma-separated input, validates/deduplicates emails and finds existing options by email, and added unit tests incheckedTeamSelectEmailUtils.test.tscovering parsing, validation, and dedupe behavior.(invite)option, type multiple comma-separated emails to add multiple invite options, type an existing member email to select the member option (not an invite), verify disabled members remain unselectable, and confirm otherreact-selectbehaviors still work.Testing
packages/features/eventtypes/components/checkedTeamSelectEmailUtils.test.tsverifying comma-separated parsing, validation, dedupe, and option lookup.yarn vitest,yarn type-check:ci --force, andyarn biome check --writein the execution environment failed due to missing installed dependencies (node_modules not present), so automated checks were not executed here.yarn installlocally; please runyarn vitest packages/features/eventtypes/components/checkedTeamSelectEmailUtils.test.ts,yarn type-check:ci --force, andyarn biome check --writebefore merge.Codex Task