handle long text cells (#23320)

This commit is contained in:
Alan Ren
2023-06-05 12:50:56 -07:00
committed by GitHub
parent 4eac26de15
commit ee112714e8
2 changed files with 18 additions and 10 deletions

View File

@@ -66,20 +66,25 @@ export function isCssIconCellValue(obj: any | undefined): obj is CssIconCellValu
export function hyperLinkFormatter(row: number | undefined, cell: any | undefined, value: any, columnDef: any | undefined, dataContext: any | undefined): string { export function hyperLinkFormatter(row: number | undefined, cell: any | undefined, value: any, columnDef: any | undefined, dataContext: any | undefined): string {
let cellClasses = 'grid-cell-value-container'; let cellClasses = 'grid-cell-value-container';
let valueToDisplay: string = ''; let valueToDisplay: string = '';
let isHyperlink: boolean = false;
if (DBCellValue.isDBCellValue(value)) { if (DBCellValue.isDBCellValue(value)) {
valueToDisplay = 'NULL'; valueToDisplay = 'NULL';
if (!value.isNull) { if (!value.isNull) {
valueToDisplay = getCellDisplayValue(value.displayValue); valueToDisplay = getCellDisplayValue(value.displayValue);
return `<a class="${cellClasses}">${valueToDisplay}</a>`; isHyperlink = true;
} else { } else {
cellClasses += ' missing-value'; cellClasses += ' missing-value';
} }
} else if (isHyperlinkCellValue(value)) { } else if (isHyperlinkCellValue(value)) {
valueToDisplay = getCellDisplayValue(value.displayText); valueToDisplay = getCellDisplayValue(value.displayText);
return `<a class="${cellClasses}" title="${valueToDisplay}">${valueToDisplay}</a>`; isHyperlink = true;
} }
if (isHyperlink) {
return `<a class="${cellClasses}" title="${valueToDisplay}">${valueToDisplay}</a>`;
} else {
return `<span title="${valueToDisplay}" class="${cellClasses}">${valueToDisplay}</span>`; return `<span title="${valueToDisplay}" class="${cellClasses}">${valueToDisplay}</span>`;
}
} }
/** /**
@@ -131,10 +136,11 @@ export function textFormatter(row: number | undefined, cell: any | undefined, va
return formattedValue; return formattedValue;
} }
function getCellDisplayValue(cellValue: string): string { export function getCellDisplayValue(cellValue: string): string {
let valueToDisplay = cellValue.length > 250 ? cellValue.slice(0, 250) + '...' : cellValue;
// allow-any-unicode-next-line // allow-any-unicode-next-line
let valueToDisplay = cellValue.replace(/(\r\n|\n|\r)/g, '↵'); valueToDisplay = valueToDisplay.replace(/(\r\n|\n|\r)/g, '↵');
return escape(valueToDisplay.length > 250 ? valueToDisplay.slice(0, 250) + '...' : valueToDisplay); return escape(valueToDisplay);
} }

View File

@@ -17,7 +17,7 @@ import { IGridActionContext, SaveResultAction, CopyResultAction, SelectAllGridAc
import { CellSelectionModel } from 'sql/base/browser/ui/table/plugins/cellSelectionModel.plugin'; import { CellSelectionModel } from 'sql/base/browser/ui/table/plugins/cellSelectionModel.plugin';
import { RowNumberColumn } from 'sql/base/browser/ui/table/plugins/rowNumberColumn.plugin'; import { RowNumberColumn } from 'sql/base/browser/ui/table/plugins/rowNumberColumn.plugin';
import { escape } from 'sql/base/common/strings'; import { escape } from 'sql/base/common/strings';
import { DBCellValue, hyperLinkFormatter, textFormatter } from 'sql/base/browser/ui/table/formatters'; import { DBCellValue, getCellDisplayValue, hyperLinkFormatter, textFormatter } from 'sql/base/browser/ui/table/formatters';
import { AdditionalKeyBindings } from 'sql/base/browser/ui/table/plugins/additionalKeyBindings.plugin'; import { AdditionalKeyBindings } from 'sql/base/browser/ui/table/plugins/additionalKeyBindings.plugin';
import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView'; import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView';
@@ -925,9 +925,11 @@ export abstract class GridTableBase<T> extends Disposable implements IView, IQue
let dataWithSchema = {}; let dataWithSchema = {};
// skip the first column since its a number column // skip the first column since its a number column
for (let i = 1; i < this.columns.length; i++) { for (let i = 1; i < this.columns.length; i++) {
const displayValue = r[i - 1].displayValue ?? '';
const ariaLabel = getCellDisplayValue(displayValue);
dataWithSchema[this.columns[i].field] = { dataWithSchema[this.columns[i].field] = {
displayValue: r[i - 1].displayValue, displayValue: displayValue,
ariaLabel: escape(r[i - 1].displayValue), ariaLabel: ariaLabel,
isNull: r[i - 1].isNull, isNull: r[i - 1].isNull,
invariantCultureDisplayValue: r[i - 1].invariantCultureDisplayValue invariantCultureDisplayValue: r[i - 1].invariantCultureDisplayValue
}; };