mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Added Column folder drag & drop (#11595)
* wip * working folder drag/drop * helper method * cleanup * cleanup * cleanup * added view * helper method for nodeTypeId * made method static for access from editordroptarget * pr changes
This commit is contained in:
@@ -13,6 +13,13 @@ import { UNSAVED_GROUP_ID } from 'sql/platform/connection/common/constants';
|
|||||||
import { DataTransfers, IDragAndDropData } from 'vs/base/browser/dnd';
|
import { DataTransfers, IDragAndDropData } from 'vs/base/browser/dnd';
|
||||||
import { TreeNode } from 'sql/workbench/services/objectExplorer/common/treeNode';
|
import { TreeNode } from 'sql/workbench/services/objectExplorer/common/treeNode';
|
||||||
|
|
||||||
|
export function supportsNodeNameDrop(nodeId: string): boolean {
|
||||||
|
if (nodeId === 'Table' || nodeId === 'Column' || nodeId === 'View') {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implements drag and drop for the server tree
|
* Implements drag and drop for the server tree
|
||||||
*/
|
*/
|
||||||
@@ -33,10 +40,11 @@ export class ServerTreeDragAndDrop implements IDragAndDrop {
|
|||||||
return (<ConnectionProfile>element).id;
|
return (<ConnectionProfile>element).id;
|
||||||
} else if (element instanceof ConnectionProfileGroup) {
|
} else if (element instanceof ConnectionProfileGroup) {
|
||||||
return (<ConnectionProfileGroup>element).id;
|
return (<ConnectionProfileGroup>element).id;
|
||||||
} else if (element.nodeTypeId === 'Table' || element.nodeTypeId === 'Column') {
|
} else if (supportsNodeNameDrop(element.nodeTypeId)) {
|
||||||
return (<TreeNode>element).id;
|
return (<TreeNode>element).id;
|
||||||
}
|
} else if (element.nodeTypeId === 'Folder' && element.label === 'Columns' && element.children) {
|
||||||
else {
|
return (<TreeNode>element).id;
|
||||||
|
} else {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -70,18 +78,39 @@ export class ServerTreeDragAndDrop implements IDragAndDrop {
|
|||||||
* Called when the drag operation starts.
|
* Called when the drag operation starts.
|
||||||
*/
|
*/
|
||||||
public onDragStart(tree: ITree, dragAndDropData: IDragAndDropData, originalEvent: DragMouseEvent): void {
|
public onDragStart(tree: ITree, dragAndDropData: IDragAndDropData, originalEvent: DragMouseEvent): void {
|
||||||
|
let escapedSchema, escapedName, finalString;
|
||||||
TreeUpdateUtils.isInDragAndDrop = true;
|
TreeUpdateUtils.isInDragAndDrop = true;
|
||||||
const data = dragAndDropData.getData();
|
const data = dragAndDropData.getData();
|
||||||
const element = data[0];
|
const element = data[0];
|
||||||
if (element.nodeTypeId === 'Column' || element.nodeTypeId === 'Table') {
|
if (supportsNodeNameDrop(element.nodeTypeId)) {
|
||||||
const escapedSchema = element.metadata.schema?.replace(/]/g, ']]');
|
escapedSchema = this.escapeString(element.metadata.schema);
|
||||||
const escapedName = element.metadata.name?.replace(/]/g, ']]');
|
escapedName = this.escapeString(element.metadata.name);
|
||||||
const finalString = escapedSchema ? `[${escapedSchema}].[${escapedName}]` : `[${escapedName}]`;
|
finalString = escapedSchema ? `[${escapedSchema}].[${escapedName}]` : `[${escapedName}]`;
|
||||||
originalEvent.dataTransfer.setData(DataTransfers.RESOURCES, JSON.stringify([`${element.nodeTypeId}:${element.id}?${finalString}`]));
|
originalEvent.dataTransfer.setData(DataTransfers.RESOURCES, JSON.stringify([`${element.nodeTypeId}:${element.id}?${finalString}`]));
|
||||||
}
|
}
|
||||||
|
if (element.nodeTypeId === 'Folder' && element.label === 'Columns') {
|
||||||
|
// get children
|
||||||
|
let returnString = '';
|
||||||
|
for (let child of element.children) {
|
||||||
|
escapedSchema = this.escapeString(child.metadata.schema);
|
||||||
|
escapedName = this.escapeString(child.metadata.name);
|
||||||
|
finalString = escapedSchema ? `[${escapedSchema}].[${escapedName}]` : `[${escapedName}]`;
|
||||||
|
returnString = returnString ? `${returnString},${finalString}` : `${finalString}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
originalEvent.dataTransfer.setData(DataTransfers.RESOURCES, JSON.stringify([`${element.nodeTypeId}:${element.id}?${returnString}`]));
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private escapeString(input: string | undefined): string | undefined {
|
||||||
|
if (input) {
|
||||||
|
let output = input.replace(/]/g, ']]');
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public canDragToConnectionProfileGroup(source: any, targetConnectionProfileGroup: ConnectionProfileGroup) {
|
public canDragToConnectionProfileGroup(source: any, targetConnectionProfileGroup: ConnectionProfileGroup) {
|
||||||
let canDragOver: boolean = true;
|
let canDragOver: boolean = true;
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import { localize } from 'vs/nls';
|
|||||||
// {{SQL CARBON EDIT}}
|
// {{SQL CARBON EDIT}}
|
||||||
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
|
import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
|
||||||
import { SnippetController2 } from 'vs/editor/contrib/snippet/snippetController2';
|
import { SnippetController2 } from 'vs/editor/contrib/snippet/snippetController2';
|
||||||
|
import { supportsNodeNameDrop } from 'sql/workbench/services/objectExplorer/browser/dragAndDropController';
|
||||||
|
|
||||||
interface IDropOperation {
|
interface IDropOperation {
|
||||||
splitDirection?: GroupDirection;
|
splitDirection?: GroupDirection;
|
||||||
@@ -359,7 +360,7 @@ class DropOverlay extends Themable {
|
|||||||
|
|
||||||
// {{SQL CARBON EDIT}}
|
// {{SQL CARBON EDIT}}
|
||||||
const editor = this.editorService.activeTextEditorControl as ICodeEditor;
|
const editor = this.editorService.activeTextEditorControl as ICodeEditor;
|
||||||
if (untitledOrFileResources[0].resource.scheme === 'Column' || untitledOrFileResources[0].resource.scheme === 'Table') {
|
if (supportsNodeNameDrop(untitledOrFileResources[0].resource.scheme) || untitledOrFileResources[0].resource.scheme === 'Folder') {
|
||||||
SnippetController2.get(editor).insert(untitledOrFileResources[0].resource.query);
|
SnippetController2.get(editor).insert(untitledOrFileResources[0].resource.query);
|
||||||
editor.focus();
|
editor.focus();
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user