From 0e0a77d4c98a447355e5afc24d0e6710d52c793e Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Wed, 1 Oct 2025 23:50:32 +0200 Subject: [PATCH] preparing file deletion Signed-off-by: Stephan Richter --- .../srsoftware/umbrella/files/FileModule.java | 3 ++ frontend/src/routes/files/Index.svelte | 35 ++++++++++++++++--- translations/src/main/resources/de.json | 1 + translations/src/main/resources/en.json | 1 + 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/files/src/main/java/de/srsoftware/umbrella/files/FileModule.java b/files/src/main/java/de/srsoftware/umbrella/files/FileModule.java index b401cf5..1d2abfc 100644 --- a/files/src/main/java/de/srsoftware/umbrella/files/FileModule.java +++ b/files/src/main/java/de/srsoftware/umbrella/files/FileModule.java @@ -136,6 +136,7 @@ public class FileModule extends BaseHandler implements FileService { if (file.isDirectory()){ Map map = getDirectory(file); map.put("title",filename.replace("/company/"+cpId,company.name())); + map.put("delete",true); return sendContent(ex,map); } return getFile(ex, file); @@ -192,6 +193,7 @@ public class FileModule extends BaseHandler implements FileService { if (file.isDirectory()){ Map map = getDirectory(file); map.put("title",filename.replace("/project/"+prjId,project.name())); + map.put("delete",true); return sendContent(ex,map); } return getFile(ex, file); @@ -214,6 +216,7 @@ public class FileModule extends BaseHandler implements FileService { if (file.isDirectory()){ Map map = getDirectory(file); map.put("title",filename); + map.put("delete",true); return sendContent(ex,map); } return getFile(ex, file); diff --git a/frontend/src/routes/files/Index.svelte b/frontend/src/routes/files/Index.svelte index ddb6458..87582e3 100644 --- a/frontend/src/routes/files/Index.svelte +++ b/frontend/src/routes/files/Index.svelte @@ -12,8 +12,8 @@ let files = $state(); let parent = $state(false); let form = $state(false); - let path = $state(null) - + let path = $state(null); + let delete_allowed = $state(false); let available = $derived.by(isAvailable); function isAvailable(){ @@ -50,11 +50,33 @@ return false; } + function dropDir(p,name){ + if (confirm(t('confirm_delete',{element:name})+"\n\n"+t('deletes_nested'))) dropElement(p); + } + + + async function dropElement(url){ + const res = await fetch(url,{ + credentials: 'include', + method: 'DELETE' + }); + if (res.ok) { + handleDirectory(res); + } else { + error(res); + } + } + + function dropFile(p,name){ + if (confirm(t('confirm_delete',{element:name}))) dropElement(p); + } + async function handleDirectory(res){ let json = await res.json(); if (json.dirs) children.dirs = json.dirs; if (json.files) children.files = json.files; if (json.title) children.title = json.title; + delete_allowed = json.delete; yikes(); } @@ -136,7 +158,9 @@
  • {v} - + {#if delete_allowed} + + {/if}
  • {/each} {/if} @@ -153,7 +177,10 @@ {#each Object.entries(children.files) as [k,v]}
  • - {v} + {v} + {#if delete_allowed} + + {/if}
  • {/each} {/if} diff --git a/translations/src/main/resources/de.json b/translations/src/main/resources/de.json index 78f7e1c..e0bbbfe 100644 --- a/translations/src/main/resources/de.json +++ b/translations/src/main/resources/de.json @@ -52,6 +52,7 @@ "delete": "löschen", "delete_object": "{object} löschen", "DELETE_USERS": "Nutzer löschen", + "deletes_nested": "Das wird auch alle enthaltenen Dateien löschen!", "delivery_date": "Lieferdatum", "depends_on": "hängt ab von", "description": "Beschreibung", diff --git a/translations/src/main/resources/en.json b/translations/src/main/resources/en.json index 7b11612..1e08120 100644 --- a/translations/src/main/resources/en.json +++ b/translations/src/main/resources/en.json @@ -52,6 +52,7 @@ "delete": "delete", "delete_object": "delete {object}", "DELETE_USERS": "delete user", + "deletes_nested": "This will also delete all contained files!", "delivery_date": "delivery date", "depends_on": "depends on", "description": "description",