From b40e733db7cbfc4db3ad6c3b2621b07eba103de5 Mon Sep 17 00:00:00 2001 From: Eli Bosley Date: Mon, 10 Nov 2025 12:15:39 -0500 Subject: [PATCH] feat(activation): improve plugin installation status handling and UI feedback - Enhanced the `ActivationPluginsStep` component to track and display the installation status of plugins, including states for pending, installing, success, and error. - Updated the UI to provide real-time feedback during the installation process, including dynamic status messages and logs for each plugin. - Improved unit tests to verify the new status handling and ensure accurate UI updates based on installation progress. - Added new localization strings for installation status messages to enhance user experience. This update significantly improves the clarity and responsiveness of the plugin installation process, providing users with better insights into the status of their selected plugins. --- .../Activation/ActivationPluginsStep.test.ts | 3 + .../Activation/ActivationPluginsStep.vue | 142 ++++++++++++++---- web/src/locales/en.json | 3 + 3 files changed, 117 insertions(+), 31 deletions(-) diff --git a/web/__test__/components/Activation/ActivationPluginsStep.test.ts b/web/__test__/components/Activation/ActivationPluginsStep.test.ts index 2975a6ea6..b020b0792 100644 --- a/web/__test__/components/Activation/ActivationPluginsStep.test.ts +++ b/web/__test__/components/Activation/ActivationPluginsStep.test.ts @@ -77,6 +77,7 @@ describe('ActivationPluginsStep', () => { .findAll('[data-testid="brand-button"]') .find((button) => button.text().includes('Install')); expect(installButton).toBeTruthy(); + expect(installButton!.text()).toContain('Install Selected'); await installButton!.trigger('click'); await flushPromises(); @@ -86,6 +87,7 @@ describe('ActivationPluginsStep', () => { expect(firstCallArgs?.url).toContain('community.applications'); expect(props.onComplete).not.toHaveBeenCalled(); expect(wrapper.html()).toContain('installation started'); + expect(wrapper.html()).toContain('Installed'); expect(wrapper.html()).toContain('installed successfully'); const continueButton = wrapper @@ -119,5 +121,6 @@ describe('ActivationPluginsStep', () => { expect(props.onComplete).not.toHaveBeenCalled(); expect(wrapper.html()).toContain('Failed to install plugins. Please try again.'); + expect(wrapper.html()).toContain('Install failed'); }); }); diff --git a/web/src/components/Activation/ActivationPluginsStep.vue b/web/src/components/Activation/ActivationPluginsStep.vue index 68cdfe487..6cfd062bc 100644 --- a/web/src/components/Activation/ActivationPluginsStep.vue +++ b/web/src/components/Activation/ActivationPluginsStep.vue @@ -1,5 +1,5 @@