diff --git a/packages/datalib/src/GridDisplay.ts b/packages/datalib/src/GridDisplay.ts index a622cb9cf..c3f5476fd 100644 --- a/packages/datalib/src/GridDisplay.ts +++ b/packages/datalib/src/GridDisplay.ts @@ -372,6 +372,22 @@ export abstract class GridDisplay { this.reload(); } + addToSort(uniqueName, order) { + this.setConfig(cfg => ({ + ...cfg, + sort: [...(cfg.sort || []), { uniqueName, order }], + })); + this.reload(); + } + + clearSort() { + this.setConfig(cfg => ({ + ...cfg, + sort: [], + })); + this.reload(); + } + setGrouping(uniqueName, groupFunc: GroupFunc) { this.setConfig(cfg => ({ ...cfg, @@ -408,6 +424,15 @@ export abstract class GridDisplay { return this.config.sort.find(x => x.uniqueName == uniqueName)?.order; } + getSortOrderIndex(uniqueName) { + if (this.config.sort.length <= 1) return -1; + return _.findIndex(this.config.sort, x => x.uniqueName == uniqueName); + } + + isSortDefined() { + return (this.config.sort || []).length > 0; + } + get filterCount() { return _.compact(_.values(this.config.filters)).length; } diff --git a/packages/web/src/datagrid/ColumnHeaderControl.svelte b/packages/web/src/datagrid/ColumnHeaderControl.svelte index 0160348a9..9e367a0fa 100644 --- a/packages/web/src/datagrid/ColumnHeaderControl.svelte +++ b/packages/web/src/datagrid/ColumnHeaderControl.svelte @@ -14,9 +14,13 @@ export let column; export let conid = undefined; export let database = undefined; - export let setSort; + export let setSort = undefined; + export let addToSort = undefined; + export let clearSort = undefined; export let grouping = undefined; export let order = undefined; + export let orderIndex = undefined; + export let isSortDefined = false; export let allowDefineVirtualReferences = false; export let setGrouping; @@ -44,6 +48,9 @@ return [ setSort && { onClick: () => setSort('ASC'), text: 'Sort ascending' }, setSort && { onClick: () => setSort('DESC'), text: 'Sort descending' }, + isSortDefined && addToSort && !order && { onClick: () => addToSort('ASC'), text: 'Add to sort - ascending' }, + isSortDefined && addToSort && !order && { onClick: () => addToSort('DESC'), text: 'Add to sort - descending' }, + order && clearSort && { onClick: () => clearSort(), text: 'Clear sort criteria' }, { onClick: () => copyTextToClipboard(column.columnName), text: 'Copy column name' }, column.foreignKey && [{ divider: true }, { onClick: openReferencedTable, text: column.foreignKey.refTableName }], @@ -90,11 +97,17 @@ {#if order == 'ASC'} + {#if orderIndex >= 0} + {orderIndex + 1} + {/if} {/if} {#if order == 'DESC'} + {#if orderIndex >= 0} + {orderIndex + 1} + {/if} {/if} @@ -106,6 +119,13 @@ display: flex; flex-wrap: nowrap; } + .order-index { + font-size: 10pt; + margin-left: -3px; + margin-right: 2px; + top: -1px; + position: relative; + } .label { flex: 1; min-width: 10px; diff --git a/packages/web/src/datagrid/DataGridCore.svelte b/packages/web/src/datagrid/DataGridCore.svelte index e34c88fad..f2406e4e5 100644 --- a/packages/web/src/datagrid/DataGridCore.svelte +++ b/packages/web/src/datagrid/DataGridCore.svelte @@ -1526,7 +1526,11 @@ {conid} {database} setSort={display.sortable ? order => display.setSort(col.uniqueName, order) : null} - order={display.getSortOrder(col.uniqueName)} + addToSort={display.sortable ? order => display.addToSort(col.uniqueName, order) : null} + order={display.sortable ? display.getSortOrder(col.uniqueName) : null} + orderIndex={display.sortable ? display.getSortOrderIndex(col.uniqueName) : -1} + isSortDefined={display.sortable ? display.isSortDefined() : false} + clearSort={display.sortable ? () => display.clearSort() : null} on:resizeSplitter={e => { // @ts-ignore display.resizeColumn(col.uniqueName, col.width, e.detail); diff --git a/plugins/dbgate-plugin-mssql/src/backend/driver.js b/plugins/dbgate-plugin-mssql/src/backend/driver.js index 2c2caae15..0f6a00140 100644 --- a/plugins/dbgate-plugin-mssql/src/backend/driver.js +++ b/plugins/dbgate-plugin-mssql/src/backend/driver.js @@ -41,7 +41,7 @@ const windowsAuthTypes = [ disabledFields: ['port'], }, { - title: 'NodeJs portable driver (tedious)', + title: 'NodeJs portable driver (tedious) - recomended', name: 'tedious', }, ];