feat(routing-forms): sync booking questions UI with event types#28028
feat(routing-forms): sync booking questions UI with event types#28028akankshahu wants to merge 7 commits intocalcom:mainfrom
Conversation
… Exchange Comprehensive fix for Exchange on-premise authentication issues: ## Backend Changes: - Add Exchange2019 enum value (Exchange2019 = 8) to ExchangeVersion - Implement NTLM authentication support in Exchange2013 and Exchange2016 calendar services - Add @ewsjs/xhr dependency for NTLM authentication (fixes OpenSSL crypto errors) - Make getExchangeService() async to properly handle NTLM XHR setup - Update all getExchangeService() calls to use await - Update API handlers to accept authenticationMethod and exchangeVersion parameters ## Frontend Changes: - Add Exchange 2019 option to exchangecalendar Setup form dropdown - Support for both Basic and NTLM authentication methods via UI ## Files Modified: - packages/app-store/exchangecalendar/enums.ts (added Exchange2019) - packages/app-store/exchange2013calendar/lib/CalendarService.ts (NTLM support) - packages/app-store/exchange2013calendar/api/add.ts (accept auth params) - packages/app-store/exchange2013calendar/package.json (add @ewsjs/xhr) - packages/app-store/exchange2016calendar/lib/CalendarService.ts (NTLM support) - packages/app-store/exchange2016calendar/api/add.ts (accept auth params) - packages/app-store/exchange2016calendar/package.json (add @ewsjs/xhr) - apps/web/components/apps/exchangecalendar/Setup.tsx (Exchange 2019 option) Fixes calcom#8123 /claim calcom#8123
|
Hey there and thank you for opening this pull request! 👋🏼 We require pull request titles to follow the Conventional Commits specification and it looks like your proposed title needs to be adjusted. Details: |
Graphite Automations"Send notification to Community team when bounty PR opened" took an action on this PR • (02/18/26)2 teammates were notified to this PR based on Keith Williams's automation. |
There was a problem hiding this comment.
Pull request overview
This pull request combines two separate features: (1) unifying the custom input system between Event Types and Routing Forms by integrating the FormBuilder component, and (2) adding Exchange 2019 support and NTLM authentication for Exchange calendar integrations. The PR title and description focus on routing forms synchronization, but the majority of file changes are related to Exchange calendar enhancements.
Changes:
- Replaced custom Routing Forms field editor with shared FormBuilder component from Event Types
- Added Exchange 2019 version support and NTLM authentication method for Exchange 2013/2016 calendar integrations
- Introduced bidirectional synchronization between two form instances to bridge Routing Forms and FormBuilder schemas
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 19 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/app-store/exchangecalendar/enums.ts | Added Exchange2019 enum value to support newer Exchange servers |
| packages/app-store/exchange2016calendar/package.json | Added @ewsjs/xhr dependency for NTLM authentication support |
| packages/app-store/exchange2016calendar/lib/CalendarService.ts | Implemented NTLM authentication, made getExchangeService async, added configurable exchange version |
| packages/app-store/exchange2016calendar/api/add.ts | Extended API schema to accept authenticationMethod and exchangeVersion parameters |
| packages/app-store/exchange2013calendar/package.json | Added @ewsjs/xhr dependency for NTLM authentication support |
| packages/app-store/exchange2013calendar/lib/CalendarService.ts | Implemented NTLM authentication, made getExchangeService async, added configurable exchange version |
| packages/app-store/exchange2013calendar/api/add.ts | Extended API schema to accept authenticationMethod and exchangeVersion parameters |
| apps/web/components/apps/exchangecalendar/Setup.tsx | Added Exchange 2019 option to version selector dropdown |
| apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx | Replaced custom field editor with FormBuilder component, added transformation and synchronization logic |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Show resolved
Hide resolved
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Show resolved
Hide resolved
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Show resolved
Hide resolved
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Outdated
Show resolved
Hide resolved
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Outdated
Show resolved
Hide resolved
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Show resolved
Hide resolved
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Show resolved
Hide resolved
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Show resolved
Hide resolved
|
@hariombalhara this replaces the custom field editor in routing forms with the shared FormBuilder component from event types, so new field types automatically become available in both places. |
sahitya-chandra
left a comment
There was a problem hiding this comment.
@akankshahu Can youadd a before and after video demo of the change and address the Copilot comment
- Add localization for hardcoded UI strings (Questions, descriptions, button labels) - Fix unstable field ID generation using useRef with Map for stable ID tracking - Preserve legacy option format (id: null) for backward compatibility with routing logic - Add new translation key 'add_questions_to_routing_form' to common.json
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 10 out of 10 changed files in this pull request and generated 11 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Show resolved
Hide resolved
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Show resolved
Hide resolved
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Show resolved
Hide resolved
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Show resolved
Hide resolved
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Show resolved
Hide resolved
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Show resolved
Hide resolved
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Show resolved
Hide resolved
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Show resolved
Hide resolved
apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx
Show resolved
Hide resolved
|
Hello @sahitya-chandra I attempted to create a video demo as requested, but encountered licensing/feature flag restrictions when testing routing forms locally. Routing forms requires a Teams plan feature flag that's difficult to enable in a local development environment without proper enterprise license configuration. |
@akankshahu you dont need an enterprise license configuration to create teams locally, their must be an issue in your development setup. please try it again and without a video demo we will not be able to approve this pr. |
What does this PR do?
This PR unifies the custom input system between Event Types and Routing Forms by replacing the custom field editor in Routing Forms with the shared FormBuilder component used in Event Types. This ensures that any new input type added to Event Types automatically becomes available in Routing Forms, eliminating the need to maintain two separate systems for form inputs.
Fixes #18987
Fixes CAL-5097
/claim #18987
Visual Demo (For contributors especially)
A visual demonstration is strongly recommended, for both the original and new change (video / image - any one).
Video Demo (if applicable):
Image Demo (if applicable):
Mandatory Tasks (DO NOT REMOVE)
How should this be tested?
Checklist