fix: duplicate event types (#14007)
* fix: duplicate event types * test: add test for duplicate event type * fix: type error * chore: pass error message --------- Co-authored-by: Erik <erik@erosemberg.com>
This commit is contained in:
@@ -217,7 +217,7 @@ export const EventAdvancedTab = ({ eventType, team }: Pick<EventTypeSetupProps,
|
||||
placeholder={
|
||||
selectedSecondaryEmailId === -1 && (
|
||||
<span className="text-default min-w-0 overflow-hidden truncate whitespace-nowrap">
|
||||
<Badge variant="blue">Default</Badge> {user?.email || ""}
|
||||
<Badge variant="blue">{t("default")}</Badge> {user?.email || ""}
|
||||
</span>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -107,6 +107,10 @@ testBothFutureAndLegacyRoutes.describe("Event Types tests", () => {
|
||||
|
||||
expect(formTitle).toBe(firstTitle);
|
||||
expect(formSlug).toContain(firstSlug);
|
||||
|
||||
const test = await page.getByTestId("continue").click();
|
||||
const toast = await page.waitForSelector('[data-testid="toast-success"]');
|
||||
expect(toast).toBeTruthy();
|
||||
});
|
||||
|
||||
test("edit first event", async ({ page }) => {
|
||||
|
||||
@@ -131,6 +131,7 @@
|
||||
"invitee_timezone": "Invitee Time Zone",
|
||||
"time_left": "Time left",
|
||||
"event_type": "Event Type",
|
||||
"duplicate_event_type":"Duplicate Event Type",
|
||||
"enter_meeting": "Enter Meeting",
|
||||
"video_call_provider": "Video call provider",
|
||||
"meeting_id": "Meeting ID",
|
||||
@@ -2295,4 +2296,4 @@
|
||||
"confirm_email_description": "We sent an email to <strong>{{email}}</strong>. Click the link in the email to verify this address.",
|
||||
"send_event_details_to": "Send event details to",
|
||||
"ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ const DuplicateDialog = () => {
|
||||
<Dialog
|
||||
name="duplicate"
|
||||
clearQueryParamsOnClose={["description", "title", "length", "slug", "name", "id", "pageSlug"]}>
|
||||
<DialogContent type="creation" className="overflow-y-auto" title="Duplicate Event Type">
|
||||
<DialogContent type="creation" className="overflow-y-auto" title={t("duplicate_event_type")}>
|
||||
<Form
|
||||
form={form}
|
||||
handleSubmit={(values) => {
|
||||
@@ -161,7 +161,7 @@ const DuplicateDialog = () => {
|
||||
</div>
|
||||
<DialogFooter showDivider className="mt-10">
|
||||
<DialogClose />
|
||||
<Button type="submit" loading={duplicateMutation.isPending}>
|
||||
<Button data-testid="continue" type="submit" loading={duplicateMutation.isPending}>
|
||||
{t("continue")}
|
||||
</Button>
|
||||
</DialogFooter>
|
||||
|
||||
@@ -86,17 +86,18 @@ export const duplicateHandler = async ({ ctx, input }: DuplicateOptions) => {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore - descriptionAsSafeHTML is added on the fly using a prisma middleware it shouldn't be used to create event type. Such a property doesn't exist on schema
|
||||
descriptionAsSafeHTML: _descriptionAsSafeHTML,
|
||||
secondaryEmailId,
|
||||
...rest
|
||||
} = eventType;
|
||||
|
||||
const data: Prisma.EventTypeUncheckedCreateInput = {
|
||||
const data: Prisma.EventTypeCreateInput = {
|
||||
...rest,
|
||||
title: newEventTitle,
|
||||
slug: newSlug,
|
||||
description: newDescription,
|
||||
length: newLength,
|
||||
locations: locations ?? undefined,
|
||||
teamId: team ? team.id : undefined,
|
||||
team: team ? { connect: { id: team.id } } : undefined,
|
||||
users: users ? { connect: users.map((user) => ({ id: user.id })) } : undefined,
|
||||
recurringEvent: recurringEvent || undefined,
|
||||
bookingLimits: bookingLimits ?? undefined,
|
||||
@@ -105,6 +106,24 @@ export const duplicateHandler = async ({ ctx, input }: DuplicateOptions) => {
|
||||
bookingFields: eventType.bookingFields === null ? Prisma.DbNull : eventType.bookingFields,
|
||||
};
|
||||
|
||||
// Validate the secondary email
|
||||
if (!!secondaryEmailId) {
|
||||
const secondaryEmail = await prisma.secondaryEmail.findUnique({
|
||||
where: {
|
||||
id: secondaryEmailId,
|
||||
userId: ctx.user.id,
|
||||
},
|
||||
});
|
||||
// Make sure the secondary email id belongs to the current user and its a verified one
|
||||
if (secondaryEmail && secondaryEmail.emailVerified) {
|
||||
data.secondaryEmail = {
|
||||
connect: {
|
||||
id: secondaryEmailId,
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
const newEventType = await EventTypeRepository.create(data);
|
||||
|
||||
// Create custom inputs
|
||||
@@ -156,6 +175,6 @@ export const duplicateHandler = async ({ ctx, input }: DuplicateOptions) => {
|
||||
eventType: newEventType,
|
||||
};
|
||||
} catch (error) {
|
||||
throw new TRPCError({ code: "INTERNAL_SERVER_ERROR" });
|
||||
throw new TRPCError({ code: "INTERNAL_SERVER_ERROR", message: `Error duplicating event type ${error}` });
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user