diff --git a/client/src/hooks/meetings/use-meeting-mutations.ts b/client/src/hooks/meetings/use-meeting-mutations.ts index 8817540..4e77f3f 100644 --- a/client/src/hooks/meetings/use-meeting-mutations.ts +++ b/client/src/hooks/meetings/use-meeting-mutations.ts @@ -97,7 +97,11 @@ interface DeleteMeetingsContext { removedMeetings: Map; } -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 diff --git a/client/src/pages/Meetings.tsx b/client/src/pages/Meetings.tsx index c57dca6..994adf4 100644 --- a/client/src/pages/Meetings.tsx +++ b/client/src/pages/Meetings.tsx @@ -55,7 +55,16 @@ export default function MeetingsPage() { const [isSelectionMode, setIsSelectionMode] = useState(false); const [selectedMeetingIds, setSelectedMeetingIds] = useState>(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 = () => {