diff --git a/apps/web/components/error/BookingPageErrorBoundary.tsx b/apps/web/components/error/BookingPageErrorBoundary.tsx new file mode 100644 index 0000000000..79cc3b2707 --- /dev/null +++ b/apps/web/components/error/BookingPageErrorBoundary.tsx @@ -0,0 +1,17 @@ +import { captureReactException } from "@sentry/nextjs"; +import React from "react"; +import { ErrorBoundary } from "react-error-boundary"; + +import { ErrorPage } from "./error-page"; + +export default function BookingPageErrorBoundary({ children }: { children: React.ReactNode }) { + return ( + } + onError={(error, info) => { + captureReactException(error, info); + }}> + {children} + + ); +} diff --git a/apps/web/modules/d/[link]/d-type-view.tsx b/apps/web/modules/d/[link]/d-type-view.tsx index 7f2595ead8..39c221ab12 100644 --- a/apps/web/modules/d/[link]/d-type-view.tsx +++ b/apps/web/modules/d/[link]/d-type-view.tsx @@ -5,6 +5,8 @@ import { getBookerWrapperClasses } from "@calcom/features/bookings/Booker/utils/ import { type PageProps } from "@lib/d/[link]/[slug]/getServerSideProps"; +import BookingPageErrorBoundary from "@components/error/BookingPageErrorBoundary"; + export default function Type({ slug, isEmbed, @@ -18,18 +20,20 @@ export default function Type({ durationConfig, }: PageProps) { return ( -
- -
+ +
+ +
+
); } diff --git a/apps/web/modules/org/[orgSlug]/instant-meeting/team/[slug]/[type]/instant-meeting-view.tsx b/apps/web/modules/org/[orgSlug]/instant-meeting/team/[slug]/[type]/instant-meeting-view.tsx index 8b30d62d65..c0c3f70c0c 100644 --- a/apps/web/modules/org/[orgSlug]/instant-meeting/team/[slug]/[type]/instant-meeting-view.tsx +++ b/apps/web/modules/org/[orgSlug]/instant-meeting/team/[slug]/[type]/instant-meeting-view.tsx @@ -8,22 +8,26 @@ import { getBookerWrapperClasses } from "@calcom/features/bookings/Booker/utils/ import type { getServerSideProps } from "@lib/org/[orgSlug]/instant-meeting/team/[slug]/[type]/getServerSideProps"; import type { inferSSRProps } from "@lib/types/inferSSRProps"; +import BookingPageErrorBoundary from "@components/error/BookingPageErrorBoundary"; + export type Props = inferSSRProps & EmbedProps; function Type({ slug, user, booking, isEmbed, isBrandingHidden, entity, eventTypeId, duration }: Props) { return ( -
- -
+ +
+ +
+
); } diff --git a/apps/web/modules/team/type-view.tsx b/apps/web/modules/team/type-view.tsx index 4fce3061dc..6153b6a025 100644 --- a/apps/web/modules/team/type-view.tsx +++ b/apps/web/modules/team/type-view.tsx @@ -9,6 +9,8 @@ import { getBookerWrapperClasses } from "@calcom/features/bookings/Booker/utils/ import type { getServerSideProps } from "@lib/team/[slug]/[type]/getServerSideProps"; import type { inferSSRProps } from "@lib/types/inferSSRProps"; +import BookingPageErrorBoundary from "@components/error/BookingPageErrorBoundary"; + export type PageProps = inferSSRProps & EmbedProps; export const getMultipleDurationValue = ( @@ -37,30 +39,32 @@ function Type({ const searchParams = useSearchParams(); return ( -
- -
+ +
+ +
+
); } diff --git a/apps/web/modules/users/views/users-type-public-view.tsx b/apps/web/modules/users/views/users-type-public-view.tsx index a5f6a3ce13..7104580858 100644 --- a/apps/web/modules/users/views/users-type-public-view.tsx +++ b/apps/web/modules/users/views/users-type-public-view.tsx @@ -8,6 +8,8 @@ import { getBookerWrapperClasses } from "@calcom/features/bookings/Booker/utils/ import type { inferSSRProps } from "@lib/types/inferSSRProps"; +import BookingPageErrorBoundary from "@components/error/BookingPageErrorBoundary"; + import type { getServerSideProps } from "@server/lib/[user]/[type]/getServerSideProps"; export type PageProps = inferSSRProps & EmbedProps; @@ -26,25 +28,27 @@ function Type({ slug, user, isEmbed, booking, isBrandingHidden, eventData, orgBa const searchParams = useSearchParams(); return ( -
- -
+ +
+ +
+
); }