From b0ded570ffb77b4a797cbd0929c2a2326a5bc2a7 Mon Sep 17 00:00:00 2001
From: Piyush Gupta <56182734+gupta-piyush19@users.noreply.github.com>
Date: Fri, 25 Oct 2024 22:23:55 +0530
Subject: [PATCH] fix: inconsistencies in survey summary (#4032)
Co-authored-by: Johannes
---
.../[surveyId]/edit/components/SurveyMenuBar.tsx | 2 +-
.../(analysis)/summary/components/CTASummary.tsx | 2 +-
.../(analysis)/summary/components/CalSummary.tsx | 4 ++--
.../summary/components/ConsentSummary.tsx | 2 +-
.../summary/components/MultipleChoiceSummary.tsx | 6 +++---
.../(analysis)/summary/components/NPSSummary.tsx | 2 +-
.../summary/components/OpenTextSummary.tsx | 8 ++++----
.../summary/components/PictureChoiceSummary.tsx | 13 +++++++++++--
.../summary/components/RankingSummary.tsx | 2 +-
.../(analysis)/summary/components/RatingSummary.tsx | 2 +-
.../(analysis)/summary/lib/surveySummary.ts | 9 ++++++---
packages/types/surveys/types.ts | 1 +
12 files changed, 33 insertions(+), 20 deletions(-)
diff --git a/apps/web/app/(app)/(survey-editor)/environments/[environmentId]/surveys/[surveyId]/edit/components/SurveyMenuBar.tsx b/apps/web/app/(app)/(survey-editor)/environments/[environmentId]/surveys/[surveyId]/edit/components/SurveyMenuBar.tsx
index 2dfb40a35a..64c77aeecb 100644
--- a/apps/web/app/(app)/(survey-editor)/environments/[environmentId]/surveys/[surveyId]/edit/components/SurveyMenuBar.tsx
+++ b/apps/web/app/(app)/(survey-editor)/environments/[environmentId]/surveys/[surveyId]/edit/components/SurveyMenuBar.tsx
@@ -61,7 +61,7 @@ export const SurveyMenuBar = ({
const [isConfirmDialogOpen, setConfirmDialogOpen] = useState(false);
const [isSurveyPublishing, setIsSurveyPublishing] = useState(false);
const [isSurveySaving, setIsSurveySaving] = useState(false);
- const cautionText = "This survey received responses.";
+ const cautionText = "Changes will lead to inconsistencies.";
useEffect(() => {
if (audiencePrompt && activeId === "settings") {
diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/CTASummary.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/CTASummary.tsx
index c54640c66d..e84541cd4e 100644
--- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/CTASummary.tsx
+++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/CTASummary.tsx
@@ -44,7 +44,7 @@ export const CTASummary = ({ questionSummary, survey, attributeClasses }: CTASum
CTR
- {convertFloatToNDecimal(questionSummary.ctr.percentage, 1)}%
+ {convertFloatToNDecimal(questionSummary.ctr.percentage, 2)}%
diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/CalSummary.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/CalSummary.tsx
index a0f9fd8f16..d80da28363 100644
--- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/CalSummary.tsx
+++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/CalSummary.tsx
@@ -26,7 +26,7 @@ export const CalSummary = ({ questionSummary, survey, attributeClasses }: CalSum
Booked
- {convertFloatToNDecimal(questionSummary.booked.percentage, 1)}%
+ {convertFloatToNDecimal(questionSummary.booked.percentage, 2)}%
@@ -42,7 +42,7 @@ export const CalSummary = ({ questionSummary, survey, attributeClasses }: CalSum
Dismissed
- {convertFloatToNDecimal(questionSummary.skipped.percentage, 1)}%
+ {convertFloatToNDecimal(questionSummary.skipped.percentage, 2)}%
diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/ConsentSummary.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/ConsentSummary.tsx
index d44ff97271..90b80da04c 100644
--- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/ConsentSummary.tsx
+++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/ConsentSummary.tsx
@@ -70,7 +70,7 @@ export const ConsentSummary = ({
- {convertFloatToNDecimal(summaryItem.percentage, 1)}%
+ {convertFloatToNDecimal(summaryItem.percentage, 2)}%
diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/MultipleChoiceSummary.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/MultipleChoiceSummary.tsx
index eabd3fa8c0..842e6b49e6 100644
--- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/MultipleChoiceSummary.tsx
+++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/MultipleChoiceSummary.tsx
@@ -73,7 +73,7 @@ export const MultipleChoiceSummary = ({
questionSummary.type === "multipleChoiceMulti" ? (
- {`${questionSummary.selectionCount} selections`}
+ {`${questionSummary.selectionCount} Selections`}
) : undefined
}
@@ -101,12 +101,12 @@ export const MultipleChoiceSummary = ({
- {convertFloatToNDecimal(result.percentage, 1)}%
+ {convertFloatToNDecimal(result.percentage, 2)}%
- {result.count} {result.count === 1 ? "selection" : "selections"}
+ {result.count} {result.count === 1 ? "Selection" : "Selections"}
diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/NPSSummary.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/NPSSummary.tsx
index 6149e4b46a..186c709a4a 100644
--- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/NPSSummary.tsx
+++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/NPSSummary.tsx
@@ -76,7 +76,7 @@ export const NPSSummary = ({ questionSummary, survey, attributeClasses, setFilte
- {convertFloatToNDecimal(questionSummary[group]?.percentage, 1)}%
+ {convertFloatToNDecimal(questionSummary[group]?.percentage, 2)}%
diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/OpenTextSummary.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/OpenTextSummary.tsx
index b464f6b2c6..c907df6424 100644
--- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/OpenTextSummary.tsx
+++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/OpenTextSummary.tsx
@@ -102,7 +102,7 @@ export const OpenTextSummary = ({
{questionSummary.samples.slice(0, visibleResponses).map((response) => (
-
+
{response.person ? (
-
+
{getPersonIdentifier(response.person, response.personAttributes)}
@@ -119,12 +119,12 @@ export const OpenTextSummary = ({
- Anonymous
+ Anonymous
)}
{response.value}
- {timeSince(new Date(response.updatedAt).toISOString())}
+ {timeSince(new Date(response.updatedAt).toISOString())}
))}
diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/PictureChoiceSummary.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/PictureChoiceSummary.tsx
index 052f72d215..a4e8a2a627 100644
--- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/PictureChoiceSummary.tsx
+++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/PictureChoiceSummary.tsx
@@ -1,3 +1,4 @@
+import { InboxIcon } from "lucide-react";
import Image from "next/image";
import { TAttributeClass } from "@formbricks/types/attribute-classes";
import {
@@ -38,6 +39,14 @@ export const PictureChoiceSummary = ({
questionSummary={questionSummary}
survey={survey}
attributeClasses={attributeClasses}
+ additionalInfo={
+ questionSummary.question.allowMulti ? (
+
+
+ {`${questionSummary.selectionCount} Selections`}
+
+ ) : undefined
+ }
/>
{results.map((result, index) => (
@@ -66,12 +75,12 @@ export const PictureChoiceSummary = ({
- {convertFloatToNDecimal(result.percentage, 1)}%
+ {convertFloatToNDecimal(result.percentage, 2)}%
- {result.count} {result.count === 1 ? "response" : "responses"}
+ {result.count} {result.count === 1 ? "Selection" : "Selections"}
diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/RankingSummary.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/RankingSummary.tsx
index 4295911302..5a889ec53b 100644
--- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/RankingSummary.tsx
+++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/RankingSummary.tsx
@@ -38,7 +38,7 @@ export const RankingSummary = ({
{result.value}
- #{convertFloatToNDecimal(result.avgRanking, 1)}
+ #{convertFloatToNDecimal(result.avgRanking, 2)}
average
diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/RatingSummary.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/RatingSummary.tsx
index 55802feb91..3a5de344a4 100644
--- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/RatingSummary.tsx
+++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/RatingSummary.tsx
@@ -78,7 +78,7 @@ export const RatingSummary = ({
- {convertFloatToNDecimal(result.percentage, 1)}%
+ {convertFloatToNDecimal(result.percentage, 2)}%
diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/lib/surveySummary.ts b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/lib/surveySummary.ts
index d1671752e9..25ca15a732 100644
--- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/lib/surveySummary.ts
+++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/lib/surveySummary.ts
@@ -428,12 +428,14 @@ export const getQuestionSummary = async (
choiceCountMap[choice.id] = 0;
});
let totalResponseCount = 0;
+ let totalSelectionCount = 0;
responses.forEach((response) => {
const answer = response.data[question.id];
if (Array.isArray(answer)) {
+ totalResponseCount++;
answer.forEach((value) => {
- totalResponseCount++;
+ totalSelectionCount++;
choiceCountMap[value]++;
});
}
@@ -445,8 +447,8 @@ export const getQuestionSummary = async (
imageUrl: choice.imageUrl,
count: choiceCountMap[choice.id],
percentage:
- totalResponseCount > 0
- ? convertFloatTo2Decimal((choiceCountMap[choice.id] / totalResponseCount) * 100)
+ totalSelectionCount > 0
+ ? convertFloatTo2Decimal((choiceCountMap[choice.id] / totalSelectionCount) * 100)
: 0,
});
});
@@ -455,6 +457,7 @@ export const getQuestionSummary = async (
type: question.type,
question,
responseCount: totalResponseCount,
+ selectionCount: totalSelectionCount,
choices: values,
});
diff --git a/packages/types/surveys/types.ts b/packages/types/surveys/types.ts
index 628b1d6a0b..703971b2ed 100644
--- a/packages/types/surveys/types.ts
+++ b/packages/types/surveys/types.ts
@@ -2136,6 +2136,7 @@ export const ZSurveyQuestionSummaryPictureSelection = z.object({
type: z.literal("pictureSelection"),
question: ZSurveyPictureSelectionQuestion,
responseCount: z.number(),
+ selectionCount: z.number(),
choices: z.array(
z.object({
id: z.string(),