diff --git a/src/platform/assets/components/MediaAssetCard.vue b/src/platform/assets/components/MediaAssetCard.vue index ae9671102..15a423bf9 100644 --- a/src/platform/assets/components/MediaAssetCard.vue +++ b/src/platform/assets/components/MediaAssetCard.vue @@ -46,6 +46,18 @@ @image-loaded="handleImageLoaded" /> +
+
+
+ + +
+
+
@@ -198,6 +211,7 @@ const contextMenu = ref>() const isVideoPlaying = ref(false) const showVideoControls = ref(false) +const isDeleting = ref(false) // Store actual image dimensions const imageDimensions = ref<{ width: number; height: number } | undefined>() @@ -272,7 +286,7 @@ const metaInfo = computed(() => { }) const showActionsOverlay = computed(() => { - if (loading || !asset) return false + if (loading || !asset || isDeleting.value) return false return isHovered.value || selected || isVideoPlaying.value }) diff --git a/src/platform/assets/components/MediaAssetContextMenu.vue b/src/platform/assets/components/MediaAssetContextMenu.vue index d2b456c16..d10387030 100644 --- a/src/platform/assets/components/MediaAssetContextMenu.vue +++ b/src/platform/assets/components/MediaAssetContextMenu.vue @@ -55,6 +55,7 @@ const { asset, assetType, fileKind, showDeleteButton } = defineProps<{ const emit = defineEmits<{ zoom: [] 'asset-deleted': [] + 'asset-deleting': [boolean] }>() const contextMenu = ref>() @@ -172,7 +173,9 @@ const contextMenuItems = computed(() => { icon: 'icon-[lucide--trash-2]', command: async () => { if (asset) { - const success = await actions.confirmDelete(asset) + const success = await actions.confirmDelete(asset, (deleting) => { + emit('asset-deleting', deleting) + }) if (success) { emit('asset-deleted') } diff --git a/src/platform/assets/composables/useMediaAssetActions.ts b/src/platform/assets/composables/useMediaAssetActions.ts index ec17364d1..24ac98dfb 100644 --- a/src/platform/assets/composables/useMediaAssetActions.ts +++ b/src/platform/assets/composables/useMediaAssetActions.ts @@ -139,7 +139,10 @@ export function useMediaAssetActions() { * @param asset The asset to delete * @returns true if the asset was deleted, false otherwise */ - const confirmDelete = async (asset: AssetItem): Promise => { + const confirmDelete = async ( + asset: AssetItem, + onDeleting?: (deleting: boolean) => void + ): Promise => { const assetType = getAssetType(asset) return new Promise((resolve) => { @@ -152,8 +155,13 @@ export function useMediaAssetActions() { type: 'delete', itemList: [asset.name], onConfirm: async () => { - const success = await deleteAsset(asset, assetType) - resolve(success) + onDeleting?.(true) + try { + const success = await deleteAsset(asset, assetType) + resolve(success) + } finally { + onDeleting?.(false) + } }, onCancel: () => { resolve(false)