From d13037cb5039b9fa0c30fd38a32fc118ecfd153c Mon Sep 17 00:00:00 2001 From: Varun Singh Date: Sat, 21 Jun 2025 00:37:17 +0530 Subject: [PATCH] fix: Empty survey list state after deleting the last survey. --- .../survey/list/components/survey-card.test.tsx | 6 ++++++ .../modules/survey/list/components/survey-card.tsx | 8 +++++++- .../list/components/survey-dropdown-menu.test.tsx | 12 ++++++++++++ .../survey/list/components/survey-dropdown-menu.tsx | 7 ++++++- .../modules/survey/list/components/survey-list.tsx | 2 ++ 5 files changed, 33 insertions(+), 2 deletions(-) diff --git a/apps/web/modules/survey/list/components/survey-card.test.tsx b/apps/web/modules/survey/list/components/survey-card.test.tsx index 67d8f6f163..4a6ad0dcf5 100644 --- a/apps/web/modules/survey/list/components/survey-card.test.tsx +++ b/apps/web/modules/survey/list/components/survey-card.test.tsx @@ -60,6 +60,8 @@ describe("SurveyCard", () => { deleteSurvey={mockDeleteSurvey} locale="en-US" publicDomain={WEBAPP_URL} + surveyCount={1} + setIsFetching={vi.fn()} /> ); // Draft survey => link should point to edit @@ -77,6 +79,8 @@ describe("SurveyCard", () => { deleteSurvey={mockDeleteSurvey} locale="en-US" publicDomain={WEBAPP_URL} + surveyCount={1} + setIsFetching={vi.fn()} /> ); // When it's read only and draft, we expect no link @@ -94,6 +98,8 @@ describe("SurveyCard", () => { deleteSurvey={mockDeleteSurvey} locale="en-US" publicDomain={WEBAPP_URL} + surveyCount={1} + setIsFetching={vi.fn()} /> ); // For non-draft => link to summary diff --git a/apps/web/modules/survey/list/components/survey-card.tsx b/apps/web/modules/survey/list/components/survey-card.tsx index 20df7c1818..19b9e64439 100644 --- a/apps/web/modules/survey/list/components/survey-card.tsx +++ b/apps/web/modules/survey/list/components/survey-card.tsx @@ -8,7 +8,7 @@ import { TSurvey } from "@/modules/survey/list/types/surveys"; import { SurveyStatusIndicator } from "@/modules/ui/components/survey-status-indicator"; import { useTranslate } from "@tolgee/react"; import Link from "next/link"; -import { useMemo } from "react"; +import React, { SetStateAction, useMemo } from "react"; import { TUserLocale } from "@formbricks/types/user"; import { SurveyDropDownMenu } from "./survey-dropdown-menu"; @@ -20,6 +20,8 @@ interface SurveyCardProps { duplicateSurvey: (survey: TSurvey) => void; deleteSurvey: (surveyId: string) => void; locale: TUserLocale; + surveyCount: number; + setIsFetching: React.Dispatch>; } export const SurveyCard = ({ survey, @@ -29,6 +31,8 @@ export const SurveyCard = ({ deleteSurvey, duplicateSurvey, locale, + surveyCount, + setIsFetching, }: SurveyCardProps) => { const { t } = useTranslate(); const surveyStatusLabel = (() => { @@ -108,6 +112,8 @@ export const SurveyCard = ({ isSurveyCreationDeletionDisabled={isSurveyCreationDeletionDisabled} duplicateSurvey={duplicateSurvey} deleteSurvey={deleteSurvey} + surveyCount={surveyCount} + setIsFetching={setIsFetching} /> diff --git a/apps/web/modules/survey/list/components/survey-dropdown-menu.test.tsx b/apps/web/modules/survey/list/components/survey-dropdown-menu.test.tsx index b476985f4b..774e9c24bd 100644 --- a/apps/web/modules/survey/list/components/survey-dropdown-menu.test.tsx +++ b/apps/web/modules/survey/list/components/survey-dropdown-menu.test.tsx @@ -63,6 +63,8 @@ describe("SurveyDropDownMenu", () => { refreshSingleUseId={mockRefresh} duplicateSurvey={mockDuplicateSurvey} deleteSurvey={mockDeleteSurvey} + surveyCount={1} + setIsFetching={vi.fn()} /> ); @@ -97,6 +99,8 @@ describe("SurveyDropDownMenu", () => { deleteSurvey={vi.fn()} disabled={false} isSurveyCreationDeletionDisabled={false} + surveyCount={1} + setIsFetching={vi.fn()} /> ); @@ -135,6 +139,8 @@ describe("SurveyDropDownMenu", () => { refreshSingleUseId={vi.fn()} duplicateSurvey={vi.fn()} deleteSurvey={vi.fn()} + surveyCount={1} + setIsFetching={vi.fn()} /> ); @@ -158,6 +164,8 @@ describe("SurveyDropDownMenu", () => { refreshSingleUseId={vi.fn()} duplicateSurvey={vi.fn()} deleteSurvey={vi.fn()} + surveyCount={1} + setIsFetching={vi.fn()} /> ); @@ -184,6 +192,8 @@ describe("SurveyDropDownMenu", () => { refreshSingleUseId={vi.fn()} duplicateSurvey={mockDuplicateSurvey} deleteSurvey={vi.fn()} + surveyCount={1} + setIsFetching={vi.fn()} /> ); @@ -211,6 +221,8 @@ describe("SurveyDropDownMenu", () => { refreshSingleUseId={vi.fn()} duplicateSurvey={mockDuplicateSurvey} deleteSurvey={vi.fn()} + surveyCount={1} + setIsFetching={vi.fn()} /> ); diff --git a/apps/web/modules/survey/list/components/survey-dropdown-menu.tsx b/apps/web/modules/survey/list/components/survey-dropdown-menu.tsx index b4303ad76b..2c84ec6b82 100644 --- a/apps/web/modules/survey/list/components/survey-dropdown-menu.tsx +++ b/apps/web/modules/survey/list/components/survey-dropdown-menu.tsx @@ -30,7 +30,7 @@ import { } from "lucide-react"; import Link from "next/link"; import { useRouter } from "next/navigation"; -import { useMemo, useState } from "react"; +import React, { SetStateAction, useMemo, useState } from "react"; import toast from "react-hot-toast"; import { CopySurveyModal } from "./copy-survey-modal"; @@ -43,6 +43,8 @@ interface SurveyDropDownMenuProps { isSurveyCreationDeletionDisabled?: boolean; duplicateSurvey: (survey: TSurvey) => void; deleteSurvey: (surveyId: string) => void; + surveyCount: number; + setIsFetching: React.Dispatch>; } export const SurveyDropDownMenu = ({ @@ -54,6 +56,8 @@ export const SurveyDropDownMenu = ({ isSurveyCreationDeletionDisabled, deleteSurvey, duplicateSurvey, + surveyCount, + setIsFetching, }: SurveyDropDownMenuProps) => { const { t } = useTranslate(); const [isDeleteDialogOpen, setDeleteDialogOpen] = useState(false); @@ -70,6 +74,7 @@ export const SurveyDropDownMenu = ({ setLoading(true); try { await deleteSurveyAction({ surveyId }); + if (surveyCount - 1 === 0) setIsFetching(true); deleteSurvey(surveyId); router.refresh(); setDeleteDialogOpen(false); diff --git a/apps/web/modules/survey/list/components/survey-list.tsx b/apps/web/modules/survey/list/components/survey-list.tsx index c5a8ab060e..cd83db2fab 100644 --- a/apps/web/modules/survey/list/components/survey-list.tsx +++ b/apps/web/modules/survey/list/components/survey-list.tsx @@ -160,6 +160,8 @@ export const SurveysList = ({ duplicateSurvey={handleDuplicateSurvey} deleteSurvey={handleDeleteSurvey} locale={locale} + surveyCount={surveys.length} + setIsFetching={setIsFetching} /> ); })}