diff --git a/package-lock.json b/package-lock.json index fdb6bcfff3..8dd168b255 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,7 +18,7 @@ "@microsoft/vscode-azext-azureutils": "^2.0.0", "@microsoft/vscode-azext-utils": "^2.1.1", "@microsoft/vscode-container-client": "^0.1.1", - "@microsoft/vscode-docker-registries": "^0.1.8", + "@microsoft/vscode-docker-registries": "^0.1.9", "dayjs": "^1.11.7", "dockerfile-language-server-nodejs": "^0.11.0", "fs-extra": "^11.1.1", @@ -810,9 +810,9 @@ } }, "node_modules/@microsoft/vscode-docker-registries": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@microsoft/vscode-docker-registries/-/vscode-docker-registries-0.1.8.tgz", - "integrity": "sha512-GZ6mINW4aesBCFArQc4Qum60rS6I0NdgPJj5piZiIZgNIzKToc9rB2WQY/v/dTf8+WrVgR6n46hoV537r7LPXw==", + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@microsoft/vscode-docker-registries/-/vscode-docker-registries-0.1.9.tgz", + "integrity": "sha512-p4+zrUAJFo48TqOBtO3OsqbSk8XPi8DSZbMvo9Qr8qZSNS0Eki21RZdE7JF9II08m8eJtPNsfFlM9KAKWYQkQw==", "dependencies": { "dayjs": "^1.11.7" } diff --git a/package.json b/package.json index d918ac74e1..164e3e83ac 100644 --- a/package.json +++ b/package.json @@ -3002,7 +3002,7 @@ "@microsoft/vscode-azext-azureutils": "^2.0.0", "@microsoft/vscode-azext-utils": "^2.1.1", "@microsoft/vscode-container-client": "^0.1.1", - "@microsoft/vscode-docker-registries": "^0.1.8", + "@microsoft/vscode-docker-registries": "^0.1.9", "dayjs": "^1.11.7", "dockerfile-language-server-nodejs": "^0.11.0", "fs-extra": "^11.1.1", diff --git a/src/commands/images/pushImage/RefreshRegistriesViewStep.ts b/src/commands/images/pushImage/RefreshRegistriesViewStep.ts new file mode 100644 index 0000000000..2dc8c4452a --- /dev/null +++ b/src/commands/images/pushImage/RefreshRegistriesViewStep.ts @@ -0,0 +1,20 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See LICENSE.md in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { AzureWizardExecuteStep } from '@microsoft/vscode-azext-utils'; +import { ext } from '../../../extensionVariables'; +import { PushImageWizardContext } from './PushImageWizardContext'; + +export class RefreshRegistriesViewStep extends AzureWizardExecuteStep { + public priority: number = 400; + + public async execute(wizardContext: PushImageWizardContext): Promise { + void ext.registriesTree.refresh(); + } + + public shouldExecute(wizardContext: PushImageWizardContext): boolean { + return true; + } +} diff --git a/src/commands/images/pushImage/pushImage.ts b/src/commands/images/pushImage/pushImage.ts index 2dc7717922..b79deef184 100644 --- a/src/commands/images/pushImage/pushImage.ts +++ b/src/commands/images/pushImage/pushImage.ts @@ -12,6 +12,7 @@ import { FinalTagPromptStep } from './FinalTagPromptStep'; import { GetRegistryTargetPromptStep } from './GetRegistryTargetPromptStep'; import { ImagePushStep } from './ImagePushStep'; import { PushImageWizardContext } from './PushImageWizardContext'; +import { RefreshRegistriesViewStep } from './RefreshRegistriesViewStep'; import { RegistryLoginStep } from './RegistryLoginStep'; export async function pushImage(context: IActionContext, node: ImageTreeItem | undefined): Promise { @@ -36,6 +37,7 @@ export async function pushImage(context: IActionContext, node: ImageTreeItem | u executeSteps: [ new RegistryLoginStep(), new ImagePushStep(), + new RefreshRegistriesViewStep(), ], showLoadingPrompt: true, }); diff --git a/src/tree/registerTrees.ts b/src/tree/registerTrees.ts index 3a6283a04b..4290c0f3a4 100644 --- a/src/tree/registerTrees.ts +++ b/src/tree/registerTrees.ts @@ -26,41 +26,27 @@ export function registerTrees(): void { ext.containersTree = new AzExtTreeDataProvider(ext.containersRoot, containersLoadMore); ext.containersTreeView = vscode.window.createTreeView('dockerContainers', { treeDataProvider: ext.containersTree, canSelectMany: true }); ext.context.subscriptions.push(ext.containersTreeView); - /* eslint-disable-next-line @typescript-eslint/promise-function-async */ - registerCommand(containersLoadMore, (context: IActionContext, node: AzExtTreeItem) => ext.containersTree.loadMore(node, context)); + registerCommand(containersLoadMore, async (context: IActionContext, node: AzExtTreeItem) => ext.containersTree.loadMore(node, context)); ext.networksRoot = new NetworksTreeItem(undefined); const networksLoadMore = 'vscode-docker.networks.loadMore'; ext.networksTree = new AzExtTreeDataProvider(ext.networksRoot, networksLoadMore); ext.networksTreeView = vscode.window.createTreeView('dockerNetworks', { treeDataProvider: ext.networksTree, canSelectMany: true }); ext.context.subscriptions.push(ext.networksTreeView); - /* eslint-disable-next-line @typescript-eslint/promise-function-async */ - registerCommand(networksLoadMore, (context: IActionContext, node: AzExtTreeItem) => ext.networksTree.loadMore(node, context)); + registerCommand(networksLoadMore, async (context: IActionContext, node: AzExtTreeItem) => ext.networksTree.loadMore(node, context)); ext.imagesRoot = new ImagesTreeItem(undefined); const imagesLoadMore = 'vscode-docker.images.loadMore'; ext.imagesTree = new AzExtTreeDataProvider(ext.imagesRoot, imagesLoadMore); ext.imagesTreeView = vscode.window.createTreeView('dockerImages', { treeDataProvider: ext.imagesTree, canSelectMany: true }); ext.context.subscriptions.push(ext.imagesTreeView); - /* eslint-disable-next-line @typescript-eslint/promise-function-async */ - registerCommand(imagesLoadMore, (context: IActionContext, node: AzExtTreeItem) => ext.imagesTree.loadMore(node, context)); + registerCommand(imagesLoadMore, async (context: IActionContext, node: AzExtTreeItem) => ext.imagesTree.loadMore(node, context)); const urtdp = new UnifiedRegistryTreeDataProvider(ext.context.globalState); - const genericRegistryV2DataProvider = new GenericRegistryV2DataProvider(ext.context); - const azureRegistryDataProvider = new AzureRegistryDataProvider(ext.context); - const dockerHubRegistryDataProvider = new DockerHubRegistryDataProvider(ext.context); - const githubRegistryDataProvider = new GitHubRegistryDataProvider(ext.context); - urtdp.registerProvider(githubRegistryDataProvider); - urtdp.registerProvider(dockerHubRegistryDataProvider); - urtdp.registerProvider(azureRegistryDataProvider); - urtdp.registerProvider(genericRegistryV2DataProvider); ext.registriesRoot = urtdp; - ext.registriesTreeView = vscode.window.createTreeView('dockerRegistries', { treeDataProvider: urtdp }); + ext.registriesTreeView = vscode.window.createTreeView('dockerRegistries', { treeDataProvider: urtdp, showCollapseAll: true }); ext.registriesTree = urtdp; - ext.genericRegistryV2DataProvider = genericRegistryV2DataProvider; - ext.azureRegistryDataProvider = azureRegistryDataProvider; - ext.dockerHubRegistryDataProvider = dockerHubRegistryDataProvider; - ext.githubRegistryDataProvider = githubRegistryDataProvider; + registerRegistryDataProviders(urtdp); void migrateRegistriesData(ext.context); ext.volumesRoot = new VolumesTreeItem(undefined); @@ -68,16 +54,14 @@ export function registerTrees(): void { ext.volumesTree = new AzExtTreeDataProvider(ext.volumesRoot, volumesLoadMore); ext.volumesTreeView = vscode.window.createTreeView('dockerVolumes', { treeDataProvider: ext.volumesTree, canSelectMany: true }); ext.context.subscriptions.push(ext.volumesTreeView); - /* eslint-disable-next-line @typescript-eslint/promise-function-async */ - registerCommand(volumesLoadMore, (context: IActionContext, node: AzExtTreeItem) => ext.volumesTree.loadMore(node, context)); + registerCommand(volumesLoadMore, async (context: IActionContext, node: AzExtTreeItem) => ext.volumesTree.loadMore(node, context)); ext.contextsRoot = new ContextsTreeItem(undefined); const contextsLoadMore = 'vscode-docker.contexts.loadMore'; ext.contextsTree = new AzExtTreeDataProvider(ext.contextsRoot, contextsLoadMore); ext.contextsTreeView = vscode.window.createTreeView('vscode-docker.views.dockerContexts', { treeDataProvider: ext.contextsTree, canSelectMany: false }); ext.context.subscriptions.push(ext.contextsTreeView); - /* eslint-disable-next-line @typescript-eslint/promise-function-async */ - registerCommand(contextsLoadMore, (context: IActionContext, node: AzExtTreeItem) => ext.contextsTree.loadMore(node, context)); + registerCommand(contextsLoadMore, async (context: IActionContext, node: AzExtTreeItem) => ext.contextsTree.loadMore(node, context)); const helpRoot = new HelpsTreeItem(undefined); const helpTreeDataProvider = new AzExtTreeDataProvider(helpRoot, 'vscode-docker.help.loadMore'); @@ -90,3 +74,25 @@ export function registerTrees(): void { // Register the refresh manager ext.context.subscriptions.push(new RefreshManager()); } + +function registerRegistryDataProviders(urtdp: UnifiedRegistryTreeDataProvider): void { + const githubRegistryDataProvider = new GitHubRegistryDataProvider(ext.context); + ext.context.subscriptions.push(urtdp.registerProvider(githubRegistryDataProvider)); + ext.context.subscriptions.push(githubRegistryDataProvider); + ext.githubRegistryDataProvider = githubRegistryDataProvider; + + const dockerHubRegistryDataProvider = new DockerHubRegistryDataProvider(ext.context); + ext.context.subscriptions.push(urtdp.registerProvider(dockerHubRegistryDataProvider)); + ext.context.subscriptions.push(dockerHubRegistryDataProvider); + ext.dockerHubRegistryDataProvider = dockerHubRegistryDataProvider; + + const azureRegistryDataProvider = new AzureRegistryDataProvider(ext.context); + ext.context.subscriptions.push(urtdp.registerProvider(azureRegistryDataProvider)); + ext.context.subscriptions.push(azureRegistryDataProvider); + ext.azureRegistryDataProvider = azureRegistryDataProvider; + + const genericRegistryV2DataProvider = new GenericRegistryV2DataProvider(ext.context); + ext.context.subscriptions.push(urtdp.registerProvider(genericRegistryV2DataProvider)); + ext.context.subscriptions.push(genericRegistryV2DataProvider); + ext.genericRegistryV2DataProvider = genericRegistryV2DataProvider; +} diff --git a/src/tree/registries/Azure/AzureRegistryDataProvider.ts b/src/tree/registries/Azure/AzureRegistryDataProvider.ts index 7ef0931813..e0cef55f57 100644 --- a/src/tree/registries/Azure/AzureRegistryDataProvider.ts +++ b/src/tree/registries/Azure/AzureRegistryDataProvider.ts @@ -99,6 +99,7 @@ export class AzureRegistryDataProvider extends RegistryV2DataProvider implements } public dispose(): void { + super.dispose(); this.subscriptionProvider.dispose(); }