Adding flag to hide refresh button in dashboards. (#18964)

This commit is contained in:
Aasim Khan
2022-04-09 17:52:09 -07:00
committed by GitHub
parent c2cc32a4a0
commit 9fcfe5b23c
6 changed files with 232 additions and 209 deletions

View File

@@ -1,192 +1,193 @@
{ {
"name": "sql-migration", "name": "sql-migration",
"displayName": "%displayName%", "displayName": "%displayName%",
"description": "%description%", "description": "%description%",
"version": "0.1.14", "version": "0.1.14",
"publisher": "Microsoft", "publisher": "Microsoft",
"preview": true, "preview": true,
"license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/main/LICENSE.txt", "license": "https://raw.githubusercontent.com/Microsoft/azuredatastudio/main/LICENSE.txt",
"icon": "images/extension.png", "icon": "images/extension.png",
"aiKey": "AIF-37eefaf0-8022-4671-a3fb-64752724682e", "aiKey": "AIF-37eefaf0-8022-4671-a3fb-64752724682e",
"engines": { "engines": {
"vscode": "*", "vscode": "*",
"azdata": ">=1.35.0" "azdata": ">=1.35.0"
}, },
"activationEvents": [ "activationEvents": [
"onDashboardOpen", "onDashboardOpen",
"onCommand:sqlmigration.start", "onCommand:sqlmigration.start",
"onCommand:sqlmigration.newsupportrequest", "onCommand:sqlmigration.newsupportrequest",
"onCommand:sqlmigration.sendfeedback", "onCommand:sqlmigration.sendfeedback",
"onCommand:sqlmigration.openNotebooks" "onCommand:sqlmigration.openNotebooks"
], ],
"capabilities": { "capabilities": {
"virtualWorkspaces": false, "virtualWorkspaces": false,
"untrustedWorkspaces": { "untrustedWorkspaces": {
"supported": true "supported": true
} }
}, },
"main": "./out/main", "main": "./out/main",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://github.com/Microsoft/azuredatastudio.git" "url": "https://github.com/Microsoft/azuredatastudio.git"
}, },
"extensionDependencies": [ "extensionDependencies": [
"Microsoft.mssql" "Microsoft.mssql"
], ],
"contributes": { "contributes": {
"commands": [ "commands": [
{
"command": "sqlmigration.start",
"title": "%start-migration-command%",
"category": "%migration-command-category%",
"icon": "./images/migration.svg"
},
{
"command": "sqlmigration.newsupportrequest",
"title": "%new-support-request-command%",
"category": "%migration-command-category%",
"icon": "./images/newSupportRequest.svg"
},
{
"command": "sqlmigration.sendfeedback",
"title": "%send-feedback-command%",
"category": "%migration-command-category%",
"icon": "./images/sendFeedback.svg"
},
{
"command": "sqlmigration.openNotebooks",
"title": "%migration-notebook-command-title%",
"category": "%migration-command-category%"
},
{
"command": "sqlmigration.cutover",
"title": "%complete-cutover-menu%",
"category": "%migration-context-menu-category%"
},
{
"command": "sqlmigration.view.database",
"title": "%database-details-menu%",
"category": "%migration-context-menu-category%"
},
{
"command": "sqlmigration.view.target",
"title": "%view-target-menu%",
"category": "%migration-context-menu-category%"
},
{
"command": "sqlmigration.view.service",
"title": "%view-service-menu%",
"category": "%migration-context-menu-category%"
},
{
"command": "sqlmigration.copy.migration",
"title": "%copy-migration-menu%",
"category": "%migration-context-menu-category%"
},
{
"command": "sqlmigration.cancel.migration",
"title": "%cancel-migration-menu%",
"category": "%migration-context-menu-category%"
},
{ {
"command": "sqlmigration.retry.migration", "command": "sqlmigration.start",
"title": "%retry-migration-menu%", "title": "%start-migration-command%",
"category": "%migration-context-menu-category%" "category": "%migration-command-category%",
} "icon": "./images/migration.svg"
], },
"menu": { {
"commandPalette": [ "command": "sqlmigration.newsupportrequest",
{ "title": "%new-support-request-command%",
"command": "sqlmigration.newsupportrequest", "category": "%migration-command-category%",
"when": "false" "icon": "./images/newSupportRequest.svg"
}, },
{ {
"command": "sqlmigration.sendfeedback", "command": "sqlmigration.sendfeedback",
"when": "false" "title": "%send-feedback-command%",
}, "category": "%migration-command-category%",
{ "icon": "./images/sendFeedback.svg"
"command": "sqlmigration.cutover", },
"when": "false" {
}, "command": "sqlmigration.openNotebooks",
{ "title": "%migration-notebook-command-title%",
"command": "sqlmigration.view.database", "category": "%migration-command-category%"
"when": "false" },
}, {
{ "command": "sqlmigration.cutover",
"command": "sqlmigration.view.target", "title": "%complete-cutover-menu%",
"when": "false" "category": "%migration-context-menu-category%"
}, },
{ {
"command": "sqlmigration.view.service", "command": "sqlmigration.view.database",
"when": "false" "title": "%database-details-menu%",
}, "category": "%migration-context-menu-category%"
{ },
"command": "sqlmigration.copy.migration", {
"when": "false" "command": "sqlmigration.view.target",
}, "title": "%view-target-menu%",
{ "category": "%migration-context-menu-category%"
"command": "sqlmigration.cancel.migration", },
"when": "false" {
}, "command": "sqlmigration.view.service",
"title": "%view-service-menu%",
"category": "%migration-context-menu-category%"
},
{
"command": "sqlmigration.copy.migration",
"title": "%copy-migration-menu%",
"category": "%migration-context-menu-category%"
},
{
"command": "sqlmigration.cancel.migration",
"title": "%cancel-migration-menu%",
"category": "%migration-context-menu-category%"
},
{
"command": "sqlmigration.retry.migration",
"title": "%retry-migration-menu%",
"category": "%migration-context-menu-category%"
}
],
"menu": {
"commandPalette": [
{ {
"command": "sqlmigration.retry.migration", "command": "sqlmigration.newsupportrequest",
"when": "false" "when": "false"
} },
] {
}, "command": "sqlmigration.sendfeedback",
"dashboard.tabs": [ "when": "false"
{ },
"id": "migration-dashboard", {
"description": "%migration-dashboard-title%", "command": "sqlmigration.cutover",
"provider": "MSSQL", "when": "false"
"title": "%migration-dashboard-title%", },
"icon": { {
"light": "./images/migration.svg", "command": "sqlmigration.view.database",
"dark": "./images/migration.svg" "when": "false"
}, },
"when": "connectionProvider == 'MSSQL' && !mssql:iscloud && mssql:engineedition != 8", {
"container": { "command": "sqlmigration.view.target",
"grid-container": [ "when": "false"
{ },
"name": "", {
"row": 0, "command": "sqlmigration.view.service",
"col": 0, "when": "false"
"widget": { },
"tasks-widget": [ {
"sqlmigration.start", "command": "sqlmigration.copy.migration",
"sqlmigration.newsupportrequest", "when": "false"
"sqlmigration.sendfeedback" },
] {
} "command": "sqlmigration.cancel.migration",
}, "when": "false"
{ },
"name": "", {
"row": 0, "command": "sqlmigration.retry.migration",
"col": 1, "when": "false"
"rowspan": 2.5, }
"colspan": 3.5, ]
"widget": { },
"modelview": { "dashboard.tabs": [
"id": "migration.dashboard" {
} "id": "migration-dashboard",
} "description": "%migration-dashboard-title%",
} "provider": "MSSQL",
] "title": "%migration-dashboard-title%",
} "icon": {
} "light": "./images/migration.svg",
] "dark": "./images/migration.svg"
}, },
"dependencies": { "when": "connectionProvider == 'MSSQL' && !mssql:iscloud && mssql:engineedition != 8",
"@microsoft/ads-extension-telemetry": "^1.1.3", "hideRefreshTask": true,
"uuid": "^8.3.2", "container": {
"vscode-nls": "^4.1.2" "grid-container": [
}, {
"__metadata": { "name": "",
"publisherDisplayName": "Microsoft", "row": 0,
"publisherId": "Microsoft", "col": 0,
"id": "81" "widget": {
}, "tasks-widget": [
"devDependencies": { "sqlmigration.start",
"@types/uuid": "^8.3.1" "sqlmigration.newsupportrequest",
} "sqlmigration.sendfeedback"
]
}
},
{
"name": "",
"row": 0,
"col": 1,
"rowspan": 2.5,
"colspan": 3.5,
"widget": {
"modelview": {
"id": "migration.dashboard"
}
}
}
]
}
}
]
},
"dependencies": {
"@microsoft/ads-extension-telemetry": "^1.1.3",
"uuid": "^8.3.2",
"vscode-nls": "^4.1.2"
},
"__metadata": {
"publisherDisplayName": "Microsoft",
"publisherId": "Microsoft",
"id": "81"
},
"devDependencies": {
"@types/uuid": "^8.3.1"
}
} }

