|
| 1 | +<script context="module" lang="ts"> |
| 2 | + /** Shared 1×1 transparent drag preview; avoids one Image per sidebar row */ |
| 3 | + const invisibleDragImage = new Image(); |
| 4 | + invisibleDragImage.src = |
| 5 | + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='; |
| 6 | +</script> |
| 7 | + |
1 | 8 | <script lang="ts"> |
2 | 9 | import { toast } from 'svelte-sonner'; |
3 | 10 | import { goto, invalidate, invalidateAll } from '$app/navigation'; |
4 | | - import { onMount, getContext, createEventDispatcher, tick, onDestroy } from 'svelte'; |
| 11 | + import { onMount, getContext, createEventDispatcher, tick } from 'svelte'; |
5 | 12 | const i18n = getContext('i18n'); |
6 | 13 |
|
7 | 14 | const dispatch = createEventDispatcher(); |
|
224 | 231 | let x = 0; |
225 | 232 | let y = 0; |
226 | 233 |
|
227 | | - const dragImage = new Image(); |
228 | | - dragImage.src = |
229 | | - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='; |
230 | | -
|
231 | 234 | const onDragStart = (event) => { |
232 | 235 | event.stopPropagation(); |
233 | 236 |
|
234 | | - event.dataTransfer.setDragImage(dragImage, 0, 0); |
| 237 | + event.dataTransfer.setDragImage(invisibleDragImage, 0, 0); |
235 | 238 |
|
236 | 239 | // Set the data to be transferred |
237 | 240 | event.dataTransfer.setData( |
|
276 | 279 | }; |
277 | 280 |
|
278 | 281 | onMount(() => { |
279 | | - if (itemElement) { |
280 | | - document.addEventListener('click', onClickOutside, true); |
281 | | -
|
282 | | - // Event listener for when dragging starts |
283 | | - itemElement.addEventListener('dragstart', onDragStart); |
284 | | - // Event listener for when dragging occurs (optional) |
285 | | - itemElement.addEventListener('drag', onDrag); |
286 | | - // Event listener for when dragging ends |
287 | | - itemElement.addEventListener('dragend', onDragEndHandler); |
288 | | - } |
289 | | - }); |
| 282 | + const el = itemElement; |
| 283 | + if (!el) return; |
290 | 284 |
|
291 | | - onDestroy(() => { |
292 | | - if (itemElement) { |
293 | | - document.removeEventListener('click', onClickOutside, true); |
| 285 | + document.addEventListener('click', onClickOutside, true); |
| 286 | + el.addEventListener('dragstart', onDragStart); |
| 287 | + el.addEventListener('drag', onDrag); |
| 288 | + el.addEventListener('dragend', onDragEndHandler); |
294 | 289 |
|
295 | | - itemElement.removeEventListener('dragstart', onDragStart); |
296 | | - itemElement.removeEventListener('drag', onDrag); |
297 | | - itemElement.removeEventListener('dragend', onDragEndHandler); |
298 | | - } |
| 290 | + return () => { |
| 291 | + document.removeEventListener('click', onClickOutside, true); |
| 292 | + el.removeEventListener('dragstart', onDragStart); |
| 293 | + el.removeEventListener('drag', onDrag); |
| 294 | + el.removeEventListener('dragend', onDragEndHandler); |
| 295 | + }; |
299 | 296 | }); |
300 | 297 |
|
301 | 298 | let showDeleteConfirm = false; |
|
0 commit comments