refactor: move project deletion to module

This commit is contained in:
Haileyesus
2026-04-25 20:45:24 +03:00
parent 447f352e7b
commit 7a82fb54dc
8 changed files with 133 additions and 128 deletions

View File

@@ -448,8 +448,7 @@ export function useSidebarController({
return;
}
const { project, sessionCount } = deleteConfirmation;
const isEmpty = sessionCount === 0;
const { project } = deleteConfirmation;
setDeleteConfirmation(null);
// Track in-flight deletes by projectId so the UI can disable actions
@@ -457,13 +456,16 @@ export function useSidebarController({
setDeletingProjects((prev) => new Set([...prev, project.projectId]));
try {
const response = await api.deleteProject(project.projectId, !isEmpty, deleteData);
const response = await api.deleteProject(project.projectId, deleteData);
if (response.ok) {
onProjectDelete?.(project.projectId);
} else {
const error = (await response.json()) as { error?: string };
alert(error.error || t('messages.deleteProjectFailed'));
const data = (await response.json()) as { error?: string | { message?: string } };
const err = data.error;
const message =
typeof err === 'string' ? err : err && typeof err === 'object' && err.message ? err.message : t('messages.deleteProjectFailed');
alert(message);
}
} catch (error) {
console.error('Error deleting project:', error);

View File

@@ -93,10 +93,10 @@ export const api = {
authenticatedFetch(`/api/gemini/sessions/${sessionId}`, {
method: 'DELETE',
}),
deleteProject: (projectId, force = false, deleteData = false) => {
// `hardDelete` => server `?force=true` (remove DB row + Claude *.jsonl + sessions rows for path).
deleteProject: (projectId, hardDelete = false) => {
const params = new URLSearchParams();
if (force) params.set('force', 'true');
if (deleteData) params.set('deleteData', 'true');
if (hardDelete) params.set('force', 'true');
const qs = params.toString();
return authenticatedFetch(`/api/projects/${projectId}${qs ? `?${qs}` : ''}`, {
method: 'DELETE',