From 44238d88deced638dbbefcdcacbb794a992ca6f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20G=C3=B6bel?= <dgoebel@techfak.uni-bielefeld.de> Date: Tue, 27 Sep 2022 10:42:39 +0200 Subject: [PATCH] Add delete modal to confirm deletion of objects #13 --- src/components/BucketView.vue | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/components/BucketView.vue b/src/components/BucketView.vue index 819a2a2..b43e2c3 100644 --- a/src/components/BucketView.vue +++ b/src/components/BucketView.vue @@ -17,6 +17,7 @@ import CopyObjectModal from "@/components/Modals/CopyObjectModal.vue"; import PermissionModal from "@/components/Modals/PermissionModal.vue"; import ObjectDetailModal from "@/components/Modals/ObjectDetailModal.vue"; import CreateFolderModal from "@/components/Modals/CreateFolderModal.vue"; +import DeleteModal from "@/components/Modals/DeleteModal.vue" import { S3Client, DeleteObjectCommand, @@ -121,6 +122,8 @@ const objectState = reactive({ createdPermission: undefined, deletedItem: "", editObjectKey: "", + potentialObjectToDelete: "", + deleteFolder: true, copyObject: { key: "", size: 0, @@ -141,6 +144,8 @@ const objectState = reactive({ createdPermission: undefined | BucketPermission; deletedItem: string; editObjectKey: string; + potentialObjectToDelete: string; + deleteFolder: boolean; copyObject: S3ObjectMetaInformation; viewDetailObject: S3ObjectMetaInformation; }); @@ -388,11 +393,16 @@ function objectCopied(copiedObject: S3ObjectMetaInformation) { } } +function deleteObject(key: string) { + objectState.potentialObjectToDelete = key; + objectState.deleteFolder = false; +} + /** * Delete an Object in the current folder * @param key Key of the Object */ -function deleteObject(key: string) { +function confirmedDeleteObject(key: string) { const command = new DeleteObjectCommand({ Bucket: props.bucketName, Key: key, @@ -432,11 +442,16 @@ async function downloadObject(key: string, bucket: string) { document.body.removeChild(element); } +function deleteFolder(folderPath: string) { + objectState.potentialObjectToDelete = folderPath; + objectState.deleteFolder = true; +} + /** * Delete a folder in the current Bucket * @param folderPath Path to the folder with a trailing "/", e.g. some/path/to/a/folder/ */ -function deleteFolder(folderPath: string) { +function confirmedDeleteFolder(folderPath: string) { const command = new DeleteObjectsCommand({ Bucket: props.bucketName, Delete: { @@ -506,6 +521,13 @@ watch( </div> </div> </div> + <DeleteModal + modalID="delete-object-modal" + modal-label="some-label" + :object-name-delete="objectState.potentialObjectToDelete" + :back-modal-id="undefined" + @confirm-delete="objectState.deleteFolder ? confirmedDeleteFolder(objectState.potentialObjectToDelete) : confirmedDeleteObject(objectState.potentialObjectToDelete)" + /> <!-- Navbar Breadcrumb --> <nav aria-label="breadcrumb" class="fs-2"> <ol class="breadcrumb"> @@ -805,6 +827,8 @@ watch( class="dropdown-item text-danger align-middle" type="button" @click="deleteObject(obj.key)" + data-bs-toggle="modal" + data-bs-target="#delete-object-modal" :disabled="!writeS3Permission" > <bootstrap-icon @@ -825,6 +849,8 @@ watch( type="button" class="btn btn-danger btn-sm align-middle" :disabled="!writeS3Permission" + data-bs-toggle="modal" + data-bs-target="#delete-object-modal" @click=" deleteFolder( obj.parentFolder.concat(['']).join('/') + obj.name + '/' -- GitLab