Update src/routes/spaces/+page.svelte
This commit is contained in:
@@ -101,6 +101,8 @@
|
|||||||
const onDragStart = (e: DragEvent, url: string) => {
|
const onDragStart = (e: DragEvent, url: string) => {
|
||||||
draggedUrl = url
|
draggedUrl = url
|
||||||
dragStartOrder = [...orderedSpaceUrls]
|
dragStartOrder = [...orderedSpaceUrls]
|
||||||
|
lastDragTarget = undefined
|
||||||
|
didDrop = false
|
||||||
|
|
||||||
if (e.dataTransfer) {
|
if (e.dataTransfer) {
|
||||||
e.dataTransfer.effectAllowed = "move"
|
e.dataTransfer.effectAllowed = "move"
|
||||||
@@ -108,15 +110,25 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const onDragOver = (e: DragEvent, targetUrl: string) => {
|
const onDragOver = (e: DragEvent) => {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
|
}
|
||||||
|
|
||||||
|
const onDragEnter = (e: DragEvent, targetUrl: string) => {
|
||||||
|
e.preventDefault()
|
||||||
|
|
||||||
|
if (lastDragTarget === targetUrl) return
|
||||||
|
|
||||||
|
lastDragTarget = targetUrl
|
||||||
reorderSpaceUrls(targetUrl)
|
reorderSpaceUrls(targetUrl)
|
||||||
}
|
}
|
||||||
|
|
||||||
const onDrop = (e: DragEvent, targetUrl: string) => {
|
const onDrop = (e: DragEvent, targetUrl: string) => {
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
reorderSpaceUrls(targetUrl)
|
reorderSpaceUrls(targetUrl)
|
||||||
|
didDrop = true
|
||||||
draggedUrl = undefined
|
draggedUrl = undefined
|
||||||
|
lastDragTarget = undefined
|
||||||
|
|
||||||
if (dragStartOrder && !isSameOrder(dragStartOrder, orderedSpaceUrls)) {
|
if (dragStartOrder && !isSameOrder(dragStartOrder, orderedSpaceUrls)) {
|
||||||
void setSpaceMembershipOrder(orderedSpaceUrls).catch(console.error)
|
void setSpaceMembershipOrder(orderedSpaceUrls).catch(console.error)
|
||||||
@@ -126,8 +138,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const onDragEnd = () => {
|
const onDragEnd = () => {
|
||||||
|
if (!didDrop && dragStartOrder && !isSameOrder(dragStartOrder, orderedSpaceUrls)) {
|
||||||
|
orderedSpaceUrls = dragStartOrder
|
||||||
|
}
|
||||||
|
|
||||||
draggedUrl = undefined
|
draggedUrl = undefined
|
||||||
dragStartOrder = undefined
|
dragStartOrder = undefined
|
||||||
|
lastDragTarget = undefined
|
||||||
|
didDrop = false
|
||||||
}
|
}
|
||||||
|
|
||||||
$effect(() => {
|
$effect(() => {
|
||||||
@@ -146,6 +164,8 @@
|
|||||||
let orderedSpaceUrls = $state<string[]>([])
|
let orderedSpaceUrls = $state<string[]>([])
|
||||||
let draggedUrl = $state<string | undefined>()
|
let draggedUrl = $state<string | undefined>()
|
||||||
let dragStartOrder = $state<string[] | undefined>()
|
let dragStartOrder = $state<string[] | undefined>()
|
||||||
|
let lastDragTarget = $state<string | undefined>()
|
||||||
|
let didDrop = $state(false)
|
||||||
|
|
||||||
const openSearch = () => {
|
const openSearch = () => {
|
||||||
showSearch = true
|
showSearch = true
|
||||||
@@ -183,8 +203,8 @@
|
|||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Page>
|
<Page class="cw-full">
|
||||||
<PageBar>
|
<PageBar class="cw-full">
|
||||||
{#if showSearch}
|
{#if showSearch}
|
||||||
<label class="input input-bordered input-sm flex flex-1 items-center gap-2" in:fly>
|
<label class="input input-bordered input-sm flex flex-1 items-center gap-2" in:fly>
|
||||||
<Icon icon={Magnifier} />
|
<Icon icon={Magnifier} />
|
||||||
@@ -221,7 +241,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
</PageBar>
|
</PageBar>
|
||||||
<PageContent class="flex flex-col gap-2 p-2 pt-4">
|
<PageContent class="cw-full flex flex-col gap-2 p-2 pt-4">
|
||||||
<div class="flex flex-col gap-2" bind:this={element}>
|
<div class="flex flex-col gap-2" bind:this={element}>
|
||||||
{#each PLATFORM_RELAYS as url (url)}
|
{#each PLATFORM_RELAYS as url (url)}
|
||||||
<Button
|
<Button
|
||||||
@@ -255,7 +275,8 @@
|
|||||||
draggable="true"
|
draggable="true"
|
||||||
role="listitem"
|
role="listitem"
|
||||||
ondragstart={e => onDragStart(e, url)}
|
ondragstart={e => onDragStart(e, url)}
|
||||||
ondragover={e => onDragOver(e, url)}
|
ondragover={onDragOver}
|
||||||
|
ondragenter={e => onDragEnter(e, url)}
|
||||||
ondrop={e => onDrop(e, url)}
|
ondrop={e => onDrop(e, url)}
|
||||||
ondragend={onDragEnd}>
|
ondragend={onDragEnd}>
|
||||||
<Button
|
<Button
|
||||||
|
|||||||
Reference in New Issue
Block a user