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(),