mirror of
https://github.com/formbricks/formbricks.git
synced 2026-03-14 02:12:43 -05:00
fix: hotfix for sync validation errors (#2364)
This commit is contained in:
@@ -34,6 +34,13 @@ export const reverseTranslateSurvey = (survey: TSurvey, languageCode: string = "
|
||||
reversedSurvey.questions = reversedSurvey.questions.map((question) =>
|
||||
reverseTranslateObject(question, languageCode)
|
||||
);
|
||||
|
||||
// check if the headline is an empty object, if so, add a "default" key
|
||||
// TODO: This is a temporary fix, should be handled propperly
|
||||
if (Object.keys(reversedSurvey.welcomeCard.headline).length === 0) {
|
||||
reversedSurvey.welcomeCard.headline = { default: "" };
|
||||
}
|
||||
|
||||
reversedSurvey.welcomeCard = reverseTranslateObject(reversedSurvey.welcomeCard, languageCode);
|
||||
reversedSurvey.thankYouCard = reverseTranslateObject(reversedSurvey.thankYouCard, languageCode);
|
||||
// validate the type with zod
|
||||
|
||||
@@ -80,12 +80,7 @@ export const createI18nString = (
|
||||
|
||||
// Type guard to check if an object is an I18nString
|
||||
export function isI18nObject(obj: any): obj is TI18nString {
|
||||
return (
|
||||
obj !== null &&
|
||||
typeof obj === "object" &&
|
||||
Object.values(obj).every((value) => typeof value !== "undefined") &&
|
||||
Object.keys(obj).includes("default")
|
||||
);
|
||||
return typeof obj === "object" && obj !== null && Object.keys(obj).includes("default");
|
||||
}
|
||||
|
||||
export const isLabelValidForAllLanguages = (label: TI18nString, languages: string[]): boolean => {
|
||||
|
||||
@@ -31,7 +31,7 @@ import { subscribeTeamMembersToSurveyResponses } from "../team/service";
|
||||
import { diffInDays, formatDateFields } from "../utils/datetime";
|
||||
import { validateInputs } from "../utils/validate";
|
||||
import { surveyCache } from "./cache";
|
||||
import { anySurveyHasFilters } from "./util";
|
||||
import { anySurveyHasFilters, formatSurveyDateFields } from "./util";
|
||||
|
||||
interface TriggerUpdate {
|
||||
create?: Array<{ actionClassId: string }>;
|
||||
@@ -343,24 +343,16 @@ export const getSurveys = async (
|
||||
|
||||
// since the unstable_cache function does not support deserialization of dates, we need to manually deserialize them
|
||||
// https://github.com/vercel/next.js/issues/51613
|
||||
return surveys.map((survey) => formatDateFields(survey, ZSurvey));
|
||||
return surveys.map((survey) => formatSurveyDateFields(survey));
|
||||
};
|
||||
|
||||
export const transformToLegacySurvey = async (
|
||||
survey: TSurvey,
|
||||
languageCode?: string
|
||||
): Promise<TLegacySurvey> => {
|
||||
const transformedSurvey = await unstable_cache(
|
||||
async () => {
|
||||
const targetLanguage = languageCode ?? "default";
|
||||
return reverseTranslateSurvey(survey, targetLanguage);
|
||||
},
|
||||
[`transformToLegacySurvey-${survey.id}-${languageCode}`],
|
||||
{
|
||||
tags: [surveyCache.tag.byId(survey.id)],
|
||||
revalidate: SERVICES_REVALIDATION_INTERVAL,
|
||||
}
|
||||
)();
|
||||
const targetLanguage = languageCode ?? "default";
|
||||
const transformedSurvey = reverseTranslateSurvey(survey, targetLanguage);
|
||||
|
||||
return formatDateFields(transformedSurvey, ZLegacySurvey);
|
||||
};
|
||||
|
||||
|
||||
@@ -7,7 +7,9 @@ import { ZLanguage } from "./product";
|
||||
import { ZSegment } from "./segment";
|
||||
import { ZBaseStyling } from "./styling";
|
||||
|
||||
export const ZI18nString = z.record(z.string(), z.string());
|
||||
export const ZI18nString = z.record(z.string()).refine((obj) => "default" in obj, {
|
||||
message: "Object must have a 'default' key",
|
||||
});
|
||||
|
||||
export type TI18nString = z.infer<typeof ZI18nString>;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user