From 6fb84c97feb91c699f59f0ff52d4f5e994ee448d Mon Sep 17 00:00:00 2001 From: Arthur DANJOU Date: Thu, 19 Sep 2024 16:55:33 +0200 Subject: [PATCH] Working on dnd --- app/components/App/Tab.vue | 27 ++++++++++++++++++++++++++- app/components/App/Weather.vue | 4 ++-- drizzle.config.ts | 6 +++--- package.json | 1 + server/api/weather.get.ts | 4 ++-- server/database/schema.ts | 7 ++++--- server/utils/db.ts | 2 +- types/types.ts | 9 +++++++++ 8 files changed, 48 insertions(+), 12 deletions(-) diff --git a/app/components/App/Tab.vue b/app/components/App/Tab.vue index 5196eaf..bea11cf 100644 --- a/app/components/App/Tab.vue +++ b/app/components/App/Tab.vue @@ -53,6 +53,30 @@ function visitLink(clickType: 'self' | 'extern') { window.open(props.tab.link, clickType === 'self' ? '_self' : '_blank') } } + +const draggedItemIndex = ref(null) + +function onDragStart(event, index) { + draggedItemIndex.value = index + event.dataTransfer.effectAllowed = 'move' +} + +function onDragOver(event) { + event.preventDefault() // Allow drop by preventing the default action + event.dataTransfer.dropEffect = 'move' +} + +function onDrop(event, index) { + event.preventDefault() + + // Swap the dragged item with the dropped position + const draggedIndex = draggedItemIndex.value + const draggedItem = items.value[draggedIndex] + items.value.splice(draggedIndex, 1) // Remove dragged item + items.value.splice(index, 0, draggedItem) // Insert dragged item at new index + + draggedItemIndex.value = null // Reset dragged index +}