fix: hotfix for sync validation errors (#2364)

This commit is contained in:
Anshuman Pandey
2024-03-29 21:36:51 +05:30
committed by GitHub
parent dfb1f86ddb
commit 85e5828cc8
4 changed files with 16 additions and 20 deletions

View File

@@ -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

View File

@@ -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 => {

View File

@@ -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);
};

View File

@@ -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>;