Skip to content

Commit c4ac1b7

Browse files
authored
Merge branch 'main' into refactor/lib-to-features
2 parents 3f8d352 + 3b471f0 commit c4ac1b7

10 files changed

Lines changed: 88 additions & 68 deletions

File tree

apps/api/v2/src/modules/organizations/event-types/organizations-event-types.e2e-spec.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,13 @@ describe("Organizations Event Types Endpoints", () => {
178178
accepted: true,
179179
});
180180

181+
await membershipsRepositoryFixture.create({
182+
role: "ADMIN",
183+
user: { connect: { id: userAdmin.id } },
184+
team: { connect: { id: team.id } },
185+
accepted: true,
186+
});
187+
181188
await membershipsRepositoryFixture.create({
182189
role: "MEMBER",
183190
user: { connect: { id: teammate1.id } },
@@ -901,7 +908,7 @@ describe("Organizations Event Types Endpoints", () => {
901908
expect(responseBody.status).toEqual(SUCCESS_STATUS);
902909

903910
const data = responseBody.data;
904-
expect(data.length).toEqual(3);
911+
expect(data.length).toEqual(4);
905912

906913
const teammate1EventTypes = await eventTypesRepositoryFixture.getAllUserEventTypes(teammate1.id);
907914
const teammate2EventTypes = await eventTypesRepositoryFixture.getAllUserEventTypes(teammate2.id);

apps/web/components/apps/installation/ConfigureStepCard.tsx

Lines changed: 62 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { useFieldArray, useFormContext } from "react-hook-form";
77
import { useForm } from "react-hook-form";
88
import { z } from "zod";
99

10+
import NoSSR from "@calcom/lib/components/NoSSR";
1011
import { locationsResolver } from "@calcom/lib/event-types/utils/locationsResolver";
1112
import { useLocale } from "@calcom/lib/hooks/useLocale";
1213
import type { LocationObject } from "@calcom/app-store/locations";
@@ -188,7 +189,7 @@ const EventTypeGroup = ({
188189
);
189190
};
190191

191-
export const ConfigureStepCard: FC<ConfigureStepCardProps> = (props) => {
192+
const ConfigureStepCardContent: FC<ConfigureStepCardProps> = (props) => {
192193
const { loading, formPortalRef, handleSetUpLater } = props;
193194
const { t } = useLocale();
194195
const { control, watch } = useFormContext<TEventTypesForm>();
@@ -221,60 +222,69 @@ export const ConfigureStepCard: FC<ConfigureStepCardProps> = (props) => {
221222
}
222223
}, [submit, allUpdated, mainForSubmitRef]);
223224

224-
return (
225-
formPortalRef?.current &&
226-
createPortal(
227-
<div className="mt-8">
228-
{fields.map((group, groupIndex) => (
229-
<div key={group.fieldId}>
230-
{eventTypeGroups[groupIndex].eventTypes.some((eventType) => eventType.selected === true) && (
231-
<div className="mb-2 mt-4 flex items-center">
232-
<Avatar
233-
alt=""
234-
imageSrc={group.image} // if no image, use default avatar
235-
size="md"
236-
className="inline-flex justify-center"
237-
/>
238-
<p className="text-subtle block pl-2">{group.slug}</p>
239-
</div>
240-
)}
241-
<EventTypeGroup
242-
groupIndex={groupIndex}
243-
setUpdatedEventTypesStatus={setUpdatedEventTypesStatus}
244-
submitRefs={submitRefs}
245-
{...props}
246-
/>
247-
</div>
248-
))}
249-
<button form="outer-event-type-form" type="submit" className="hidden" ref={mainForSubmitRef}>
250-
Save
251-
</button>
225+
if (!formPortalRef?.current) {
226+
return null;
227+
}
228+
229+
return createPortal(
230+
<div className="mt-8">
231+
{fields.map((group, groupIndex) => (
232+
<div key={group.fieldId}>
233+
{eventTypeGroups[groupIndex].eventTypes.some((eventType) => eventType.selected === true) && (
234+
<div className="mb-2 mt-4 flex items-center">
235+
<Avatar
236+
alt=""
237+
imageSrc={group.image} // if no image, use default avatar
238+
size="md"
239+
className="inline-flex justify-center"
240+
/>
241+
<p className="text-subtle block pl-2">{group.slug}</p>
242+
</div>
243+
)}
244+
<EventTypeGroup
245+
groupIndex={groupIndex}
246+
setUpdatedEventTypesStatus={setUpdatedEventTypesStatus}
247+
submitRefs={submitRefs}
248+
{...props}
249+
/>
250+
</div>
251+
))}
252+
<button form="outer-event-type-form" type="submit" className="hidden" ref={mainForSubmitRef}>
253+
Save
254+
</button>
255+
<Button
256+
className="text-md mt-6 w-full justify-center"
257+
type="button"
258+
data-testid="configure-step-save"
259+
onClick={() => {
260+
submitRefs.current.forEach((ref) => ref?.click());
261+
setSubmit(true);
262+
}}
263+
loading={loading}>
264+
{t("save")}
265+
</Button>
266+
267+
<div className="flex w-full flex-row justify-center">
252268
<Button
253-
className="text-md mt-6 w-full justify-center"
254-
type="button"
255-
data-testid="configure-step-save"
256-
onClick={() => {
257-
submitRefs.current.forEach((ref) => ref?.click());
258-
setSubmit(true);
269+
color="minimal"
270+
data-testid="set-up-later"
271+
onClick={(event) => {
272+
event.preventDefault();
273+
handleSetUpLater();
259274
}}
260-
loading={loading}>
261-
{t("save")}
275+
className="mt-8 cursor-pointer px-4 py-2 font-sans text-sm font-medium">
276+
{t("set_up_later")}
262277
</Button>
278+
</div>
279+
</div>,
280+
formPortalRef.current
281+
);
282+
};
263283

264-
<div className="flex w-full flex-row justify-center">
265-
<Button
266-
color="minimal"
267-
data-testid="set-up-later"
268-
onClick={(event) => {
269-
event.preventDefault();
270-
handleSetUpLater();
271-
}}
272-
className="mt-8 cursor-pointer px-4 py-2 font-sans text-sm font-medium">
273-
{t("set_up_later")}
274-
</Button>
275-
</div>
276-
</div>,
277-
formPortalRef?.current
278-
)
284+
export const ConfigureStepCard: FC<ConfigureStepCardProps> = (props) => {
285+
return (
286+
<NoSSR>
287+
<ConfigureStepCardContent {...props} />
288+
</NoSSR>
279289
);
280290
};

apps/web/components/booking/BookingListItem.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ function BookingListItem(booking: BookingItemProps) {
164164
showToast(t("booking_confirmation_success"), "success");
165165
}
166166
utils.viewer.bookings.invalidate();
167+
utils.viewer.me.bookingUnconfirmedCount.invalidate();
167168
},
168169
onError: () => {
169170
showToast(t("booking_confirmation_failed"), "error");

apps/web/playwright/fixtures/apps.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ export function createAppsFixture(page: Page) {
111111
},
112112
goToEventType: async (eventType: string) => {
113113
await page.getByRole("link", { name: eventType }).click();
114+
// fix the race condition
115+
await page.waitForSelector('[data-testid="event-title"]');
116+
await expect(page.getByTestId("vertical-tab-basics")).toHaveAttribute("aria-current", "page");
114117
},
115118
goToAppsTab: async () => {
116119
await page.getByTestId("vertical-tab-apps").click();

apps/web/playwright/fixtures/users.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,10 @@ export const createUsersFixture = (
584584
get: () => store.users,
585585
logout: async () => {
586586
await page.goto("/auth/logout");
587+
const logoutBtn = page.getByTestId("logout-btn");
588+
await expect(logoutBtn).toHaveText("Go back to the login page");
589+
await page.reload();
590+
await expect(logoutBtn).toHaveText("Go back to the login page");
587591
},
588592
deleteAll: async () => {
589593
const ids = store.users.map((u) => u.id);

apps/web/playwright/workflow.e2e.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ test.describe("Workflow Tab - Event Type", () => {
1515
test("Creating a new workflow", async ({ workflowPage }) => {
1616
const { createWorkflow, assertListCount } = workflowPage;
1717

18-
await createWorkflow({ name: "" });
18+
await createWorkflow({ name: "test workflow" });
1919
await assertListCount(3);
2020
});
2121

packages/app-store/stripepayment/api/subscription.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { NextApiRequest, NextApiResponse } from "next";
22
import type Stripe from "stripe";
33

44
import { getPremiumMonthlyPlanPriceId } from "@calcom/app-store/stripepayment/lib/utils";
5+
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
56
import { checkPremiumUsername } from "@calcom/features/ee/common/lib/checkPremiumUsername";
67
import { WEBAPP_URL } from "@calcom/lib/constants";
78
import prisma from "@calcom/prisma";
@@ -12,11 +13,12 @@ import stripe from "../lib/server";
1213

1314
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
1415
if (req.method === "GET") {
15-
const userId = req.session?.user.id;
16+
const session = await getServerSession({ req });
17+
const userId = session?.user?.id;
1618
let { intentUsername = null } = req.query;
1719
const { callbackUrl } = req.query;
1820
if (!userId || !intentUsername) {
19-
res.status(404).end();
21+
res.status(404).json({ message: "Missing required parameters: userId or intentUsername" });
2022
return;
2123
}
2224
if (intentUsername && typeof intentUsername === "object") {

packages/features/bookings/lib/get-booking.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import type { z } from "zod";
2-
31
import { bookingResponsesDbSchema } from "@calcom/features/bookings/lib/getBookingResponsesSchema";
42
import slugify from "@calcom/lib/slugify";
53
import type { PrismaClient } from "@calcom/prisma";
@@ -115,10 +113,8 @@ export const getBookingWithResponses = <
115113
) => {
116114
return {
117115
...booking,
118-
responses: isSeatedEvent
119-
? bookingResponsesDbSchema.parse(booking.responses || {})
120-
: bookingResponsesDbSchema.parse(booking.responses || getResponsesFromOldBooking(booking)),
121-
} as Omit<T, "responses"> & { responses: z.infer<typeof bookingResponsesDbSchema> };
116+
responses: isSeatedEvent ? booking.responses : booking.responses || getResponsesFromOldBooking(booking),
117+
} as Omit<T, "responses"> & { responses: Record<string, any> };
122118
};
123119

124120
export default getBooking;

packages/features/ee/teams/components/AddNewTeamMembers.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ export const AddNewTeamMembersForm = ({ teamId, isOrg }: { teamId: number; isOrg
113113
/>
114114
))}
115115
</ul>
116-
{totalFetched && (
116+
{totalFetched > 0 && (
117117
<div className="text-default text-center">
118118
<Button
119119
color="minimal"

packages/lib/getBooking.tsx

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
import type { z } from "zod";
2-
3-
import { bookingResponsesDbSchema } from "@calcom/features/bookings/lib/getBookingResponsesSchema";
41
import slugify from "@calcom/lib/slugify";
52
import type { PrismaClient } from "@calcom/prisma";
63
import type { Prisma } from "@calcom/prisma/client";
@@ -101,8 +98,8 @@ export const getBookingWithResponses = <
10198
) => {
10299
return {
103100
...booking,
104-
responses: bookingResponsesDbSchema.parse(booking.responses || getResponsesFromOldBooking(booking)),
105-
} as Omit<T, "responses"> & { responses: z.infer<typeof bookingResponsesDbSchema> };
101+
responses: booking.responses || getResponsesFromOldBooking(booking),
102+
} as Omit<T, "responses"> & { responses: Record<string, any> };
106103
};
107104

108105
export default getBooking;

0 commit comments

Comments
 (0)