From 3a4e2a9f8564a4e929da3c714f0532aea8571059 Mon Sep 17 00:00:00 2001 From: Dhruwang Jariwala <67850763+Dhruwang@users.noreply.github.com> Date: Tue, 2 Sep 2025 11:19:20 +0530 Subject: [PATCH] fix: duplicate response and contact deletion calls (#6489) --- .../components/ResponseCardModal.test.tsx | 4 ++-- .../components/ResponseCardModal.tsx | 6 ++--- .../components/ResponseDataView.test.tsx | 4 ++-- .../responses/components/ResponseDataView.tsx | 6 ++--- .../components/ResponsePage.test.tsx | 2 +- .../responses/components/ResponsePage.tsx | 10 ++++----- .../responses/components/ResponseTable.tsx | 8 +++---- .../SingleResponseCard/index.test.tsx | 12 +++++----- .../components/SingleResponseCard/index.tsx | 6 ++--- .../[contactId]/components/response-feed.tsx | 16 ++++++-------- .../contacts/components/contact-data-view.tsx | 11 +++------- .../ee/contacts/components/contacts-table.tsx | 6 ++--- .../components/data-table-toolbar.tsx | 6 ++--- .../components/selected-row-settings.test.tsx | 22 +++++++++---------- .../components/selected-row-settings.tsx | 7 +++--- 15 files changed, 59 insertions(+), 67 deletions(-) diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseCardModal.test.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseCardModal.test.tsx index 5cd49420b7..4f8af1ba34 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseCardModal.test.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseCardModal.test.tsx @@ -145,7 +145,7 @@ const mockLocale: TUserLocale = "en-US"; const mockSetSelectedResponseId = vi.fn(); const mockUpdateResponse = vi.fn(); -const mockDeleteResponses = vi.fn(); +const mockUpdateResponseList = vi.fn(); const mockSetOpen = vi.fn(); const defaultProps = { @@ -157,7 +157,7 @@ const defaultProps = { user: mockUser, environmentTags: mockEnvironmentTags, updateResponse: mockUpdateResponse, - deleteResponses: mockDeleteResponses, + updateResponseList: mockUpdateResponseList, isReadOnly: false, open: true, setOpen: mockSetOpen, diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseCardModal.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseCardModal.tsx index 9b5dcddd46..670674074b 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseCardModal.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseCardModal.tsx @@ -18,7 +18,7 @@ interface ResponseCardModalProps { user?: TUser; environmentTags: TTag[]; updateResponse: (responseId: string, updatedResponse: TResponse) => void; - deleteResponses: (responseIds: string[]) => void; + updateResponseList: (responseIds: string[]) => void; isReadOnly: boolean; open: boolean; setOpen: React.Dispatch>; @@ -34,7 +34,7 @@ export const ResponseCardModal = ({ user, environmentTags, updateResponse, - deleteResponses, + updateResponseList, isReadOnly, open, setOpen, @@ -86,7 +86,7 @@ export const ResponseCardModal = ({ environmentTags={environmentTags} isReadOnly={isReadOnly} updateResponse={updateResponse} - deleteResponses={deleteResponses} + updateResponseList={updateResponseList} setSelectedResponseId={setSelectedResponseId} locale={locale} /> diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseDataView.test.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseDataView.test.tsx index cd4040410a..805bbf0628 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseDataView.test.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseDataView.test.tsx @@ -176,7 +176,7 @@ const defaultProps = { isReadOnly: false, fetchNextPage: vi.fn(), hasMore: true, - deleteResponses: vi.fn(), + updateResponseList: vi.fn(), updateResponse: vi.fn(), isFetchingFirstPage: false, locale: mockLocale, @@ -264,7 +264,7 @@ describe("ResponseDataView", () => { expect(responseTableMock.mock.calls[0][0].environment).toEqual(mockEnvironment); expect(responseTableMock.mock.calls[0][0].fetchNextPage).toBe(defaultProps.fetchNextPage); expect(responseTableMock.mock.calls[0][0].hasMore).toBe(true); - expect(responseTableMock.mock.calls[0][0].deleteResponses).toBe(defaultProps.deleteResponses); + expect(responseTableMock.mock.calls[0][0].updateResponseList).toBe(defaultProps.updateResponseList); expect(responseTableMock.mock.calls[0][0].updateResponse).toBe(defaultProps.updateResponse); expect(responseTableMock.mock.calls[0][0].isFetchingFirstPage).toBe(false); expect(responseTableMock.mock.calls[0][0].locale).toBe(mockLocale); diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseDataView.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseDataView.tsx index f149673cce..765282332d 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseDataView.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseDataView.tsx @@ -18,7 +18,7 @@ interface ResponseDataViewProps { isReadOnly: boolean; fetchNextPage: () => void; hasMore: boolean; - deleteResponses: (responseIds: string[]) => void; + updateResponseList: (responseIds: string[]) => void; updateResponse: (responseId: string, updatedResponse: TResponse) => void; isFetchingFirstPage: boolean; locale: TUserLocale; @@ -113,7 +113,7 @@ export const ResponseDataView: React.FC = ({ isReadOnly, fetchNextPage, hasMore, - deleteResponses, + updateResponseList, updateResponse, isFetchingFirstPage, locale, @@ -133,7 +133,7 @@ export const ResponseDataView: React.FC = ({ environment={environment} fetchNextPage={fetchNextPage} hasMore={hasMore} - deleteResponses={deleteResponses} + updateResponseList={updateResponseList} updateResponse={updateResponse} isFetchingFirstPage={isFetchingFirstPage} locale={locale} diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponsePage.test.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponsePage.test.tsx index 862d559235..71ef39ef6e 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponsePage.test.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponsePage.test.tsx @@ -187,7 +187,7 @@ describe("ResponsePage", () => { ).mock.calls[0][0]; act(() => { - responseDataViewProps.deleteResponses(["response1"]); + responseDataViewProps.updateResponseList(["response1"]); }); // Check if ResponseDataView is re-rendered with updated responses diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponsePage.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponsePage.tsx index d2bee9dbc8..43f33b3fab 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponsePage.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponsePage.tsx @@ -70,14 +70,12 @@ export const ResponsePage = ({ setPage(newPage); }, [filters, page, responses, responsesPerPage, surveyId]); - const deleteResponses = (responseIds: string[]) => { - setResponses(responses.filter((response) => !responseIds.includes(response.id))); + const updateResponseList = (responseIds: string[]) => { + setResponses((prev) => prev.filter((r) => !responseIds.includes(r.id))); }; const updateResponse = (responseId: string, updatedResponse: TResponse) => { - if (responses) { - setResponses(responses.map((response) => (response.id === responseId ? updatedResponse : response))); - } + setResponses((prev) => prev.map((r) => (r.id === responseId ? updatedResponse : r))); }; const surveyMemoized = useMemo(() => { @@ -136,7 +134,7 @@ export const ResponsePage = ({ isReadOnly={isReadOnly} fetchNextPage={fetchNextPage} hasMore={hasMore} - deleteResponses={deleteResponses} + updateResponseList={updateResponseList} updateResponse={updateResponse} isFetchingFirstPage={isFetchingFirstPage} locale={locale} diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseTable.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseTable.tsx index d901966395..ff0506c5f1 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseTable.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/[surveyId]/(analysis)/responses/components/ResponseTable.tsx @@ -47,7 +47,7 @@ interface ResponseTableProps { isReadOnly: boolean; fetchNextPage: () => void; hasMore: boolean; - deleteResponses: (responseIds: string[]) => void; + updateResponseList: (responseIds: string[]) => void; updateResponse: (responseId: string, updatedResponse: TResponse) => void; isFetchingFirstPage: boolean; locale: TUserLocale; @@ -63,7 +63,7 @@ export const ResponseTable = ({ isReadOnly, fetchNextPage, hasMore, - deleteResponses, + updateResponseList, updateResponse, isFetchingFirstPage, locale, @@ -221,7 +221,7 @@ export const ResponseTable = ({ setIsTableSettingsModalOpen={setIsTableSettingsModalOpen} isExpanded={isExpanded ?? false} table={table} - deleteRowsAction={deleteResponses} + updateRowList={updateResponseList} type="response" deleteAction={deleteResponse} downloadRowsAction={downloadSelectedRows} @@ -299,7 +299,7 @@ export const ResponseTable = ({ environmentTags={environmentTags} isReadOnly={isReadOnly} updateResponse={updateResponse} - deleteResponses={deleteResponses} + updateResponseList={updateResponseList} setSelectedResponseId={setSelectedResponseId} selectedResponseId={selectedResponseId} open={selectedResponse !== null} diff --git a/apps/web/modules/analysis/components/SingleResponseCard/index.test.tsx b/apps/web/modules/analysis/components/SingleResponseCard/index.test.tsx index c2eabe2b08..e284671622 100644 --- a/apps/web/modules/analysis/components/SingleResponseCard/index.test.tsx +++ b/apps/web/modules/analysis/components/SingleResponseCard/index.test.tsx @@ -31,7 +31,7 @@ const dummyEnvironment = { id: "env1" } as TEnvironment; const dummyUser = { id: "user1", email: "user1@example.com", name: "User One" } as TUser; const dummyLocale = "en-US"; -const dummyDeleteResponses = vi.fn(); +const dummyUpdateResponseList = vi.fn(); const dummyUpdateResponse = vi.fn(); const dummySetSelectedResponseId = vi.fn(); @@ -85,7 +85,7 @@ describe("SingleResponseCard", () => { environmentTags={[]} environment={dummyEnvironment} updateResponse={dummyUpdateResponse} - deleteResponses={dummyDeleteResponses} + updateResponseList={dummyUpdateResponseList} isReadOnly={true} setSelectedResponseId={dummySetSelectedResponseId} locale={dummyLocale} @@ -105,7 +105,7 @@ describe("SingleResponseCard", () => { environmentTags={[]} environment={dummyEnvironment} updateResponse={dummyUpdateResponse} - deleteResponses={dummyDeleteResponses} + updateResponseList={dummyUpdateResponseList} isReadOnly={false} setSelectedResponseId={dummySetSelectedResponseId} locale={dummyLocale} @@ -120,7 +120,7 @@ describe("SingleResponseCard", () => { expect(deleteResponseAction).toHaveBeenCalledWith({ responseId: dummyResponse.id }); }); - expect(dummyDeleteResponses).toHaveBeenCalledWith([dummyResponse.id]); + expect(dummyUpdateResponseList).toHaveBeenCalledWith([dummyResponse.id]); }); test("calls toast.error when deleteResponseAction throws error", async () => { @@ -133,7 +133,7 @@ describe("SingleResponseCard", () => { environmentTags={[]} environment={dummyEnvironment} updateResponse={dummyUpdateResponse} - deleteResponses={dummyDeleteResponses} + updateResponseList={dummyUpdateResponseList} isReadOnly={false} setSelectedResponseId={dummySetSelectedResponseId} locale={dummyLocale} @@ -158,7 +158,7 @@ describe("SingleResponseCard", () => { environmentTags={[]} environment={dummyEnvironment} updateResponse={dummyUpdateResponse} - deleteResponses={dummyDeleteResponses} + updateResponseList={dummyUpdateResponseList} isReadOnly={false} setSelectedResponseId={dummySetSelectedResponseId} locale={dummyLocale} diff --git a/apps/web/modules/analysis/components/SingleResponseCard/index.tsx b/apps/web/modules/analysis/components/SingleResponseCard/index.tsx index 5c589d853f..03358ac075 100644 --- a/apps/web/modules/analysis/components/SingleResponseCard/index.tsx +++ b/apps/web/modules/analysis/components/SingleResponseCard/index.tsx @@ -23,7 +23,7 @@ interface SingleResponseCardProps { environmentTags: TTag[]; environment: TEnvironment; updateResponse?: (responseId: string, responses: TResponse) => void; - deleteResponses?: (responseIds: string[]) => void; + updateResponseList?: (responseIds: string[]) => void; isReadOnly: boolean; setSelectedResponseId?: (responseId: string | null) => void; locale: TUserLocale; @@ -36,7 +36,7 @@ export const SingleResponseCard = ({ environmentTags, environment, updateResponse, - deleteResponses, + updateResponseList, isReadOnly, setSelectedResponseId, locale, @@ -87,7 +87,7 @@ export const SingleResponseCard = ({ throw new Error(t("common.not_authorized")); } await deleteResponseAction({ responseId: response.id }); - deleteResponses?.([response.id]); + updateResponseList?.([response.id]); router.refresh(); if (setSelectedResponseId) setSelectedResponseId(null); toast.success(t("environments.surveys.responses.response_deleted_successfully")); diff --git a/apps/web/modules/ee/contacts/[contactId]/components/response-feed.tsx b/apps/web/modules/ee/contacts/[contactId]/components/response-feed.tsx index e3150bc901..d3f8a46192 100644 --- a/apps/web/modules/ee/contacts/[contactId]/components/response-feed.tsx +++ b/apps/web/modules/ee/contacts/[contactId]/components/response-feed.tsx @@ -39,14 +39,12 @@ export const ResponseFeed = ({ setFetchedResponses(responses); }, [responses]); - const deleteResponses = (responseIds: string[]) => { - setFetchedResponses(responses.filter((response) => !responseIds.includes(response.id))); + const updateResponseList = (responseIds: string[]) => { + setFetchedResponses((prev) => prev.filter((r) => !responseIds.includes(r.id))); }; const updateResponse = (responseId: string, updatedResponse: TResponse) => { - setFetchedResponses( - responses.map((response) => (response.id === responseId ? updatedResponse : response)) - ); + setFetchedResponses((prev) => prev.map((r) => (r.id === responseId ? updatedResponse : r))); }; return ( @@ -62,7 +60,7 @@ export const ResponseFeed = ({ user={user} environmentTags={environmentTags} environment={environment} - deleteResponses={deleteResponses} + updateResponseList={updateResponseList} updateResponse={updateResponse} locale={locale} projectPermission={projectPermission} @@ -79,7 +77,7 @@ const ResponseSurveyCard = ({ user, environmentTags, environment, - deleteResponses, + updateResponseList, updateResponse, locale, projectPermission, @@ -89,7 +87,7 @@ const ResponseSurveyCard = ({ user: TUser; environmentTags: TTag[]; environment: TEnvironment; - deleteResponses: (responseIds: string[]) => void; + updateResponseList: (responseIds: string[]) => void; updateResponse: (responseId: string, response: TResponse) => void; locale: TUserLocale; projectPermission: TTeamPermission | null; @@ -114,7 +112,7 @@ const ResponseSurveyCard = ({ user={user} environmentTags={environmentTags} environment={environment} - deleteResponses={deleteResponses} + updateResponseList={updateResponseList} updateResponse={updateResponse} isReadOnly={isReadOnly} locale={locale} diff --git a/apps/web/modules/ee/contacts/components/contact-data-view.tsx b/apps/web/modules/ee/contacts/components/contact-data-view.tsx index ea5bf99216..db70b7d252 100644 --- a/apps/web/modules/ee/contacts/components/contact-data-view.tsx +++ b/apps/web/modules/ee/contacts/components/contact-data-view.tsx @@ -3,12 +3,11 @@ import { LoadingSpinner } from "@/modules/ui/components/loading-spinner"; import { debounce } from "lodash"; import dynamic from "next/dynamic"; -import { useRouter } from "next/navigation"; import { useEffect, useMemo, useRef, useState } from "react"; import toast from "react-hot-toast"; import { TContactAttributeKey } from "@formbricks/types/contact-attribute-key"; import { TEnvironment } from "@formbricks/types/environment"; -import { deleteContactAction, getContactsAction } from "../actions"; +import { getContactsAction } from "../actions"; import { TContactTableData, TContactWithAttributes } from "../types/contact"; const ContactsTableDynamic = dynamic(() => import("./contacts-table").then((mod) => mod.ContactsTable), { @@ -33,7 +32,6 @@ export const ContactDataView = ({ hasMore: initialHasMore, initialContacts, }: ContactDataViewProps) => { - const router = useRouter(); const [contacts, setContacts] = useState([...initialContacts]); const [hasMore, setHasMore] = useState(initialHasMore); const [loadingNextPage, setLoadingNextPage] = useState(false); @@ -115,11 +113,8 @@ export const ContactDataView = ({ }; // Delete selected contacts - const deleteContacts = async (contactIds: string[]) => { - await Promise.all(contactIds.map((contactId) => deleteContactAction({ contactId }))); + const updateContactList = (contactIds: string[]) => { setContacts((prevContacts) => prevContacts.filter((contact) => !contactIds.includes(contact.id))); - - router.refresh(); }; // Prepare data for the ContactTable component @@ -144,7 +139,7 @@ export const ContactDataView = ({ fetchNextPage={fetchNextPage} hasMore={hasMore} isDataLoaded={isFirstRender.current ? true : isDataLoaded} - deleteContacts={deleteContacts} + updateContactList={updateContactList} environmentId={environment.id} searchValue={searchValue} setSearchValue={setSearchValue} diff --git a/apps/web/modules/ee/contacts/components/contacts-table.tsx b/apps/web/modules/ee/contacts/components/contacts-table.tsx index 9b4a57c864..0c748bcc0b 100644 --- a/apps/web/modules/ee/contacts/components/contacts-table.tsx +++ b/apps/web/modules/ee/contacts/components/contacts-table.tsx @@ -36,7 +36,7 @@ interface ContactsTableProps { data: TContactTableData[]; fetchNextPage: () => void; hasMore: boolean; - deleteContacts: (contactIds: string[]) => void; + updateContactList: (contactIds: string[]) => void; isDataLoaded: boolean; environmentId: string; searchValue: string; @@ -48,7 +48,7 @@ export const ContactsTable = ({ data, fetchNextPage, hasMore, - deleteContacts, + updateContactList, isDataLoaded, environmentId, searchValue, @@ -234,7 +234,7 @@ export const ContactsTable = ({ setIsTableSettingsModalOpen={setIsTableSettingsModalOpen} isExpanded={isExpanded ?? false} table={table} - deleteRowsAction={deleteContacts} + updateRowList={updateContactList} type="contact" deleteAction={deleteContact} /> diff --git a/apps/web/modules/ui/components/data-table/components/data-table-toolbar.tsx b/apps/web/modules/ui/components/data-table/components/data-table-toolbar.tsx index 5722deefaf..17158e3304 100644 --- a/apps/web/modules/ui/components/data-table/components/data-table-toolbar.tsx +++ b/apps/web/modules/ui/components/data-table/components/data-table-toolbar.tsx @@ -14,7 +14,7 @@ interface DataTableToolbarProps { setIsExpanded: (isExpanded: boolean) => void; isExpanded: boolean; table: Table; - deleteRowsAction: (rowIds: string[]) => void; + updateRowList: (rowIds: string[]) => void; type: "response" | "contact"; deleteAction: (id: string) => Promise; downloadRowsAction?: (rowIds: string[], format: string) => Promise; @@ -25,7 +25,7 @@ export const DataTableToolbar = ({ setIsTableSettingsModalOpen, isExpanded, table, - deleteRowsAction, + updateRowList, type, deleteAction, downloadRowsAction, @@ -38,7 +38,7 @@ export const DataTableToolbar = ({ {table.getFilteredSelectedRowModel().rows.length > 0 ? ( ({ describe("SelectedRowSettings", () => { const rows = [{ id: "r1" }, { id: "r2" }]; let table: any; - let deleteRowsAction: ReturnType; + let updateRowList: ReturnType; let deleteAction: ReturnType; let downloadRowsAction: ReturnType; @@ -39,7 +39,7 @@ describe("SelectedRowSettings", () => { getFilteredSelectedRowModel: () => ({ rows }), toggleAllPageRowsSelected: vi.fn(), }; - deleteRowsAction = vi.fn(); + updateRowList = vi.fn(); deleteAction = vi.fn(() => Promise.resolve()); downloadRowsAction = vi.fn(); @@ -57,7 +57,7 @@ describe("SelectedRowSettings", () => { render( { render( @@ -88,7 +88,7 @@ describe("SelectedRowSettings", () => { render( { render( { fireEvent.click(screen.getByText("Confirm Delete")); await waitFor(() => { expect(deleteAction).toHaveBeenCalledTimes(2); - expect(deleteRowsAction).toHaveBeenCalledWith(["r1", "r2"]); + expect(updateRowList).toHaveBeenCalledWith(["r1", "r2"]); expect(toast.success).toHaveBeenCalledWith("common.table_items_deleted_successfully"); }); }); @@ -129,7 +129,7 @@ describe("SelectedRowSettings", () => { render( { render( { fireEvent.click(screen.getByText("Confirm Delete")); await waitFor(() => { expect(deleteAction).toHaveBeenCalledTimes(2); - expect(deleteRowsAction).toHaveBeenCalledWith(["r1", "r2"]); + expect(updateRowList).toHaveBeenCalledWith(["r1", "r2"]); expect(toast.success).toHaveBeenCalledWith("common.table_items_deleted_successfully"); }); }); @@ -170,7 +170,7 @@ describe("SelectedRowSettings", () => { render( { table: Table; - deleteRowsAction: (rowId: string[]) => void; + updateRowList: (rowId: string[]) => void; type: "response" | "contact"; deleteAction: (id: string) => Promise; downloadRowsAction?: (rowIds: string[], format: string) => Promise; @@ -26,7 +26,7 @@ interface SelectedRowSettingsProps { export const SelectedRowSettings = ({ table, - deleteRowsAction, + updateRowList, type, deleteAction, downloadRowsAction, @@ -55,7 +55,8 @@ export const SelectedRowSettings = ({ await Promise.all(rowsToBeDeleted.map((rowId) => deleteAction(rowId))); } - deleteRowsAction(rowsToBeDeleted); + // Update the row list UI + updateRowList(rowsToBeDeleted); toast.success(t("common.table_items_deleted_successfully", { type: capitalizeFirstLetter(type) })); } catch (error) { if (error instanceof Error) {