From 5bab2af500cef7eaa459fab5a13022b12c2d02b6 Mon Sep 17 00:00:00 2001 From: Bailey Pumfleet Date: Mon, 25 Aug 2025 05:11:18 -0400 Subject: [PATCH] chore: some minor QA fixes (#22727) * Various fixes * Remove tooltip * another string change * Fix width of custom event name modal to prevent overflow * Booking questions fixes * minor string fix * checkbox alignment * padding in reassign dialog * fix: update FormBuilder tests for checkbox UI changes - Updated test utilities to work with CheckboxField instead of BooleanToggleGroupField - Fixed badge expectations to check for 'optional' instead of 'required' - Updated dialog interaction methods to use checkbox.checked instead of button text - All 13 FormBuilder tests now pass successfully Fixes failing tests in PR #22727 caused by UI changes from toggle buttons to checkboxes for required field selection. Co-Authored-By: amit@cal.com --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: amit@cal.com Co-authored-by: Alex van Andel --- apps/web/app/providers.tsx | 5 +- apps/web/components/dialog/ReassignDialog.tsx | 2 +- .../components/AppConnectionItem.tsx | 1 + .../steps-views/ConnectCalendars.tsx | 2 +- .../steps-views/ConnectedVideoStep.tsx | 2 +- .../steps-views/SetupAvailability.tsx | 2 +- .../steps-views/UserProfile.tsx | 2 +- .../steps-views/UserSettings.tsx | 3 +- .../UsernameTextfield.tsx | 1 + .../[[...step]]/onboarding-view.tsx | 7 +- .../playwright/dynamic-booking-pages.e2e.ts | 5 +- apps/web/playwright/event-types.e2e.ts | 5 +- apps/web/playwright/fixtures/apps.ts | 2 +- apps/web/playwright/hash-my-url.e2e.ts | 2 +- apps/web/playwright/lib/testUtils.ts | 5 +- .../manage-booking-questions.e2e.ts | 21 ++--- .../web/playwright/managed-event-types.e2e.ts | 7 +- apps/web/playwright/onboarding.e2e.ts | 2 +- .../playwright/organization/booking.e2e.ts | 10 +- apps/web/public/static/locales/ar/common.json | 2 +- apps/web/public/static/locales/az/common.json | 2 +- apps/web/public/static/locales/bg/common.json | 2 +- apps/web/public/static/locales/bn/common.json | 2 +- apps/web/public/static/locales/ca/common.json | 2 +- apps/web/public/static/locales/cs/common.json | 2 +- apps/web/public/static/locales/da/common.json | 2 +- apps/web/public/static/locales/de/common.json | 2 +- apps/web/public/static/locales/el/common.json | 2 +- apps/web/public/static/locales/en/common.json | 31 +++--- .../public/static/locales/es-419/common.json | 2 +- apps/web/public/static/locales/es/common.json | 2 +- apps/web/public/static/locales/et/common.json | 2 +- apps/web/public/static/locales/eu/common.json | 2 +- apps/web/public/static/locales/fi/common.json | 2 +- apps/web/public/static/locales/fr/common.json | 2 +- apps/web/public/static/locales/he/common.json | 2 +- apps/web/public/static/locales/hu/common.json | 2 +- apps/web/public/static/locales/it/common.json | 2 +- apps/web/public/static/locales/ja/common.json | 2 +- apps/web/public/static/locales/km/common.json | 2 +- apps/web/public/static/locales/ko/common.json | 2 +- apps/web/public/static/locales/nl/common.json | 2 +- apps/web/public/static/locales/no/common.json | 2 +- apps/web/public/static/locales/pl/common.json | 2 +- .../public/static/locales/pt-BR/common.json | 2 +- apps/web/public/static/locales/pt/common.json | 2 +- apps/web/public/static/locales/ro/common.json | 2 +- apps/web/public/static/locales/ru/common.json | 2 +- .../public/static/locales/sk-SK/common.json | 2 +- apps/web/public/static/locales/sr/common.json | 2 +- apps/web/public/static/locales/sv/common.json | 2 +- apps/web/public/static/locales/tr/common.json | 2 +- apps/web/public/static/locales/uk/common.json | 2 +- apps/web/public/static/locales/vi/common.json | 2 +- .../public/static/locales/zh-CN/common.json | 2 +- .../public/static/locales/zh-TW/common.json | 2 +- .../components/CreateEventTypeForm.tsx | 11 +-- .../tabs/advanced/CustomEventTypeModal.tsx | 54 +++++------ .../RequiresConfirmationController.tsx | 62 ++++++------ .../features/form-builder/FormBuilder.tsx | 94 ++++++++++--------- packages/features/form-builder/testUtils.ts | 25 +++-- .../hooks/usePlatformTabsNavigations.tsx | 4 +- .../event-types/hooks/useTabsNavigations.tsx | 4 +- packages/ui/components/editor/Editor.tsx | 5 +- packages/ui/components/editor/types.ts | 1 + packages/ui/components/form/switch/Switch.tsx | 4 +- 66 files changed, 232 insertions(+), 221 deletions(-) diff --git a/apps/web/app/providers.tsx b/apps/web/app/providers.tsx index 5a7ab55124..3654a8c98a 100644 --- a/apps/web/app/providers.tsx +++ b/apps/web/app/providers.tsx @@ -2,6 +2,7 @@ import { TrpcProvider } from "app/_trpc/trpc-provider"; import { SessionProvider } from "next-auth/react"; +import { usePathname } from "next/navigation"; import CacheProvider from "react-inlinesvg/provider"; import { WebPushProvider } from "@calcom/features/notifications/WebPushContext"; @@ -17,11 +18,13 @@ type ProvidersProps = { }; export function Providers({ isEmbed, children, nonce }: ProvidersProps) { const isBookingPage = useIsBookingPage(); + const pathname = usePathname(); + const isOnboardingPage = pathname?.startsWith("/getting-started"); return ( - {!isBookingPage ? : null} + {!isBookingPage && !isOnboardingPage ? : null} {!isEmbed && !isBookingPage && } {/* @ts-expect-error FIXME remove this comment when upgrading typescript to v5 */} diff --git a/apps/web/components/dialog/ReassignDialog.tsx b/apps/web/components/dialog/ReassignDialog.tsx index f26e2c53eb..328e104ffb 100644 --- a/apps/web/components/dialog/ReassignDialog.tsx +++ b/apps/web/components/dialog/ReassignDialog.tsx @@ -218,7 +218,7 @@ export const ReassignDialog = ({ placeholder={t("search")} onChange={(e) => setSearchTerm(e.target.value)} /> -
+
{teamMemberOptions.map((member) => (
diff --git a/apps/web/components/getting-started/steps-views/UserProfile.tsx b/apps/web/components/getting-started/steps-views/UserProfile.tsx index 493be60c81..3c38b781a8 100644 --- a/apps/web/components/getting-started/steps-views/UserProfile.tsx +++ b/apps/web/components/getting-started/steps-views/UserProfile.tsx @@ -164,7 +164,7 @@ const UserProfile = ({ user }: UserProfileProps) => { EndIcon="arrow-right" type="submit" className="mt-8 w-full items-center justify-center"> - {t("finish")} + {t("finish_and_start")} ); diff --git a/apps/web/components/getting-started/steps-views/UserSettings.tsx b/apps/web/components/getting-started/steps-views/UserSettings.tsx index eba7d9cfbb..a57dd74c7c 100644 --- a/apps/web/components/getting-started/steps-views/UserSettings.tsx +++ b/apps/web/components/getting-started/steps-views/UserSettings.tsx @@ -88,6 +88,7 @@ const UserSettings = (props: IUserSettingsProps) => { id="name" name="name" type="text" + placeholder="John Doe" autoComplete="off" autoCorrect="off" /> @@ -121,7 +122,7 @@ const UserSettings = (props: IUserSettingsProps) => { className="mt-8 flex w-full flex-row justify-center" loading={mutation.isPending} disabled={mutation.isPending}> - {t("next_step_text")} + {t("connect_your_calendar")} ); diff --git a/apps/web/components/ui/UsernameAvailability/UsernameTextfield.tsx b/apps/web/components/ui/UsernameAvailability/UsernameTextfield.tsx index 68b589b992..d680a0afc0 100644 --- a/apps/web/components/ui/UsernameAvailability/UsernameTextfield.tsx +++ b/apps/web/components/ui/UsernameAvailability/UsernameTextfield.tsx @@ -120,6 +120,7 @@ const UsernameTextfield = (props: ICustomUsernameProps & Partial { }[] = [ { title: t("welcome_to_cal_header", { appName: APP_NAME }), - subtitle: [t("we_just_need_basic_info"), t("edit_form_later_subtitle")], + subtitle: [t("we_just_need_basic_info")], }, { title: t("connect_your_calendar"), @@ -57,8 +57,9 @@ const getStepsAndHeadersForUser = (t: TFunction) => { { title: t("set_availability"), subtitle: [ - t("set_availability_getting_started_subtitle_1"), - t("set_availability_getting_started_subtitle_2"), + `${t("set_availability_getting_started_subtitle_1")} ${t( + "set_availability_getting_started_subtitle_2" + )}`, ], }, { diff --git a/apps/web/playwright/dynamic-booking-pages.e2e.ts b/apps/web/playwright/dynamic-booking-pages.e2e.ts index 7bcd99e65f..b29701ea01 100644 --- a/apps/web/playwright/dynamic-booking-pages.e2e.ts +++ b/apps/web/playwright/dynamic-booking-pages.e2e.ts @@ -109,10 +109,7 @@ test("multiple duration selection updates event length correctly", async ({ page await page.waitForSelector('[data-testid="event-types"]'); await page.click(`text=Multiple duration`); await page.waitForSelector('[data-testid="event-title"]'); - await expect(page.getByTestId("vertical-tab-event_setup_tab_title")).toHaveAttribute( - "aria-current", - "page" - ); + await expect(page.getByTestId("vertical-tab-basics")).toHaveAttribute("aria-current", "page"); await page.getByTestId("vertical-tab-event_advanced_tab_title").click(); await page.fill('[name="eventName"]', "{Event duration} event btwn {Organiser} {Scheduler}"); await page.locator('[data-testid="update-eventtype"]').click(); diff --git a/apps/web/playwright/event-types.e2e.ts b/apps/web/playwright/event-types.e2e.ts index 9303198502..c86bfc7a40 100644 --- a/apps/web/playwright/event-types.e2e.ts +++ b/apps/web/playwright/event-types.e2e.ts @@ -77,10 +77,7 @@ test.describe("Event Types tests", () => { // fix the race condition await page.waitForSelector('[data-testid="event-title"]'); - await expect(page.getByTestId("vertical-tab-event_setup_tab_title")).toHaveAttribute( - "aria-current", - "page" - ); + await expect(page.getByTestId("vertical-tab-basics")).toHaveAttribute("aria-current", "page"); await page.click("[data-testid=vertical-tab-recurring]"); await expect(page.locator("[data-testid=recurring-event-collapsible]")).toBeHidden(); diff --git a/apps/web/playwright/fixtures/apps.ts b/apps/web/playwright/fixtures/apps.ts index f63dd643c4..3d213d4e79 100644 --- a/apps/web/playwright/fixtures/apps.ts +++ b/apps/web/playwright/fixtures/apps.ts @@ -123,7 +123,7 @@ export function createAppsFixture(page: Page) { }, verifyAppsInfoNew: async (app: string, eventTypeId: number) => { await page.goto(`event-types/${eventTypeId}?tabName=apps`); - await expect(page.getByTestId("vertical-tab-event_setup_tab_title")).toContainText("Event Setup"); // fix the race condition + await expect(page.getByTestId("vertical-tab-basics")).toContainText("Basics"); // fix the race condition await expect(page.locator(`[data-testid='${app}-app-switch'][data-state="checked"]`)).toBeVisible(); }, }; diff --git a/apps/web/playwright/hash-my-url.e2e.ts b/apps/web/playwright/hash-my-url.e2e.ts index ae4e41d78f..bb97962c38 100644 --- a/apps/web/playwright/hash-my-url.e2e.ts +++ b/apps/web/playwright/hash-my-url.e2e.ts @@ -69,7 +69,7 @@ test.describe("private links creation and usage", () => { // Ensure that private URL is enabled after modifying the event type. // Additionally, if the slug is changed, ensure that the private URL is updated accordingly. - await page.getByTestId("vertical-tab-event_setup_tab_title").click(); + await page.getByTestId("vertical-tab-basics").click(); await page.locator("[data-testid=event-title]").first().fill("somethingrandom"); await page.locator("[data-testid=event-slug]").first().fill("somethingrandom"); await expect(page.locator('[data-testid="event-slug"]').first()).toHaveValue("somethingrandom"); diff --git a/apps/web/playwright/lib/testUtils.ts b/apps/web/playwright/lib/testUtils.ts index 237e95ab87..a56ba0a8e3 100644 --- a/apps/web/playwright/lib/testUtils.ts +++ b/apps/web/playwright/lib/testUtils.ts @@ -222,10 +222,7 @@ export const createNewSeatedEventType = async (page: Page, args: { eventTitle: s const eventTitle = args.eventTitle; await createNewUserEventType(page, { eventTitle }); await page.waitForSelector('[data-testid="event-title"]'); - await expect(page.getByTestId("vertical-tab-event_setup_tab_title")).toHaveAttribute( - "aria-current", - "page" - ); + await expect(page.getByTestId("vertical-tab-basics")).toHaveAttribute("aria-current", "page"); await page.locator('[data-testid="vertical-tab-event_advanced_tab_title"]').click(); await page.locator('[data-testid="offer-seats-toggle"]').click(); await page.locator('[data-testid="update-eventtype"]').click(); diff --git a/apps/web/playwright/manage-booking-questions.e2e.ts b/apps/web/playwright/manage-booking-questions.e2e.ts index faf89ea052..f085558c7f 100644 --- a/apps/web/playwright/manage-booking-questions.e2e.ts +++ b/apps/web/playwright/manage-booking-questions.e2e.ts @@ -70,10 +70,7 @@ test.describe("Manage Booking Questions", () => { const firstEventTypeElement = $eventTypes.first(); await firstEventTypeElement.click(); - await expect(page.getByTestId("vertical-tab-event_setup_tab_title")).toHaveAttribute( - "aria-current", - "page" - ); + await expect(page.getByTestId("vertical-tab-basics")).toHaveAttribute("aria-current", "page"); await page.getByTestId("vertical-tab-event_advanced_tab_title").click(); }); @@ -117,10 +114,7 @@ test.describe("Manage Booking Questions", () => { const firstEventTypeElement = $eventTypes.first(); await firstEventTypeElement.click(); - await expect(page.getByTestId("vertical-tab-event_setup_tab_title")).toHaveAttribute( - "aria-current", - "page" - ); + await expect(page.getByTestId("vertical-tab-basics")).toHaveAttribute("aria-current", "page"); }); await test.step("Open the 'Name' field dialog", async () => { @@ -642,8 +636,8 @@ async function toggleQuestionRequireStatusAndSave({ await page.locator(`[data-testid="field-${name}"]`).locator('[data-testid="edit-field-action"]').click(); await page .locator('[data-testid="edit-field-dialog"]') - .locator('[data-testid="field-required"] button') - .locator(`text=${required ? "Yes" : "No"}`) + .locator('[data-testid="field-required"]') + .first() .click(); await page.locator('[data-testid="field-add-save"]').click(); await saveEventType(page); @@ -754,11 +748,8 @@ test.describe("Text area min and max characters text", () => { await page.waitForSelector('[data-testid="event-types"]'); await createNewUserEventType(page, { eventTitle }); await page.waitForSelector('[data-testid="event-title"]'); - await expect(page.getByTestId("vertical-tab-event_setup_tab_title")).toContainText("Event Setup"); //fix the race condition - await expect(page.getByTestId("vertical-tab-event_setup_tab_title")).toHaveAttribute( - "aria-current", - "page" - ); + await expect(page.getByTestId("vertical-tab-basics")).toContainText("Basics"); //fix the race condition + await expect(page.getByTestId("vertical-tab-basics")).toHaveAttribute("aria-current", "page"); await page.getByTestId("vertical-tab-event_advanced_tab_title").click(); const insertQuestion = async (questionName: string) => { const element = page.locator('[data-testid="add-field"]'); diff --git a/apps/web/playwright/managed-event-types.e2e.ts b/apps/web/playwright/managed-event-types.e2e.ts index 767ab3618f..b80f883506 100644 --- a/apps/web/playwright/managed-event-types.e2e.ts +++ b/apps/web/playwright/managed-event-types.e2e.ts @@ -79,11 +79,8 @@ test.describe("Managed Event Types", () => { const { adminUser, managedEvent } = await setupManagedEvent({ users }); await adminUser.apiLogin(); await page.goto(`/event-types/${managedEvent.id}?tabName=setup`); - await expect(page.getByTestId("vertical-tab-event_setup_tab_title")).toHaveAttribute( - "aria-current", - "page" - ); // fix the race condition - await expect(page.getByTestId("vertical-tab-event_setup_tab_title")).toContainText("Event Setup"); //fix the race condition + await expect(page.getByTestId("vertical-tab-basics")).toHaveAttribute("aria-current", "page"); // fix the race condition + await expect(page.getByTestId("vertical-tab-basics")).toContainText("Basics"); //fix the race condition await page.locator("#location-select").click(); const optionText = await getByKey(page, "organizer_default_conferencing_app"); await expect(optionText).toBeVisible(); diff --git a/apps/web/playwright/onboarding.e2e.ts b/apps/web/playwright/onboarding.e2e.ts index 15fa1930e7..0fe71239cb 100644 --- a/apps/web/playwright/onboarding.e2e.ts +++ b/apps/web/playwright/onboarding.e2e.ts @@ -21,7 +21,7 @@ test.describe("Onboarding", () => { // tests whether the user makes it to /getting-started // after login with completedOnboarding false await page.waitForURL("/getting-started"); - await expect(page.locator('text="Next Step"')).toBeVisible(); // Fix race condition + await expect(page.locator('text="Connect your calendar"')).toBeVisible(); // Fix race condition await test.step("step 1 - User Settings", async () => { // Check required fields diff --git a/apps/web/playwright/organization/booking.e2e.ts b/apps/web/playwright/organization/booking.e2e.ts index 538d4918ac..797722558b 100644 --- a/apps/web/playwright/organization/booking.e2e.ts +++ b/apps/web/playwright/organization/booking.e2e.ts @@ -780,8 +780,8 @@ const markPhoneNumberAsRequiredAndEmailAsOptional = async (page: Page, eventId: // Make email as not required await page.locator('[data-testid="field-email"] [data-testid="edit-field-action"]').click(); - const emailRequiredFiled = await page.locator('[data-testid="field-required"]'); - await emailRequiredFiled.locator("> :nth-child(2)").click(); + const emailRequiredFiled = await page.locator('[data-testid="field-required"]').first(); + await emailRequiredFiled.click(); await page.getByTestId("field-add-save").click(); await submitAndWaitForResponse(page, "/api/trpc/eventTypes/update?batch=1", { action: () => page.locator("[data-testid=update-eventtype]").click(), @@ -790,12 +790,12 @@ const markPhoneNumberAsRequiredAndEmailAsOptional = async (page: Page, eventId: const markPhoneNumberAsRequiredField = async (page: Page, eventId: number) => { await page.goto(`/event-types/${eventId}?tabName=advanced`); - await expect(page.getByTestId("vertical-tab-event_setup_tab_title")).toContainText("Event Setup"); // fix the race condition + await expect(page.getByTestId("vertical-tab-basics")).toContainText("Basics"); // fix the race condition await page.locator('[data-testid="field-attendeePhoneNumber"] [data-testid="toggle-field"]').click(); await page.locator('[data-testid="field-attendeePhoneNumber"] [data-testid="edit-field-action"]').click(); - const phoneRequiredFiled = await page.locator('[data-testid="field-required"]'); - await phoneRequiredFiled.locator("> :nth-child(1)").click(); + const phoneRequiredFiled = await page.locator('[data-testid="field-required"]').first(); + await phoneRequiredFiled.click(); await page.getByTestId("field-add-save").click(); await submitAndWaitForResponse(page, "/api/trpc/eventTypes/update?batch=1", { action: () => page.locator("[data-testid=update-eventtype]").click(), diff --git a/apps/web/public/static/locales/ar/common.json b/apps/web/public/static/locales/ar/common.json index 1bdd1510ad..3addcb4a03 100644 --- a/apps/web/public/static/locales/ar/common.json +++ b/apps/web/public/static/locales/ar/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "يمكنك ربط رزنامتك من <1>هنا.", "default_calendar_selected": "الرزنامة الافتراضية", "hide_from_profile": "إخفاء من الملف الشخصي", - "event_setup_tab_title": "إعداد الحدث", + "basics": "إعداد الحدث", "availability_not_found_in_schedule_error": "لا يوجد مواعيد متاحة", "event_limit_tab_title": "الحدود", "event_limit_tab_description": "ما تواتر مرات الحجز", diff --git a/apps/web/public/static/locales/az/common.json b/apps/web/public/static/locales/az/common.json index 01f1aa33e4..c3d828d8ea 100644 --- a/apps/web/public/static/locales/az/common.json +++ b/apps/web/public/static/locales/az/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Təqviminizi <1>buradan əlaqələndirə bilərsiniz.", "default_calendar_selected": "Varsayılan təqvim seçildi", "hide_from_profile": "Profildən gizlət", - "event_setup_tab_title": "Tədbir Quraşdırması", + "basics": "Tədbir Quraşdırması", "availability_not_found_in_schedule_error": "Cədvəldə mövcudluq tapılmadı", "event_limit_tab_title": "Limitlər", "event_limit_tab_description": "Nə qədər tez-tez rezervasiya edilə bilərsiniz", diff --git a/apps/web/public/static/locales/bg/common.json b/apps/web/public/static/locales/bg/common.json index 8c087c94b0..a2b088c8b6 100644 --- a/apps/web/public/static/locales/bg/common.json +++ b/apps/web/public/static/locales/bg/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Можете да свържете календара си от <1>тук.", "default_calendar_selected": "Календар по подразбиране", "hide_from_profile": "Скрий от профила", - "event_setup_tab_title": "Настройка на събитие", + "basics": "Настройка на събитие", "availability_not_found_in_schedule_error": "Не е намерена свободна заетост в графика", "event_limit_tab_title": "Лимити", "event_limit_tab_description": "Колко често можете да бъдете резервиран", diff --git a/apps/web/public/static/locales/bn/common.json b/apps/web/public/static/locales/bn/common.json index f1fabce997..75c9acfc4e 100644 --- a/apps/web/public/static/locales/bn/common.json +++ b/apps/web/public/static/locales/bn/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "আপনি আপনার ক্যালেন্ডার থেকে সংযুক্ত করতে পারেন <1>এখানে।", "default_calendar_selected": "ডিফল্ট ক্যালেন্ডার", "hide_from_profile": "প্রোফাইল থেকে লুকান", - "event_setup_tab_title": "ইভেন্ট সেটআপ", + "basics": "ইভেন্ট সেটআপ", "availability_not_found_in_schedule_error": "তফসিলের মধ্যে কোনও প্রাপ্যতা পাওয়া যায় না", "event_limit_tab_title": "সীমা", "event_limit_tab_description": "আপনি কতবার বুক করা যায়", diff --git a/apps/web/public/static/locales/ca/common.json b/apps/web/public/static/locales/ca/common.json index d65eaac115..c0136ac8c3 100644 --- a/apps/web/public/static/locales/ca/common.json +++ b/apps/web/public/static/locales/ca/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Pots connectar el teu calendari des d'<1>aquí.", "default_calendar_selected": "Calendari predeterminat", "hide_from_profile": "Amaga del perfil", - "event_setup_tab_title": "Configuració de l'esdeveniment", + "basics": "Configuració de l'esdeveniment", "availability_not_found_in_schedule_error": "No s'ha trobat disponibilitat a l'agenda", "event_limit_tab_title": "Límits", "event_limit_tab_description": "Amb quina freqüència et poden reservar", diff --git a/apps/web/public/static/locales/cs/common.json b/apps/web/public/static/locales/cs/common.json index cedde7b6a6..e65ba90054 100644 --- a/apps/web/public/static/locales/cs/common.json +++ b/apps/web/public/static/locales/cs/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Svůj kalendář můžete připojit <1>zde.", "default_calendar_selected": "Výchozí kalendář", "hide_from_profile": "Nezobrazovat v profilu", - "event_setup_tab_title": "Nastavení události", + "basics": "Nastavení události", "availability_not_found_in_schedule_error": "V rozvrhu nebyla nalezena žádná dostupnost", "event_limit_tab_title": "Omezení", "event_limit_tab_description": "Jak často lze u vás provést rezervaci", diff --git a/apps/web/public/static/locales/da/common.json b/apps/web/public/static/locales/da/common.json index a5aa77fdf7..6198f691a4 100644 --- a/apps/web/public/static/locales/da/common.json +++ b/apps/web/public/static/locales/da/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Du kan forbinde din kalender fra <1>her.", "default_calendar_selected": "Standard kalender", "hide_from_profile": "Skjul fra profil", - "event_setup_tab_title": "Opsætning af Begivenheder", + "basics": "Opsætning af Begivenheder", "availability_not_found_in_schedule_error": "Ingen tilgængelighed fundet i tidsplanen", "event_limit_tab_title": "Grænser", "event_limit_tab_description": "Hvor ofte du kan bookes", diff --git a/apps/web/public/static/locales/de/common.json b/apps/web/public/static/locales/de/common.json index c2cf8ff5d4..f8a7fe7e15 100644 --- a/apps/web/public/static/locales/de/common.json +++ b/apps/web/public/static/locales/de/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Sie können Ihren Kalender von <1>hier verbinden.", "default_calendar_selected": "Standardkalender", "hide_from_profile": "Im Profil ausblenden", - "event_setup_tab_title": "Termin-Einrichtung", + "basics": "Termin-Einrichtung", "availability_not_found_in_schedule_error": "Keine Verfügbarkeit im Zeitplan gefunden", "event_limit_tab_title": "Limits", "event_limit_tab_description": "Wie oft können Sie gebucht werden", diff --git a/apps/web/public/static/locales/el/common.json b/apps/web/public/static/locales/el/common.json index 8a1f1a8045..a25eaf7b8e 100644 --- a/apps/web/public/static/locales/el/common.json +++ b/apps/web/public/static/locales/el/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Μπορείτε να συνδέσετε το ημερολόγιό σας από <1>εδώ.", "default_calendar_selected": "Προεπιλεγμένο ημερολόγιο", "hide_from_profile": "Απόκρυψη από το προφίλ", - "event_setup_tab_title": "Ρύθμιση εκδήλωσης", + "basics": "Ρύθμιση εκδήλωσης", "availability_not_found_in_schedule_error": "Δεν βρέθηκε διαθεσιμότητα στο πρόγραμμα", "event_limit_tab_title": "Όρια", "event_limit_tab_description": "Πόσο συχνά μπορείτε να κάνετε κράτηση", diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json index 6e4835788a..fafa47b34e 100644 --- a/apps/web/public/static/locales/en/common.json +++ b/apps/web/public/static/locales/en/common.json @@ -278,6 +278,7 @@ "number": "Number", "checkbox": "Checkbox", "is_required": "Is required", + "make_field_required": "Make this field required", "required": "Required", "optional": "Optional", "input_type": "Input type", @@ -354,7 +355,7 @@ "check_email_reset_password": "Check your email. We sent you a link to reset your password.", "finish": "Finish", "organization_general_description": "Manage settings for your team language and timezone", - "few_sentences_about_yourself": "A few sentences about yourself. This will appear on your personal url page.", + "few_sentences_about_yourself": "A few sentences about yourself. This will appear on your scheduling link.", "nearly_there": "Nearly there!", "nearly_there_instructions": "Last thing, a brief description about you and a photo really helps you get bookings and let people know who they're booking with.", "set_availability_instructions": "Define ranges of time when you are available on a recurring basis. You can create more of these later and assign them to different calendars.", @@ -367,7 +368,7 @@ "continue_with": "Continue with {{appName}}", "connect_your_calendar": "Connect your calendar", "connect_your_video_app": "Connect your video apps", - "connect_your_video_app_instructions": "Connect your video apps to use them on your event types.", + "connect_your_video_app_instructions": "Connect your preferred video conferencing app to use it for your meetings.", "connect_your_calendar_instructions": "Connect your calendar to automatically check for busy times and new events as they're scheduled.", "set_up_later": "Set up later", "current_time": "Current time", @@ -931,7 +932,7 @@ "add_attendees": "Add attendees", "show_advanced_settings": "Show advanced settings", "event_name": "Event Name", - "event_name_in_calendar": "With event name", + "event_name_in_calendar": "Calendar event name", "event_name_tooltip": "The name that will appear in calendars", "meeting_with_user": "{Event type title} between {Organiser} & {Scheduler}", "additional_inputs": "Additional Inputs", @@ -947,7 +948,7 @@ "add_input": "Add an Input", "disable_notes": "Hide notes in calendar", "disable_notes_description": "For privacy reasons, additional inputs and notes will be hidden in the calendar entry. They will still be sent to your email.", - "requires_confirmation_description": "The booking needs to be manually confirmed before it is pushed to the integrations and a confirmation mail is sent.", + "requires_confirmation_description": "The booking needs to be manually confirmed before it is pushed to your calendar and a confirmation is sent.", "requires_confirmation_will_block_slot_description": "Unconfirmed bookings still block calendar slots.", "recurring_event": "Recurring Event", "recurring_event_description": "People can subscribe for recurring events", @@ -998,7 +999,7 @@ "quick_chat": "Quick Chat", "add_new_team_event_type": "Add a new team event type", "add_new_event_type": "Add a new event type", - "new_event_type_to_book_description": "Create a new event type for people to book times with.", + "new_event_type_to_book_description": "Set up event types to offer different types of meetings.", "length": "Length", "minimum_booking_notice": "Minimum Notice", "offset_toggle": "Offset start times", @@ -1023,6 +1024,7 @@ "category_apps": "{{category}} apps", "app_store": "App Store", "app_store_description": "Connecting people, technology and the workplace.", + "connect_your_video": "Connect your video conferencing app", "settings": "Settings", "event_type_moved_successfully": "Event type has been moved successfully", "next_step_text": "Next Step", @@ -1238,7 +1240,7 @@ "make_team_private_description": "Your team members won't be able to see other team members when this is turned on.", "you_cannot_see_team_members": "You cannot see all the team members of a private team.", "you_cannot_see_teams_of_org": "You cannot see teams of a private organization.", - "allow_booker_to_select_duration": "Allow booker to select duration", + "allow_booker_to_select_duration": "Allow booker to select from multiple durations", "impersonate_user_tip": "All uses of this feature is audited.", "impersonating_user_warning": "Impersonating username \"{{user}}\".", "impersonating_stop_instructions": "Click here to stop", @@ -1494,7 +1496,7 @@ "connect_your_calendar_and_link": "You can connect your calendar from <1>here.", "default_calendar_selected": "Default calendar", "hide_from_profile": "Hide from profile", - "event_setup_tab_title": "Event Setup", + "basics": "Basics", "availability_not_found_in_schedule_error": "No availability found in schedule", "event_limit_tab_title": "Limits", "event_limit_tab_description": "How often you can be booked", @@ -1524,7 +1526,8 @@ "settings_updated_successfully": "Settings updated successfully", "error_updating_settings": "Error updating settings", "personal_cal_url": "My personal {{appName}} URL", - "bio_hint": "A few sentences about yourself. this will appear on your personal url page.", + "bio_hint": "A few sentences about yourself. this will appear on your scheduling link.", + "finish_and_start": "Finish setup and get started", "user_has_no_bio": "This user has not added a bio yet.", "bio": "Bio", "delete_account_modal_title": "Delete Account", @@ -1580,8 +1583,10 @@ "we_just_need_basic_info": "We just need some basic info to get your profile setup.", "skip": "Skip", "do_this_later": "Do this later", - "set_availability_getting_started_subtitle_1": "Define ranges of time when you are available", - "set_availability_getting_started_subtitle_2": "You can customise all of this later in the availability page.", + "set_availability_getting_started_subtitle_1": "Define ranges of time when you are available.", + "set_availability_getting_started_subtitle_2": "Customize it later in the availability page.", + "connect_calendar_first": "Connect a calendar first", + "complete_profile": "Complete your profile", "connect_calendars_from_app_store": "You can add more calendars from the app store", "connect_conference_apps": "Connect conference apps", "connect_calendar_apps": "Connect calendar apps", @@ -2992,8 +2997,8 @@ "edit_team_member_weights": "Edit Weights", "weights_updated_successfully": "Weights updated successfully", "require_confirmation_for_free_email": "Only require confirmation for free email providers (Ex. @gmail.com, @outlook.com)", - "exclude_emails_that_contain": "Exclude emails that contain ...", - "require_emails_that_contain": "Require emails that contain ...", + "exclude_emails_that_contain": "Exclude emails that contain", + "require_emails_that_contain": "Require emails that contain", "exclude_emails_match_found_error_message": "Please enter a valid work email address", "require_emails_no_match_found_error_message": "You are not allowed to book with this email domain. Please contact the owner of this link.", "search_columns": "Search columns", @@ -3128,7 +3133,7 @@ "inactive_team_plan_description": "Your team plan is inactive. Check your subcription or reach out to customer support", "limited_access_trial_mode": "Limited access during trial. Feature available after trial ends.", "referral_program": "Referral Program", - "referral_text": "Earn 20% referral", + "referral_text": "Refer and earn", "dub_disabled_error_message": "You need a Dub API Key and Program Id to use this page.", "uid": "UID", "link": "Link", diff --git a/apps/web/public/static/locales/es-419/common.json b/apps/web/public/static/locales/es-419/common.json index eb8b933451..1f953b0c99 100644 --- a/apps/web/public/static/locales/es-419/common.json +++ b/apps/web/public/static/locales/es-419/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Puedes conectar tu calendario desde <1>aquí.", "default_calendar_selected": "Calendario predeterminado", "hide_from_profile": "Ocultar del perfil", - "event_setup_tab_title": "Configuración del evento", + "basics": "Configuración del evento", "availability_not_found_in_schedule_error": "No se encontró disponibilidad en el horario", "event_limit_tab_title": "Límites", "event_limit_tab_description": "Con qué frecuencia puedes ser reservado", diff --git a/apps/web/public/static/locales/es/common.json b/apps/web/public/static/locales/es/common.json index 12db173ce0..2f85119054 100644 --- a/apps/web/public/static/locales/es/common.json +++ b/apps/web/public/static/locales/es/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Puede conectar su calendario desde <1>aquí.", "default_calendar_selected": "Calendario predeterminado", "hide_from_profile": "Ocultar del perfil", - "event_setup_tab_title": "Configuración del evento", + "basics": "Configuración del evento", "availability_not_found_in_schedule_error": "No se encontró disponibilidad en el horario", "event_limit_tab_title": "Límites", "event_limit_tab_description": "Con qué frecuencia se puede reservar", diff --git a/apps/web/public/static/locales/et/common.json b/apps/web/public/static/locales/et/common.json index 049f8a6d55..8f926669e9 100644 --- a/apps/web/public/static/locales/et/common.json +++ b/apps/web/public/static/locales/et/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Saate oma kalendri ühendada <1>siit.", "default_calendar_selected": "Vaikekalender", "hide_from_profile": "Peida profiilist", - "event_setup_tab_title": "Sündmuse seadistamine", + "basics": "Sündmuse seadistamine", "availability_not_found_in_schedule_error": "Ajakavas ei leitud saadavust", "event_limit_tab_title": "Piirangud", "event_limit_tab_description": "Kui sageli saate broneerida", diff --git a/apps/web/public/static/locales/eu/common.json b/apps/web/public/static/locales/eu/common.json index 738f243b45..f0c0c4972b 100644 --- a/apps/web/public/static/locales/eu/common.json +++ b/apps/web/public/static/locales/eu/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Zure egutegia <1>hemendik konekta dezakezu.", "default_calendar_selected": "Egutegi lehenetsia", "hide_from_profile": "Ezkutatu profiletik", - "event_setup_tab_title": "Gertaeraren konfigurazioa", + "basics": "Gertaeraren konfigurazioa", "availability_not_found_in_schedule_error": "Ez da eskuragarritasunik aurkitu ordutegian", "event_limit_tab_title": "Mugak", "event_limit_tab_description": "Zenbatetan erreserbatu zaitzaketen", diff --git a/apps/web/public/static/locales/fi/common.json b/apps/web/public/static/locales/fi/common.json index bd4b3fc77b..d78422f6bc 100644 --- a/apps/web/public/static/locales/fi/common.json +++ b/apps/web/public/static/locales/fi/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Voit yhdistää kalenterisi <1>täältä.", "default_calendar_selected": "Oletuskalenteri valittu", "hide_from_profile": "Piilota profiilista", - "event_setup_tab_title": "Tapahtuman asetukset", + "basics": "Tapahtuman asetukset", "availability_not_found_in_schedule_error": "Aikataulusta ei löytynyt vapaita aikoja", "event_limit_tab_title": "Rajoitukset", "event_limit_tab_description": "Kuinka usein sinut voidaan varata", diff --git a/apps/web/public/static/locales/fr/common.json b/apps/web/public/static/locales/fr/common.json index 97bc92992e..cecd77805a 100644 --- a/apps/web/public/static/locales/fr/common.json +++ b/apps/web/public/static/locales/fr/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Vous pouvez connecter votre calendrier depuis <1>ici.", "default_calendar_selected": "Calendrier par défaut", "hide_from_profile": "Masquer du profil", - "event_setup_tab_title": "Configuration", + "basics": "Configuration", "availability_not_found_in_schedule_error": "Aucune disponibilité trouvée dans le planning", "event_limit_tab_title": "Limites", "event_limit_tab_description": "Fréquence de réservation", diff --git a/apps/web/public/static/locales/he/common.json b/apps/web/public/static/locales/he/common.json index d833fb3cf7..31378b7201 100644 --- a/apps/web/public/static/locales/he/common.json +++ b/apps/web/public/static/locales/he/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "ניתן לחבר את לוח השנה שלך מ<1>כאן.", "default_calendar_selected": "לוח השנה המוגדר כברירת מחדל", "hide_from_profile": "הסתר מהפרופיל", - "event_setup_tab_title": "הגדרת ארוע", + "basics": "הגדרת ארוע", "availability_not_found_in_schedule_error": "לא נמצא חלון זמינות בלוח הזמנים", "event_limit_tab_title": "מגבלות", "event_limit_tab_description": "באיזו תדירות ניתן להזמין אותך", diff --git a/apps/web/public/static/locales/hu/common.json b/apps/web/public/static/locales/hu/common.json index 3e21987eef..05e89ab374 100644 --- a/apps/web/public/static/locales/hu/common.json +++ b/apps/web/public/static/locales/hu/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Naptárát <1>innen csatlakoztathatja.", "default_calendar_selected": "Alapértelmezett naptár", "hide_from_profile": "Elrejtés a profilból", - "event_setup_tab_title": "Esemény beállítása", + "basics": "Esemény beállítása", "availability_not_found_in_schedule_error": "Az ütemezésben nem található elérhetőség", "event_limit_tab_title": "Korlátok", "event_limit_tab_description": "Milyen gyakran vagy foglalható", diff --git a/apps/web/public/static/locales/it/common.json b/apps/web/public/static/locales/it/common.json index 723b563589..2c6ee1d7d8 100644 --- a/apps/web/public/static/locales/it/common.json +++ b/apps/web/public/static/locales/it/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Puoi collegare il tuo calendario <1>qui.", "default_calendar_selected": "Calendario predefinito", "hide_from_profile": "Nascondi nel profilo", - "event_setup_tab_title": "Impostazione evento", + "basics": "Impostazione evento", "availability_not_found_in_schedule_error": "Nessuna disponibilità trovata nel programma", "event_limit_tab_title": "Limiti", "event_limit_tab_description": "Con quale frequenza è possibile fare una prenotazione", diff --git a/apps/web/public/static/locales/ja/common.json b/apps/web/public/static/locales/ja/common.json index 7af2e9595f..34a4119114 100644 --- a/apps/web/public/static/locales/ja/common.json +++ b/apps/web/public/static/locales/ja/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "<1>こちらからカレンダーを接続できます。", "default_calendar_selected": "デフォルトのカレンダー", "hide_from_profile": "プロファイルから隠す", - "event_setup_tab_title": "イベント設定", + "basics": "イベント設定", "availability_not_found_in_schedule_error": "スケジュールに利用可能な時間が見つかりません", "event_limit_tab_title": "上限", "event_limit_tab_description": "予約できる頻度", diff --git a/apps/web/public/static/locales/km/common.json b/apps/web/public/static/locales/km/common.json index 5609f56097..f1cfd4a372 100644 --- a/apps/web/public/static/locales/km/common.json +++ b/apps/web/public/static/locales/km/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "អ្នកអាចភ្ជាប់ប្រតិទិនរបស់អ្នកពី <1>ទីនេះ។", "default_calendar_selected": "ប្រតិទិនលំនាំដើម", "hide_from_profile": "លាក់ពីប្រវត្តិរូប", - "event_setup_tab_title": "ការកំណត់ព្រឹត្តិការណ៍", + "basics": "ការកំណត់ព្រឹត្តិការណ៍", "availability_not_found_in_schedule_error": "មិនមានភាពទំនេរដែលបានរកឃើញនៅក្នុងកាលវិភាគ", "event_limit_tab_title": "ដែនកំណត់", "event_limit_tab_description": "ភាពញឹកញាប់ដែលអ្នកអាចត្រូវបានកក់", diff --git a/apps/web/public/static/locales/ko/common.json b/apps/web/public/static/locales/ko/common.json index aaf7754a07..5f3a6282fa 100644 --- a/apps/web/public/static/locales/ko/common.json +++ b/apps/web/public/static/locales/ko/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "캘린더는 <1>여기에서 연결할 수 있습니다.", "default_calendar_selected": "기본 캘린더", "hide_from_profile": "프로필에서 숨기기", - "event_setup_tab_title": "이벤트 설정", + "basics": "이벤트 설정", "availability_not_found_in_schedule_error": "일정에서 사용 가능 시간을 찾을 수 없습니다", "event_limit_tab_title": "한도", "event_limit_tab_description": "예약 가능 횟수", diff --git a/apps/web/public/static/locales/nl/common.json b/apps/web/public/static/locales/nl/common.json index 04284dc0d9..97536e15a2 100644 --- a/apps/web/public/static/locales/nl/common.json +++ b/apps/web/public/static/locales/nl/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "U kunt uw agenda koppelen vanaf <1>hier.", "default_calendar_selected": "Standaardagenda", "hide_from_profile": "In profiel verbergen", - "event_setup_tab_title": "Configuratie gebeurtenis", + "basics": "Configuratie gebeurtenis", "availability_not_found_in_schedule_error": "Geen beschikbaarheid gevonden in het schema", "event_limit_tab_title": "Grenswaarden", "event_limit_tab_description": "Hoe vaak u geboekt kunt worden", diff --git a/apps/web/public/static/locales/no/common.json b/apps/web/public/static/locales/no/common.json index 11f2a6f3a2..cff60a3df6 100644 --- a/apps/web/public/static/locales/no/common.json +++ b/apps/web/public/static/locales/no/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Du kan koble til kalenderen din <1>her.", "default_calendar_selected": "Standard kalender", "hide_from_profile": "Skjul fra profilen", - "event_setup_tab_title": "Hendelsesoppsett", + "basics": "Hendelsesoppsett", "availability_not_found_in_schedule_error": "Ingen tilgjengelighet funnet i timeplanen", "event_limit_tab_title": "Grenser", "event_limit_tab_description": "Hvor ofte du kan bookes", diff --git a/apps/web/public/static/locales/pl/common.json b/apps/web/public/static/locales/pl/common.json index d526e4e6b8..a875c61af7 100644 --- a/apps/web/public/static/locales/pl/common.json +++ b/apps/web/public/static/locales/pl/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Możesz podłączyć swój kalendarz <1>tutaj.", "default_calendar_selected": "Domyślny kalendarz", "hide_from_profile": "Ukryj w profilu", - "event_setup_tab_title": "Konfiguracja wydarzenia", + "basics": "Konfiguracja wydarzenia", "availability_not_found_in_schedule_error": "Brak dostępności w harmonogramie", "event_limit_tab_title": "Limity", "event_limit_tab_description": "Jak często można rezerwować Twoje usługi", diff --git a/apps/web/public/static/locales/pt-BR/common.json b/apps/web/public/static/locales/pt-BR/common.json index 362aa1edac..2c10505b85 100644 --- a/apps/web/public/static/locales/pt-BR/common.json +++ b/apps/web/public/static/locales/pt-BR/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Você pode conectar seu calendário por <1>aqui.", "default_calendar_selected": "Calendário padrão", "hide_from_profile": "Ocultar do perfil", - "event_setup_tab_title": "Configuração de eventos", + "basics": "Configuração de eventos", "availability_not_found_in_schedule_error": "Nenhuma disponibilidade encontrada na programação", "event_limit_tab_title": "Limites", "event_limit_tab_description": "Com que frequência você pode receber reserva", diff --git a/apps/web/public/static/locales/pt/common.json b/apps/web/public/static/locales/pt/common.json index 1c028ad29f..372260e07c 100644 --- a/apps/web/public/static/locales/pt/common.json +++ b/apps/web/public/static/locales/pt/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Pode associar ao seu calendário a partir de <1>aqui.", "default_calendar_selected": "Calendário predefinido", "hide_from_profile": "Ocultar do perfil", - "event_setup_tab_title": "Configuração do evento", + "basics": "Configuração do evento", "availability_not_found_in_schedule_error": "Não foi encontrada nenhuma disponibilidade na agenda", "event_limit_tab_title": "Limites", "event_limit_tab_description": "Com que frequência pode ser reservado", diff --git a/apps/web/public/static/locales/ro/common.json b/apps/web/public/static/locales/ro/common.json index 8b33d7c0b0..deeb58e802 100644 --- a/apps/web/public/static/locales/ro/common.json +++ b/apps/web/public/static/locales/ro/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Vă puteți conecta calendarul de <1>aici.", "default_calendar_selected": "Calendar implicit", "hide_from_profile": "Ascundeți din profil", - "event_setup_tab_title": "Configurare eveniment", + "basics": "Configurare eveniment", "availability_not_found_in_schedule_error": "Nu s-a găsit disponibilitate în program", "event_limit_tab_title": "Limite", "event_limit_tab_description": "Cât de des puteți fi rezervat", diff --git a/apps/web/public/static/locales/ru/common.json b/apps/web/public/static/locales/ru/common.json index 4851344ec1..6253e48eb6 100644 --- a/apps/web/public/static/locales/ru/common.json +++ b/apps/web/public/static/locales/ru/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Можно подключить календарь <1>отсюда.", "default_calendar_selected": "Календарь по умолчанию", "hide_from_profile": "Скрыть в профиле", - "event_setup_tab_title": "Настройка события", + "basics": "Настройка события", "availability_not_found_in_schedule_error": "Доступность не найдена в расписании", "event_limit_tab_title": "Лимиты", "event_limit_tab_description": "Как часто можно забронировать для вас событие", diff --git a/apps/web/public/static/locales/sk-SK/common.json b/apps/web/public/static/locales/sk-SK/common.json index a22e64e660..2578e158e9 100644 --- a/apps/web/public/static/locales/sk-SK/common.json +++ b/apps/web/public/static/locales/sk-SK/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Môžete pripojiť svoj kalendár z <1>tu.", "default_calendar_selected": "Predvolený kalendár", "hide_from_profile": "Skryť z profilu", - "event_setup_tab_title": "Nastavenie udalosti", + "basics": "Nastavenie udalosti", "availability_not_found_in_schedule_error": "V rozvrhu nebola nájdená dostupnosť", "event_limit_tab_title": "Limity", "event_limit_tab_description": "Ako často môžete byť rezervovaní", diff --git a/apps/web/public/static/locales/sr/common.json b/apps/web/public/static/locales/sr/common.json index e8b820d019..b320ad7d90 100644 --- a/apps/web/public/static/locales/sr/common.json +++ b/apps/web/public/static/locales/sr/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Ne možete da povežete svoj kalendar <1>odavde.", "default_calendar_selected": "Podrazumevani kalendar", "hide_from_profile": "Sakrij sa profila", - "event_setup_tab_title": "Podešavanje događaja", + "basics": "Podešavanje događaja", "availability_not_found_in_schedule_error": "Nema dostupnosti u rasporedu", "event_limit_tab_title": "Granice", "event_limit_tab_description": "Koliko često možete da budete rezervisani", diff --git a/apps/web/public/static/locales/sv/common.json b/apps/web/public/static/locales/sv/common.json index ed64d2e64b..e4e2392e36 100644 --- a/apps/web/public/static/locales/sv/common.json +++ b/apps/web/public/static/locales/sv/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Du kan ansluta din kalender från <1>här.", "default_calendar_selected": "Förvald kalender", "hide_from_profile": "Dölj från profil", - "event_setup_tab_title": "Konfiguration av händelse", + "basics": "Konfiguration av händelse", "availability_not_found_in_schedule_error": "Ingen tillgänglighet hittades i schemat", "event_limit_tab_title": "Gränser", "event_limit_tab_description": "Hur ofta du kan bokas", diff --git a/apps/web/public/static/locales/tr/common.json b/apps/web/public/static/locales/tr/common.json index 06a25c9250..b3934313da 100644 --- a/apps/web/public/static/locales/tr/common.json +++ b/apps/web/public/static/locales/tr/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Takviminizi <1>buradan bağlayabilirsiniz.", "default_calendar_selected": "Varsayılan takvim", "hide_from_profile": "Profilde gizle", - "event_setup_tab_title": "Etkinlik Kurulumu", + "basics": "Etkinlik Kurulumu", "availability_not_found_in_schedule_error": "Programda uygunluk bulunamadı", "event_limit_tab_title": "Limitler", "event_limit_tab_description": "Ne sıklıkla rezervasyon yapabilirsiniz", diff --git a/apps/web/public/static/locales/uk/common.json b/apps/web/public/static/locales/uk/common.json index a1c9547b49..0dee1f4aec 100644 --- a/apps/web/public/static/locales/uk/common.json +++ b/apps/web/public/static/locales/uk/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Підключити календар можна <1>звідси.", "default_calendar_selected": "Календар за замовчуванням", "hide_from_profile": "Не показувати в профілі", - "event_setup_tab_title": "Налаштування заходу", + "basics": "Налаштування заходу", "availability_not_found_in_schedule_error": "Доступність у розкладі не знайдена", "event_limit_tab_title": "Ліміти", "event_limit_tab_description": "Як часто ваш час можуть бронювати", diff --git a/apps/web/public/static/locales/vi/common.json b/apps/web/public/static/locales/vi/common.json index 389ada762a..efd5ae840b 100644 --- a/apps/web/public/static/locales/vi/common.json +++ b/apps/web/public/static/locales/vi/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "Bạn có thể kết nối lịch của mình từ <1>đây.", "default_calendar_selected": "Lịch mặc định", "hide_from_profile": "Ẩn khỏi hồ sơ", - "event_setup_tab_title": "Thiết lập sự kiện", + "basics": "Thiết lập sự kiện", "availability_not_found_in_schedule_error": "Không tìm thấy thời gian khả dụng trong lịch trình", "event_limit_tab_title": "Giới hạn", "event_limit_tab_description": "Bạn có thể được đặt lịch bao lần", diff --git a/apps/web/public/static/locales/zh-CN/common.json b/apps/web/public/static/locales/zh-CN/common.json index d7bbd7c437..963ff49cc1 100644 --- a/apps/web/public/static/locales/zh-CN/common.json +++ b/apps/web/public/static/locales/zh-CN/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "您可以从<1>这里连接您的日历。", "default_calendar_selected": "默认日历", "hide_from_profile": "从个人资料中隐藏", - "event_setup_tab_title": "活动设置", + "basics": "活动设置", "availability_not_found_in_schedule_error": "时间表中没有可供安排的时间", "event_limit_tab_title": "限制", "event_limit_tab_description": "您多久可被预约一次", diff --git a/apps/web/public/static/locales/zh-TW/common.json b/apps/web/public/static/locales/zh-TW/common.json index cc852fa632..19234fc24d 100644 --- a/apps/web/public/static/locales/zh-TW/common.json +++ b/apps/web/public/static/locales/zh-TW/common.json @@ -1489,7 +1489,7 @@ "connect_your_calendar_and_link": "您可以從<1>這裡連結行事曆。", "default_calendar_selected": "預設行事曆", "hide_from_profile": "從個人資料隱藏", - "event_setup_tab_title": "活動設定", + "basics": "活動設定", "availability_not_found_in_schedule_error": "在日程中找不到可用時間", "event_limit_tab_title": "限制", "event_limit_tab_description": "您的可預約頻率", diff --git a/packages/features/eventtypes/components/CreateEventTypeForm.tsx b/packages/features/eventtypes/components/CreateEventTypeForm.tsx index c17c7a8482..01070f280a 100644 --- a/packages/features/eventtypes/components/CreateEventTypeForm.tsx +++ b/packages/features/eventtypes/components/CreateEventTypeForm.tsx @@ -64,11 +64,9 @@ export default function CreateEventTypeForm({ required addOnLeading={ !isPlatform ? ( - - - {`/${!isManagedEventType ? pageSlug : t("username_placeholder")}/`} - - + + {`/${!isManagedEventType ? pageSlug : t("username_placeholder")}/`} + ) : undefined } containerClassName="[&>div]:gap-0" @@ -115,6 +113,7 @@ export default function CreateEventTypeForm({ ) : ( md.render(form.getValues("description") || "")} setText={(value: string) => form.setValue("description", turndown(value))} excludedToolbarItems={["blockType", "link"]} @@ -145,7 +144,7 @@ export default function CreateEventTypeForm({ message: t("duration_max_error", { max: MAX_EVENT_DURATION_MINUTES }), }, })} - addOnSuffix={t("minutes")} + addOnSuffix={t("minutes").toLowerCase()} />
diff --git a/packages/features/eventtypes/components/tabs/advanced/CustomEventTypeModal.tsx b/packages/features/eventtypes/components/tabs/advanced/CustomEventTypeModal.tsx index 1557f01406..bcc382e045 100644 --- a/packages/features/eventtypes/components/tabs/advanced/CustomEventTypeModal.tsx +++ b/packages/features/eventtypes/components/tabs/advanced/CustomEventTypeModal.tsx @@ -116,19 +116,19 @@ const CustomEventTypeModalForm: FC = (props) => { )}>

{`{Event type title}`}

{t("event_name_info")} @@ -136,19 +136,19 @@ const CustomEventTypeModalForm: FC = (props) => {

{`{Event duration}`}

{t("event_duration_info")} @@ -156,19 +156,19 @@ const CustomEventTypeModalForm: FC = (props) => {

{`{Organiser}`}

{t("your_full_name")} @@ -176,19 +176,19 @@ const CustomEventTypeModalForm: FC = (props) => {

{`{Organiser first name}`}

{t("organizer_first_name")} @@ -196,19 +196,19 @@ const CustomEventTypeModalForm: FC = (props) => {

{`{Scheduler}`}

{t("scheduler_full_name")} @@ -216,19 +216,19 @@ const CustomEventTypeModalForm: FC = (props) => {

{`{Scheduler first name}`}

{t("scheduler_first_name")} @@ -237,19 +237,19 @@ const CustomEventTypeModalForm: FC = (props) => { {isNameFieldSplit && (

{`{Scheduler last name}`}

{t("scheduler_last_name")} @@ -258,19 +258,19 @@ const CustomEventTypeModalForm: FC = (props) => { )}

{`{Location}`}

{t("location_info")} @@ -291,19 +291,19 @@ const CustomEventTypeModalForm: FC = (props) => {

{`{${bookingfield}}`}

{event.bookingFields?.[bookingfield]?.toString()} diff --git a/packages/features/eventtypes/components/tabs/advanced/RequiresConfirmationController.tsx b/packages/features/eventtypes/components/tabs/advanced/RequiresConfirmationController.tsx index 0886073e84..444f3f1539 100644 --- a/packages/features/eventtypes/components/tabs/advanced/RequiresConfirmationController.tsx +++ b/packages/features/eventtypes/components/tabs/advanced/RequiresConfirmationController.tsx @@ -234,36 +234,38 @@ export default function RequiresConfirmationController({ id="notice" value="notice" /> - { - // We set should dirty to properly detect when we can submit the form - formMethods.setValue("requiresConfirmationWillBlockSlot", e.target.checked, { - shouldDirty: true, - }); - }} - /> - { - // We set should dirty to properly detect when we can submit the form - formMethods.setValue("requiresConfirmationForFreeEmail", e.target.checked, { - shouldDirty: true, - }); - }} - /> +

+ { + // We set should dirty to properly detect when we can submit the form + formMethods.setValue("requiresConfirmationWillBlockSlot", e.target.checked, { + shouldDirty: true, + }); + }} + /> + { + // We set should dirty to properly detect when we can submit the form + formMethods.setValue("requiresConfirmationForFreeEmail", e.target.checked, { + shouldDirty: true, + }); + }} + /> +
)}
diff --git a/packages/features/form-builder/FormBuilder.tsx b/packages/features/form-builder/FormBuilder.tsx index ea00948594..447c7c43cd 100644 --- a/packages/features/form-builder/FormBuilder.tsx +++ b/packages/features/form-builder/FormBuilder.tsx @@ -24,7 +24,6 @@ import { Input, InputField, Label, - BooleanToggleGroupField, } from "@calcom/ui/components/form"; import { Icon } from "@calcom/ui/components/icon"; import { showToast } from "@calcom/ui/components/toast"; @@ -673,26 +672,33 @@ function FieldEditDialog({ /> )} - { - const isRequired = shouldConsiderRequired - ? shouldConsiderRequired(fieldForm.getValues()) - : value; - return ( - { - onChange(val); - }} - label={t("required")} - /> - ); - }} - /> +
+ { + let isRequired = shouldConsiderRequired + ? shouldConsiderRequired(fieldForm.getValues()) + : value; + //by default question should be required + if (isRequired === undefined) { + isRequired = true; + onChange(isRequired); + } + return ( + { + onChange(e.target.checked); + }} + description={t("make_field_required")} + /> + ); + }} + /> +
); } @@ -880,10 +886,12 @@ function VariantFields({ label={t("identifier")} /> - +
+ +
    - { - return ( - { - onChange(val); - }} - label={t("required")} - /> - ); - }} - /> +
    + { + return ( + { + onChange(e.target.checked); + }} + description={t("make_field_required")} + /> + ); + }} + /> +
    ); })} diff --git a/packages/features/form-builder/testUtils.ts b/packages/features/form-builder/testUtils.ts index 217f94a650..e54e60a901 100644 --- a/packages/features/form-builder/testUtils.ts +++ b/packages/features/form-builder/testUtils.ts @@ -97,15 +97,20 @@ export const pageObject = { }, dialog: { isFieldShowingAsRequired: ({ dialog }: { dialog: TestingLibraryElement }) => { - return ( - within(dialog.getByTestId("field-required")).getByText("Yes").getAttribute("aria-checked") === "true" - ); + const checkbox = dialog.getByTestId("field-required") as HTMLInputElement; + return checkbox.checked; }, makeFieldOptional: ({ dialog }: { dialog: TestingLibraryElement }) => { - fireEvent.click(within(dialog.getByTestId("field-required")).getByText("No")); + const checkbox = dialog.getByTestId("field-required") as HTMLInputElement; + if (checkbox.checked) { + fireEvent.click(checkbox); + } }, makeFieldRequired: ({ dialog }: { dialog: TestingLibraryElement }) => { - fireEvent.click(within(dialog.getByTestId("field-required")).getByText("Yes")); + const checkbox = dialog.getByTestId("field-required") as HTMLInputElement; + if (!checkbox.checked) { + fireEvent.click(checkbox); + } }, queryIdentifierInput: ({ dialog }: { dialog: TestingLibraryElement }) => { return dialog.getByLabelText("identifier"); @@ -249,10 +254,8 @@ export const expectScenario = { expect(identifierInput.disabled).toBe(true); }, toHaveRequirablityToggleDisabled: ({ dialog }: { dialog: TestingLibraryElement }) => { - const no = within(dialog.getByTestId("field-required")).getByText("No") as HTMLButtonElement; - const yes = within(dialog.getByTestId("field-required")).getByText("Yes") as HTMLButtonElement; - expect(no.disabled).toBe(true); - expect(yes.disabled).toBe(true); + const checkbox = dialog.getByTestId("field-required") as HTMLInputElement; + expect(checkbox.disabled).toBe(true); }, toHaveLabelChangeAllowed: ({ dialog }: { dialog: TestingLibraryElement }) => { const labelInput = dialog.getByLabelText("label"); @@ -268,6 +271,10 @@ export const expectScenario = { const field = getFieldInTheList({ identifier }); expect(field.getByText(sourceLabel)).not.toBeNull(); }, + toNotHaveOptionalBadge: ({ identifier }: { identifier: string }) => { + const field = getFieldInTheList({ identifier }); + expect(field.queryByTestId("optional")).toBeNull(); + }, toHaveRequiredBadge: ({ identifier }: { identifier: string }) => { const field = getFieldInTheList({ identifier }); expect(field.getByText("required")).not.toBeNull(); diff --git a/packages/platform/atoms/event-types/hooks/usePlatformTabsNavigations.tsx b/packages/platform/atoms/event-types/hooks/usePlatformTabsNavigations.tsx index 9179a797dc..28498d022a 100644 --- a/packages/platform/atoms/event-types/hooks/usePlatformTabsNavigations.tsx +++ b/packages/platform/atoms/event-types/hooks/usePlatformTabsNavigations.tsx @@ -149,13 +149,13 @@ function getNavigation({ length, multipleDuration, t, tabs, url, onClick, curren const tabsNavigation: VerticalTabItemProps[] = []; tabs.includes("setup") && tabsNavigation.push({ - name: t("event_setup_tab_title"), + name: t("basics"), onClick: () => onClick("setup"), isActive: currentTab === "setup", href: `${url}?tabName=setup`, icon: "link", info: `${duration} ${t("minute_timeUnit")}`, // TODO: Get this from props - "data-testid": `event_setup_tab_title`, + "data-testid": `basics`, }); tabs.includes("limits") && tabsNavigation.push({ diff --git a/packages/platform/atoms/event-types/hooks/useTabsNavigations.tsx b/packages/platform/atoms/event-types/hooks/useTabsNavigations.tsx index 1b3941adcc..8ed05ccf1f 100644 --- a/packages/platform/atoms/event-types/hooks/useTabsNavigations.tsx +++ b/packages/platform/atoms/event-types/hooks/useTabsNavigations.tsx @@ -195,11 +195,11 @@ function getNavigation({ return [ { - name: t("event_setup_tab_title"), + name: t("basics"), href: `/event-types/${id}?tabName=setup`, icon: "link", info: `${duration} ${t("minute_timeUnit")}`, // TODO: Get this from props - "data-testid": `event_setup_tab_title`, + "data-testid": `basics`, }, { name: t("event_limit_tab_title"), diff --git a/packages/ui/components/editor/Editor.tsx b/packages/ui/components/editor/Editor.tsx index 474f3325b2..8d1906bde6 100644 --- a/packages/ui/components/editor/Editor.tsx +++ b/packages/ui/components/editor/Editor.tsx @@ -61,8 +61,9 @@ export const Editor = (props: TextEditorProps) => { const plainText = props.plainText ?? false; return (
    + {props.label && } -
    +
    { } diff --git a/packages/ui/components/editor/types.ts b/packages/ui/components/editor/types.ts index 8c08c560a4..27b5c22cfb 100644 --- a/packages/ui/components/editor/types.ts +++ b/packages/ui/components/editor/types.ts @@ -15,4 +15,5 @@ export type TextEditorProps = { setFirstRender?: Dispatch>; editable?: boolean; plainText?: boolean; + label?: string; }; diff --git a/packages/ui/components/form/switch/Switch.tsx b/packages/ui/components/form/switch/Switch.tsx index a5ce071211..89d04d8c95 100644 --- a/packages/ui/components/form/switch/Switch.tsx +++ b/packages/ui/components/form/switch/Switch.tsx @@ -75,8 +75,8 @@ export const Switch = (