mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-29 01:46:01 +00:00
drag & drop between mutlitabs
This commit is contained in:
@@ -93,6 +93,11 @@ export const commandsCustomized = derived([commands, commandsSettings], ([$comma
|
|||||||
}))
|
}))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
export const draggingTab = writable(null);
|
||||||
|
export const draggingTabTarget = writable(null);
|
||||||
|
export const draggingDbGroup = writable(null);
|
||||||
|
export const draggingDbGroupTarget = writable(null);
|
||||||
|
|
||||||
// export const visibleToolbar = writableWithStorage(true, 'visibleToolbar');
|
// export const visibleToolbar = writableWithStorage(true, 'visibleToolbar');
|
||||||
export const visibleToolbar = writable(false);
|
export const visibleToolbar = writable(false);
|
||||||
export const leftPanelWidth = writableWithStorage(300, 'leftPanelWidth');
|
export const leftPanelWidth = writableWithStorage(300, 'leftPanelWidth');
|
||||||
|
|||||||
@@ -264,6 +264,10 @@
|
|||||||
getCurrentDatabase,
|
getCurrentDatabase,
|
||||||
lockedDatabaseMode,
|
lockedDatabaseMode,
|
||||||
getLockedDatabaseMode,
|
getLockedDatabaseMode,
|
||||||
|
draggingDbGroup,
|
||||||
|
draggingDbGroupTarget,
|
||||||
|
draggingTab,
|
||||||
|
draggingTabTarget,
|
||||||
} from '../stores';
|
} from '../stores';
|
||||||
import tabs from '../tabs';
|
import tabs from '../tabs';
|
||||||
import { setSelectedTab } from '../utility/common';
|
import { setSelectedTab } from '../utility/common';
|
||||||
@@ -306,11 +310,6 @@
|
|||||||
$: allowSplitTab =
|
$: allowSplitTab =
|
||||||
_.uniq(filteredTabsFromAllParts.map(x => x.multiTabIndex || 0)).length == 1 && filteredTabsFromAllParts.length >= 2;
|
_.uniq(filteredTabsFromAllParts.map(x => x.multiTabIndex || 0)).length == 1 && filteredTabsFromAllParts.length >= 2;
|
||||||
|
|
||||||
let draggingTab = null;
|
|
||||||
let draggingTabTarget = null;
|
|
||||||
let draggingDbGroup = null;
|
|
||||||
let draggingDbGroupTarget = null;
|
|
||||||
|
|
||||||
const connectionColorFactory = useConnectionColorFactory(3, null, true);
|
const connectionColorFactory = useConnectionColorFactory(3, null, true);
|
||||||
|
|
||||||
const handleTabClick = (e, tabid) => {
|
const handleTabClick = (e, tabid) => {
|
||||||
@@ -409,7 +408,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function dragDropTabs(draggingTabs, targetTabs) {
|
function dragDropTabs(draggingTabs, targetTabs, multiTabIndex) {
|
||||||
if (draggingTabs.find(x => targetTabs.find(y => x.tabid == y.tabid))) return;
|
if (draggingTabs.find(x => targetTabs.find(y => x.tabid == y.tabid))) return;
|
||||||
|
|
||||||
const items = sortTabs($openedTabs.filter(x => x.closedTime == null));
|
const items = sortTabs($openedTabs.filter(x => x.closedTime == null));
|
||||||
@@ -441,6 +440,7 @@
|
|||||||
return {
|
return {
|
||||||
...x,
|
...x,
|
||||||
tabOrder: index + 1,
|
tabOrder: index + 1,
|
||||||
|
multiTabIndex: draggingTabs.find(y => y.tabid == x.tabid) ? multiTabIndex : x.multiTabIndex,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return x;
|
return x;
|
||||||
@@ -465,8 +465,8 @@
|
|||||||
{#if !$lockedDatabaseMode}
|
{#if !$lockedDatabaseMode}
|
||||||
<div
|
<div
|
||||||
class="db-name"
|
class="db-name"
|
||||||
class:selected={draggingDbGroup
|
class:selected={$draggingDbGroup
|
||||||
? tabGroup.grpid == draggingDbGroupTarget?.grpid
|
? tabGroup.grpid == $draggingDbGroupTarget?.grpid
|
||||||
: tabGroup.tabDbKey == currentDbKey}
|
: tabGroup.tabDbKey == currentDbKey}
|
||||||
on:mouseup={e => {
|
on:mouseup={e => {
|
||||||
if (e.button == 1) {
|
if (e.button == 1) {
|
||||||
@@ -478,23 +478,23 @@
|
|||||||
use:contextMenu={getDatabaseContextMenu(tabGroup.tabs)}
|
use:contextMenu={getDatabaseContextMenu(tabGroup.tabs)}
|
||||||
style={$connectionColorFactory(
|
style={$connectionColorFactory(
|
||||||
tabGroup.tabs[0].props,
|
tabGroup.tabs[0].props,
|
||||||
(draggingDbGroup ? tabGroup.grpid == draggingDbGroupTarget?.grpid : tabGroup.tabDbKey == currentDbKey)
|
($draggingDbGroup ? tabGroup.grpid == $draggingDbGroupTarget?.grpid : tabGroup.tabDbKey == currentDbKey)
|
||||||
? 2
|
? 2
|
||||||
: 3
|
: 3
|
||||||
)}
|
)}
|
||||||
draggable={true}
|
draggable={true}
|
||||||
on:dragstart={e => {
|
on:dragstart={e => {
|
||||||
draggingDbGroup = tabGroup;
|
$draggingDbGroup = tabGroup;
|
||||||
}}
|
}}
|
||||||
on:dragenter={e => {
|
on:dragenter={e => {
|
||||||
draggingDbGroupTarget = tabGroup;
|
$draggingDbGroupTarget = tabGroup;
|
||||||
}}
|
}}
|
||||||
on:drop={e => {
|
on:drop={e => {
|
||||||
dragDropTabs(draggingDbGroup.tabs, tabGroup.tabs);
|
dragDropTabs($draggingDbGroup.tabs, tabGroup.tabs, multiTabIndex);
|
||||||
}}
|
}}
|
||||||
on:dragend={e => {
|
on:dragend={e => {
|
||||||
draggingDbGroup = null;
|
$draggingDbGroup = null;
|
||||||
draggingDbGroupTarget = null;
|
$draggingDbGroupTarget = null;
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div class="db-name-inner">
|
<div class="db-name-inner">
|
||||||
@@ -517,32 +517,32 @@
|
|||||||
<div
|
<div
|
||||||
id={`file-tab-item-${tab.tabid}`}
|
id={`file-tab-item-${tab.tabid}`}
|
||||||
class="file-tab-item"
|
class="file-tab-item"
|
||||||
class:selected={draggingTab || draggingDbGroup ? tab.tabid == draggingTabTarget?.tabid : tab.selected}
|
class:selected={$draggingTab || $draggingDbGroup ? tab.tabid == $draggingTabTarget?.tabid : tab.selected}
|
||||||
on:click={e => handleTabClick(e, tab.tabid)}
|
on:click={e => handleTabClick(e, tab.tabid)}
|
||||||
on:mouseup={e => handleMouseUp(e, tab.tabid)}
|
on:mouseup={e => handleMouseUp(e, tab.tabid)}
|
||||||
use:contextMenu={getContextMenu(tab)}
|
use:contextMenu={getContextMenu(tab)}
|
||||||
draggable={true}
|
draggable={true}
|
||||||
on:dragstart={async e => {
|
on:dragstart={async e => {
|
||||||
draggingTab = tab;
|
$draggingTab = tab;
|
||||||
await tick();
|
await tick();
|
||||||
setSelectedTab(tab.tabid);
|
setSelectedTab(tab.tabid);
|
||||||
// console.log('START', tab.tabid);
|
// console.log('START', tab.tabid);
|
||||||
// e.dataTransfer.setData('tab_drag_data', tab.tabid);
|
// e.dataTransfer.setData('tab_drag_data', tab.tabid);
|
||||||
}}
|
}}
|
||||||
on:dragenter={e => {
|
on:dragenter={e => {
|
||||||
draggingTabTarget = tab;
|
$draggingTabTarget = tab;
|
||||||
}}
|
}}
|
||||||
on:drop={e => {
|
on:drop={e => {
|
||||||
if (draggingTab) {
|
if ($draggingTab) {
|
||||||
dragDropTabs([draggingTab], [tab]);
|
dragDropTabs([$draggingTab], [tab], multiTabIndex);
|
||||||
}
|
}
|
||||||
if (draggingDbGroup) {
|
if ($draggingDbGroup) {
|
||||||
dragDropTabs(draggingDbGroup.tabs, [tab]);
|
dragDropTabs($draggingDbGroup.tabs, [tab], multiTabIndex);
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
on:dragend={e => {
|
on:dragend={e => {
|
||||||
draggingTab = null;
|
$draggingTab = null;
|
||||||
draggingTabTarget = null;
|
$draggingTabTarget = null;
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<FontIcon icon={tab.busy ? 'icon loading' : tab.icon} />
|
<FontIcon icon={tab.busy ? 'icon loading' : tab.icon} />
|
||||||
|
|||||||
Reference in New Issue
Block a user