mirror of
https://github.com/formbricks/formbricks.git
synced 2026-04-25 03:39:31 -05:00
4100949bf6
Co-authored-by: Matthias Nannt <mail@matthiasnannt.com> Co-authored-by: Dhruwang Jariwala <67850763+Dhruwang@users.noreply.github.com>
120 lines
3.8 KiB
TypeScript
120 lines
3.8 KiB
TypeScript
import "server-only";
|
|
|
|
import { Prisma } from "@prisma/client";
|
|
|
|
import { TLegacySurvey } from "@formbricks/types/LegacySurvey";
|
|
import { TPerson } from "@formbricks/types/people";
|
|
import { TSurvey, TSurveyFilterCriteria } from "@formbricks/types/surveys";
|
|
|
|
export const formatSurveyDateFields = (survey: TSurvey): TSurvey => {
|
|
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.runOnDate === "string") {
|
|
survey.runOnDate = new Date(survey.runOnDate);
|
|
}
|
|
if (typeof survey.closeOnDate === "string") {
|
|
survey.closeOnDate = new Date(survey.closeOnDate);
|
|
}
|
|
|
|
if (survey.segment) {
|
|
if (typeof survey.segment.createdAt === "string") {
|
|
survey.segment.createdAt = new Date(survey.segment.createdAt);
|
|
}
|
|
|
|
if (typeof survey.segment.updatedAt === "string") {
|
|
survey.segment.updatedAt = new Date(survey.segment.updatedAt);
|
|
}
|
|
}
|
|
|
|
if (survey.languages) {
|
|
survey.languages.forEach((surveyLanguage) => {
|
|
if (typeof surveyLanguage.language.createdAt === "string") {
|
|
surveyLanguage.language.createdAt = new Date(surveyLanguage.language.createdAt);
|
|
}
|
|
if (typeof surveyLanguage.language.updatedAt === "string") {
|
|
surveyLanguage.language.updatedAt = new Date(surveyLanguage.language.updatedAt);
|
|
}
|
|
});
|
|
}
|
|
|
|
return survey;
|
|
};
|
|
|
|
export const buildWhereClause = (filterCriteria?: TSurveyFilterCriteria) => {
|
|
const whereClause: Prisma.SurveyWhereInput["AND"] = [];
|
|
|
|
// for name
|
|
if (filterCriteria?.name) {
|
|
whereClause.push({ name: { contains: filterCriteria.name, mode: "insensitive" } });
|
|
}
|
|
|
|
// for status
|
|
if (filterCriteria?.status && filterCriteria?.status?.length) {
|
|
whereClause.push({ status: { in: filterCriteria.status } });
|
|
}
|
|
|
|
// for type
|
|
if (filterCriteria?.type && filterCriteria?.type?.length) {
|
|
whereClause.push({ type: { in: filterCriteria.type } });
|
|
}
|
|
|
|
// for createdBy
|
|
if (filterCriteria?.createdBy?.value && filterCriteria?.createdBy?.value?.length) {
|
|
if (filterCriteria.createdBy.value.length === 1) {
|
|
if (filterCriteria.createdBy.value[0] === "you") {
|
|
whereClause.push({ createdBy: filterCriteria.createdBy.userId });
|
|
}
|
|
if (filterCriteria.createdBy.value[0] === "others") {
|
|
whereClause.push({ createdBy: { not: filterCriteria.createdBy.userId } });
|
|
}
|
|
}
|
|
}
|
|
|
|
return { AND: whereClause };
|
|
};
|
|
|
|
export const buildOrderByClause = (
|
|
sortBy?: TSurveyFilterCriteria["sortBy"]
|
|
): Prisma.SurveyOrderByWithRelationInput[] | undefined => {
|
|
if (!sortBy) {
|
|
return undefined;
|
|
}
|
|
|
|
if (sortBy === "name") {
|
|
return [{ name: "asc" }];
|
|
}
|
|
|
|
return [{ [sortBy]: "desc" }];
|
|
};
|
|
|
|
export const anySurveyHasFilters = (surveys: TSurvey[] | TLegacySurvey[]): boolean => {
|
|
return surveys.some((survey) => {
|
|
if ("segment" in survey && survey.segment) {
|
|
return survey.segment.filters && survey.segment.filters.length > 0;
|
|
}
|
|
return false;
|
|
});
|
|
};
|
|
|
|
export const determineLanguageCode = (person: TPerson, survey: TSurvey) => {
|
|
// Default to 'default' if person.attributes.language is not set or not a string
|
|
if (!person.attributes?.language) return "default";
|
|
const languageCodeOrAlias =
|
|
typeof person.attributes?.language === "string" ? person.attributes.language : "default";
|
|
|
|
// Find the matching language in the survey
|
|
const selectedLanguage = survey.languages.find(
|
|
(surveyLanguage) =>
|
|
surveyLanguage.language.code === languageCodeOrAlias ||
|
|
surveyLanguage.language.alias === languageCodeOrAlias
|
|
);
|
|
if (!selectedLanguage) return;
|
|
|
|
// Determine and return the language code to use
|
|
return selectedLanguage.default ? "default" : selectedLanguage.language.code;
|
|
};
|