diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SummaryList.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SummaryList.tsx
index 25c6c4f6b6..673514ed61 100644
--- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SummaryList.tsx
+++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SummaryList.tsx
@@ -12,6 +12,7 @@ import { OpenTextSummary } from "@/app/(app)/environments/[environmentId]/survey
import { PictureChoiceSummary } from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/PictureChoiceSummary";
import { RatingSummary } from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/RatingSummary";
+import { TAttributeClass } from "@formbricks/types/attributeClasses";
import { TEnvironment } from "@formbricks/types/environment";
import { TSurveySummary } from "@formbricks/types/surveys";
import { TSurveyQuestionType } from "@formbricks/types/surveys";
@@ -28,6 +29,7 @@ interface SummaryListProps {
survey: TSurvey;
fetchingSummary: boolean;
totalResponseCount: number;
+ attributeClasses: TAttributeClass[];
}
export const SummaryList = ({
@@ -37,6 +39,7 @@ export const SummaryList = ({
survey,
fetchingSummary,
totalResponseCount,
+ attributeClasses,
}: SummaryListProps) => {
return (
@@ -61,6 +64,8 @@ export const SummaryList = ({
key={questionSummary.question.id}
questionSummary={questionSummary}
environmentId={environment.id}
+ survey={survey}
+ attributeClasses={attributeClasses}
/>
);
}
@@ -74,24 +79,59 @@ export const SummaryList = ({
questionSummary={questionSummary}
environmentId={environment.id}
surveyType={survey.type}
+ survey={survey}
+ attributeClasses={attributeClasses}
/>
);
}
if (questionSummary.type === TSurveyQuestionType.NPS) {
- return
;
+ return (
+
+ );
}
if (questionSummary.type === TSurveyQuestionType.CTA) {
- return
;
+ return (
+
+ );
}
if (questionSummary.type === TSurveyQuestionType.Rating) {
- return
;
+ return (
+
+ );
}
if (questionSummary.type === TSurveyQuestionType.Consent) {
- return
;
+ return (
+
+ );
}
if (questionSummary.type === TSurveyQuestionType.PictureSelection) {
return (
-
+
);
}
if (questionSummary.type === TSurveyQuestionType.Date) {
@@ -100,6 +140,8 @@ export const SummaryList = ({
key={questionSummary.question.id}
questionSummary={questionSummary}
environmentId={environment.id}
+ survey={survey}
+ attributeClasses={attributeClasses}
/>
);
}
@@ -109,6 +151,8 @@ export const SummaryList = ({
key={questionSummary.question.id}
questionSummary={questionSummary}
environmentId={environment.id}
+ survey={survey}
+ attributeClasses={attributeClasses}
/>
);
}
@@ -118,12 +162,19 @@ export const SummaryList = ({
key={questionSummary.question.id}
questionSummary={questionSummary}
environmentId={environment.id}
+ survey={survey}
+ attributeClasses={attributeClasses}
/>
);
}
if (questionSummary.type === TSurveyQuestionType.Matrix) {
return (
-
+
);
}
if (questionSummary.type === TSurveyQuestionType.Address) {
@@ -132,6 +183,8 @@ export const SummaryList = ({
key={questionSummary.question.id}
questionSummary={questionSummary}
environmentId={environment.id}
+ survey={survey}
+ attributeClasses={attributeClasses}
/>
);
}
diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SummaryPage.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SummaryPage.tsx
index 0448d2fff6..db7f240cc5 100644
--- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SummaryPage.tsx
+++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SummaryPage.tsx
@@ -136,6 +136,7 @@ export const SummaryPage = ({
environment={environment}
fetchingSummary={isFetchingSummary}
totalResponseCount={totalResponseCount}
+ attributeClasses={attributeClasses}
/>
>
);
diff --git a/apps/web/app/api/pipeline/route.ts b/apps/web/app/api/pipeline/route.ts
index 8d4eb53415..6e8f590b32 100644
--- a/apps/web/app/api/pipeline/route.ts
+++ b/apps/web/app/api/pipeline/route.ts
@@ -4,14 +4,12 @@ import { headers } from "next/headers";
import { prisma } from "@formbricks/database";
import { sendResponseFinishedEmail } from "@formbricks/email";
-import { getAttributeClasses } from "@formbricks/lib/attributeClass/service";
import { INTERNAL_SECRET } from "@formbricks/lib/constants";
import { getIntegrations } from "@formbricks/lib/integration/service";
import { getProductByEnvironmentId } from "@formbricks/lib/product/service";
import { getResponseCountBySurveyId } from "@formbricks/lib/response/service";
import { getSurvey, updateSurvey } from "@formbricks/lib/survey/service";
import { convertDatesInObject } from "@formbricks/lib/time";
-import { replaceHeadlineRecall } from "@formbricks/lib/utils/recall";
import { ZPipelineInput } from "@formbricks/types/pipelines";
import { TUserNotificationSettings } from "@formbricks/types/user";
@@ -39,7 +37,6 @@ export const POST = async (request: Request) => {
const { environmentId, surveyId, event, response } = inputValidation.data;
const product = await getProductByEnvironmentId(environmentId);
- const attributeClasses = await getAttributeClasses(environmentId);
if (!product) return;
// get all webhooks of this environment where event in triggers
@@ -108,7 +105,7 @@ export const POST = async (request: Request) => {
getIntegrations(environmentId),
getSurvey(surveyId),
]);
- const survey = surveyData ? replaceHeadlineRecall(surveyData, "default", attributeClasses) : undefined;
+ const survey = surveyData ?? undefined;
if (integrations.length > 0 && survey) {
handleIntegrations(integrations, inputValidation.data, survey);
diff --git a/packages/lib/response/service.ts b/packages/lib/response/service.ts
index 6d73cd33ff..3c5205cf96 100644
--- a/packages/lib/response/service.ts
+++ b/packages/lib/response/service.ts
@@ -25,7 +25,6 @@ import { TSurveySummary } from "@formbricks/types/surveys";
import { TTag } from "@formbricks/types/tags";
import { getAttributes } from "../attribute/service";
-import { getAttributeClasses } from "../attributeClass/service";
import { cache } from "../cache";
import { ITEMS_PER_PAGE, WEBAPP_URL } from "../constants";
import { displayCache } from "../display/cache";
@@ -37,7 +36,6 @@ import { putFile } from "../storage/service";
import { getSurvey } from "../survey/service";
import { captureTelemetry } from "../telemetry";
import { convertToCsv, convertToXlsxBuffer } from "../utils/fileConversion";
-import { replaceHeadlineRecall } from "../utils/recall";
import { validateInputs } from "../utils/validate";
import { responseCache } from "./cache";
import {
@@ -563,7 +561,6 @@ export const getSurveySummary = (
if (!survey) {
throw new ResourceNotFoundError("Survey", surveyId);
}
- const attributeClasses = await getAttributeClasses(survey.environmentId);
const batchSize = 3000;
const responseCount = await getResponseCountBySurveyId(surveyId, filterCriteria);
@@ -582,11 +579,7 @@ export const getSurveySummary = (
const dropOff = getSurveySummaryDropOff(survey, responses, displayCount);
const meta = getSurveySummaryMeta(responses, displayCount);
- const questionWiseSummary = getQuestionWiseSummary(
- replaceHeadlineRecall(survey, "default", attributeClasses),
- responses,
- dropOff
- );
+ const questionWiseSummary = getQuestionWiseSummary(survey, responses, dropOff);
return { meta, dropOff, summary: questionWiseSummary };
} catch (error) {
diff --git a/packages/lib/responses.ts b/packages/lib/responses.ts
index f7d1a91fc3..135aebc78f 100644
--- a/packages/lib/responses.ts
+++ b/packages/lib/responses.ts
@@ -2,6 +2,7 @@ import { TResponse } from "@formbricks/types/responses";
import { TSurvey, TSurveyQuestion, TSurveyQuestionType } from "@formbricks/types/surveys";
import { getLocalizedValue } from "./i18n/utils";
+import { parseRecallInfo } from "./utils/recall";
// function to convert response value of type string | number | string[] or Record
to string | string[]
export const convertResponseValue = (
@@ -41,12 +42,11 @@ export const getQuestionResponseMapping = (
response: string | string[];
type: TSurveyQuestionType;
}[] = [];
-
for (const question of survey.questions) {
const answer = response.data[question.id];
questionResponseMapping.push({
- question: getLocalizedValue(question.headline, "default"),
+ question: parseRecallInfo(getLocalizedValue(question.headline, "default"), {}, response.data),
response: convertResponseValue(answer, question),
type: question.type,
});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 899a16e887..385073ac97 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -21109,4 +21109,4 @@ packages:
/zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
- dev: false
+ dev: false
\ No newline at end of file