* Add notes to `EventManager.create`
* Create `CalendarServiceEvent`
* Generate calendar description and remove attendees if event is private in `CalendarManager`
* Process event for reschedule method
* Refactor calendar services
* Clean up comment
* Type fixes
* Type fix
* Type fix
* move away from merging twice
* move to use loggedIn Router directly
* fix router outputs types
* fix mocks in create button with teasm tests
---------
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* Remove unused return statement
* Fix return from fn instead of continuing the loop
* Ensure userId is set for existing records on update
* ensure that serviceAccountKey is only retrieved whenb assked
* fix: hiding And connect with specific team members option for non org teams
* removed console logs
* added comment
---------
Co-authored-by: Tushar Bhatt <95581504+TusharBhatt1@users.noreply.github.com>
* feat: add 'View Responses' menu item to Routing Form dropdown
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* fix: use nuqs createSerializer for URL generation
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* refactor: move serializer to data-table lib and use proper type constants
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* fix: type errors in serializers and FormActions
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* fix: use parseAsArrayOf with parseAsJson for proper nuqs serialization
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* fix: update to use dataTableQueryParamsSerializer with proper nuqs pattern
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* refactor: extract parsers from DataTableProvider to be reused in serializers
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* fix: remove deprecated activeFiltersSerializer and use empty array instead of null
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* fix: only show View Responses menu when form id and teamId exist
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* remove teamId condition
* refactor: improve viewResponses URL generation with cleaner conditional
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* Update packages/features/data-table/lib/parsers.ts
* refactor: make constants in parsers.ts non-exported
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* fix: add explicit type annotations to constants in parsers.ts
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* fix: add explicit type annotations and export DEFAULT_PAGE_SIZE in parsers.ts
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* fix: add explicit type assertions to DEFAULT_ACTIVE_FILTERS and DEFAULT_SORTING
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: eunjae@cal.com <eunjae@cal.com>
Co-authored-by: Eunjae Lee <hey@eunjae.dev>
Co-authored-by: Benny Joo <sldisek783@gmail.com>
* section component
* more section UI
* wip
* core components styled
* all components using sections
* match icons to figma
* small inputs
* fix select small to be the same as small text
* center flex rows
* enforce inputs to be full spanning grid
* tidy up section container for single inputs
* fix select and i18n
* wip
* install available apps
* raw heading
* app install card
* fix app logos width x height
* fix gap
* match design for other button
* fix prop name
* push i18n string
* fix doc snippets
* fix docs
* chore: remove yarn.lock changes
---------
Co-authored-by: Udit Takkar <udit222001@gmail.com>
* add back all data to router-position
* fix type error
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Fixes CAL-5372
# Delegation Credentials with CalendarCache.
Following content is a snapshot of the [internal document](https://calendso.slack.com/docs/T08B8KA2BNF/F08L5JYU3V3)
**Problem-1 :**
CalendarCache needs SelectedCalendar records to work but SelectedCalendar record is only created when a user connects their calendar and then enables some calendar for conflict checking. Because with Delegation, no manual connection is done by any of the members, we need a way to create SelectedCalendar records automatically.
**Problem-2**
CalendarCache connects to credential(regular credential) which doesn’t exist for Delegation Credential scenario. Also, DelegationCredential is common for all the members(different from Credential which is different for different members) of the organization and we need to identify to which user the CalendarCache belongs.
**Solution for both problems**
- Create credential records for Delegation Credentials as well - Through Cron(new - we could schedule it every 5mins)
- Now create SelectedCalendar records for those Credential records - Through another Cron(new - we could schedule it every 5mins)
- Now CalendarCache records will automatically be created for those SelectedCalendar records -existing cron
## Fixed some Delegation Credentials bugs unrelated to calendar-cache
- If DestinationCalendar wasn't set(which is possible only with Delegation Credentials), then Google Meet wasn't used as a conferencing app - [Added a test]
- If no SelectedCalendar is there but Google Calendar connection exists(possible only with Delegation Credential) then we were not doing conflict checking. It is expected to not do it for Regular Credentials, but for Delegation Credential we must check for conflict in that case too [Added a test]
- Earlier if a user has Regular Credential as well as Delegation Credential for the same external id which is the member email(say member1@acme.com) then availability were retrieved twice because we weren't deduplicating credentials as it wasn't a trivial thing to do. Now that is being done.
**Env Variables:**
Note this PR doesn't introduce any new env variable. The existing env variable has been added to .env.example. But if this env variable isn't already set, it must be set.
`CALCOM_SERVICE_ACCOUNT_ENCRYPTION_KEY={SAME_AS_SET_FOR_V2_API}`
**Deployment Plan:**
1. Add Observability for SelectedCalendar when _error_ field is set
2. Follow https://github.com/calcom/cal.com/blob/calendar-cache-dwd-support/apps/web/app/(use-page-wrapper)/settings/(settings-layout)/organizations/delegation-credential/delegation-credential.md#setting-up-delegation-credential-for-google-calendar-api to enable Delegation Credential for i.cal.com
3. Note that to be able to see the option to enable Delegation Credential for an organization, you need to enable `teamFeature` and `feature` for `delegation-credential`
## Automation Tests
- Introduced tests for calendar-cache.repository.ts
- Tests all methods of the repository
- Added more tests for handleNewBooking/delegation-credential flow.
- Added test to verify the bug fix when no DestinationCalendar exists and Google Meet should be used still
- Added more tests for Google Calendar/CalendarService targeting DelegationCredential
- Added more tests for getCalendarsEvents.
- To test the new logic of calling getAvailability still if there are no selectedCalendars in case of Delegation Credential
- Also introduced tests for `getAvailabitlityWithTimezones` which was an existing function but now has some new changes.
- Added tests for deduplication logic in CalendarManager.ts
## How to Test
Enable Calendar Cache and Delegation Credential feature for acme org through `features` and `teamFeatures` tables.
- Enable Delegation Credential for acme org
- Enable atleast 1 calendar for conflict checking for one of the users(say owner1)
- Ensure GOOGLE_WEBHOOK_TOKEN is set in .env file
- Ensure GOOGLE_WEBHOOK_URL is set to ngrok url of webapp in .env file
- Hit cron endpoint `curl http://localhost:3000/api/calendar-cache/cron\?apiKey\={API_KEY}` that would cache the freebusy result for the selected calendars
Followup
- https://github.com/calcom/cal.com/pull/20698
- https://github.com/calcom/cal.com/pull/18619/files#r2046795643
Keith WilliamsGitHubDevin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>keith@cal.com <keith@cal.com>Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>keith@cal.com <keith@cal.com>keith@cal.com <keith@cal.com>keith@cal.com <keith@cal.com>devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>keith@cal.com <keith@cal.com>
* Add logging to `companyFieldName`
* Add logging to `getTextValueFromRoutingFormResponse`
* Add logging around unhandled field type
* Remove extra bracket