Skip to content

Conversation

@nofaralfasi
Copy link
Contributor

@nofaralfasi nofaralfasi commented Feb 5, 2026

The BulkReassignHostgroupModal now displays a skeleton loader while fetching hostgroup data, improving user experience by providing visual feedback during the loading state.

⚠️ Note to reviewers: The last commit is for testing purposes only and should be dropped before merging. It ensures the skeleton loader is visible during review/QA by forcing a fetch on modal open.

Steps to Reproduce:

  1. Open Chrome DevTools (F12 or right-click > Inspect)
  2. Go to the Network tab
  3. Set network throttling to "Slow 3G" (dropdown next to "No throttling")
  4. Navigate to the All Hosts page (Hosts > All Hosts)
  5. Select one or more hosts using the checkboxes
  6. Click on the kebab menu (three dots) in the toolbar
  7. Click on "Change association"
  8. Click on "Change host group"
  9. Observe the modal that appears

Before the fix:

  • The modal opens with the title "Change host group" but the host group dropdown area is blank/empty while data is loading
  • No visual indication that data is being fetched
  • The Save button is enabled while data is loading, allowing users to click it prematurely

After the fix:

  • The modal displays a skeleton loading indicator (3 animated lines) while the hostgroup data is being fetched
  • Once loaded, the skeleton is replaced with the host group dropdown selector
  • The Save button is disabled while data is loading, preventing premature submission
Screencast.From.2026-02-05.15-09-35.mp4

jeremylenz
jeremylenz previously approved these changes Feb 6, 2026
Copy link
Contributor

@jeremylenz jeremylenz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking great!

Approved pending green tests & removal of that commit.

@nofaralfasi
Copy link
Contributor Author

Looking great!

Approved pending green tests & removal of that commit.

Done :)

@jeremylenz
Copy link
Contributor

The test failure seems related 😖

The BulkReassignHostgroupModal now displays a skeleton loader while
fetching hostgroup data, improving user experience by providing visual
feedback during the loading state. The Save button is also disabled
while data is loading to prevent premature submission.
@jeremylenz jeremylenz merged commit e27225a into theforeman:develop Feb 10, 2026
40 of 42 checks passed
@jeremylenz
Copy link
Contributor

This may need a followup. I'm now seeing this when I load All Hosts:

installHook.js:1 Warning: Failed prop type: The prop `status` is marked as required in `SkeletonLoader`, but its value is `undefined`.
    in SkeletonLoader (created by BulkReassignHostgroupModal)
    in BulkReassignHostgroupModal (created by BulkReassignHostgroupModalScene)
    in BulkReassignHostgroupModalScene (created by HostsIndex)
    in section (created by PageSection)
    in PageSection (created by TableIndexPage)
    in div (created by TableIndexPage)
    in TableIndexPage (created by HostsIndex)
    in HostsIndex (created by Context.Consumer)
    in Route (created by AppSwitcher)
    in Switch (created by ForemanSwitcher)
    in ForemanSwitcher (created by AppSwitcher)
    in AppSwitcher (created by ReactApp)
    in ErrorBoundary (created by ReactApp)
    in main (created by Page)
    in div (created by Page)
    in Page (created by Layout)
    in div (created by FlexItem)
    in FlexItem (created by Layout)
    in div (created by Flex)
    in Flex (created by Layout)
    in Layout (created by ConnectedLayout)
    in ConnectedLayout (created by ReactApp)
    in Router (created by ConnectedRouter)
    in ConnectedRouter (created by Context.Consumer)
    in ConnectedRouterWithContext (created by Connect(ConnectedRouterWithContext))
    in Connect(ConnectedRouterWithContext) (created by ReactApp)
    in ApolloProvider (created by ReactApp)
    in div (created by ReactApp)
    in ReactApp (created by I18nProviderWrapper(ReactApp))
    in IntlProvider (created by I18nProviderWrapper(ReactApp))
    in I18nProviderWrapper(ReactApp) (created by StoreProvider(I18nProviderWrapper(ReactApp)))
    in Provider (created by StoreProvider(I18nProviderWrapper(ReactApp)))
    in StoreProvider(I18nProviderWrapper(ReactApp)) (created by DataProvider(StoreProvider(I18nProviderWrapper(ReactApp))))
    in DataProvider(StoreProvider(I18nProviderWrapper(ReactApp)))
    in AwaitedMount

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants