4410-feat(front): Implement Confirmation Prompt for Multiple Record Deletion (#4514)

* feat: implement confirmation prompt

* feat: remove prop drilling and introduce recoil state

* chore: fix eslint issues

* feat: set record text according to length of records

* chore: fix eslint issues

* refactor: made changes according to code review

* fix: show delete according to singular and plural records.

* fix: eslint issues

* feat: show number of selected records

* style: fix positioning of actionbar

* feat: display ConfirmationModal seperately

* chore: remove recoil state and use usestate instead

* chore: minor change

---------

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
This commit is contained in:
Anchit Sinha
2024-03-29 22:48:21 +05:30
committed by GitHub
parent aaf429a907
commit 7f3623239a
5 changed files with 64 additions and 17 deletions

View File

@ -1,4 +1,4 @@
import { useCallback, useMemo } from 'react';
import { useCallback, useMemo, useState } from 'react';
import { isNonEmptyString } from '@sniptt/guards';
import { useRecoilCallback, useSetRecoilState } from 'recoil';
@ -17,6 +17,7 @@ import {
IconPuzzle,
IconTrash,
} from '@/ui/display/icon';
import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal';
import { actionBarEntriesState } from '@/ui/navigation/action-bar/states/actionBarEntriesState';
import { contextMenuEntriesState } from '@/ui/navigation/context-menu/states/contextMenuEntriesState';
import { ContextMenuEntry } from '@/ui/navigation/context-menu/types/ContextMenuEntry';
@ -36,6 +37,8 @@ export const useRecordActionBar = ({
}: useRecordActionBarProps) => {
const setContextMenuEntries = useSetRecoilState(contextMenuEntriesState);
const setActionBarEntriesState = useSetRecoilState(actionBarEntriesState);
const [isDeleteRecordsModalOpen, setIsDeleteRecordsModalOpen] =
useState(false);
const { createFavorite, favorites, deleteFavorite } = useFavorites();
@ -106,10 +109,26 @@ export const useRecordActionBar = ({
const baseActions: ContextMenuEntry[] = useMemo(
() => [
{
label: `Delete (${selectedRecordIds.length})`,
label: 'Delete',
Icon: IconTrash,
accent: 'danger',
onClick: () => handleDeleteClick(),
onClick: () => setIsDeleteRecordsModalOpen(true),
ConfirmationModal: (
<ConfirmationModal
isOpen={isDeleteRecordsModalOpen}
setIsOpen={setIsDeleteRecordsModalOpen}
title={`Delete ${selectedRecordIds.length} ${
selectedRecordIds.length === 1 ? `record` : 'records'
}`}
subtitle={`This action cannot be undone. This will permanently delete ${
selectedRecordIds.length === 1 ? 'this record' : 'these records'
}`}
onConfirmClick={() => handleDeleteClick()}
deleteButtonText={`Delete ${
selectedRecordIds.length > 1 ? 'Records' : 'Record'
}`}
/>
),
},
{
label: `${progress === undefined ? `Export` : `Export (${progress}%)`}`,
@ -118,7 +137,14 @@ export const useRecordActionBar = ({
onClick: () => download(),
},
],
[handleDeleteClick, download, progress, selectedRecordIds],
[
handleDeleteClick,
download,
progress,
selectedRecordIds,
isDeleteRecordsModalOpen,
setIsDeleteRecordsModalOpen,
],
);
const dataExecuteQuickActionOnmentEnabled = useIsFeatureEnabled(

View File

@ -18,5 +18,5 @@ export const RecordBoardActionBar = ({
return null;
}
return <ActionBar />;
return <ActionBar selectedIds={selectedRecordIds} />;
};

View File

@ -16,5 +16,5 @@ export const RecordTableActionBar = ({
return null;
}
return <ActionBar />;
return <ActionBar selectedIds={selectedRowIds} />;
};