[Security Solution] Sort rule upgrade flyout fields according to the state (#208553)

**Relates to:** https://github.com/elastic/kibana/issues/171520

## Summary

This PR adds logic to sort fields in rule upgrade flyout. Fields are sorted based on the state where fields with conflicts are shown before the other fields users should pay attention to. 

## Screenshot

**Before:**

https://github.com/user-attachments/assets/c4ee56c7-9bfe-4b6f-a7d4-94b0fc946425

**After:**

https://github.com/user-attachments/assets/c2c43a57-8ec0-4537-823f-4244306b9553
This commit is contained in:
Maxim Palenov 2025-02-03 15:57:45 +01:00 committed by GitHub
parent 0f62fa1d30
commit bcc0f4d5f6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -7,6 +7,7 @@
import React, { memo } from 'react';
import { EuiSpacer } from '@elastic/eui';
import type { FieldsUpgradeState } from '../../../../model/prebuilt_rule_upgrade';
import {
FieldUpgradeStateEnum,
type RuleUpgradeState,
@ -31,9 +32,7 @@ export const RuleUpgrade = memo(function RuleUpgrade({
const numOfFieldsWithUpdates = calcNumOfFieldsWithUpdates(ruleUpgradeState);
const numOfSolvableConflicts = calcNumOfSolvableConflicts(ruleUpgradeState);
const numOfNonSolvableConflicts = calcNumOfNonSolvableConflicts(ruleUpgradeState);
const fieldNames = Object.keys(
ruleUpgradeState.fieldsUpgradeState
) as UpgradeableDiffableFields[];
const fieldNames = extractSortedFieldNames(ruleUpgradeState.fieldsUpgradeState);
return (
<>
@ -86,3 +85,30 @@ function calcNumOfNonSolvableConflicts(ruleUpgradeState: RuleUpgradeState): numb
({ state }) => state === FieldUpgradeStateEnum.NonSolvableConflict
).length;
}
/**
* Defines fields sorting order by state.
* Lower number corresponds to higher priority.
*/
const FIELDS_STATE_ORDER_MAP = {
[FieldUpgradeStateEnum.NonSolvableConflict]: 0,
[FieldUpgradeStateEnum.SolvableConflict]: 1,
[FieldUpgradeStateEnum.SameUpdate]: 2,
[FieldUpgradeStateEnum.NoConflict]: 3,
[FieldUpgradeStateEnum.Accepted]: 4,
[FieldUpgradeStateEnum.NoUpdate]: 5,
} as const;
function extractSortedFieldNames(
fieldsUpgradeState: FieldsUpgradeState
): UpgradeableDiffableFields[] {
const fieldNames = Object.keys(fieldsUpgradeState) as UpgradeableDiffableFields[];
fieldNames.sort(
(a, b) =>
FIELDS_STATE_ORDER_MAP[fieldsUpgradeState[a].state] -
FIELDS_STATE_ORDER_MAP[fieldsUpgradeState[b].state]
);
return fieldNames;
}