mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-16 17:22:29 -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 { 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
|
||||
*/
|
||||
@@ -33,10 +40,11 @@ export class ServerTreeDragAndDrop implements IDragAndDrop {
|
||||
return (<ConnectionProfile>element).id;
|
||||
} else if (element instanceof ConnectionProfileGroup) {
|
||||
return (<ConnectionProfileGroup>element).id;
|
||||
} else if (element.nodeTypeId === 'Table' || element.nodeTypeId === 'Column') {
|
||||
} else if (supportsNodeNameDrop(element.nodeTypeId)) {
|
||||
return (<TreeNode>element).id;
|
||||
}
|
||||
else {
|
||||
} else if (element.nodeTypeId === 'Folder' && element.label === 'Columns' && element.children) {
|
||||
return (<TreeNode>element).id;
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
@@ -70,18 +78,39 @@ export class ServerTreeDragAndDrop implements IDragAndDrop {
|
||||
* Called when the drag operation starts.
|
||||
*/
|
||||
public onDragStart(tree: ITree, dragAndDropData: IDragAndDropData, originalEvent: DragMouseEvent): void {
|
||||
let escapedSchema, escapedName, finalString;
|
||||
TreeUpdateUtils.isInDragAndDrop = true;
|
||||
const data = dragAndDropData.getData();
|
||||
const element = data[0];
|
||||
if (element.nodeTypeId === 'Column' || element.nodeTypeId === 'Table') {
|
||||
const escapedSchema = element.metadata.schema?.replace(/]/g, ']]');
|
||||
const escapedName = element.metadata.name?.replace(/]/g, ']]');
|
||||
const finalString = escapedSchema ? `[${escapedSchema}].[${escapedName}]` : `[${escapedName}]`;
|
||||
if (supportsNodeNameDrop(element.nodeTypeId)) {
|
||||
escapedSchema = this.escapeString(element.metadata.schema);
|
||||
escapedName = this.escapeString(element.metadata.name);
|
||||
finalString = escapedSchema ? `[${escapedSchema}].[${escapedName}]` : `[${escapedName}]`;
|
||||
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;
|
||||
}
|
||||
|
||||
private escapeString(input: string | undefined): string | undefined {
|
||||
if (input) {
|
||||
let output = input.replace(/]/g, ']]');
|
||||
return output;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
|
||||
public canDragToConnectionProfileGroup(source: any, targetConnectionProfileGroup: ConnectionProfileGroup) {
|
||||
let canDragOver: boolean = true;
|
||||
|
||||
Reference in New Issue
Block a user