From af524d9e93b38e03e4b7a923b4938aa979bda386 Mon Sep 17 00:00:00 2001 From: Morgan <33722304+ThyMinimalDev@users.noreply.github.com> Date: Wed, 26 Feb 2025 21:12:41 +0200 Subject: [PATCH] fix: enable event-type booking field url with api v2 (#19577) * fix: enable event-type booking field url with api v2 * fixup! fix: enable event-type booking field url with api v2 * fixup! fixup! fix: enable event-type booking field url with api v2 * fixup! fixup! fixup! fix: enable event-type booking field url with api v2 --- apps/api/v2/package.json | 2 +- .../e2e/booking-fields.e2e-spec.ts | 19 +++ .../event-types.controller.e2e-spec.ts | 19 +++ apps/api/v2/swagger/documentation.json | 157 ++++++++++++++++-- docs/api-reference/v2/openapi.json | 143 ++++++++++++++-- .../api-to-internal/booking-fields.ts | 22 +++ .../internal-to-api/booking-fields.ts | 13 ++ .../inputs/booking-fields.input.ts | 51 +++++- .../inputs/create-event-type.input.ts | 3 + .../outputs/booking-fields.output.ts | 22 ++- .../outputs/event-type.output.ts | 3 + 11 files changed, 425 insertions(+), 29 deletions(-) diff --git a/apps/api/v2/package.json b/apps/api/v2/package.json index 628b671535..6c78f0c356 100644 --- a/apps/api/v2/package.json +++ b/apps/api/v2/package.json @@ -30,7 +30,7 @@ "@axiomhq/winston": "^1.2.0", "@calcom/platform-constants": "*", "@calcom/platform-enums": "*", - "@calcom/platform-libraries": "npm:@calcom/platform-libraries@0.0.110", + "@calcom/platform-libraries": "npm:@calcom/platform-libraries@0.0.116", "@calcom/platform-libraries-0.0.2": "npm:@calcom/platform-libraries@0.0.2", "@calcom/platform-types": "*", "@calcom/platform-utils": "*", diff --git a/apps/api/v2/src/ee/bookings/2024-08-13/controllers/e2e/booking-fields.e2e-spec.ts b/apps/api/v2/src/ee/bookings/2024-08-13/controllers/e2e/booking-fields.e2e-spec.ts index c6438e9441..a4916fd555 100644 --- a/apps/api/v2/src/ee/bookings/2024-08-13/controllers/e2e/booking-fields.e2e-spec.ts +++ b/apps/api/v2/src/ee/bookings/2024-08-13/controllers/e2e/booking-fields.e2e-spec.ts @@ -309,6 +309,23 @@ describe("Bookings Endpoints 2024-08-13", () => { placeholder: "matrix", disableOnPrefill: false, }, + { + name: "video-url", + type: "url", + label: "video url", + sources: [ + { + id: "user", + type: "user", + label: "User", + fieldRequired: true, + }, + ], + editable: "user", + required: false, + placeholder: "add video url", + disableOnPrefill: false, + }, ], }, user.id @@ -499,6 +516,7 @@ describe("Bookings Endpoints 2024-08-13", () => { location: "https://meet.google.com/abc-def-ghi", bookingFieldsResponses: { "favorite-movie": "lord of the rings", + "video-url": "http://video-url.com", }, }; return request(app.getHttpServer()) @@ -515,6 +533,7 @@ describe("Bookings Endpoints 2024-08-13", () => { if (responseDataIsBooking(responseBody.data)) { const data: BookingOutput_2024_08_13 = responseBody.data; expect(data.bookingFieldsResponses["favorite-movie"]).toEqual("lord of the rings"); + expect(data.bookingFieldsResponses["video-url"]).toEqual("http://video-url.com"); } else { throw new Error( "Invalid response data - expected booking but received array of possibily recurring bookings" diff --git a/apps/api/v2/src/ee/event-types/event-types_2024_06_14/controllers/event-types.controller.e2e-spec.ts b/apps/api/v2/src/ee/event-types/event-types_2024_06_14/controllers/event-types.controller.e2e-spec.ts index b5273e4586..f71c2fd4e8 100644 --- a/apps/api/v2/src/ee/event-types/event-types_2024_06_14/controllers/event-types.controller.e2e-spec.ts +++ b/apps/api/v2/src/ee/event-types/event-types_2024_06_14/controllers/event-types.controller.e2e-spec.ts @@ -377,6 +377,15 @@ describe("Event types Endpoints", () => { disableOnPrefill: true, hidden: false, }, + { + type: "url", + label: "Video Url", + slug: "video-url", + required: true, + placeholder: "add video url", + disableOnPrefill: true, + hidden: false, + }, ], scheduleId: firstSchedule.id, bookingLimitsCount: { @@ -478,6 +487,16 @@ describe("Event types Endpoints", () => { hidden: false, isDefault: false, }, + { + type: "url", + label: "Video Url", + slug: "video-url", + required: true, + placeholder: "add video url", + disableOnPrefill: true, + hidden: false, + isDefault: false, + }, { ...defaultResponseBookingFieldTitle }, { ...defaultResponseBookingFieldNotes }, { ...defaultResponseBookingFieldGuests }, diff --git a/apps/api/v2/swagger/documentation.json b/apps/api/v2/swagger/documentation.json index 90a3b40ecd..8245c00548 100644 --- a/apps/api/v2/swagger/documentation.json +++ b/apps/api/v2/swagger/documentation.json @@ -8494,6 +8494,48 @@ "hidden" ] }, + "UrlFieldInput_2024_06_14": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "url", + "description": "only allowed value for type is `url`" + }, + "slug": { + "type": "string", + "description": "Unique identifier for the field in format `some-slug`. It is used to access response to this booking field during the booking", + "example": "some-slug" + }, + "label": { + "type": "string", + "example": "Please enter your text" + }, + "required": { + "type": "boolean" + }, + "placeholder": { + "type": "string", + "example": "e.g., Enter url here" + }, + "disableOnPrefill": { + "type": "boolean", + "description": "Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value. For example, if the slug is `video-url` and the URL contains query parameter `&video-url=https://youtube.com/abc`the url field will be prefilled with this value and disabled." + }, + "hidden": { + "type": "boolean", + "description": "If true show under event type settings but don't show this booking field in the Booker. If false show in both." + } + }, + "required": [ + "type", + "slug", + "label", + "required", + "placeholder", + "hidden" + ] + }, "BusinessDaysWindow_2024_06_14": { "type": "object", "properties": { @@ -9132,6 +9174,9 @@ }, { "$ref": "#/components/schemas/BooleanFieldInput_2024_06_14" + }, + { + "$ref": "#/components/schemas/UrlFieldInput_2024_06_14" } ] } @@ -9519,7 +9564,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "email", "description": "only allowed value for type is `email`", @@ -9575,7 +9621,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "name", "description": "only allowed value for type is `name`. Used for having 1 booking field for both first name and last name.", @@ -9864,7 +9911,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "address", "description": "only allowed value for type is `address`" @@ -9927,7 +9975,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "boolean", "description": "only allowed value for type is `boolean`" @@ -9985,7 +10034,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "checkbox", "description": "only allowed value for type is `checkbox`" @@ -10055,7 +10105,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "multiemail", "description": "only allowed value for type is `multiemail`" @@ -10118,7 +10169,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "multiselect", "description": "only allowed value for type is `multiselect`" @@ -10170,6 +10222,70 @@ "isDefault" ] }, + "UrlFieldOutput_2024_06_14": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "name", + "email", + "phone", + "address", + "text", + "number", + "textarea", + "select", + "multiselect", + "multiemail", + "checkbox", + "radio", + "boolean", + "url" + ], + "example": "url", + "description": "only allowed value for type is `url`" + }, + "slug": { + "type": "string", + "description": "Unique identifier for the field in format `some-slug`. It is used to access response to this booking field during the booking", + "example": "some-slug" + }, + "label": { + "type": "string", + "example": "Please enter your text" + }, + "required": { + "type": "boolean" + }, + "placeholder": { + "type": "string", + "example": "e.g., Enter url here" + }, + "disableOnPrefill": { + "type": "boolean", + "description": "Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value. For example, if the slug is `video-url` and the URL contains query parameter `&video-url=https://youtube.com/abc`the url field will be prefilled with this value and disabled." + }, + "hidden": { + "type": "boolean", + "description": "If true show under event type settings but don't show this booking field in the Booker. If false show in both." + }, + "isDefault": { + "type": "object", + "default": false, + "description": "This property is always false because it's not default field but custom field", + "example": false + } + }, + "required": [ + "type", + "slug", + "label", + "required", + "hidden", + "isDefault" + ] + }, "NumberFieldOutput_2024_06_14": { "type": "object", "properties": { @@ -10188,7 +10304,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "number", "description": "only allowed value for type is `number`" @@ -10251,7 +10368,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "phone", "description": "only allowed value for type is `phone`" @@ -10312,7 +10430,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "radio", "description": "only allowed value for type is `radio`" @@ -10382,7 +10501,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "select", "description": "only allowed value for type is `select`" @@ -10456,7 +10576,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "textarea", "description": "only allowed value for type is `textarea`" @@ -10519,7 +10640,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "text", "description": "only allowed value for type is `text`" @@ -10681,6 +10803,9 @@ }, { "$ref": "#/components/schemas/BooleanFieldOutput_2024_06_14" + }, + { + "$ref": "#/components/schemas/UrlFieldOutput_2024_06_14" } ] } @@ -12609,6 +12734,9 @@ }, { "$ref": "#/components/schemas/BooleanFieldInput_2024_06_14" + }, + { + "$ref": "#/components/schemas/UrlFieldInput_2024_06_14" } ] } @@ -13000,6 +13128,9 @@ }, { "$ref": "#/components/schemas/BooleanFieldOutput_2024_06_14" + }, + { + "$ref": "#/components/schemas/UrlFieldOutput_2024_06_14" } ] } diff --git a/docs/api-reference/v2/openapi.json b/docs/api-reference/v2/openapi.json index 982868bbc6..15fedb7392 100644 --- a/docs/api-reference/v2/openapi.json +++ b/docs/api-reference/v2/openapi.json @@ -7893,6 +7893,41 @@ }, "required": ["type", "slug", "label", "required", "hidden"] }, + "UrlFieldInput_2024_06_14": { + "type": "object", + "properties": { + "type": { + "type": "string", + "example": "url", + "description": "only allowed value for type is `url`" + }, + "slug": { + "type": "string", + "description": "Unique identifier for the field in format `some-slug`. It is used to access response to this booking field during the booking", + "example": "some-slug" + }, + "label": { + "type": "string", + "example": "Please enter your text" + }, + "required": { + "type": "boolean" + }, + "placeholder": { + "type": "string", + "example": "e.g., Enter url here" + }, + "disableOnPrefill": { + "type": "boolean", + "description": "Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value. For example, if the slug is `video-url` and the URL contains query parameter `&video-url=https://youtube.com/abc`the url field will be prefilled with this value and disabled." + }, + "hidden": { + "type": "boolean", + "description": "If true show under event type settings but don't show this booking field in the Booker. If false show in both." + } + }, + "required": ["type", "slug", "label", "required", "placeholder", "hidden"] + }, "BusinessDaysWindow_2024_06_14": { "type": "object", "properties": { @@ -8444,6 +8479,9 @@ }, { "$ref": "#/components/schemas/BooleanFieldInput_2024_06_14" + }, + { + "$ref": "#/components/schemas/UrlFieldInput_2024_06_14" } ] } @@ -8807,7 +8845,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "email", "description": "only allowed value for type is `email`", @@ -8858,7 +8897,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "name", "description": "only allowed value for type is `name`. Used for having 1 booking field for both first name and last name.", @@ -9096,7 +9136,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "address", "description": "only allowed value for type is `address`" @@ -9152,7 +9193,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "boolean", "description": "only allowed value for type is `boolean`" @@ -9203,7 +9245,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "checkbox", "description": "only allowed value for type is `checkbox`" @@ -9262,7 +9305,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "multiemail", "description": "only allowed value for type is `multiemail`" @@ -9318,7 +9362,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "multiselect", "description": "only allowed value for type is `multiselect`" @@ -9359,6 +9404,63 @@ }, "required": ["type", "slug", "label", "required", "options", "hidden", "isDefault"] }, + "UrlFieldOutput_2024_06_14": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "name", + "email", + "phone", + "address", + "text", + "number", + "textarea", + "select", + "multiselect", + "multiemail", + "checkbox", + "radio", + "boolean", + "url" + ], + "example": "url", + "description": "only allowed value for type is `url`" + }, + "slug": { + "type": "string", + "description": "Unique identifier for the field in format `some-slug`. It is used to access response to this booking field during the booking", + "example": "some-slug" + }, + "label": { + "type": "string", + "example": "Please enter your text" + }, + "required": { + "type": "boolean" + }, + "placeholder": { + "type": "string", + "example": "e.g., Enter url here" + }, + "disableOnPrefill": { + "type": "boolean", + "description": "Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value. For example, if the slug is `video-url` and the URL contains query parameter `&video-url=https://youtube.com/abc`the url field will be prefilled with this value and disabled." + }, + "hidden": { + "type": "boolean", + "description": "If true show under event type settings but don't show this booking field in the Booker. If false show in both." + }, + "isDefault": { + "type": "object", + "default": false, + "description": "This property is always false because it's not default field but custom field", + "example": false + } + }, + "required": ["type", "slug", "label", "required", "hidden", "isDefault"] + }, "NumberFieldOutput_2024_06_14": { "type": "object", "properties": { @@ -9377,7 +9479,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "number", "description": "only allowed value for type is `number`" @@ -9433,7 +9536,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "phone", "description": "only allowed value for type is `phone`" @@ -9487,7 +9591,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "radio", "description": "only allowed value for type is `radio`" @@ -9546,7 +9651,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "select", "description": "only allowed value for type is `select`" @@ -9609,7 +9715,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "textarea", "description": "only allowed value for type is `textarea`" @@ -9665,7 +9772,8 @@ "multiemail", "checkbox", "radio", - "boolean" + "boolean", + "url" ], "example": "text", "description": "only allowed value for type is `text`" @@ -9816,6 +9924,9 @@ }, { "$ref": "#/components/schemas/BooleanFieldOutput_2024_06_14" + }, + { + "$ref": "#/components/schemas/UrlFieldOutput_2024_06_14" } ] } @@ -11490,6 +11601,9 @@ }, { "$ref": "#/components/schemas/BooleanFieldInput_2024_06_14" + }, + { + "$ref": "#/components/schemas/UrlFieldInput_2024_06_14" } ] } @@ -11854,6 +11968,9 @@ }, { "$ref": "#/components/schemas/BooleanFieldOutput_2024_06_14" + }, + { + "$ref": "#/components/schemas/UrlFieldOutput_2024_06_14" } ] } diff --git a/packages/lib/event-types/transformers/api-to-internal/booking-fields.ts b/packages/lib/event-types/transformers/api-to-internal/booking-fields.ts index dac35bdcb9..d38b5c2512 100644 --- a/packages/lib/event-types/transformers/api-to-internal/booking-fields.ts +++ b/packages/lib/event-types/transformers/api-to-internal/booking-fields.ts @@ -215,6 +215,28 @@ function getBaseProperties(field: InputBookingField): CustomField | SystemField }; } + if (field.type === "url") { + return { + name: field.slug, + type: field.type, + label: field.label, + placeholder: "placeholder" in field ? field.placeholder : "", + labelAsSafeHtml: `

${field.label}

\n`, + sources: [ + { + id: "user", + type: "user", + label: "User", + fieldRequired: true, + }, + ], + editable: "user", + required: !!field.required, + disableOnPrefill: !!field.disableOnPrefill, + hidden: !!field.hidden, + }; + } + return { name: field.slug, type: field.type, diff --git a/packages/lib/event-types/transformers/internal-to-api/booking-fields.ts b/packages/lib/event-types/transformers/internal-to-api/booking-fields.ts index 1d915c0a93..dc5e4ba3cb 100644 --- a/packages/lib/event-types/transformers/internal-to-api/booking-fields.ts +++ b/packages/lib/event-types/transformers/internal-to-api/booking-fields.ts @@ -23,6 +23,7 @@ import type { SelectFieldOutput_2024_06_14, TextAreaFieldOutput_2024_06_14, TextFieldOutput_2024_06_14, + UrlFieldOutput_2024_06_14, } from "@calcom/platform-types"; export function transformBookingFieldsInternalToApi( @@ -266,6 +267,17 @@ export function transformBookingFieldsInternalToApi( disableOnPrefill: !!field.disableOnPrefill, hidden: !!field.hidden, } satisfies RadioGroupFieldOutput_2024_06_14; + case "url": + return { + isDefault: false, + type: field.type, + slug: field.name, + label: field.label || "", + required: !!field.required, + placeholder: field.placeholder, + disableOnPrefill: !!field.disableOnPrefill, + hidden: !!field.hidden, + } satisfies UrlFieldOutput_2024_06_14; default: return { type: "unknown", @@ -290,6 +302,7 @@ const CustomFieldTypeEnum = z.enum([ "checkbox", "radio", "radioInput", + "url", ]); const CustomFieldsSchema = z.object({ diff --git a/packages/platform/types/event-types/event-types_2024_06_14/inputs/booking-fields.input.ts b/packages/platform/types/event-types/event-types_2024_06_14/inputs/booking-fields.input.ts index 6145a3ce7e..a16adef418 100644 --- a/packages/platform/types/event-types/event-types_2024_06_14/inputs/booking-fields.input.ts +++ b/packages/platform/types/event-types/event-types_2024_06_14/inputs/booking-fields.input.ts @@ -19,6 +19,7 @@ const inputBookingFieldTypes = [ "checkbox", "radio", "boolean", + "url", ] as const; const inputBookingFieldSlugs = ["name", "email", "title", "notes", "guests"] as const; @@ -438,6 +439,52 @@ export class TextFieldInput_2024_06_14 { hidden?: boolean; } +export class UrlFieldInput_2024_06_14 { + @IsIn(inputBookingFieldTypes) + @DocsProperty({ example: "url", description: "only allowed value for type is `url`" }) + type!: "url"; + + @IsString() + @DocsProperty({ + description: + "Unique identifier for the field in format `some-slug`. It is used to access response to this booking field during the booking", + example: "some-slug", + }) + slug!: string; + + @IsString() + @DocsProperty({ example: "Please enter your text" }) + label!: string; + + @IsBoolean() + @DocsProperty() + required!: boolean; + + @IsString() + @DocsProperty({ example: "e.g., Enter url here" }) + @IsOptional() + @DocsProperty() + placeholder?: string; + + @IsBoolean() + @IsOptional() + @DocsPropertyOptional({ + type: Boolean, + description: + "Disable this booking field if the URL contains query parameter with key equal to the slug and prefill it with the provided value.\ + For example, if the slug is `video-url` and the URL contains query parameter `&video-url=https://youtube.com/abc`the url field will be prefilled with this value and disabled.", + }) + disableOnPrefill?: boolean; + + @IsBoolean() + @IsOptional() + @DocsProperty({ + description: + "If true show under event type settings but don't show this booking field in the Booker. If false show in both.", + }) + hidden?: boolean; +} + export class NumberFieldInput_2024_06_14 { @IsIn(inputBookingFieldTypes) @DocsProperty({ example: "number", description: "only allowed value for type is `number`" }) @@ -821,7 +868,8 @@ export type InputBookingField_2024_06_14 = | MultiEmailFieldInput_2024_06_14 | CheckboxGroupFieldInput_2024_06_14 | RadioGroupFieldInput_2024_06_14 - | BooleanFieldInput_2024_06_14; + | BooleanFieldInput_2024_06_14 + | UrlFieldInput_2024_06_14; @ValidatorConstraint({ async: true }) class InputBookingFieldValidator_2024_06_14 implements ValidatorConstraintInterface { @@ -844,6 +892,7 @@ class InputBookingFieldValidator_2024_06_14 implements ValidatorConstraintInterf checkbox: CheckboxGroupFieldInput_2024_06_14, radio: RadioGroupFieldInput_2024_06_14, boolean: BooleanFieldInput_2024_06_14, + url: UrlFieldInput_2024_06_14, }; async validate(bookingFields: { type: string; slug: string }[]) { diff --git a/packages/platform/types/event-types/event-types_2024_06_14/inputs/create-event-type.input.ts b/packages/platform/types/event-types/event-types_2024_06_14/inputs/create-event-type.input.ts index 6f4b8735bf..19623031ac 100644 --- a/packages/platform/types/event-types/event-types_2024_06_14/inputs/create-event-type.input.ts +++ b/packages/platform/types/event-types/event-types_2024_06_14/inputs/create-event-type.input.ts @@ -40,6 +40,7 @@ import { TextAreaFieldInput_2024_06_14, TextFieldInput_2024_06_14, TitleDefaultFieldInput_2024_06_14, + UrlFieldInput_2024_06_14, } from "./booking-fields.input"; import type { InputBookingField_2024_06_14 } from "./booking-fields.input"; import { ValidateInputBookingFields_2024_06_14 } from "./booking-fields.input"; @@ -98,6 +99,7 @@ export const CREATE_EVENT_SLUG_EXAMPLE = "learn-the-secrets-of-masterchief"; CheckboxGroupFieldInput_2024_06_14, RadioGroupFieldInput_2024_06_14, BooleanFieldInput_2024_06_14, + UrlFieldInput_2024_06_14, BusinessDaysWindow_2024_06_14, CalendarDaysWindow_2024_06_14, RangeWindow_2024_06_14, @@ -191,6 +193,7 @@ export class CreateEventTypeInput_2024_06_14 { { $ref: getSchemaPath(CheckboxGroupFieldInput_2024_06_14) }, { $ref: getSchemaPath(RadioGroupFieldInput_2024_06_14) }, { $ref: getSchemaPath(BooleanFieldInput_2024_06_14) }, + { $ref: getSchemaPath(UrlFieldInput_2024_06_14) }, ], type: "array", }) diff --git a/packages/platform/types/event-types/event-types_2024_06_14/outputs/booking-fields.output.ts b/packages/platform/types/event-types/event-types_2024_06_14/outputs/booking-fields.output.ts index 7106155c45..322fbf2a99 100644 --- a/packages/platform/types/event-types/event-types_2024_06_14/outputs/booking-fields.output.ts +++ b/packages/platform/types/event-types/event-types_2024_06_14/outputs/booking-fields.output.ts @@ -24,6 +24,7 @@ import { RescheduleReasonDefaultFieldInput_2024_06_14, TitleDefaultFieldInput_2024_06_14, SplitNameDefaultFieldInput_2024_06_14, + UrlFieldInput_2024_06_14, } from "../inputs"; export class NameDefaultFieldOutput_2024_06_14 extends NameDefaultFieldInput_2024_06_14 { @@ -451,6 +452,23 @@ export class TextFieldOutput_2024_06_14 extends TextFieldInput_2024_06_14 { hidden!: boolean; } +export class UrlFieldOutput_2024_06_14 extends UrlFieldInput_2024_06_14 { + @IsBoolean() + @DocsProperty({ + description: "This property is always false because it's not default field but custom field", + example: false, + default: false, + }) + isDefault = false; + + @IsBoolean() + @DocsProperty({ + description: + "If true show under event type settings but don't show this booking field in the Booker. If false show in both.", + }) + hidden!: boolean; +} + export class NumberFieldOutput_2024_06_14 extends NumberFieldInput_2024_06_14 { @IsBoolean() @DocsProperty({ @@ -620,7 +638,8 @@ export type CustomFieldOutput_2024_06_14 = | MultiEmailFieldOutput_2024_06_14 | CheckboxGroupFieldOutput_2024_06_14 | RadioGroupFieldOutput_2024_06_14 - | BooleanFieldOutput_2024_06_14; + | BooleanFieldOutput_2024_06_14 + | UrlFieldOutput_2024_06_14; export type KnownBookingField_2024_06_14 = DefaultFieldOutput_2024_06_14 | CustomFieldOutput_2024_06_14; @@ -657,6 +676,7 @@ class OutputBookingFieldValidator_2024_06_14 implements ValidatorConstraintInter checkbox: CheckboxGroupFieldOutput_2024_06_14, radio: RadioGroupFieldOutput_2024_06_14, boolean: BooleanFieldOutput_2024_06_14, + url: UrlFieldOutput_2024_06_14, }; async validate(bookingFields: OutputBookingField_2024_06_14[]) { diff --git a/packages/platform/types/event-types/event-types_2024_06_14/outputs/event-type.output.ts b/packages/platform/types/event-types/event-types_2024_06_14/outputs/event-type.output.ts index c1f511fb1b..275c10db21 100644 --- a/packages/platform/types/event-types/event-types_2024_06_14/outputs/event-type.output.ts +++ b/packages/platform/types/event-types/event-types_2024_06_14/outputs/event-type.output.ts @@ -52,6 +52,7 @@ import { SelectFieldOutput_2024_06_14, TextAreaFieldOutput_2024_06_14, TextFieldOutput_2024_06_14, + UrlFieldOutput_2024_06_14, } from "../outputs/booking-fields.output"; import type { OutputBookingField_2024_06_14 } from "./booking-fields.output"; import { ValidateOutputBookingFields_2024_06_14 } from "./booking-fields.output"; @@ -173,6 +174,7 @@ class EventTypeTeam { CheckboxGroupFieldOutput_2024_06_14, MultiEmailFieldOutput_2024_06_14, MultiSelectFieldOutput_2024_06_14, + UrlFieldOutput_2024_06_14, NumberFieldOutput_2024_06_14, PhoneFieldOutput_2024_06_14, RadioGroupFieldOutput_2024_06_14, @@ -261,6 +263,7 @@ class BaseEventTypeOutput_2024_06_14 { { $ref: getSchemaPath(CheckboxGroupFieldOutput_2024_06_14) }, { $ref: getSchemaPath(RadioGroupFieldOutput_2024_06_14) }, { $ref: getSchemaPath(BooleanFieldOutput_2024_06_14) }, + { $ref: getSchemaPath(UrlFieldOutput_2024_06_14) }, ], type: "array", })