From 6e66f7f8f8db45454d659bcb3801e4558742c824 Mon Sep 17 00:00:00 2001 From: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com> Date: Mon, 29 Jul 2024 15:22:03 +0530 Subject: [PATCH] fix: Assignment reminder modal appears when deleting a team event type (#15544) * fix: Assignment reminder modal appears when deleting a team event type * update * Update EventTypeSingleLayout.tsx * Update event-types-single-view.tsx * update * Early return https://handbook.cal.com/engineering/best-practices/prefer-early-returns --------- Co-authored-by: Keith Williams Co-authored-by: Hariom --- .../components/eventtype/EventTypeSingleLayout.tsx | 11 ++++++++++- .../event-types/views/event-types-single-view.tsx | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/apps/web/components/eventtype/EventTypeSingleLayout.tsx b/apps/web/components/eventtype/EventTypeSingleLayout.tsx index fa792584b3..362a4001c8 100644 --- a/apps/web/components/eventtype/EventTypeSingleLayout.tsx +++ b/apps/web/components/eventtype/EventTypeSingleLayout.tsx @@ -53,6 +53,7 @@ type Props = { isUserOrganizationAdmin: boolean; bookerUrl: string; activeWebhooksNumber: number; + onDelete: () => void; }; type getNavigationProps = { @@ -117,7 +118,12 @@ function DeleteDialog({ eventTypeId, open, onOpenChange, -}: { isManagedEvent: string; eventTypeId: number } & Pick) { + onDelete, +}: { + isManagedEvent: string; + eventTypeId: number; + onDelete: () => void; +} & Pick) { const utils = trpc.useUtils(); const { t } = useLocale(); const router = useRouter(); @@ -125,6 +131,7 @@ function DeleteDialog({ onSuccess: async () => { await utils.viewer.eventTypes.invalidate(); showToast(t("event_type_deleted_successfully"), "success"); + onDelete(); router.push("/event-types"); onOpenChange?.(false); }, @@ -181,6 +188,7 @@ function EventTypeSingleLayout({ isUserOrganizationAdmin, bookerUrl, activeWebhooksNumber, + onDelete, }: Props) { const { t } = useLocale(); const eventTypesLockedByOrg = eventType.team?.parent?.organizationSettings?.lockEventTypeCreationForUsers; @@ -510,6 +518,7 @@ function EventTypeSingleLayout({ isManagedEvent={isManagedEvent} open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen} + onDelete={onDelete} /> diff --git a/apps/web/modules/event-types/views/event-types-single-view.tsx b/apps/web/modules/event-types/views/event-types-single-view.tsx index a6138db64b..5e6ea48098 100644 --- a/apps/web/modules/event-types/views/event-types-single-view.tsx +++ b/apps/web/modules/event-types/views/event-types-single-view.tsx @@ -230,6 +230,7 @@ const EventTypePage = (props: EventTypeSetupProps & { allActiveWorkflows?: Workf const [isOpenAssignmentWarnDialog, setIsOpenAssignmentWarnDialog] = useState(false); const [pendingRoute, setPendingRoute] = useState(""); const leaveWithoutAssigningHosts = useRef(false); + const isTeamEventTypeDeleted = useRef(false); const [animationParentRef] = useAutoAnimate(); const updateMutation = trpc.viewer.eventTypes.update.useMutation({ onSuccess: async () => { @@ -404,10 +405,17 @@ const EventTypePage = (props: EventTypeSetupProps & { allActiveWorkflows?: Workf formState: { isDirty: isFormDirty, dirtyFields }, } = formMethods; + const onDelete = () => { + isTeamEventTypeDeleted.current = true; + }; + useEffect(() => { const handleRouteChange = (url: string) => { const paths = url.split("/"); + // If the event-type is deleted, we can't show the empty assignment warning + if (isTeamEventTypeDeleted.current) return; + if ( !!team && !leaveWithoutAssigningHosts.current && @@ -716,7 +724,8 @@ const EventTypePage = (props: EventTypeSetupProps & { allActiveWorkflows?: Workf disableBorder={true} currentUserMembership={currentUserMembership} bookerUrl={eventType.bookerUrl} - isUserOrganizationAdmin={props.isUserOrganizationAdmin}> + isUserOrganizationAdmin={props.isUserOrganizationAdmin} + onDelete={onDelete}>