From 44a04c6dcb9f69897a93cc98629595587e3ab535 Mon Sep 17 00:00:00 2001 From: Nadja Heitmann Date: Tue, 8 Oct 2024 07:37:24 +0000 Subject: [PATCH] Refs #36789 - Add action to force appicability refresh for Debian packages --- .../HostDetails/Tabs/DebsTab/DebsTab.js | 35 ++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebsTab.js b/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebsTab.js index cc0a89bc5d8..2390d07aa7b 100644 --- a/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebsTab.js +++ b/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebsTab.js @@ -1,5 +1,5 @@ import React, { useCallback, useState, useRef } from 'react'; -import { useSelector } from 'react-redux'; +import { useSelector, useDispatch } from 'react-redux'; import { ActionList, ActionListItem, @@ -19,6 +19,7 @@ import { import { TableVariant, Thead, Tbody, Tr, Th, Td, TableText } from '@patternfly/react-table'; import PropTypes from 'prop-types'; import { translate as __ } from 'foremanReact/common/I18n'; +import { HOST_DETAILS_KEY } from 'foremanReact/components/HostDetails/consts'; import { selectAPIResponse } from 'foremanReact/redux/API/APISelectors'; import { urlBuilder } from 'foremanReact/common/urlHelpers'; @@ -44,6 +45,7 @@ import { hasRequiredPermissions as can, userPermissionsFromHostDetails } from '../../hostDetailsHelpers'; import SortableColumnHeaders from '../../../../Table/components/SortableColumnHeaders'; import { useRexJobPolling } from '../RemoteExecutionHooks'; +import { runSubmanRepos } from '../../Cards/ContentViewDetailsCard/HostContentViewActions'; export const hideDebsTab = ({ hostDetails }) => !(hostDetails?.operatingsystem_family === 'Debian'); @@ -197,6 +199,7 @@ export const DebsTab = () => { const { results, ...metadata } = response; const { error: errorSearchBody } = metadata; const status = useSelector(state => selectHostDebsStatus(state)); + const dispatch = useDispatch(); const { selectOne, isSelected, @@ -269,6 +272,21 @@ export const DebsTab = () => { isPolling: isInstallInProgress, } = useRexJobPolling(packageInstallAction, getHostDetails({ hostname })); + const refreshHostDetails = () => dispatch({ + type: 'API_GET', + payload: { + key: HOST_DETAILS_KEY, + url: `/api/hosts/${hostname}`, + }, + }); + const { + triggerJobStart: triggerRecalculate, lastCompletedJob: lastCompletedRecalculate, + } = useRexJobPolling(() => runSubmanRepos(hostname, refreshHostDetails)); + const handleRefreshApplicabilityClick = () => { + setIsBulkActionOpen(false); + triggerRecalculate(); + }; + const actionInProgress = (isRemoveInProgress || isUpgradeInProgress || isBulkRemoveInProgress || isBulkUpgradeInProgress || isInstallInProgress); const disabledReason = __('A remote execution job is in progress.'); @@ -345,7 +363,7 @@ export const DebsTab = () => { , ]; - const dropdownRemoveItems = [ + const kebabItems = [ { > {__('Install packages')} , + + {__('Refresh package applicability')} + , ]; const handlePackageStatusSelected = newStatus => setPackageStatusSelected((prevStatus) => { @@ -406,7 +433,7 @@ export const DebsTab = () => { toggle={} isOpen={isBulkActionOpen} isPlain - dropdownItems={dropdownRemoveItems} + dropdownItems={kebabItems} ouiaId="bulk_actions_dropdown" /> @@ -461,7 +488,7 @@ export const DebsTab = () => { additionalListeners={[hostId, packageStatusSelected, activeSortDirection, activeSortColumn, lastCompletedPackageUpgrade, lastCompletedPackageRemove, lastCompletedBulkPackageRemove, - lastCompletedBulkPackageUpgrade, lastCompletedPackageInstall]} + lastCompletedBulkPackageUpgrade, lastCompletedPackageInstall, lastCompletedRecalculate]} fetchItems={fetchItems} bookmarkController="katello_host_installed_debs" readOnlyBookmarks={readOnlyBookmarks}