diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/actions.ts b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/actions.ts index 0cbb86f5e1..946f41ebb8 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/actions.ts +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/edit/actions.ts @@ -6,6 +6,7 @@ import { canUserAccessSurvey } from "@formbricks/lib/survey/auth"; import { authOptions } from "@formbricks/lib/authOptions"; import { getServerSession } from "next-auth"; import { AuthorizationError } from "@formbricks/types/v1/errors"; +import { formatSurveyDateFields } from "@formbricks/lib/survey/util"; export async function updateSurveyAction(survey: TSurvey): Promise { const session = await getServerSession(authOptions); @@ -14,14 +15,12 @@ export async function updateSurveyAction(survey: TSurvey): Promise { const isAuthorized = await canUserAccessSurvey(session.user.id, survey.id); if (!isAuthorized) throw new AuthorizationError("Not authorized"); - if (typeof survey.createdAt === "string") { - survey.createdAt = new Date(survey.createdAt); - } - if (typeof survey.updatedAt === "string") { - survey.updatedAt = new Date(survey.updatedAt); - } + const _survey = { + ...survey, + ...formatSurveyDateFields(survey), + }; - return await updateSurvey(survey); + return await updateSurvey(_survey); } export const deleteSurveyAction = async (surveyId: string) => { diff --git a/packages/lib/survey/service.ts b/packages/lib/survey/service.ts index cd8dbd2a77..96e303675b 100644 --- a/packages/lib/survey/service.ts +++ b/packages/lib/survey/service.ts @@ -21,6 +21,7 @@ import { getResponsesCacheTag } from "../response/service"; import { ZString } from "@formbricks/types/v1/common"; import { SERVICES_REVALIDATION_INTERVAL } from "../constants"; import { getActionClasses } from "../actionClass/service"; +import { formatSurveyDateFields } from "./util"; // surveys cache key and tags const getSurveysCacheTag = (environmentId: string): string => `environments-${environmentId}-surveys`; @@ -141,7 +142,7 @@ export const getSurveyWithAnalytics = async (surveyId: string): Promise => { // https://github.com/vercel/next.js/issues/51613 return { ...survey, - createdAt: new Date(survey.createdAt), - updatedAt: new Date(survey.updatedAt), + ...formatSurveyDateFields(survey), }; }; @@ -366,8 +365,7 @@ export const getSurveys = async (environmentId: string): Promise => { // https://github.com/vercel/next.js/issues/51613 return surveys.map((survey) => ({ ...survey, - createdAt: new Date(survey.createdAt), - updatedAt: new Date(survey.updatedAt), + ...formatSurveyDateFields(survey), })); }; @@ -437,8 +435,7 @@ export const getSurveysWithAnalytics = async (environmentId: string): Promise ({ ...survey, - createdAt: new Date(survey.createdAt), - updatedAt: new Date(survey.updatedAt), + ...formatSurveyDateFields(survey), })); }; diff --git a/packages/lib/survey/util.ts b/packages/lib/survey/util.ts new file mode 100644 index 0000000000..f893df8199 --- /dev/null +++ b/packages/lib/survey/util.ts @@ -0,0 +1,17 @@ +import "server-only"; + +import { TSurveyDates } from "@formbricks/types/v1/surveys"; + +export const formatSurveyDateFields = (survey: TSurveyDates): TSurveyDates => { + if (typeof survey.createdAt === "string") { + survey.createdAt = new Date(survey.createdAt); + } + if (typeof survey.updatedAt === "string") { + survey.updatedAt = new Date(survey.updatedAt); + } + if (typeof survey.closeOnDate === "string") { + survey.closeOnDate = new Date(survey.closeOnDate); + } + + return survey; +}; diff --git a/packages/types/v1/surveys.ts b/packages/types/v1/surveys.ts index 782051681d..c4199d313f 100644 --- a/packages/types/v1/surveys.ts +++ b/packages/types/v1/surveys.ts @@ -309,6 +309,11 @@ export const ZSurveyInput = z.object({ }); export type TSurvey = z.infer; +export type TSurveyDates = { + createdAt: TSurvey["createdAt"]; + updatedAt: TSurvey["updatedAt"]; + closeOnDate: TSurvey["closeOnDate"]; +}; export type TSurveyInput = z.infer; export const ZSurveyWithAnalytics = ZSurvey.extend({