From 99d4461dcc8f8fbbaf1438c904737eb54ab6bf88 Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Tue, 21 May 2024 18:28:09 +0100 Subject: [PATCH] fix: Add organization logo to org dynamic events (#15082) * fix: Add organization logo to org dynamic events * Slow typescript strikes again --------- Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com> --- .../playwright/dynamic-booking-pages.e2e.ts | 10 +++++++ .../components/event-meta/Members.tsx | 3 +-- .../features/eventtypes/lib/getPublicEvent.ts | 26 +++++++++++++++---- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/apps/web/playwright/dynamic-booking-pages.e2e.ts b/apps/web/playwright/dynamic-booking-pages.e2e.ts index b9680b4f5f..34317257cd 100644 --- a/apps/web/playwright/dynamic-booking-pages.e2e.ts +++ b/apps/web/playwright/dynamic-booking-pages.e2e.ts @@ -91,6 +91,16 @@ test("dynamic booking info prefilled by query params", async ({ page, users }) = activeState = await badgeLocator.getAttribute("data-active"); expect(activeState).toEqual("false"); }); +// eslint-disable-next-line playwright/no-skipped-test +test.skip("it contains the right event details", async ({ page }) => { + const response = await page.goto(`http://acme.cal.local:3000/owner1+member1`); + expect(response?.status()).toBe(200); + + expect(await page.locator('[data-testid="event-title"]').textContent()).toBe("Group Meeting"); + expect(await page.locator('[data-testid="event-meta"]').textContent()).toContain("Acme Inc"); + + expect((await page.locator('[data-testid="event-meta"] [data-testid="avatar"]').all()).length).toBe(3); +}); test.describe("Organization:", () => { test.afterEach(({ orgs, users }) => { diff --git a/packages/features/bookings/components/event-meta/Members.tsx b/packages/features/bookings/components/event-meta/Members.tsx index 0888661946..36dec9c163 100644 --- a/packages/features/bookings/components/event-meta/Members.tsx +++ b/packages/features/bookings/components/event-meta/Members.tsx @@ -24,7 +24,6 @@ export const EventMembers = ({ schedulingType, users, profile, entity }: EventMe const isEmbed = useIsEmbed(); const showMembers = !!schedulingType && schedulingType !== SchedulingType.ROUND_ROBIN; const shownUsers = showMembers ? users : []; - // In some cases we don't show the user's names, but only show the profile name. const showOnlyProfileName = (profile.name && schedulingType === SchedulingType.ROUND_ROBIN) || @@ -37,7 +36,7 @@ export const EventMembers = ({ schedulingType, users, profile, entity }: EventMe size="sm" className="border-muted" items={[ - ...(isDynamic + ...(isDynamic && !profile.image ? [] : [ { diff --git a/packages/features/eventtypes/lib/getPublicEvent.ts b/packages/features/eventtypes/lib/getPublicEvent.ts index f5c4a5ee5f..2c188bb6e2 100644 --- a/packages/features/eventtypes/lib/getPublicEvent.ts +++ b/packages/features/eventtypes/lib/getPublicEvent.ts @@ -14,6 +14,7 @@ import { getBookerBaseUrlSync } from "@calcom/lib/getBookerUrl/client"; import { markdownToSafeHTML } from "@calcom/lib/markdownToSafeHTML"; import { UserRepository } from "@calcom/lib/server/repository/user"; import type { PrismaClient } from "@calcom/prisma"; +import type { Team } from "@calcom/prisma/client"; import type { BookerLayoutSettings } from "@calcom/prisma/zod-utils"; import { BookerLayouts, @@ -165,6 +166,19 @@ export const getPublicEvent = async ( const disableBookingTitle = !defaultEvent.isDynamic; const unPublishedOrgUser = users.find((user) => user.profile?.organization?.slug === null); + let orgDetails: Pick | undefined; + if (org) { + orgDetails = await prisma.team.findFirstOrThrow({ + where: { + slug: org, + }, + select: { + logoUrl: true, + name: true, + }, + }); + } + return { ...defaultEvent, bookingFields: getBookingFieldsWithSystemFields({ ...defaultEvent, disableBookingTitle }), @@ -176,18 +190,20 @@ export const getPublicEvent = async ( })), locations: privacyFilteredLocations(locations), profile: { - username: users[0].username, - name: users[0].name, weekStart: users[0].weekStart, - image: getUserAvatarUrl({ - avatarUrl: users[0].avatarUrl, - }), brandColor: users[0].brandColor, darkBrandColor: users[0].darkBrandColor, theme: null, bookerLayouts: bookerLayoutsSchema.parse( firstUsersMetadata?.defaultBookerLayouts || defaultEventBookerLayouts ), + ...(orgDetails + ? { + image: orgDetails?.logoUrl, + name: orgDetails?.name, + username: org, + } + : {}), }, entity: { considerUnpublished: !fromRedirectOfNonOrgLink && unPublishedOrgUser !== undefined,