diff --git a/packages/datalib/src/GridDisplay.ts b/packages/datalib/src/GridDisplay.ts index 9b5678a82..714da9384 100644 --- a/packages/datalib/src/GridDisplay.ts +++ b/packages/datalib/src/GridDisplay.ts @@ -75,6 +75,7 @@ export abstract class GridDisplay { } changeSetKeyFields: string[] = null; sortable = false; + groupable = false; filterable = false; editable = false; isLoadedCorrectly = true; diff --git a/packages/datalib/src/TableGridDisplay.ts b/packages/datalib/src/TableGridDisplay.ts index 46bc64d5a..044f5aa65 100644 --- a/packages/datalib/src/TableGridDisplay.ts +++ b/packages/datalib/src/TableGridDisplay.ts @@ -35,6 +35,7 @@ export class TableGridDisplay extends GridDisplay { this.columns = this.getDisplayColumns(this.table, []); this.filterable = true; this.sortable = true; + this.groupable = true; this.editable = true; this.supportsReload = true; this.baseTable = this.table; diff --git a/packages/datalib/src/ViewGridDisplay.ts b/packages/datalib/src/ViewGridDisplay.ts index bc785426b..f8d24e756 100644 --- a/packages/datalib/src/ViewGridDisplay.ts +++ b/packages/datalib/src/ViewGridDisplay.ts @@ -17,6 +17,7 @@ export class ViewGridDisplay extends GridDisplay { this.columns = this.getDisplayColumns(view); this.filterable = true; this.sortable = true; + this.groupable = true; this.editable = false; this.supportsReload = true; } diff --git a/packages/web/src/datagrid/ColumnHeaderControl.svelte b/packages/web/src/datagrid/ColumnHeaderControl.svelte index e6f0a2a1d..715925ef6 100644 --- a/packages/web/src/datagrid/ColumnHeaderControl.svelte +++ b/packages/web/src/datagrid/ColumnHeaderControl.svelte @@ -6,6 +6,7 @@ import ColumnLabel from '../elements/ColumnLabel.svelte'; import { isTypeDateTime } from 'dbgate-tools'; import { openDatabaseObjectDetail } from '../appobj/DatabaseObjectAppObject.svelte'; + import { copyTextToClipboard } from '../utility/clipboard'; export let column; export let conid = undefined; @@ -27,19 +28,20 @@ function getMenu() { return [ - { onClick: () => setSort('ASC'), text: 'Sort ascending' }, - { onClick: () => setSort('DESC'), text: 'Sort descending' }, + setSort && { onClick: () => setSort('ASC'), text: 'Sort ascending' }, + setSort && { onClick: () => setSort('DESC'), text: 'Sort descending' }, + { onClick: () => copyTextToClipboard(column.columnName), text: 'Copy column name' }, column.foreignKey && [{ divider: true }, { onClick: openReferencedTable, text: column.foreignKey.refTableName }], - { divider: true }, - { onClick: () => setGrouping('GROUP'), text: 'Group by' }, - { onClick: () => setGrouping('MAX'), text: 'MAX' }, - { onClick: () => setGrouping('MIN'), text: 'MIN' }, - { onClick: () => setGrouping('SUM'), text: 'SUM' }, - { onClick: () => setGrouping('AVG'), text: 'AVG' }, - { onClick: () => setGrouping('COUNT'), text: 'COUNT' }, - { onClick: () => setGrouping('COUNT DISTINCT'), text: 'COUNT DISTINCT' }, + setGrouping && { divider: true }, + setGrouping && { onClick: () => setGrouping('GROUP'), text: 'Group by' }, + setGrouping && { onClick: () => setGrouping('MAX'), text: 'MAX' }, + setGrouping && { onClick: () => setGrouping('MIN'), text: 'MIN' }, + setGrouping && { onClick: () => setGrouping('SUM'), text: 'SUM' }, + setGrouping && { onClick: () => setGrouping('AVG'), text: 'AVG' }, + setGrouping && { onClick: () => setGrouping('COUNT'), text: 'COUNT' }, + setGrouping && { onClick: () => setGrouping('COUNT DISTINCT'), text: 'COUNT DISTINCT' }, isTypeDateTime(column.dataType) && [ { divider: true }, diff --git a/packages/web/src/datagrid/DataGridCore.svelte b/packages/web/src/datagrid/DataGridCore.svelte index e827ec543..e9e59ac9b 100644 --- a/packages/web/src/datagrid/DataGridCore.svelte +++ b/packages/web/src/datagrid/DataGridCore.svelte @@ -1051,7 +1051,7 @@ // @ts-ignore display.resizeColumn(col.uniqueName, col.width, e.detail); }} - setGrouping={display.sortable ? groupFunc => display.setGrouping(col.uniqueName, groupFunc) : null} + setGrouping={display.groupable ? groupFunc => display.setGrouping(col.uniqueName, groupFunc) : null} grouping={display.getGrouping(col.uniqueName)} />