From 8dfdb084aada3946ebe66f2f4449b24389f95a62 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 17 Nov 2025 09:27:35 +0000 Subject: [PATCH] feat: Add tabs to survey summary components Co-authored-by: johannes --- .../summary/components/NPSSummary.tsx | 4 +- .../summary/components/RatingSummary.tsx | 151 +++++++++++++----- .../summary/components/SatisfactionSmiley.tsx | 6 +- 3 files changed, 115 insertions(+), 46 deletions(-) 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 544e7f43d0..e4755e7ff8 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 @@ -90,8 +90,8 @@ export const NPSSummary = ({ questionSummary, survey, setFilter }: NPSSummaryPro /> setActiveTab(value as "grouped" | "individual")}> -
- +
+ }> {t("environments.surveys.summary.grouped")} 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 691706ebaa..abe857e91c 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,7 +1,7 @@ "use client"; -import { CircleSlash2, SmileIcon, StarIcon } from "lucide-react"; -import { useMemo } from "react"; +import { BarChart, BarChartHorizontal, CircleSlash2, SmileIcon, StarIcon } from "lucide-react"; +import { useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { TI18nString, @@ -13,6 +13,7 @@ import { import { convertFloatToNDecimal } from "@/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/lib/utils"; import { ProgressBar } from "@/modules/ui/components/progress-bar"; import { RatingResponse } from "@/modules/ui/components/rating-response"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/modules/ui/components/tabs"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/modules/ui/components/tooltip"; import { QuestionSummaryHeader } from "./QuestionSummaryHeader"; import { SatisfactionSmiley } from "./SatisfactionSmiley"; @@ -31,6 +32,8 @@ interface RatingSummaryProps { export const RatingSummary = ({ questionSummary, survey, setFilter }: RatingSummaryProps) => { const { t } = useTranslation(); + const [activeTab, setActiveTab] = useState<"grouped" | "individual">("grouped"); + const getIconBasedOnScale = useMemo(() => { const scale = questionSummary.question.scale; if (scale === "number") return ; @@ -62,52 +65,118 @@ export const RatingSummary = ({ questionSummary, survey, setFilter }: RatingSumm
- - {t("environments.surveys.summary.csatTooltip")} - + {t("environments.surveys.summary.csatTooltip")} } /> -
- {questionSummary.choices.map((result) => ( - + + +
+
+ +
+
+ {result.count} {result.count === 1 ? t("common.response") : t("common.responses")}{" "} + ({convertFloatToNDecimal(result.percentage, 1)}%) +
+
+
+ + + ); + })} +
+ + + + +
+ {questionSummary.choices.map((result) => ( +
-

- {result.count} {result.count === 1 ? t("common.response") : t("common.responses")} -

- - - - ))} - + + + ))} + +
+
{questionSummary.dismissed && questionSummary.dismissed.count > 0 && (
diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SatisfactionSmiley.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SatisfactionSmiley.tsx index 07658c592e..363558dd74 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SatisfactionSmiley.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/summary/components/SatisfactionSmiley.tsx @@ -130,10 +130,10 @@ const SmilingFace = ({ className }: { className?: string }) => ( export const SatisfactionSmiley = ({ percentage, className }: SatisfactionSmileyProps) => { if (percentage > 80) { - return ; + return ; } else if (percentage >= 55) { - return ; + return ; } else { - return ; + return ; } };