From a775bec9024dea26a0afa9332cf887d3f1b46714 Mon Sep 17 00:00:00 2001 From: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com> Date: Mon, 10 Feb 2025 10:05:18 -0500 Subject: [PATCH] fix: Disable round robin reassignment if reroute is available (#19192) * If booking is routed from form, disable round robin reassign * Pass `bookingFromRoutingForm` prop from `BookingListItem` * Add `ReassignType` enum * Refactor `isBookingReroutable` --- .../components/booking/BookingListItem.tsx | 6 ++- apps/web/components/dialog/ReassignDialog.tsx | 45 +++++++++++++------ 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/apps/web/components/booking/BookingListItem.tsx b/apps/web/components/booking/BookingListItem.tsx index ee86420da8..4b713967ff 100644 --- a/apps/web/components/booking/BookingListItem.tsx +++ b/apps/web/components/booking/BookingListItem.tsx @@ -145,6 +145,7 @@ function BookingListItem(booking: BookingItemProps) { const isRecurring = booking.recurringEventId !== null; const isTabRecurring = booking.listingStatus === "recurring"; const isTabUnconfirmed = booking.listingStatus === "unconfirmed"; + const isBookingFromRoutingForm = isBookingReroutable(parsedBooking); const paymentAppData = getPaymentAppData(booking.eventType); @@ -237,7 +238,7 @@ function BookingListItem(booking: BookingItemProps) { }, }, ]), - ...(isBookingReroutable(parsedBooking) + ...(isBookingFromRoutingForm ? [ { id: "reroute", @@ -444,6 +445,7 @@ function BookingListItem(booking: BookingItemProps) { setIsOpenDialog={setIsOpenReassignDialog} bookingId={booking.id} teamId={booking.eventType?.team?.id || 0} + bookingFromRoutingForm={isBookingFromRoutingForm} /> )} - {isBookingReroutable(parsedBooking) && ( + {isBookingFromRoutingForm && ( >; teamId: number; bookingId: number; + bookingFromRoutingForm: boolean; }; type FormValues = { - reassignType: "round_robin" | "team_member"; + reassignType: ReassignType.ROUND_ROBIN | ReassignType.TEAM_MEMBER; teamMemberId?: number; reassignReason?: string; }; const formSchema = z.object({ - reassignType: z.enum(["round_robin", "team_member"]), + reassignType: z.nativeEnum(ReassignType), teamMemberId: z.number().optional(), reassignReason: z .string() @@ -57,7 +63,13 @@ interface TeamMemberOption { status: string; } -export const ReassignDialog = ({ isOpenDialog, setIsOpenDialog, teamId, bookingId }: ReassignDialog) => { +export const ReassignDialog = ({ + isOpenDialog, + setIsOpenDialog, + teamId, + bookingId, + bookingFromRoutingForm, +}: ReassignDialog) => { const { t } = useLocale(); const utils = trpc.useUtils(); const [animationParentRef] = useAutoAnimate({ @@ -101,7 +113,7 @@ export const ReassignDialog = ({ isOpenDialog, setIsOpenDialog, teamId, bookingI const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { - reassignType: "round_robin", + reassignType: bookingFromRoutingForm ? ReassignType.TEAM_MEMBER : ReassignType.ROUND_ROBIN, }, }); @@ -144,7 +156,7 @@ export const ReassignDialog = ({ isOpenDialog, setIsOpenDialog, teamId, bookingI }); const handleSubmit = (values: FormValues) => { - if (values.reassignType === "round_robin") { + if (values.reassignType === ReassignType.ROUND_ROBIN) { roundRobinReassignMutation.mutate({ teamId, bookingId }); } else { if (values.teamMemberId) { @@ -176,23 +188,30 @@ export const ReassignDialog = ({ isOpenDialog, setIsOpenDialog, teamId, bookingI
{ - form.setValue("reassignType", val as "team_member" | "round_robin"); + form.setValue("reassignType", val as ReasonEnum); }} + defaultValue={bookingFromRoutingForm ? ReassignType.TEAM_MEMBER : ReassignType.ROUND_ROBIN} className="mt-1 flex flex-col gap-4"> + {!bookingFromRoutingForm ? ( + + {t("round_robin")} +

{t("round_robin_reassign_description")}

+
+ ) : null} - {t("round_robin")} -

{t("round_robin_reassign_description")}

-
- {t("team_member_round_robin_reassign")}

{t("team_member_round_robin_reassign_description")}

- {watchedReassignType === "team_member" && ( + {watchedReassignType === ReassignType.TEAM_MEMBER && (