Added deletion and renaming of files and deletion of directories

This commit is contained in:
2025-12-23 17:42:33 +01:00
parent 3a52b85dfb
commit 48bc66b89a
2 changed files with 162 additions and 13 deletions

View File

@@ -51,10 +51,10 @@
>
<div class="flex h-full flex-col gap-4 p-4">
{@render header?.()}
<div class="overflow-y-auto">
<div class="grow overflow-y-auto">
{@render children?.()}
</div>
<div class="grow"></div>
<!-- <div class="grow"></div> -->
<!-- svelte-ignore a11y_autofocus -->
<div class="flex justify-end gap-4">
{@render actionButtons?.()}

View File

@@ -24,6 +24,12 @@
let showNewDir = $state(false);
let newDirName = $state("");
let showDeleteDir = $state(false);
let dirToDelete: Directory | undefined = $state();
let showRenameFile = $state(false);
let fileToRename: Ressource | undefined = $state();
let newFileName = $state("");
function handleFileChange(event: Event) {
const target = event.target as HTMLInputElement | null;
@@ -67,6 +73,54 @@
});
}
function deleteRessource(res: Ressource | Directory) {
if (isRessource(res)) {
axios
.delete(url("/cdn/" + res.user + "/" + res.filename), {
withCredentials: true
})
.then((response) => {
if (response.status === 200) {
fetchDirectory();
} else {
alert("Something went wrong: " + response.status);
}
});
} else if (isDir(res)) {
showDeleteDir = true;
dirToDelete = res;
}
}
async function deleteDir() {
return axios
.delete(url("/directory"), {
headers: {
"Content-Type": "application/json"
},
data: { path: path + (path === "/" ? "" : "/") + dirToDelete?.name },
withCredentials: true
})
.then((response) => {
if (response.status === 200) {
fetchDirectory();
dirToDelete = undefined;
return true;
} else {
alert("Failed to delete directory: " + response.status);
}
return false;
})
.catch((err) => {
console.error(err);
return false;
});
}
function deleteDirCancel() {
dirToDelete = undefined;
}
async function fetchDirectory() {
fetchingRessources = true;
return axios
@@ -148,6 +202,44 @@
}
}
function renameRessource(res: Ressource) {
fileToRename = res;
newFileName = res.name;
showRenameFile = true;
}
async function renameFile() {
if (fileToRename === undefined) return false;
return axios
.put(
url("/cdn/" + fileToRename.user + "/" + fileToRename.filename),
{
name: newFileName
},
{ withCredentials: true }
)
.then((response) => {
if (response.status === 200) {
fetchDirectory();
fileToRename = undefined;
newFileName = "";
return true;
} else {
alert("Failed to rename File: " + response.status);
}
return false;
})
.catch((err) => {
console.error(err);
return false;
});
}
function renameFileCancel() {
fileToRename = undefined;
newFileName = "";
}
function cancel() {
selectedRessource = undefined;
}
@@ -173,10 +265,10 @@
{#snippet header()}
<h2 class="text-3xl">Ressourcenmanager - {path}</h2>
{/snippet}
<div>
<div class="h-full">
{#if fetchingRessources}
Loading...
{:else}
{:else if ressources.length > 0}
<div class="flex flex-col gap-2">
{#each ressources as ressource}
<!-- svelte-ignore a11y_click_events_have_key_events -->
@@ -202,18 +294,40 @@
{ressource.name}
{/if}
</div>
{#if !(isDir(ressource) && ressource.name === "..")}
<div class="flex gap-4">
{#if isRessource(ressource)}
<!-- svelte-ignore a11y_consider_explicit_label -->
<button
type="button"
class="btn border-black"
onclick={(event) => {
event.stopPropagation();
renameRessource(ressource);
}}><i class="fa-solid fa-pencil"></i></button
>
{/if}
<!-- svelte-ignore a11y_consider_explicit_label -->
<button
type="button"
class="btn border-red-600 text-red-600"
onclick={(event) => {
event.stopPropagation();
console.log("delete", ressource.name);
deleteRessource(ressource);
}}><i class="fa-solid fa-trash"></i></button
>
</div>
{/if}
</div>
{/each}
</div>
{:else}
<div class="flex h-full w-full grow-2 flex-col items-center justify-center">
<div class="text-[128px] text-gray-300"><i class="fa-solid fa-database"></i></div>
<div class="text-[24px] text-gray-500 select-none">
Noch keine Ressourcen vorhanden
</div>
</div>
{/if}
</div>
{#snippet actionButtons()}
@@ -251,6 +365,41 @@
</div>
</Modal>
<Modal bind:showModal={showDeleteDir} okFn={deleteDir} cancelFn={deleteDirCancel}>
{#snippet header()}
<h2 class="text-3xl">Ordner löschen</h2>
{/snippet}
<div>
Soll der Ordner {dirToDelete?.name} wirklich gelöscht werden? Alle darin enthaltenen Daten gehen
verloren.
</div>
{#if error.length > 0}
<div class="text-red-700">{error}</div>
{/if}
</Modal>
<Modal bind:showModal={showRenameFile} okFn={renameFile} cancelFn={renameFileCancel}>
{#snippet header()}
<h2 class="text-3xl">Datei umbenennen</h2>
{/snippet}
<div>
<label for="directory" class="">Name</label>
<div>
<input
type="text"
name="directory"
id="directory"
class="borders mt-2 mb-2 w-full"
bind:value={newFileName}
/>
</div>
{#if error.length > 0}
<div class="text-red-700">{error}</div>
{/if}
</div>
</Modal>
<style>
.borders {
border: 1px solid black;