diff --git a/apps/web/modules/bookings/views/bookings-single-view.getServerSideProps.tsx b/apps/web/modules/bookings/views/bookings-single-view.getServerSideProps.tsx
index 0524350b04..d602ea2692 100644
--- a/apps/web/modules/bookings/views/bookings-single-view.getServerSideProps.tsx
+++ b/apps/web/modules/bookings/views/bookings-single-view.getServerSideProps.tsx
@@ -6,6 +6,7 @@ import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
import getBookingInfo from "@calcom/features/bookings/lib/getBookingInfo";
import { parseRecurringEvent } from "@calcom/lib";
import { getDefaultEvent } from "@calcom/lib/defaultEvents";
+import { markdownToSafeHTML } from "@calcom/lib/markdownToSafeHTML";
import { maybeGetBookingUidFromSeat } from "@calcom/lib/server/maybeGetBookingUidFromSeat";
import { BookingRepository } from "@calcom/lib/server/repository/booking";
import prisma from "@calcom/prisma";
@@ -120,6 +121,13 @@ export async function getServerSideProps(context: GetServerSidePropsContext) {
metadata: EventTypeMetaDataSchema.parse(eventTypeRaw.metadata),
recurringEvent: parseRecurringEvent(eventTypeRaw.recurringEvent),
customInputs: customInputSchema.array().parse(eventTypeRaw.customInputs),
+ bookingFields: eventTypeRaw.bookingFields.map((field) => {
+ return {
+ ...field,
+ label: markdownToSafeHTML(field.label || ""),
+ defaultLabel: markdownToSafeHTML(field.defaultLabel || ""),
+ };
+ }),
};
const profile = {
diff --git a/apps/web/modules/bookings/views/bookings-single-view.tsx b/apps/web/modules/bookings/views/bookings-single-view.tsx
index d0f2c42acd..289ac1b072 100644
--- a/apps/web/modules/bookings/views/bookings-single-view.tsx
+++ b/apps/web/modules/bookings/views/bookings-single-view.tsx
@@ -643,11 +643,16 @@ export default function Success(props: PageProps) {
)
return null;
- const label = field.label || t(field.defaultLabel || "");
+ const label = field.label || t(field.defaultLabel);
return (
<>
-
{label}
+
{
if (!props.description || props.description === "") return null;
- const descriptionCSS = "color: '#101010'; font-weight: 400; line-height: 24px; margin: 0;";
-
const safeDescription = markdownToSafeHTML(props.description.toString()) || "";
+ const safeLabel = markdownToSafeHTML(props.label.toString());
+
+ const StyledHtmlContent = ({ htmlContent }: { htmlContent: string }) => {
+ const css = "color: '#101010'; font-weight: 400; line-height: 24px; margin: 0;";
+ return (
+
", `
`)
+ .replaceAll("
", ` `),
+ }}
+ />
+ );
+ };
return (
<>
{props.withSpacer && }
-
{props.label}
+
+ {props.isLabelHTML ? : props.label}
+
- {props.formatted ? (
-
", `
`)
- .replaceAll("
", ` `),
- }}
- />
- ) : (
- props.description
- )}
+ {props.formatted ? : props.description}
{props.extraInfo}
diff --git a/packages/emails/src/components/UserFieldsResponses.tsx b/packages/emails/src/components/UserFieldsResponses.tsx
index c2a018936a..0df70b467b 100644
--- a/packages/emails/src/components/UserFieldsResponses.tsx
+++ b/packages/emails/src/components/UserFieldsResponses.tsx
@@ -25,6 +25,7 @@ export function UserFieldsResponses(props: { calEvent: CalendarEvent; t: TFuncti
: `${labelValueMap[key] ? labelValueMap[key] : ""}`
}
withSpacer
+ isLabelHTML
/>
) : null
)}
diff --git a/packages/features/form-builder/FormBuilder.tsx b/packages/features/form-builder/FormBuilder.tsx
index 88ee25f90f..0bc8f52b20 100644
--- a/packages/features/form-builder/FormBuilder.tsx
+++ b/packages/features/form-builder/FormBuilder.tsx
@@ -6,7 +6,9 @@ import type { z } from "zod";
import { classNames } from "@calcom/lib";
import { useLocale } from "@calcom/lib/hooks/useLocale";
+import { md } from "@calcom/lib/markdownIt";
import { markdownToSafeHTML } from "@calcom/lib/markdownToSafeHTML";
+import turndown from "@calcom/lib/turndownService";
import {
Badge,
BooleanToggleGroupField,
@@ -24,6 +26,7 @@ import {
Label,
SelectField,
showToast,
+ Editor,
Switch,
} from "@calcom/ui";
@@ -421,6 +424,27 @@ function Options({
);
}
+const CheckboxFieldLabel = ({ fieldForm }: { fieldForm: UseFormReturn }) => {
+ const { t } = useLocale();
+ const [firstRender, setFirstRender] = useState(true);
+ return (
+
+ {t("label")}
+ md.render(fieldForm.getValues("label") || "")}
+ setText={(value: string) => {
+ fieldForm.setValue("label", turndown(value), { shouldDirty: true });
+ }}
+ excludedToolbarItems={["blockType", "bold", "italic"]}
+ disableLists
+ firstRender={firstRender}
+ setFirstRender={setFirstRender}
+ placeholder={t(fieldForm.getValues("defaultLabel") || "")}
+ />
+
+ );
+};
+
function FieldEditDialog({
dialog,
onOpenChange,
@@ -437,19 +461,22 @@ function FieldEditDialog({
defaultValues: dialog.data || {},
// resolver: zodResolver(fieldSchema),
});
+ const formFieldType = fieldForm.getValues("type");
+
useEffect(() => {
- if (!fieldForm.getValues("type")) {
+ if (!formFieldType) {
return;
}
const variantsConfig = getVariantsConfig({
- type: fieldForm.getValues("type"),
+ type: formFieldType,
variantsConfig: fieldForm.getValues("variantsConfig"),
});
// We need to set the variantsConfig in the RHF instead of using a derived value because RHF won't have the variantConfig for the variant that's not rendered yet.
fieldForm.setValue("variantsConfig", variantsConfig);
}, [fieldForm]);
+
const isFieldEditMode = !!dialog.data;
const fieldType = getCurrentFieldType(fieldForm);
@@ -458,8 +485,11 @@ function FieldEditDialog({
const fieldTypes = Object.values(fieldTypesConfigMap);
return (
-
-
+
+