Skip to content

Commit

Permalink
[Security Solution] Sort rule upgrade flyout fields according to the …
Browse files Browse the repository at this point in the history
…state (elastic#208553)

**Relates to:** elastic#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
  • Loading branch information
maximpn authored Feb 3, 2025
1 parent 0f62fa1 commit bcc0f4d
Showing 1 changed file with 29 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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 (
<>
Expand Down Expand Up @@ -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;
}

0 comments on commit bcc0f4d

Please sign in to comment.