diff --git a/apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx b/apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx index 36889af36b223f..033a6d592a1775 100644 --- a/apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx +++ b/apps/web/app/(use-page-wrapper)/apps/routing-forms/[...pages]/FormEdit.tsx @@ -3,7 +3,6 @@ import { FieldTypes } from "@calcom/app-store/routing-forms/lib/FieldTypes"; import type { RoutingFormWithResponseCount } from "@calcom/app-store/routing-forms/types/types"; import { LearnMoreLink } from "@calcom/features/eventtypes/components/LearnMoreLink"; -import { getFieldIdentifier } from "@calcom/features/form-builder/utils/getFieldIdentifier"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import classNames from "@calcom/ui/classNames"; import { Button } from "@calcom/ui/components/button"; @@ -96,39 +95,6 @@ function Field({ } deleteField={router ? null : deleteField}> -
- { - const newLabel = e.target.value; - // Use label from useWatch which is guaranteed to be the previous value - // since useWatch updates reactively (after re-render), not synchronously - const previousLabel = label || ""; - hookForm.setValue(`${hookFieldNamespace}.label`, newLabel, { - shouldDirty: true, - }); - const currentIdentifier = hookForm.getValues(`${hookFieldNamespace}.identifier`); - // Only auto-update identifier if it was auto-generated from the previous label - // This preserves manual identifier changes - const isIdentifierGeneratedFromPreviousLabel = - currentIdentifier === getFieldIdentifier(previousLabel).toLowerCase(); - if (!currentIdentifier || isIdentifierGeneratedFromPreviousLabel) { - hookForm.setValue( - `${hookFieldNamespace}.identifier`, - getFieldIdentifier(newLabel).toLowerCase(), - { shouldDirty: true } - ); - } - }} - /> -
{ hookForm.setValue(`${hookFieldNamespace}.identifier`, e.target.value.toLowerCase(), { shouldDirty: true, @@ -151,6 +117,18 @@ function Field({ }} />
+
+ +
- {["select", "multiselect"].includes(fieldType) ? ( + {["select", "multiselect", "radio", "checkbox"].includes(fieldType) ? (
{ + if (!props) { + return
; + } + return ; + }, + }, + address: { + ...widgets.text, + factory: TextFactory, + }, + multiemail: { + ...widgets.text, + factory: TextFactory, + }, + radio: { + ...widgets.select, + factory: SelectFactory, + } as SelectWidgetType, + checkbox: { + ...widgets.multiselect, + factory: MultiSelectFactory, + } as SelectWidgetType, }; return widgetsWithFactory; } diff --git a/packages/app-store/routing-forms/lib/FieldTypes.ts b/packages/app-store/routing-forms/lib/FieldTypes.ts index 456f77617cc98e..1698a0f8e4b097 100644 --- a/packages/app-store/routing-forms/lib/FieldTypes.ts +++ b/packages/app-store/routing-forms/lib/FieldTypes.ts @@ -4,8 +4,13 @@ export const enum RoutingFormFieldType { TEXTAREA = "textarea", SINGLE_SELECT = "select", MULTI_SELECT = "multiselect", + RADIO = "radio", + CHECKBOX = "checkbox", PHONE = "phone", EMAIL = "email", + URL = "url", + ADDRESS = "address", + MULTI_EMAIL = "multiemail", } export const isValidRoutingFormFieldType = (type: string): type is RoutingFormFieldType => { @@ -15,8 +20,13 @@ export const isValidRoutingFormFieldType = (type: string): type is RoutingFormFi RoutingFormFieldType.TEXTAREA, RoutingFormFieldType.SINGLE_SELECT, RoutingFormFieldType.MULTI_SELECT, + RoutingFormFieldType.RADIO, + RoutingFormFieldType.CHECKBOX, RoutingFormFieldType.PHONE, RoutingFormFieldType.EMAIL, + RoutingFormFieldType.URL, + RoutingFormFieldType.ADDRESS, + RoutingFormFieldType.MULTI_EMAIL, ].includes(type as RoutingFormFieldType); }; @@ -41,6 +51,14 @@ export const FieldTypes = [ label: "Multiple choice selection", value: RoutingFormFieldType.MULTI_SELECT, }, + { + label: "Radio", + value: RoutingFormFieldType.RADIO, + }, + { + label: "Checkbox", + value: RoutingFormFieldType.CHECKBOX, + }, { label: "Phone", value: RoutingFormFieldType.PHONE, @@ -49,4 +67,16 @@ export const FieldTypes = [ label: "Email", value: RoutingFormFieldType.EMAIL, }, + { + label: "URL", + value: RoutingFormFieldType.URL, + }, + { + label: "Address", + value: RoutingFormFieldType.ADDRESS, + }, + { + label: "Multiple emails", + value: RoutingFormFieldType.MULTI_EMAIL, + }, ] as const; diff --git a/packages/app-store/routing-forms/lib/getQueryBuilderConfig.ts b/packages/app-store/routing-forms/lib/getQueryBuilderConfig.ts index 000ece889a1d5a..10cc8a4c7bffb1 100644 --- a/packages/app-store/routing-forms/lib/getQueryBuilderConfig.ts +++ b/packages/app-store/routing-forms/lib/getQueryBuilderConfig.ts @@ -64,7 +64,13 @@ export function getQueryBuilderConfigForFormFields(form: Pick