From 439dd0b44e4f46915a6df8118163c16a17f9dc2a Mon Sep 17 00:00:00 2001 From: Dhruwang Jariwala <67850763+Dhruwang@users.noreply.github.com> Date: Mon, 13 Apr 2026 22:26:20 +0530 Subject: [PATCH] fix: add loading skeleton for responses page (#7700) Co-authored-by: Claude Opus 4.6 Co-authored-by: Johannes --- .../surveys/[surveyId]/(analysis)/loading.tsx | 22 +++++++++++ .../(analysis)/responses/loading.tsx | 23 +++++++++++ .../ui/components/skeleton-loader/index.tsx | 39 ++++++++++++++++++- 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/loading.tsx create mode 100644 apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/loading.tsx diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/loading.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/loading.tsx new file mode 100644 index 000000000000..0b69c660d939 --- /dev/null +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/loading.tsx @@ -0,0 +1,22 @@ +"use client"; + +import { PageContentWrapper } from "@/modules/ui/components/page-content-wrapper"; +import { PageHeader } from "@/modules/ui/components/page-header"; +import { SkeletonLoader } from "@/modules/ui/components/skeleton-loader"; + +const Loading = () => { + return ( + + +
+
+
+
+
+
+ + + ); +}; + +export default Loading; diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/loading.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/loading.tsx new file mode 100644 index 000000000000..01c34867f966 --- /dev/null +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/loading.tsx @@ -0,0 +1,23 @@ +"use client"; + +import { useTranslation } from "react-i18next"; +import { PageContentWrapper } from "@/modules/ui/components/page-content-wrapper"; +import { PageHeader } from "@/modules/ui/components/page-header"; +import { SkeletonLoader } from "@/modules/ui/components/skeleton-loader"; + +const Loading = () => { + const { t } = useTranslation(); + + return ( + + +
+
+
+
+ + + ); +}; + +export default Loading; diff --git a/apps/web/modules/ui/components/skeleton-loader/index.tsx b/apps/web/modules/ui/components/skeleton-loader/index.tsx index 88343ed50b37..7af41bff84e8 100644 --- a/apps/web/modules/ui/components/skeleton-loader/index.tsx +++ b/apps/web/modules/ui/components/skeleton-loader/index.tsx @@ -1,7 +1,7 @@ import { Skeleton } from "@/modules/ui/components/skeleton"; type SkeletonLoaderProps = { - type: "response" | "summary"; + type: "response" | "responseTable" | "summary"; }; export const SkeletonLoader = ({ type }: SkeletonLoaderProps) => { @@ -25,6 +25,43 @@ export const SkeletonLoader = ({ type }: SkeletonLoaderProps) => { ); } + if (type === "responseTable") { + const renderTableCells = () => ( + <> + + + + + + + + ); + + return ( +
+
+ +
+ + +
+
+
+
+ {renderTableCells()} +
+ {Array.from({ length: 10 }, (_, i) => ( +
+ {renderTableCells()} +
+ ))} +
+
+ ); + } + if (type === "response") { return (