feat: add drag-and-drop to BannerEditor and CreatorLogoEditor

This commit is contained in:
2025-04-24 22:11:44 -04:00
parent 22f9d5c6bd
commit 1a899de0b3
2 changed files with 50 additions and 2 deletions

View File

@@ -41,7 +41,10 @@
/> />
</div> </div>
<div v-else class="image-preview-container" @click="startEditing"> <div v-else class="image-preview-container"
@click="startEditing"
@dragover.prevent
@drop.prevent="handleDrop">
<img <img
:src="fileUrl || fallbackUrl" :src="fileUrl || fallbackUrl"
:alt="t('preview')" :alt="t('preview')"
@@ -209,6 +212,20 @@ const cancel = () => {
} }
emits('closeRequested') emits('closeRequested')
} }
// Add drop handler
const handleDrop = (event) => {
const file = event.dataTransfer.files[0]
if (file && file.type.startsWith('image/')) {
selectedFile.value = file
const reader = new FileReader()
reader.onload = (e) => {
fileUrl.value = e.target.result
showCropper.value = true
}
reader.readAsDataURL(file)
}
}
</script> </script>
<style scoped> <style scoped>
@@ -226,6 +243,12 @@ const cancel = () => {
@apply rounded-lg; @apply rounded-lg;
@apply relative; @apply relative;
@apply cursor-pointer; @apply cursor-pointer;
@apply border-2;
@apply border-dashed;
@apply border-gray-300;
@apply hover:border-gray-500;
@apply transition-colors;
@apply duration-200;
} }
.preview-image { .preview-image {

View File

@@ -42,7 +42,10 @@
/> />
</div> </div>
<div v-else class="image-preview-container" @click="startEditing"> <div v-else class="image-preview-container"
@click="startEditing"
@dragover.prevent
@drop.prevent="handleDrop">
<div class="circular-preview"> <div class="circular-preview">
<img <img
:src="fileUrl || fallbackUrl" :src="fileUrl || fallbackUrl"
@@ -216,6 +219,20 @@ const cancel = () => {
} }
emits('closeRequested') emits('closeRequested')
} }
// Add drop handler
const handleDrop = (event) => {
const file = event.dataTransfer.files[0]
if (file && file.type.startsWith('image/')) {
selectedFile.value = file
const reader = new FileReader()
reader.onload = (e) => {
fileUrl.value = e.target.result
showCropper.value = true
}
reader.readAsDataURL(file)
}
}
</script> </script>
<style scoped> <style scoped>
@@ -229,6 +246,14 @@ const cancel = () => {
@apply flex; @apply flex;
@apply justify-center; @apply justify-center;
@apply items-center; @apply items-center;
@apply border-2;
@apply border-dashed;
@apply border-gray-300;
@apply hover:border-gray-500;
@apply transition-colors;
@apply duration-200;
@apply rounded-lg;
@apply p-4;
} }
.circular-preview { .circular-preview {