mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 02:51:36 -05:00
Cleanup the copy output (#8072)
* Cleanup the copy output * Use helper functions and cleanup promise handling
This commit is contained in:
@@ -43,13 +43,13 @@ export interface IGridDataProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function getResultsString(provider: IGridDataProvider, selection: Slick.Range[], includeHeaders?: boolean): Promise<string> {
|
export async function getResultsString(provider: IGridDataProvider, selection: Slick.Range[], includeHeaders?: boolean): Promise<string> {
|
||||||
let headers: Map<Number, string> = new Map(); // Maps a column index -> header
|
let headers: Map<number, string> = new Map(); // Maps a column index -> header
|
||||||
let rows: Map<Number, Map<Number, string>> = new Map(); // Maps row index -> column index -> actual row value
|
let rows: Map<number, Map<number, string>> = new Map(); // Maps row index -> column index -> actual row value
|
||||||
const eol = provider.getEolString();
|
const eol = provider.getEolString();
|
||||||
|
|
||||||
// create a mapping of the ranges to get promises
|
// create a mapping of the ranges to get promises
|
||||||
let tasks = selection.map((range, i) => {
|
let tasks: (() => Promise<void>)[] = selection.map((range) => {
|
||||||
return async () => {
|
return async (): Promise<void> => {
|
||||||
let startCol = range.fromCell;
|
let startCol = range.fromCell;
|
||||||
let startRow = range.fromRow;
|
let startRow = range.fromRow;
|
||||||
|
|
||||||
@@ -88,22 +88,24 @@ export async function getResultsString(provider: IGridDataProvider, selection: S
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
if (tasks.length > 0) {
|
// Set the tasks gathered above to execute
|
||||||
let p = tasks[0]();
|
let actionedTasks: Promise<void>[] = tasks.map(t => { return t(); });
|
||||||
for (let i = 1; i < tasks.length; i++) {
|
|
||||||
p = p.then(tasks[i]);
|
// Make sure all these tasks have executed
|
||||||
}
|
await Promise.all(actionedTasks);
|
||||||
await p;
|
|
||||||
}
|
const sortResults = (e1: [number, any], e2: [number, any]) => {
|
||||||
|
return e1[0] - e2[0];
|
||||||
|
};
|
||||||
|
headers = new Map([...headers].sort(sortResults));
|
||||||
|
rows = new Map([...rows].sort(sortResults));
|
||||||
|
|
||||||
let copyString = '';
|
let copyString = '';
|
||||||
if (includeHeaders) {
|
if (includeHeaders) {
|
||||||
copyString = [...headers.values()].join('\t').concat(eol);
|
copyString = [...headers.values()].join('\t').concat(eol);
|
||||||
}
|
}
|
||||||
|
|
||||||
const rowKeys = [...headers.keys()].sort();
|
const rowKeys = [...headers.keys()];
|
||||||
|
|
||||||
rows = new Map([...rows.entries()].sort());
|
|
||||||
for (let rowEntry of rows) {
|
for (let rowEntry of rows) {
|
||||||
let rowMap = rowEntry[1];
|
let rowMap = rowEntry[1];
|
||||||
for (let rowIdx of rowKeys) {
|
for (let rowIdx of rowKeys) {
|
||||||
|
|||||||
Reference in New Issue
Block a user