mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-28 02:36:01 +00:00
drag & drop memory in designer
This commit is contained in:
@@ -50,6 +50,7 @@
|
|||||||
import { extendDatabaseInfoFromApps } from 'dbgate-tools';
|
import { extendDatabaseInfoFromApps } from 'dbgate-tools';
|
||||||
import SearchInput from '../elements/SearchInput.svelte';
|
import SearchInput from '../elements/SearchInput.svelte';
|
||||||
import CloseSearchButton from '../buttons/CloseSearchButton.svelte';
|
import CloseSearchButton from '../buttons/CloseSearchButton.svelte';
|
||||||
|
import DragColumnMemory from './DragColumnMemory.svelte';
|
||||||
|
|
||||||
export let value;
|
export let value;
|
||||||
export let onChange;
|
export let onChange;
|
||||||
@@ -951,9 +952,12 @@
|
|||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{#if tables?.length > 0}
|
{#if tables?.length > 0}
|
||||||
<div class="searchbox">
|
<div class="panel">
|
||||||
<SearchInput bind:value={columnFilter} placeholder="Filter columns" />
|
<DragColumnMemory {settings} {sourceDragColumn$} {targetDragColumn$} />
|
||||||
<CloseSearchButton bind:filter={columnFilter} />
|
<div class="searchbox">
|
||||||
|
<SearchInput bind:value={columnFilter} placeholder="Filter columns" />
|
||||||
|
<CloseSearchButton bind:filter={columnFilter} />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
@@ -972,12 +976,16 @@
|
|||||||
.canvas {
|
.canvas {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
.searchbox {
|
.panel {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 16px;
|
right: 16px;
|
||||||
top: 0;
|
top: 0;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.searchbox {
|
||||||
width: 200px;
|
width: 200px;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
margin-left: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
svg.drag-rect {
|
svg.drag-rect {
|
||||||
|
|||||||
54
packages/web/src/designer/DragColumnMemory.svelte
Normal file
54
packages/web/src/designer/DragColumnMemory.svelte
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
export let sourceDragColumn$;
|
||||||
|
export let targetDragColumn$;
|
||||||
|
export let settings;
|
||||||
|
|
||||||
|
let memory;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if settings?.allowCreateRefByDrag}
|
||||||
|
<div
|
||||||
|
class="wrapper"
|
||||||
|
draggable={!!memory}
|
||||||
|
title={memory ? 'Drag this column to other column for creating JOIN' : 'Drag column here for creating JOIN'}
|
||||||
|
on:dragstart={e => {
|
||||||
|
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}
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.wrapper {
|
||||||
|
border: 1px solid var(--theme-border);
|
||||||
|
padding: 3px;
|
||||||
|
color: var(--theme-font-2);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Reference in New Issue
Block a user