diff --git a/apps/web/components/booking/bookingActions.test.ts b/apps/web/components/booking/bookingActions.test.ts
index 14981596e7..a0ee856bc2 100644
--- a/apps/web/components/booking/bookingActions.test.ts
+++ b/apps/web/components/booking/bookingActions.test.ts
@@ -475,6 +475,34 @@ describe("Booking Actions", () => {
expect(isActionDisabled("cancel", context)).toBe(true);
});
+ it("should disable cancelling all past bookings", () => {
+ const pastConfirmedContext = createMockContext({
+ isBookingInPast: true,
+ isPending: false,
+ isConfirmed: true,
+ });
+
+ const pastPendingContext = createMockContext({
+ isBookingInPast: true,
+ isPending: true,
+ isConfirmed: false,
+ });
+
+ // Current implementation blocks ALL past bookings
+ expect(isActionDisabled("cancel", pastConfirmedContext)).toBe(true);
+ expect(isActionDisabled("cancel", pastPendingContext)).toBe(true);
+ });
+
+ it("should allow cancelling future bookings when cancelling is not disabled", () => {
+ const futureContext = createMockContext({
+ isBookingInPast: false,
+ isPending: true,
+ isConfirmed: false,
+ });
+
+ expect(isActionDisabled("cancel", futureContext)).toBe(false);
+ });
+
it("should disable video actions for non-past bookings", () => {
const context = createMockContext({ isBookingInPast: false });
diff --git a/apps/web/components/booking/bookingActions.ts b/apps/web/components/booking/bookingActions.ts
index f28647c17d..cdc6982717 100644
--- a/apps/web/components/booking/bookingActions.ts
+++ b/apps/web/components/booking/bookingActions.ts
@@ -210,7 +210,7 @@ export function isActionDisabled(actionId: string, context: BookingActionContext
case "reschedule_request":
return (isBookingInPast && !booking.eventType.allowReschedulingPastBookings) || isDisabledRescheduling;
case "cancel":
- return isDisabledCancelling || (isBookingInPast && isPending && !isConfirmed);
+ return isDisabledCancelling || isBookingInPast;
case "view_recordings":
return !(isBookingInPast && booking.status === BookingStatus.ACCEPTED && context.isCalVideoLocation);
case "meeting_session_details":
diff --git a/apps/web/modules/bookings/views/bookings-single-view.tsx b/apps/web/modules/bookings/views/bookings-single-view.tsx
index 4f55f9e2a9..573a786c16 100644
--- a/apps/web/modules/bookings/views/bookings-single-view.tsx
+++ b/apps/web/modules/bookings/views/bookings-single-view.tsx
@@ -839,13 +839,13 @@ export default function Success(props: PageProps) {
{t("reschedule")}
- {canCancelAndReschedule && (
+ {!isBookingInPast && canCancel && (
{t("or_lowercase")}
)}
)}
- {canCancel && (
+ {!isBookingInPast && canCancel && (