From d18e23378b699e734e9dbbdf93225b02a9059ff4 Mon Sep 17 00:00:00 2001 From: Lauris Skraucis Date: Fri, 8 Aug 2025 10:25:53 +0200 Subject: [PATCH] feat: toggle round robin org and team info in booker (#22956) * feat: toggle round robin booker org and team * chore: add changeset * dont hide in dev --- .changeset/shaggy-goats-flash.md | 5 +++++ docs/platform/atoms/booker.mdx | 1 + packages/features/bookings/Booker/Booker.tsx | 4 +++- packages/features/bookings/Booker/components/EventMeta.tsx | 3 +++ packages/features/bookings/Booker/types.ts | 2 ++ .../features/bookings/components/event-meta/Members.tsx | 6 ++++++ packages/platform/atoms/booker/BookerPlatformWrapper.tsx | 1 + packages/platform/atoms/booker/types.ts | 1 + packages/platform/examples/base/src/pages/booking.tsx | 1 + 9 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 .changeset/shaggy-goats-flash.md diff --git a/.changeset/shaggy-goats-flash.md b/.changeset/shaggy-goats-flash.md new file mode 100644 index 0000000000..329a06e23f --- /dev/null +++ b/.changeset/shaggy-goats-flash.md @@ -0,0 +1,5 @@ +--- +"@calcom/atoms": minor +--- + +booker atom: allow toggling org and team info when booking round robin diff --git a/docs/platform/atoms/booker.mdx b/docs/platform/atoms/booker.mdx index 0a980ec1bf..e6a2e52bd9 100644 --- a/docs/platform/atoms/booker.mdx +++ b/docs/platform/atoms/booker.mdx @@ -126,6 +126,7 @@ Below is a list of props that can be passed to the booker atom. | confirmButtonDisabled | No | Boolean indicating if the submit button should be disabled, defaults to false. | | timeZones | No | Array of valid IANA timezones to be used in the booker. Eg. ["Asia/Kolkata", "Europe/London"] | | onTimeslotsLoaded | No | Callback function triggered once the available timeslots have been fetched. | +| roundRobinHideOrgAndTeam | No | Boolean indicating if the organization and team should be hidden in the booker atom sidebar for round robin scheduling type, defaults to false. | ## Styling diff --git a/packages/features/bookings/Booker/Booker.tsx b/packages/features/bookings/Booker/Booker.tsx index 57580fa757..1c6e4e1660 100644 --- a/packages/features/bookings/Booker/Booker.tsx +++ b/packages/features/bookings/Booker/Booker.tsx @@ -80,6 +80,7 @@ const BookerComponent = ({ confirmButtonDisabled, timeZones, eventMetaChildren, + roundRobinHideOrgAndTeam, }: BookerProps & WrappedBookerProps) => { const searchParams = useCompatSearchParams(); const isPlatformBookerEmbed = useIsPlatformBookerEmbed(); @@ -403,7 +404,8 @@ const BookerComponent = ({ isPlatform={isPlatform} isPrivateLink={!!hashedLink} locale={userLocale} - timeZones={timeZones}> + timeZones={timeZones} + roundRobinHideOrgAndTeam={roundRobinHideOrgAndTeam}> {eventMetaChildren} {layout !== BookerLayouts.MONTH_VIEW && diff --git a/packages/features/bookings/Booker/components/EventMeta.tsx b/packages/features/bookings/Booker/components/EventMeta.tsx index 3231274aae..c5584653c0 100644 --- a/packages/features/bookings/Booker/components/EventMeta.tsx +++ b/packages/features/bookings/Booker/components/EventMeta.tsx @@ -54,6 +54,7 @@ export const EventMeta = ({ locale, timeZones, children, + roundRobinHideOrgAndTeam, }: { event?: Pick< BookerEvent, @@ -90,6 +91,7 @@ export const EventMeta = ({ locale?: string | null; timeZones?: Timezone[]; children?: React.ReactNode; + roundRobinHideOrgAndTeam?: boolean; }) => { const { timeFormat, timezone } = useBookerTime(); const [setTimezone] = useTimePreferences((state) => [state.setTimezone]); @@ -167,6 +169,7 @@ export const EventMeta = ({ profile={event.profile} entity={event.entity} isPrivateLink={isPrivateLink} + roundRobinHideOrgAndTeam={roundRobinHideOrgAndTeam} /> {translatedTitle ?? event?.title} diff --git a/packages/features/bookings/Booker/types.ts b/packages/features/bookings/Booker/types.ts index bd02590159..45748a8138 100644 --- a/packages/features/bookings/Booker/types.ts +++ b/packages/features/bookings/Booker/types.ts @@ -140,11 +140,13 @@ export type WrappedBookerPropsForPlatform = WrappedBookerPropsMain & { verifyCode: undefined; customClassNames?: CustomClassNames; timeZones?: Timezone[]; + roundRobinHideOrgAndTeam?: boolean; }; export type WrappedBookerPropsForWeb = WrappedBookerPropsMain & { isPlatform: false; verifyCode: UseVerifyCodeReturnType; timeZones?: Timezone[]; + roundRobinHideOrgAndTeam?: boolean; }; export type WrappedBookerProps = WrappedBookerPropsForPlatform | WrappedBookerPropsForWeb; diff --git a/packages/features/bookings/components/event-meta/Members.tsx b/packages/features/bookings/components/event-meta/Members.tsx index e71260af50..cf001f4d2b 100644 --- a/packages/features/bookings/components/event-meta/Members.tsx +++ b/packages/features/bookings/components/event-meta/Members.tsx @@ -18,6 +18,7 @@ export interface EventMembersProps { profile: BookerEvent["profile"]; entity: BookerEvent["entity"]; isPrivateLink: boolean; + roundRobinHideOrgAndTeam?: boolean; } export const EventMembers = ({ @@ -26,6 +27,7 @@ export const EventMembers = ({ profile, entity, isPrivateLink, + roundRobinHideOrgAndTeam, }: EventMembersProps) => { const username = useBookerStore((state) => state.username); const isDynamic = !!(username && username.indexOf("+") > -1); @@ -40,6 +42,10 @@ export const EventMembers = ({ !users.length || (profile.name !== users[0].name && schedulingType === SchedulingType.COLLECTIVE); + if (schedulingType === SchedulingType.ROUND_ROBIN && roundRobinHideOrgAndTeam) { + return
; + } + const orgOrTeamAvatarItem = isDynamic || (!profile.image && !entity.logoUrl) || !entity.teamSlug ? [] diff --git a/packages/platform/atoms/booker/BookerPlatformWrapper.tsx b/packages/platform/atoms/booker/BookerPlatformWrapper.tsx index 9de9a0d025..84ee9e2fa0 100644 --- a/packages/platform/atoms/booker/BookerPlatformWrapper.tsx +++ b/packages/platform/atoms/booker/BookerPlatformWrapper.tsx @@ -549,6 +549,7 @@ export const BookerPlatformWrapper = ( hasValidLicense={true} isBookingDryRun={isBookingDryRun ?? routingParams?.isBookingDryRun} eventMetaChildren={props.eventMetaChildren} + roundRobinHideOrgAndTeam={props.roundRobinHideOrgAndTeam} /> ); diff --git a/packages/platform/atoms/booker/types.ts b/packages/platform/atoms/booker/types.ts index e10542fd89..44bab500a4 100644 --- a/packages/platform/atoms/booker/types.ts +++ b/packages/platform/atoms/booker/types.ts @@ -84,6 +84,7 @@ export type BookerPlatformWrapperAtomProps = Omit< eventMetaChildren?: React.ReactNode; onTimeslotsLoaded?: (slots: Record) => void; startTime?: string | Date; + roundRobinHideOrgAndTeam?: boolean; }; type VIEW_TYPE = keyof typeof BookerLayouts; diff --git a/packages/platform/examples/base/src/pages/booking.tsx b/packages/platform/examples/base/src/pages/booking.tsx index c6152e45f9..93ac6a7fb4 100644 --- a/packages/platform/examples/base/src/pages/booking.tsx +++ b/packages/platform/examples/base/src/pages/booking.tsx @@ -93,6 +93,7 @@ export default function Bookings(props: { calUsername: string; calEmail: string {