Add more functionality to the grid (#7516)

This commit is contained in:
Amir Omidi
2019-10-05 12:08:18 -07:00
committed by GitHub
parent 0b2a2ad0ed
commit cacbcb5415
2 changed files with 18 additions and 9 deletions

View File

@@ -114,7 +114,7 @@ export class CellSelectionModel<T> implements Slick.SelectionModel<T, Array<Slic
let columnIndex = this.grid.getColumnIndex(args.column.id!); let columnIndex = this.grid.getColumnIndex(args.column.id!);
if (this.grid.canCellBeSelected(0, columnIndex)) { if (this.grid.canCellBeSelected(0, columnIndex)) {
let ranges: Array<Slick.Range>; let ranges: Array<Slick.Range>;
if (e.shiftKey) { if (e.ctrlKey) {
ranges = this.getSelectedRanges(); ranges = this.getSelectedRanges();
ranges.push(new Slick.Range(0, columnIndex, this.grid.getDataLength() - 1, columnIndex)); ranges.push(new Slick.Range(0, columnIndex, this.grid.getDataLength() - 1, columnIndex));
} else { } else {
@@ -230,9 +230,17 @@ export class CellSelectionModel<T> implements Slick.SelectionModel<T, Array<Slic
let ranges: Array<Slick.Range>; let ranges: Array<Slick.Range>;
ranges = this.getSelectedRanges(); ranges = this.getSelectedRanges();
ranges = this.insertIntoSelections(ranges, new Slick.Range(args.row, args.cell));
this.grid.setActiveCell(args.row, args.cell); let selectedRange: Slick.Range;
if (args.cell === 0) {
selectedRange = new Slick.Range(args.row, 1, args.row, args.grid.getColumns().length - 1);
} else {
selectedRange = new Slick.Range(args.row, args.cell);
}
ranges = this.insertIntoSelections(ranges, selectedRange);
this.grid.setActiveCell(selectedRange.toRow, selectedRange.toCell);
this.setSelectedRanges(ranges); this.setSelectedRanges(ranges);
e.preventDefault(); e.preventDefault();

View File

@@ -43,15 +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(); let headers: Map<Number, string> = new Map(); // Maps a column index -> header
let rows: Map<Number, Map<Number, string>> = new Map(); let rows: Map<Number, Map<Number, string>> = new Map(); // Maps row index -> column index -> actual row value
let copyTable: string[][] = [];
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 = selection.map((range, i) => {
return async () => { return async () => {
let selectionsCopy = selection;
let startCol = range.fromCell; let startCol = range.fromCell;
let startRow = range.fromRow; let startRow = range.fromRow;
@@ -103,8 +101,9 @@ export async function getResultsString(provider: IGridDataProvider, selection: S
copyString = [...headers.values()].join('\t').concat(eol); copyString = [...headers.values()].join('\t').concat(eol);
} }
const rowKeys = [...headers.keys()]; const rowKeys = [...headers.keys()].sort();
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) {
@@ -115,9 +114,11 @@ export async function getResultsString(provider: IGridDataProvider, selection: S
} }
copyString = copyString.concat('\t'); copyString = copyString.concat('\t');
} }
// Removes the tab seperator from the end of a row
copyString = copyString.slice(0, -1 * '\t'.length);
copyString = copyString.concat(eol); copyString = copyString.concat(eol);
} }
// Removes EoL from the end of the string // Removes EoL from the end of the result
copyString = copyString.slice(0, -1 * eol.length); copyString = copyString.slice(0, -1 * eol.length);
return copyString; return copyString;