Skip to content

Commit 5297c41

Browse files
Jacek Kolezynskielasticmachinenikitaindik
committed
[Security Solution] Implement refactoring remark from PR #201731 (#204022)
## Summary In the PR #201731 for ticket #180660 @banderror advised to refactor code in that PR to better separate the concerns (business logic from components). This is the implementation of that review [remark](https://github.com/elastic/kibana/pull/201731/files#r1860492191). Recording: https://github.com/user-attachments/assets/471a0986-bcdb-4611-ab1a-bdcbe5151f47 --------- Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com> Co-authored-by: Nikita Indik <nikita.indik@elastic.co> (cherry picked from commit 20eb87d)
1 parent 9b0302c commit 5297c41

4 files changed

Lines changed: 22 additions & 29 deletions

File tree

x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_header_buttons.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,9 @@ export const AddPrebuiltRulesHeaderButtons = () => {
2525
const {
2626
state: {
2727
selectedRules,
28-
loadingRules,
2928
isRefetching,
3029
isUpgradingSecurityPackages,
31-
isInstallingAllRules,
30+
isAnyRuleInstalling,
3231
hasRulesToInstall,
3332
},
3433
actions: { installAllRules, installSelectedRules },
@@ -39,8 +38,7 @@ export const AddPrebuiltRulesHeaderButtons = () => {
3938
const numberOfSelectedRules = selectedRules.length ?? 0;
4039
const shouldDisplayInstallSelectedRulesButton = numberOfSelectedRules > 0;
4140

42-
const isRuleInstalling = loadingRules.length > 0 || isInstallingAllRules;
43-
const isRequestInProgress = isRuleInstalling || isRefetching || isUpgradingSecurityPackages;
41+
const isRequestInProgress = isAnyRuleInstalling || isRefetching || isUpgradingSecurityPackages;
4442

4543
const [isOverflowPopoverOpen, setOverflowPopover] = useBoolean(false);
4644

@@ -81,7 +79,7 @@ export const AddPrebuiltRulesHeaderButtons = () => {
8179
data-test-subj="installSelectedRulesButton"
8280
>
8381
{i18n.INSTALL_SELECTED_RULES(numberOfSelectedRules)}
84-
{isRuleInstalling && <EuiLoadingSpinner size="s" />}
82+
{isAnyRuleInstalling && <EuiLoadingSpinner size="s" />}
8583
</EuiButton>
8684
</EuiFlexItem>
8785
<EuiFlexItem grow={false}>
@@ -116,7 +114,7 @@ export const AddPrebuiltRulesHeaderButtons = () => {
116114
aria-label={i18n.INSTALL_ALL_ARIA_LABEL}
117115
>
118116
{i18n.INSTALL_ALL}
119-
{isRuleInstalling && <EuiLoadingSpinner size="s" />}
117+
{isAnyRuleInstalling && <EuiLoadingSpinner size="s" />}
120118
</EuiButton>
121119
</EuiFlexItem>
122120
</EuiFlexGroup>

x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_install_button.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ import React, { useCallback, useMemo } from 'react';
1919
import useBoolean from 'react-use/lib/useBoolean';
2020
import type { Rule } from '../../../../rule_management/logic';
2121
import type { RuleSignatureId } from '../../../../../../common/api/detection_engine';
22-
import { type AddPrebuiltRulesTableActions } from './add_prebuilt_rules_table_context';
22+
import {
23+
useAddPrebuiltRulesTableContext,
24+
type AddPrebuiltRulesTableActions,
25+
} from './add_prebuilt_rules_table_context';
2326
import * as i18n from './translations';
2427

2528
export interface PrebuiltRulesInstallButtonProps {
@@ -28,7 +31,6 @@ export interface PrebuiltRulesInstallButtonProps {
2831
installOneRule: AddPrebuiltRulesTableActions['installOneRule'];
2932
loadingRules: RuleSignatureId[];
3033
isDisabled: boolean;
31-
isInstallingAllRules: boolean;
3234
}
3335

3436
export const PrebuiltRulesInstallButton = ({
@@ -37,8 +39,10 @@ export const PrebuiltRulesInstallButton = ({
3739
installOneRule,
3840
loadingRules,
3941
isDisabled,
40-
isInstallingAllRules,
4142
}: PrebuiltRulesInstallButtonProps) => {
43+
const {
44+
state: { isInstallingAllRules },
45+
} = useAddPrebuiltRulesTableContext();
4246
const isRuleInstalling = loadingRules.includes(ruleId) || isInstallingAllRules;
4347
const isInstallButtonDisabled = isRuleInstalling || isDisabled;
4448
const [isPopoverOpen, setPopover] = useBoolean(false);

x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_table_context.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,14 @@ export interface AddPrebuiltRulesTableState {
6161
* package in background
6262
*/
6363
isUpgradingSecurityPackages: boolean;
64-
6564
/**
6665
* Is true when performing Install All Rules mutation
6766
*/
6867
isInstallingAllRules: boolean;
68+
/**
69+
* Is true when any rule is currently being installed
70+
*/
71+
isAnyRuleInstalling: boolean;
6972
/**
7073
* List of rule IDs that are currently being upgraded
7174
*/
@@ -145,6 +148,8 @@ export const AddPrebuiltRulesTableContextProvider = ({
145148
}),
146149
});
147150

151+
const isAnyRuleInstalling = loadingRules.length > 0 || isInstallingAllRules;
152+
148153
const { mutateAsync: installAllRulesRequest } = usePerformInstallAllRules();
149154
const { mutateAsync: installSpecificRulesRequest } = usePerformInstallSpecificRules();
150155

@@ -281,6 +286,7 @@ export const AddPrebuiltRulesTableContextProvider = ({
281286
isRefetching,
282287
isUpgradingSecurityPackages,
283288
isInstallingAllRules,
289+
isAnyRuleInstalling,
284290
selectedRules,
285291
lastUpdated: dataUpdatedAt,
286292
},
@@ -297,6 +303,7 @@ export const AddPrebuiltRulesTableContextProvider = ({
297303
isRefetching,
298304
isUpgradingSecurityPackages,
299305
isInstallingAllRules,
306+
isAnyRuleInstalling,
300307
selectedRules,
301308
dataUpdatedAt,
302309
actions,

x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/use_add_prebuilt_rules_table_columns.tsx

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,7 @@ const INTEGRATIONS_COLUMN: TableColumn = {
110110
const createInstallButtonColumn = (
111111
installOneRule: AddPrebuiltRulesTableActions['installOneRule'],
112112
loadingRules: RuleSignatureId[],
113-
isDisabled: boolean,
114-
isInstallingAllRules: boolean
113+
isDisabled: boolean
115114
): TableColumn => ({
116115
field: 'rule_id',
117116
name: <RulesTableEmptyColumnName name={i18n.INSTALL_RULE_BUTTON} />,
@@ -122,7 +121,6 @@ const createInstallButtonColumn = (
122121
installOneRule={installOneRule}
123122
loadingRules={loadingRules}
124123
isDisabled={isDisabled}
125-
isInstallingAllRules={isInstallingAllRules}
126124
/>
127125
),
128126
width: '10%',
@@ -166,23 +164,9 @@ export const useAddPrebuiltRulesTableColumns = (): TableColumn[] => {
166164
width: '12%',
167165
},
168166
...(hasCRUDPermissions
169-
? [
170-
createInstallButtonColumn(
171-
installOneRule,
172-
loadingRules,
173-
isDisabled,
174-
isInstallingAllRules
175-
),
176-
]
167+
? [createInstallButtonColumn(installOneRule, loadingRules, isDisabled)]
177168
: []),
178169
],
179-
[
180-
hasCRUDPermissions,
181-
installOneRule,
182-
loadingRules,
183-
isDisabled,
184-
showRelatedIntegrations,
185-
isInstallingAllRules,
186-
]
170+
[hasCRUDPermissions, installOneRule, loadingRules, isDisabled, showRelatedIntegrations]
187171
);
188172
};

0 commit comments

Comments
 (0)