diff --git a/packages/web/src/designer/Designer.svelte b/packages/web/src/designer/Designer.svelte index 1ab4740ee..fd7165f7e 100644 --- a/packages/web/src/designer/Designer.svelte +++ b/packages/web/src/designer/Designer.svelte @@ -50,6 +50,7 @@ import { extendDatabaseInfoFromApps } from 'dbgate-tools'; import SearchInput from '../elements/SearchInput.svelte'; import CloseSearchButton from '../buttons/CloseSearchButton.svelte'; + import DragColumnMemory from './DragColumnMemory.svelte'; export let value; export let onChange; @@ -951,9 +952,12 @@ {/if} {#if tables?.length > 0} - @@ -972,12 +976,16 @@ .canvas { position: relative; } - .searchbox { + .panel { position: absolute; right: 16px; top: 0; + display: flex; + } + .searchbox { width: 200px; display: flex; + margin-left: 1px; } svg.drag-rect { diff --git a/packages/web/src/designer/DragColumnMemory.svelte b/packages/web/src/designer/DragColumnMemory.svelte new file mode 100644 index 000000000..7a5f3a0f2 --- /dev/null +++ b/packages/web/src/designer/DragColumnMemory.svelte @@ -0,0 +1,54 @@ + + +{#if settings?.allowCreateRefByDrag} +
{ + if (!settings?.allowCreateRefByDrag) return; + if (!memory) return; + + const dragData = { ...memory }; + sourceDragColumn$.set(dragData); + e.dataTransfer.setData('designer_column_drag_data', JSON.stringify(dragData)); + }} + on:dragend={e => { + sourceDragColumn$.set(null); + targetDragColumn$.set(null); + }} + on:dragover={e => { + if ($sourceDragColumn$) { + e.preventDefault(); + } + }} + on:drop={e => { + var data = e.dataTransfer.getData('designer_column_drag_data'); + e.preventDefault(); + if (!data) return; + memory = $sourceDragColumn$; + sourceDragColumn$.set(null); + targetDragColumn$.set(null); + }} + > + {#if memory} + {memory.columnName} + {:else} + Drag & drop column here + {/if} +
+{/if} + +