preparing file deletion

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2025-10-01 23:50:32 +02:00
parent 4ed0f80345
commit 0e0a77d4c9
4 changed files with 36 additions and 4 deletions

View File

@@ -136,6 +136,7 @@ public class FileModule extends BaseHandler implements FileService {
if (file.isDirectory()){
Map<String,Object> 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<String,Object> 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<String,Object> map = getDirectory(file);
map.put("title",filename);
map.put("delete",true);
return sendContent(ex,map);
}
return getFile(ex, file);

View File

@@ -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 @@
<li class="dir">
<span class="symbol"></span>
<a href={'/files'+k} {onclick}>{v}</a>
<button class="symbol">x</button>
{#if delete_allowed}
<button class="symbol" onclick={e => dropDir(`/api/files${k}`,v)}></button>
{/if}
</li>
{/each}
{/if}
@@ -153,7 +177,10 @@
{#each Object.entries(children.files) as [k,v]}
<li class="file">
<span class="symbol"></span>
<a href={'/api/files'+k} target="_blank">{v}</a>
<a href={`/api/files${k}`} target="_blank">{v}</a>
{#if delete_allowed}
<button class="symbol" onclick={e => dropFile(`/api/files${k}`,v)}></button>
{/if}
</li>
{/each}
{/if}

View File

@@ -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",

View File

@@ -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",