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 cde299e7bd1..c883ea9d27f 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 @@ -1,6 +1,7 @@ import Headline from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/Headline"; import { questionTypes } from "@/app/lib/questions"; import { InboxStackIcon } from "@heroicons/react/24/solid"; +import { CircleSlash2, SmileIcon, StarIcon } from "lucide-react"; import { useMemo } from "react"; import type { TSurveyQuestionSummary } from "@formbricks/types/surveys"; @@ -79,6 +80,26 @@ export default function RatingSummary({ questionSummary }: RatingSummaryProps) { return total; }, [results]); + const averageRating = useMemo(() => { + let total = 0; + let count = 0; + questionSummary.responses.forEach((response) => { + if (response.value && typeof response.value === "number") { + total += response.value; + count += 1; + } + }); + const average = count > 0 ? total / count : 0; + return parseFloat(average.toFixed(2)); + }, [questionSummary]); + + const getIconBasedOnScale = useMemo(() => { + const scale = questionSummary.question.scale; + if (scale === "number") return ; + else if (scale === "star") return ; + else if (scale === "smiley") return ; + }, [questionSummary]); + return (
@@ -93,6 +114,10 @@ export default function RatingSummary({ questionSummary }: RatingSummaryProps) { {totalResponses} responses
+
+ {getIconBasedOnScale} +
Overall: {averageRating}
+
{!questionSummary.question.required && (
Optional
)}