Plugins: Disable plugin uninstall while plugin is installing (#95070)

This commit is contained in:
Hugo Kiyodi Oshiro 2024-10-24 09:38:38 +02:00 committed by GitHub
parent 830600dab0
commit 2d27703955
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 39 additions and 5 deletions

View File

@ -230,12 +230,40 @@ describe('InstallControlsButton', () => {
expect(button).toBeDisabled();
});
it('should be disabled when isInstalling=false but isUpdatingFromInstance=true', () => {
store.dispatch({ type: 'plugins/uninstall/fulfilled', payload: { id: '', changes: {} } });
render(
<TestProvider store={store}>
<InstallControlsButton
plugin={{ ...plugin, isUpdatingFromInstance: true }}
pluginStatus={PluginStatus.UNINSTALL}
/>
</TestProvider>
);
const button = screen.getByText('Uninstall').closest('button');
expect(button).toBeDisabled();
});
it('should be disabled when isInstalling=false but isFullyInstalled=false', () => {
store.dispatch({ type: 'plugins/uninstall/fulfilled', payload: { id: '', changes: {} } });
render(
<TestProvider store={store}>
<InstallControlsButton
plugin={{ ...plugin, isFullyInstalled: false }}
pluginStatus={PluginStatus.UNINSTALL}
/>
</TestProvider>
);
const button = screen.getByText('Uninstall').closest('button');
expect(button).toBeDisabled();
});
it('should be enabled when isInstalling=false and isUninstallingFromInstance=false', () => {
store.dispatch({ type: 'plugins/uninstall/fulfilled', payload: { id: '', changes: {} } });
render(
<TestProvider store={store}>
<InstallControlsButton
plugin={{ ...plugin, isUninstallingFromInstance: false }}
plugin={{ ...plugin, isUninstallingFromInstance: false, isFullyInstalled: true }}
pluginStatus={PluginStatus.UNINSTALL}
/>
</TestProvider>

View File

@ -117,10 +117,8 @@ export function InstallControlsButton({
}
};
let disableUninstall =
config.pluginAdminExternalManageEnabled && configCore.featureToggles.managedPluginsInstall
? plugin.isUninstallingFromInstance
: isUninstalling;
let disableUninstall = shouldDisableUninstall(isUninstalling, plugin);
let uninstallTitle = '';
if (plugin.isPreinstalled.found) {
disableUninstall = true;
@ -179,3 +177,11 @@ export function InstallControlsButton({
</Button>
);
}
function shouldDisableUninstall(isUninstalling: boolean, plugin: CatalogPlugin) {
if (config.pluginAdminExternalManageEnabled && config.featureToggles.managedPluginsInstall) {
return plugin.isUninstallingFromInstance || !plugin.isFullyInstalled || plugin.isUpdatingFromInstance;
}
return isUninstalling;
}