From 787a66922f5a94ef302e8cde473f79df4b268394 Mon Sep 17 00:00:00 2001 From: Aasim Khan Date: Sat, 13 May 2023 09:25:07 -0700 Subject: [PATCH] Adding filtering to group by schema and switching to using name from displayName in oe filters. (#23123) --- extensions/mssql/config.json | 2 +- src/sql/azdata.proposed.d.ts | 2 +- .../objectExplorer/browser/serverTreeView.ts | 2 +- .../browser/filterDialog/filterDialog.ts | 10 ++++++---- .../browser/objectExplorerService.ts | 14 ++++++++++---- 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/extensions/mssql/config.json b/extensions/mssql/config.json index def415e4f3..244d5e2346 100644 --- a/extensions/mssql/config.json +++ b/extensions/mssql/config.json @@ -1,6 +1,6 @@ { "downloadUrl": "https://github.com/Microsoft/sqltoolsservice/releases/download/{#version#}/microsoft.sqltools.servicelayer-{#fileName#}", - "version": "4.8.0.1", + "version": "4.8.0.5", "downloadFileNames": { "Windows_86": "win-x86-net7.0.zip", "Windows_64": "win-x64-net7.0.zip", diff --git a/src/sql/azdata.proposed.d.ts b/src/sql/azdata.proposed.d.ts index 1b161929f7..3537ce5638 100644 --- a/src/sql/azdata.proposed.d.ts +++ b/src/sql/azdata.proposed.d.ts @@ -1842,7 +1842,7 @@ declare module 'azdata' { /** * The name of the filter property */ - displayName: string; + name: string; /** * The operator of the filter property */ diff --git a/src/sql/workbench/contrib/objectExplorer/browser/serverTreeView.ts b/src/sql/workbench/contrib/objectExplorer/browser/serverTreeView.ts index 6e7455d0c4..2ac8e65896 100644 --- a/src/sql/workbench/contrib/objectExplorer/browser/serverTreeView.ts +++ b/src/sql/workbench/contrib/objectExplorer/browser/serverTreeView.ts @@ -625,7 +625,7 @@ export class ServerTreeView extends Disposable implements IServerTreeView { this._telemetryService.createActionEvent(TelemetryKeys.TelemetryView.ObjectExplorer, TelemetryKeys.TelemetryAction.ObjectExplorerFilter) .withAdditionalProperties({ - filterPropertyNames: JSON.stringify(filters.map(f => node.filterProperties.find(p => f.displayName === p.displayName)?.name)), + filterPropertyNames: JSON.stringify(filters.map(f => f.name)), filterCount: filters.length, objectType: node.objectType }).send(); diff --git a/src/sql/workbench/services/objectExplorer/browser/filterDialog/filterDialog.ts b/src/sql/workbench/services/objectExplorer/browser/filterDialog/filterDialog.ts index 8d194d2052..6c75d61a92 100644 --- a/src/sql/workbench/services/objectExplorer/browser/filterDialog/filterDialog.ts +++ b/src/sql/workbench/services/objectExplorer/browser/filterDialog/filterDialog.ts @@ -290,11 +290,12 @@ export class FilterDialog extends Modal { this._appliedFilters = []; } this._properties.forEach((f, i) => { - const appliedFilter = this._appliedFilters.find(filter => filter.displayName === f.displayName); + const appliedFilter = this._appliedFilters.find(filter => filter.name === f.name); const filterOperators = this.getOperatorsForType(f.type); const row: Slick.SlickData = { property: { - value: f.displayName + value: f.displayName, + id: f.name }, operator: { value: appliedFilter ? this.getFilterOperatorString(appliedFilter.operator) : filterOperators[0], @@ -312,7 +313,8 @@ export class FilterDialog extends Modal { row.value.value = this.getStringValueForFilter(f, appliedFilter.value[0]); const andRow: Slick.SlickData = { property: { - value: '' + value: '', + id: '' }, operator: { value: AND_SELECT_BOX, @@ -436,7 +438,7 @@ export class FilterDialog extends Modal { const row = tableData[i]; let filterProperty = this._properties[row.filterPropertyIndex] let filter: azdata.NodeFilter = { - displayName: row.property.value, + name: row.property.id, operator: this.getFilterOperatorEnum(row.operator.value), value: this.getFilterValue(filterProperty.type, row.value.value, filterProperty), }; diff --git a/src/sql/workbench/services/objectExplorer/browser/objectExplorerService.ts b/src/sql/workbench/services/objectExplorer/browser/objectExplorerService.ts index 01889f776d..31a49c9faa 100644 --- a/src/sql/workbench/services/objectExplorer/browser/objectExplorerService.ts +++ b/src/sql/workbench/services/objectExplorer/browser/objectExplorerService.ts @@ -749,7 +749,7 @@ export class ObjectExplorerService implements IObjectExplorerService { } } const children = expandResult.nodes.map(node => { - let treeNode; + let treeNode: TreeNode | undefined; const cacheKey = this.getTreeNodeCacheKey(node); // In case of refresh, we want to update the existing node in the cache if (!refresh && sessionTreeNodeCache.has(cacheKey)) { @@ -761,10 +761,16 @@ export class ObjectExplorerService implements IObjectExplorerService { const filterCacheKey = this.getTreeNodeCacheKey(treeNode); const sessionFilterCache = this._nodeFilterCache.get(session.sessionId!); - // Making sure we retain the filters for the node. - if (sessionFilterCache?.has(filterCacheKey)) { - treeNode.filters = sessionFilterCache.get(filterCacheKey) ?? []; + // If we get the node without any filter properties, we want to clear the filters for the node. + if (treeNode?.filterProperties?.length > 0) { + // Making sure we retain the filters for the node. + if (sessionFilterCache?.has(filterCacheKey)) { + treeNode.filters = sessionFilterCache.get(filterCacheKey) ?? []; + } else { + treeNode.filters = []; + } } else { + sessionFilterCache.delete(filterCacheKey); treeNode.filters = []; } return treeNode;