diff --git a/src/routes/spaces/+page.svelte b/src/routes/spaces/+page.svelte index 87dc3a11..2a55ec5b 100644 --- a/src/routes/spaces/+page.svelte +++ b/src/routes/spaces/+page.svelte @@ -101,6 +101,8 @@ const onDragStart = (e: DragEvent, url: string) => { draggedUrl = url dragStartOrder = [...orderedSpaceUrls] + lastDragTarget = undefined + didDrop = false if (e.dataTransfer) { e.dataTransfer.effectAllowed = "move" @@ -108,15 +110,25 @@ } } - const onDragOver = (e: DragEvent, targetUrl: string) => { + const onDragOver = (e: DragEvent) => { e.preventDefault() + } + + const onDragEnter = (e: DragEvent, targetUrl: string) => { + e.preventDefault() + + if (lastDragTarget === targetUrl) return + + lastDragTarget = targetUrl reorderSpaceUrls(targetUrl) } const onDrop = (e: DragEvent, targetUrl: string) => { e.preventDefault() reorderSpaceUrls(targetUrl) + didDrop = true draggedUrl = undefined + lastDragTarget = undefined if (dragStartOrder && !isSameOrder(dragStartOrder, orderedSpaceUrls)) { void setSpaceMembershipOrder(orderedSpaceUrls).catch(console.error) @@ -126,8 +138,14 @@ } const onDragEnd = () => { + if (!didDrop && dragStartOrder && !isSameOrder(dragStartOrder, orderedSpaceUrls)) { + orderedSpaceUrls = dragStartOrder + } + draggedUrl = undefined dragStartOrder = undefined + lastDragTarget = undefined + didDrop = false } $effect(() => { @@ -146,6 +164,8 @@ let orderedSpaceUrls = $state([]) let draggedUrl = $state() let dragStartOrder = $state() + let lastDragTarget = $state() + let didDrop = $state(false) const openSearch = () => { showSearch = true @@ -183,8 +203,8 @@ }) - - + + {#if showSearch} - +
{#each PLATFORM_RELAYS as url (url)}