View File

@@ -70,6 +70,7 @@ export interface IDashboardTabContrib {
isHomeTab?: boolean; isHomeTab?: boolean;
group?: string; group?: string;
icon?: IUserFriendlyIcon; icon?: IUserFriendlyIcon;
hideRefreshTask?: boolean;
} }
export interface IInsightTypeContrib { export interface IInsightTypeContrib {

View File

@@ -83,7 +83,11 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
// tslint:disable:no-unused-variable // tslint:disable:no-unused-variable
private readonly homeTabTitle: string = nls.localize('home', "Home"); private readonly homeTabTitle: string = nls.localize('home', "Home");
private readonly homeTabId: string = 'homeTab'; private readonly homeTabId: string = 'homeTab';
private tabToolbarActionsConfig = new Map<string, any[]>(); private tabToolbarActionsConfig = new Map<string, {
actions: any[],
hideRefreshTask: boolean
}>();
private tabContents = new Map<string, string>(); private tabContents = new Map<string, string>();
static tabName = new RawContextKey<string>('tabName', undefined); static tabName = new RawContextKey<string>('tabName', undefined);
@@ -190,10 +194,6 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
} }
}); });
if (primary.length > 0) {
let separator: HTMLElement = Taskbar.createTaskbarSeparator();
tasks.push({ element: separator });
}
} }
return tasks; return tasks;
} }
@@ -219,8 +219,8 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
const toolbarTasks = this.tabToolbarActionsConfig.get(tabId); const toolbarTasks = this.tabToolbarActionsConfig.get(tabId);
let tasks = TaskRegistry.getTasks(); let tasks = TaskRegistry.getTasks();
let content = []; let content = [];
if (types.isArray(toolbarTasks) && toolbarTasks.length > 0) { if (types.isArray(toolbarTasks.actions) && toolbarTasks.actions.length > 0) {
tasks = toolbarTasks.map(i => { tasks = toolbarTasks.actions.map(i => {
if (types.isString(i)) { if (types.isString(i)) {
if (tasks.some(x => x === i)) { if (tasks.some(x => x === i)) {
return i; return i;
@@ -239,12 +239,29 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
// get extension actions contributed to the page's toolbar // get extension actions contributed to the page's toolbar
const contributedTasks = this.getContributedTasks(tabId); const contributedTasks = this.getContributedTasks(tabId);
if (content.length > 0 && contributedTasks.length > 0) {
/**
* Adding the separator before adding contributed tasks if there other
* toolbar tasks already present in the toolbar
*/
const separator: HTMLElement = Taskbar.createTaskbarSeparator();
content.push({ element: separator });
}
content.push(...contributedTasks); content.push(...contributedTasks);
const refreshAction = new RefreshWidgetAction(() => { if (!toolbarTasks.hideRefreshTask) {
this.refresh(); /**
}, this); * Adding the separator only when there are other actions present on the task
content.push({ action: refreshAction }); */
if (content.length > 0) {
const separator: HTMLElement = Taskbar.createTaskbarSeparator();
content.push({ element: separator });
}
const refreshAction = new RefreshWidgetAction(() => {
this.refresh();
}, this);
content.push({ action: refreshAction });
}
return content; return content;
} }
@@ -263,11 +280,6 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
content.push({ action: a }); content.push({ action: a });
}); });
if (content.length > 0) {
let separator: HTMLElement = Taskbar.createTaskbarSeparator();
content.push({ element: separator });
}
return content; return content;
} }
@@ -442,7 +454,7 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
configs = cb.apply(this, [configs]); configs = cb.apply(this, [configs]);
}); });
this.processTasksWidgets(configs, value.id); this.processTasksWidgets(configs, value.id, value.hideRefreshTask);
if (key === WIDGETS_CONTAINER) { if (key === WIDGETS_CONTAINER) {
return { id: value.id, title: value.title, container: { 'widgets-container': configs }, alwaysShow: value.alwaysShow, iconClass: value.iconClass }; return { id: value.id, title: value.title, container: { 'widgets-container': configs }, alwaysShow: value.alwaysShow, iconClass: value.iconClass };
@@ -459,7 +471,7 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
* @param widgets widgets * @param widgets widgets
* @param tabId tab id * @param tabId tab id
*/ */
private processTasksWidgets(widgets: WidgetConfig[], tabId: string): void { private processTasksWidgets(widgets: WidgetConfig[], tabId: string, hideRefreshTask?: boolean): void {
let index; let index;
const allTasks = []; const allTasks = [];
// do this in a while loop since there might be multiple tasks widgets in a tab // do this in a while loop since there might be multiple tasks widgets in a tab
@@ -473,7 +485,10 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
widgets.splice(index, 1); widgets.splice(index, 1);
} }
} while (index !== -1); } while (index !== -1);
this.tabToolbarActionsConfig.set(tabId, allTasks); this.tabToolbarActionsConfig.set(tabId, {
actions: allTasks,
hideRefreshTask: hideRefreshTask
});
} }
protected getContentType(tab: TabConfig): string { protected getContentType(tab: TabConfig): string {

View File

@@ -65,6 +65,10 @@ const tabSchema: IJSONSchema = {
description: localize('azdata.extension.contributes.dashboard.tab.group', "The unique identifier of the group this tab belongs to, value for home group: home."), description: localize('azdata.extension.contributes.dashboard.tab.group', "The unique identifier of the group this tab belongs to, value for home group: home."),
type: 'string' type: 'string'
}, },
hideRefreshTask: {
description: localize('azdata.extension.contributes.dashboard.tab.hideRefreshTask', "Flag used to show/hide refresh button in toolbar. By default, the value is false"),
type: 'boolean'
},
icon: { icon: {
description: localize('dazdata.extension.contributes.dashboard.tab.icon', "(Optional) Icon which is used to represent this tab in the UI. Either a file path or a themeable configuration"), description: localize('dazdata.extension.contributes.dashboard.tab.icon', "(Optional) Icon which is used to represent this tab in the UI. Either a file path or a themeable configuration"),
anyOf: [{ anyOf: [{
@@ -101,7 +105,7 @@ const tabContributionSchema: IJSONSchema = {
ExtensionsRegistry.registerExtensionPoint<IDashboardTabContrib | IDashboardTabContrib[]>({ extensionPoint: 'dashboard.tabs', jsonSchema: tabContributionSchema }).setHandler(extensions => { ExtensionsRegistry.registerExtensionPoint<IDashboardTabContrib | IDashboardTabContrib[]>({ extensionPoint: 'dashboard.tabs', jsonSchema: tabContributionSchema }).setHandler(extensions => {
function handleTab(tab: IDashboardTabContrib, extension: IExtensionPointUser<any>) { function handleTab(tab: IDashboardTabContrib, extension: IExtensionPointUser<any>) {
let { description, container, provider, title, when, id, alwaysShow, isHomeTab, group, icon } = tab; let { description, container, provider, title, when, id, alwaysShow, isHomeTab, group, icon, hideRefreshTask } = tab;
// If always show is not specified, set it to true by default. // If always show is not specified, set it to true by default.
if (!types.isBoolean(alwaysShow)) { if (!types.isBoolean(alwaysShow)) {
@@ -155,7 +159,7 @@ ExtensionsRegistry.registerExtensionPoint<IDashboardTabContrib | IDashboardTabCo
iconClass = createCSSRuleForIcon(icon, extension); iconClass = createCSSRuleForIcon(icon, extension);
} }
if (result) { if (result) {
registerTab({ description, title, container, provider, when, id, alwaysShow, publisher, isHomeTab, group, iconClass }); registerTab({ description, title, container, provider, when, id, alwaysShow, publisher, isHomeTab, group, iconClass, hideRefreshTask });
} }
} }

View File

@@ -45,6 +45,7 @@ export interface TabConfig extends IDashboardTab {
canClose: boolean; canClose: boolean;
actions?: Array<Action>; actions?: Array<Action>;
type?: TabType; type?: TabType;
hideRefreshTask?: boolean;
} }

View File

@@ -15,6 +15,7 @@ export interface IDashboardTab {
isHomeTab?: boolean; isHomeTab?: boolean;
group?: string; group?: string;
iconClass?: string; iconClass?: string;
hideRefreshTask?: boolean;
} }
export interface IDashboardTabGroup { export interface IDashboardTabGroup {