Browse Source

preparing file deletion

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
module/files
Stephan Richter 1 month ago
parent
commit
0e0a77d4c9
  1. 3
      files/src/main/java/de/srsoftware/umbrella/files/FileModule.java
  2. 35
      frontend/src/routes/files/Index.svelte
  3. 1
      translations/src/main/resources/de.json
  4. 1
      translations/src/main/resources/en.json

3
files/src/main/java/de/srsoftware/umbrella/files/FileModule.java

@ -136,6 +136,7 @@ public class FileModule extends BaseHandler implements FileService { @@ -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 { @@ -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 { @@ -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);

35
frontend/src/routes/files/Index.svelte

@ -12,8 +12,8 @@ @@ -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 @@ @@ -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 @@ @@ -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 @@ @@ -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}

1
translations/src/main/resources/de.json

@ -52,6 +52,7 @@ @@ -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",

1
translations/src/main/resources/en.json

@ -52,6 +52,7 @@ @@ -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",

Loading…
Cancel
Save