Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 1 addition & 57 deletions apps/web/app/error.tsx
Original file line number Diff line number Diff line change
@@ -1,57 +1 @@
"use client";

// Error components must be Client components
import * as Sentry from "@sentry/nextjs";
import { TFunction } from "i18next";
import { useEffect } from "react";
import { useTranslation } from "react-i18next";
import { type ClientErrorType, getClientErrorData, isExpectedError } from "@formbricks/types/errors";
import { Button } from "@/modules/ui/components/button";
import { ErrorComponent } from "@/modules/ui/components/error-component";

/**
* Get translated error messages based on error type
*/
const getErrorMessages = (type: ClientErrorType, t: TFunction) => {
if (type === "rate_limit") {
return {
title: t("common.error_rate_limit_title"),
description: t("common.error_rate_limit_description"),
};
}

return {
title: t("common.error_component_title"),
description: t("common.error_component_description"),
};
};

const ErrorBoundary = ({ error, reset }: { error: Error; reset: () => void }) => {
const { t } = useTranslation();
const errorData = getClientErrorData(error);
const { title, description } = getErrorMessages(errorData.type, t);

useEffect(() => {
if (process.env.NODE_ENV === "development") {
console.error(error.message);
} else if (!isExpectedError(error)) {
Sentry.captureException(error);
}
}, [error]);

return (
<div className="flex h-full w-full flex-col items-center justify-center">
<ErrorComponent title={title} description={description} />
{errorData.showButtons && (
<div className="mt-2">
<Button variant="secondary" onClick={() => reset()} className="mr-2">
{t("common.try_again")}
</Button>
<Button onClick={() => (window.location.href = "/")}>{t("common.go_to_dashboard")}</Button>
</div>
)}
</div>
);
};

export default ErrorBoundary;
The file should be modified to include a check for serverError in the response before considering it a successful operation. The exact change would be to add logic similar to the suggested fix in the issue: `if (result?.serverError) { throw new Error("Something went wrong"); }` wherever API responses are processed.