mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Disable install button while a python package is being installed from the Manage Packages dialog. (#19856)
* Also added same behavior for uninstall button.
This commit is contained in:
@@ -24,6 +24,7 @@ export class AddNewPackageTab {
|
|||||||
private newPackagesSummary: azdata.TextComponent;
|
private newPackagesSummary: azdata.TextComponent;
|
||||||
private newPackagesSummaryLoader: azdata.LoadingComponent;
|
private newPackagesSummaryLoader: azdata.LoadingComponent;
|
||||||
private packageInstallButton: azdata.ButtonComponent;
|
private packageInstallButton: azdata.ButtonComponent;
|
||||||
|
private installProgressSpinner: azdata.LoadingComponent;
|
||||||
|
|
||||||
private readonly InvalidTextPlaceholder = localize('managePackages.invalidTextPlaceholder', "N/A");
|
private readonly InvalidTextPlaceholder = localize('managePackages.invalidTextPlaceholder', "N/A");
|
||||||
private readonly SearchPlaceholder = (pkgType: string) => localize('managePackages.searchBarPlaceholder', "Search {0} packages", pkgType);
|
private readonly SearchPlaceholder = (pkgType: string) => localize('managePackages.searchBarPlaceholder', "Search {0} packages", pkgType);
|
||||||
@@ -48,6 +49,14 @@ export class AddNewPackageTab {
|
|||||||
await this.loadNewPackageInfo();
|
await this.loadNewPackageInfo();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.installProgressSpinner = view.modelBuilder.loadingComponent()
|
||||||
|
.withProps({
|
||||||
|
loadingText: localize('managePackages.installProgressText', "Installing package"),
|
||||||
|
showText: true,
|
||||||
|
loadingCompletedText: localize('managePackages.installCompleteText', "Package installed"),
|
||||||
|
loading: false
|
||||||
|
}).component();
|
||||||
|
|
||||||
this.newPackagesName = view.modelBuilder.text().withProps({ width: '400px' }).component();
|
this.newPackagesName = view.modelBuilder.text().withProps({ width: '400px' }).component();
|
||||||
this.newPackagesNameLoader = view.modelBuilder.loadingComponent()
|
this.newPackagesNameLoader = view.modelBuilder.loadingComponent()
|
||||||
.withItem(this.newPackagesName)
|
.withItem(this.newPackagesName)
|
||||||
@@ -91,6 +100,9 @@ export class AddNewPackageTab {
|
|||||||
}, {
|
}, {
|
||||||
component: this.packageInstallButton,
|
component: this.packageInstallButton,
|
||||||
title: ''
|
title: ''
|
||||||
|
}, {
|
||||||
|
component: this.installProgressSpinner,
|
||||||
|
title: ''
|
||||||
}]).component();
|
}]).component();
|
||||||
|
|
||||||
await view.initializeModel(formModel);
|
await view.initializeModel(formModel);
|
||||||
@@ -178,8 +190,6 @@ export class AddNewPackageTab {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private async doPackageInstall(): Promise<void> {
|
private async doPackageInstall(): Promise<void> {
|
||||||
let packageName = this.newPackagesName.value as string;
|
let packageName = this.newPackagesName.value as string;
|
||||||
let packageVersion = this.newPackagesVersions.value as string;
|
let packageVersion = this.newPackagesVersions.value as string;
|
||||||
@@ -197,6 +207,8 @@ export class AddNewPackageTab {
|
|||||||
description: taskName,
|
description: taskName,
|
||||||
isCancelable: false,
|
isCancelable: false,
|
||||||
operation: op => {
|
operation: op => {
|
||||||
|
this.packageInstallButton.enabled = false;
|
||||||
|
this.installProgressSpinner.loading = true;
|
||||||
let installPromise: Promise<void>;
|
let installPromise: Promise<void>;
|
||||||
installPromise = this.dialog.model.installPackages([{ name: packageName, version: packageVersion }]);
|
installPromise = this.dialog.model.installPackages([{ name: packageName, version: packageVersion }]);
|
||||||
installPromise
|
installPromise
|
||||||
@@ -220,6 +232,10 @@ export class AddNewPackageTab {
|
|||||||
|
|
||||||
op.updateStatus(azdata.TaskStatus.Failed, installFailedMsg);
|
op.updateStatus(azdata.TaskStatus.Failed, installFailedMsg);
|
||||||
this.jupyterInstallation.outputChannel.appendLine(installFailedMsg);
|
this.jupyterInstallation.outputChannel.appendLine(installFailedMsg);
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
this.packageInstallButton.enabled = true;
|
||||||
|
this.installProgressSpinner.loading = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ export class InstalledPackagesTab {
|
|||||||
private installedPackagesTable: azdata.TableComponent;
|
private installedPackagesTable: azdata.TableComponent;
|
||||||
private installedPackagesLoader: azdata.LoadingComponent;
|
private installedPackagesLoader: azdata.LoadingComponent;
|
||||||
private uninstallPackageButton: azdata.ButtonComponent;
|
private uninstallPackageButton: azdata.ButtonComponent;
|
||||||
|
private uninstallProgressSpinner: azdata.LoadingComponent;
|
||||||
private view: azdata.ModelView | undefined;
|
private view: azdata.ModelView | undefined;
|
||||||
private formBuilder: azdata.FormBuilder;
|
private formBuilder: azdata.FormBuilder;
|
||||||
private disposables: vscode.Disposable[] = [];
|
private disposables: vscode.Disposable[] = [];
|
||||||
@@ -110,6 +111,14 @@ export class InstalledPackagesTab {
|
|||||||
}).component();
|
}).component();
|
||||||
this.uninstallPackageButton.onDidClick(() => this.doUninstallPackage(this.installedPackagesTable.selectedRows));
|
this.uninstallPackageButton.onDidClick(() => this.doUninstallPackage(this.installedPackagesTable.selectedRows));
|
||||||
|
|
||||||
|
this.uninstallProgressSpinner = view.modelBuilder.loadingComponent()
|
||||||
|
.withProps({
|
||||||
|
loadingText: localize('managePackages.uninstallProgressText', "Uninstalling package"),
|
||||||
|
showText: true,
|
||||||
|
loadingCompletedText: localize('managePackages.uninstallCompleteText', "Package uninstalled"),
|
||||||
|
loading: false
|
||||||
|
}).component();
|
||||||
|
|
||||||
this.formBuilder = view.modelBuilder.formContainer()
|
this.formBuilder = view.modelBuilder.formContainer()
|
||||||
.withFormItems([{
|
.withFormItems([{
|
||||||
component: this.packageTypeDropdown,
|
component: this.packageTypeDropdown,
|
||||||
@@ -123,6 +132,9 @@ export class InstalledPackagesTab {
|
|||||||
}, {
|
}, {
|
||||||
component: this.uninstallPackageButton,
|
component: this.uninstallPackageButton,
|
||||||
title: ''
|
title: ''
|
||||||
|
}, {
|
||||||
|
component: this.uninstallProgressSpinner,
|
||||||
|
title: ''
|
||||||
}]);
|
}]);
|
||||||
await this.resetLocations();
|
await this.resetLocations();
|
||||||
|
|
||||||
@@ -252,7 +264,7 @@ export class InstalledPackagesTab {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.uninstallPackageButton.updateProperties({ enabled: false });
|
this.uninstallPackageButton.enabled = false;
|
||||||
let doUninstall = await this.prompter.promptSingle<boolean>(<IQuestion>{
|
let doUninstall = await this.prompter.promptSingle<boolean>(<IQuestion>{
|
||||||
type: QuestionTypes.confirm,
|
type: QuestionTypes.confirm,
|
||||||
message: localize('managePackages.confirmUninstall', "Are you sure you want to uninstall the specified packages?"),
|
message: localize('managePackages.confirmUninstall', "Are you sure you want to uninstall the specified packages?"),
|
||||||
@@ -281,6 +293,7 @@ export class InstalledPackagesTab {
|
|||||||
description: taskName,
|
description: taskName,
|
||||||
isCancelable: false,
|
isCancelable: false,
|
||||||
operation: op => {
|
operation: op => {
|
||||||
|
this.uninstallProgressSpinner.loading = true;
|
||||||
let uninstallPromise: Promise<void> = this.dialog.model.uninstallPackages(packages);
|
let uninstallPromise: Promise<void> = this.dialog.model.uninstallPackages(packages);
|
||||||
uninstallPromise
|
uninstallPromise
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
@@ -301,14 +314,18 @@ export class InstalledPackagesTab {
|
|||||||
|
|
||||||
op.updateStatus(azdata.TaskStatus.Failed, uninstallFailedMsg);
|
op.updateStatus(azdata.TaskStatus.Failed, uninstallFailedMsg);
|
||||||
this.jupyterInstallation.outputChannel.appendLine(uninstallFailedMsg);
|
this.jupyterInstallation.outputChannel.appendLine(uninstallFailedMsg);
|
||||||
|
})
|
||||||
|
.finally(() => {
|
||||||
|
this.uninstallPackageButton.enabled = true;
|
||||||
|
this.uninstallProgressSpinner.loading = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
this.dialog.showErrorMessage(utils.getErrorMessage(err));
|
this.dialog.showErrorMessage(utils.getErrorMessage(err));
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
this.uninstallPackageButton.enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.uninstallPackageButton.updateProperties({ enabled: true });
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user