Compare commits
2 Commits
2cf4f26a9d
...
01a8d02d60
| Author | SHA1 | Date | |
|---|---|---|---|
| 01a8d02d60 | |||
| f9db9cd8ca |
@@ -56,7 +56,7 @@ export function ProjectProvider({ children }: { children: React.ReactNode }) {
|
||||
const { currentWorkspace } = useWorkspace();
|
||||
const [projects, setProjects] = useState<Project[]>([]);
|
||||
const [activeProjectId, setActiveProjectId] = useState<string | null>(null);
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
const [isLoading, setIsLoading] = useState(true);
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
|
||||
// Use ref to avoid recreating loadProjects when currentWorkspace changes
|
||||
|
||||
@@ -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