fix(client): close delete dialog on successful bulk deletion
Added onSuccess callback to useDeleteMeetings hook and use it in Meetings.tsx to close dialog, clear selection, and exit selection mode. Removed flaky useEffect that tried to detect deletion success by checking if meetings still existed in the list.
This commit is contained in:
@@ -97,7 +97,11 @@ interface DeleteMeetingsContext {
|
||||
removedMeetings: Map<string, Meeting>;
|
||||
}
|
||||
|
||||
export function useDeleteMeetings() {
|
||||
interface UseDeleteMeetingsOptions {
|
||||
onSuccess?: (result: DeleteMeetingsResult) => void;
|
||||
}
|
||||
|
||||
export function useDeleteMeetings(options?: UseDeleteMeetingsOptions) {
|
||||
const { toast } = useToast();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
@@ -147,6 +151,8 @@ export function useDeleteMeetings() {
|
||||
description: `Skipped ${result.skippedIds.length} active meeting(s)`,
|
||||
});
|
||||
}
|
||||
|
||||
options?.onSuccess?.(result);
|
||||
},
|
||||
onError: (_error, _meetingIds, context) => {
|
||||
// Restore removed meetings to cache on error
|
||||
|
||||
@@ -55,7 +55,16 @@ export default function MeetingsPage() {
|
||||
const [isSelectionMode, setIsSelectionMode] = useState(false);
|
||||
const [selectedMeetingIds, setSelectedMeetingIds] = useState<Set<string>>(new Set());
|
||||
const [showBulkDeleteDialog, setShowBulkDeleteDialog] = useState(false);
|
||||
const { mutate: deleteMeetings, isLoading: isDeleting } = useDeleteMeetings();
|
||||
|
||||
const handleDeleteSuccess = useCallback(() => {
|
||||
setShowBulkDeleteDialog(false);
|
||||
setSelectedMeetingIds(new Set());
|
||||
setIsSelectionMode(false);
|
||||
}, []);
|
||||
|
||||
const { mutate: deleteMeetings, isLoading: isDeleting } = useDeleteMeetings({
|
||||
onSuccess: handleDeleteSuccess,
|
||||
});
|
||||
|
||||
const shouldSkipFetch =
|
||||
(projectScope === 'selected' && selectedProjectIds.length === 0) ||
|
||||
@@ -169,21 +178,6 @@ export default function MeetingsPage() {
|
||||
deleteMeetings(Array.from(selectedMeetingIds));
|
||||
}, [deleteMeetings, selectedMeetingIds]);
|
||||
|
||||
// Handle successful deletion
|
||||
useEffect(() => {
|
||||
if (!isDeleting && selectedMeetingIds.size > 0) {
|
||||
// Check if deletion was successful by verifying meetings were removed
|
||||
const deletedIds = Array.from(selectedMeetingIds);
|
||||
const stillExists = meetings.some((m) => deletedIds.includes(m.id));
|
||||
if (!stillExists) {
|
||||
setSelectedMeetingIds(new Set());
|
||||
setShowBulkDeleteDialog(false);
|
||||
setIsSelectionMode(false);
|
||||
fetchMeetings(0, false);
|
||||
}
|
||||
}
|
||||
}, [isDeleting, selectedMeetingIds, meetings, fetchMeetings]);
|
||||
|
||||
const hasMore = meetings.length < totalCount;
|
||||
|
||||
const handleLoadMore = () => {
|
||||
|
||||
Reference in New Issue
Block a user