MCPcopy
hub / github.com/stravu/crystal / handleDeleteFolder

Function handleDeleteFolder

frontend/src/components/DraggableProjectTreeView.tsx:898–998  ·  view source on GitHub ↗
(folder: Folder, projectId: number)

Source from the content-addressed store, hash-verified

896 );
897
898 const handleDeleteFolder = async (folder: Folder, projectId: number) => {
899 // Check if folder has sessions
900 const project = projectsWithSessions.find(p => p.id === projectId);
901 if (!project) return;
902
903 const folderSessions = project.sessions.filter(s => s.folderId === folder.id);
904
905 // Show confirmation dialog
906 const message = folderSessions.length > 0
907 ? `Delete folder "${folder.name}" and permanently delete ${folderSessions.length} session${folderSessions.length > 1 ? 's' : ''} inside it? This action cannot be undone.`
908 : `Delete empty folder "${folder.name}"?`;
909
910 const confirmed = window.confirm(message);
911
912 if (confirmed) {
913 try {
914 // First, delete all sessions in the folder
915 if (folderSessions.length > 0) {
916 console.log(`Deleting ${folderSessions.length} sessions in folder "${folder.name}"`);
917
918 // Mark all sessions as deleting to prevent individual delete operations
919 const sessionIds = folderSessions.map(s => s.id);
920 useSessionStore.getState().setDeletingSessionIds(sessionIds);
921
922 // Delete each session
923 for (const session of folderSessions) {
924 try {
925 const sessionResponse = await API.sessions.delete(session.id);
926 if (!sessionResponse.success) {
927 throw new Error(`Failed to delete session "${session.name}": ${sessionResponse.error}`);
928 }
929 console.log(`Deleted session: ${session.name}`);
930 } catch (error: unknown) {
931 console.error(`Error deleting session ${session.name}:`, error);
932 showError({
933 title: `Failed to delete session "${session.name}"`,
934 error: error instanceof Error ? error.message : 'Unknown error occurred'
935 });
936 // Clear deleting state and stop the operation if a session fails to delete
937 useSessionStore.getState().clearDeletingSessionIds();
938 return;
939 }
940 }
941
942 // Update local state to remove deleted sessions
943 setProjectsWithSessions(prev => prev.map(p => {
944 if (p.id === projectId) {
945 const updatedSessions = p.sessions.filter(s => !folderSessions.some(fs => fs.id === s.id));
946 return { ...p, sessions: updatedSessions };
947 }
948 return p;
949 }));
950
951 // Clear active session if it was one of the deleted sessions
952 const activeSessionId = useSessionStore.getState().activeSessionId;
953 if (activeSessionId && folderSessions.some(s => s.id === activeSessionId)) {
954 useSessionStore.getState().setActiveSession(null);
955 }

Callers 2

renderFolderFunction · 0.85
DraggableProjectTreeViewFunction · 0.85

Calls 4

deleteMethod · 0.80
errorMethod · 0.80
setActiveSessionMethod · 0.80
logMethod · 0.45

Tested by

no test coverage detected