From 8ce018995a78d0e46cf595ab4713805eadf8d316 Mon Sep 17 00:00:00 2001 From: Abhijeet Singh Date: Thu, 12 Sep 2024 19:35:05 +0530 Subject: [PATCH] fix: (managed-event-booking): slug conflict handling (#16540) * fix(managed-event-booking): slug conflict handling * refactor logic --------- Co-authored-by: Amit Sharma <74371312+Amit91848@users.noreply.github.com> --- packages/features/eventtypes/components/EventType.tsx | 7 ++++++- .../components/tabs/assignment/EventTeamAssignmentTab.tsx | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/features/eventtypes/components/EventType.tsx b/packages/features/eventtypes/components/EventType.tsx index 202ce3750c..6880badb49 100644 --- a/packages/features/eventtypes/components/EventType.tsx +++ b/packages/features/eventtypes/components/EventType.tsx @@ -504,7 +504,7 @@ export const EventType = (props: EventTypeSetupProps & { allActiveWorkflows?: Wo length, ...input } = dirtyValues; - if (!Number(length)) throw new Error(t("event_setup_length_error")); + if (length && !Number(length)) throw new Error(t("event_setup_length_error")); if (bookingLimits) { const isValid = validateIntervalLimitOrder(bookingLimits); @@ -633,6 +633,11 @@ export const EventType = (props: EventTypeSetupProps & { allActiveWorkflows?: Wo id="event-type-form" handleSubmit={async (values) => { const { children } = values; + const conflicts = children.filter((child) => child.owner.eventTypeSlugs.includes(values.slug)); + if (conflicts.length > 0) { + setSlugExistsChildrenDialogOpen(conflicts); + return; + } const dirtyValues = getDirtyFields(values); const dirtyFieldExists = Object.keys(dirtyValues).length !== 0; const { diff --git a/packages/features/eventtypes/components/tabs/assignment/EventTeamAssignmentTab.tsx b/packages/features/eventtypes/components/tabs/assignment/EventTeamAssignmentTab.tsx index c8ee253534..2c025529d6 100644 --- a/packages/features/eventtypes/components/tabs/assignment/EventTeamAssignmentTab.tsx +++ b/packages/features/eventtypes/components/tabs/assignment/EventTeamAssignmentTab.tsx @@ -422,7 +422,12 @@ export const EventTeamAssignmentTab = ({ .map((member) => mapUserToValue(member, t("pending"))); const childrenEventTypeOptions = teamMembers.filter(pendingMembers).map((member) => { return mapMemberToChildrenOption( - { ...member, eventTypes: member.eventTypes.filter((et) => et !== eventType.slug) }, + { + ...member, + eventTypes: member.eventTypes.filter( + (et) => et !== eventType.slug || !eventType.children.some((c) => c.owner.id === member.id) + ), + }, eventType.slug, t("pending") );