Cleanup the copy output (#8072)

* Cleanup the copy output

* Use helper functions and cleanup promise handling
This commit is contained in:
Amir Omidi
2019-10-28 16:13:34 -07:00
committed by GitHub
parent cea8d62051
commit 428745e929

View File

@@ -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) {