diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.styles.ts b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.styles.ts new file mode 100644 index 00000000000000..30439722cd18bb --- /dev/null +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.styles.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useEuiTheme } from '@elastic/eui'; +import { css } from '@emotion/css'; +import { useMemo } from 'react'; + +export const useFiltersStyles = () => { + return useMemo( + () => ({ + flexGroup: css` + max-width: 600px; + `, + }), + [] + ); +}; + +export const useQueryStyles = () => { + return useMemo( + () => ({ + content: css` + white-space: pre-wrap; + `, + }), + [] + ); +}; + +export const useRequiredFieldsStyles = () => { + const { euiTheme } = useEuiTheme(); + return useMemo( + () => ({ + fieldTypeText: css({ + fontFamily: euiTheme.font.familyCode, + display: 'inline', + }), + }), + [euiTheme.font.familyCode] + ); +}; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx index 601432513fbb83..56781726317fa2 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management/components/rule_details/rule_definition_section.tsx @@ -7,7 +7,6 @@ import React from 'react'; import { isEmpty } from 'lodash/fp'; -import styled from 'styled-components'; import { EuiDescriptionList, EuiText, @@ -15,7 +14,6 @@ import { EuiFlexItem, EuiFlexGroup, EuiLoadingSpinner, - EuiBadge, } from '@elastic/eui'; import type { EuiDescriptionListProps } from '@elastic/eui'; import type { @@ -25,9 +23,10 @@ import type { import type { Filter } from '@kbn/es-query'; import type { SavedQuery } from '@kbn/data-plugin/public'; import { mapAndFlattenFilters } from '@kbn/data-plugin/public'; +import type { DataView } from '@kbn/data-views-plugin/public'; import { FieldIcon } from '@kbn/react-field'; import { castEsToKbnFieldTypeName } from '@kbn/field-types'; -import { FilterBadgeGroup } from '@kbn/unified-search-plugin/public'; +import { FilterItems } from '@kbn/unified-search-plugin/public'; import type { AlertSuppressionMissingFieldsStrategy, RequiredFieldArray, @@ -55,6 +54,11 @@ import { BadgeList } from './badge_list'; import { DEFAULT_DESCRIPTION_LIST_COLUMN_WIDTHS } from './constants'; import * as i18n from './translations'; import { useAlertSuppression } from '../../logic/use_alert_suppression'; +import { + useFiltersStyles, + useQueryStyles, + useRequiredFieldsStyles, +} from './rule_definition_section.styles'; interface SavedQueryNameProps { savedQueryName: string; @@ -66,12 +70,6 @@ const SavedQueryName = ({ savedQueryName }: SavedQueryNameProps) => ( ); -const EuiBadgeWrap = styled(EuiBadge)` - .euiBadge__text { - white-space: pre-wrap !important; - } -`; - interface FiltersProps { filters: Filter[]; dataViewId?: string; @@ -80,51 +78,42 @@ interface FiltersProps { } const Filters = ({ filters, dataViewId, index, 'data-test-subj': dataTestSubj }: FiltersProps) => { + const flattenedFilters = mapAndFlattenFilters(filters); + const { indexPattern } = useRuleIndexPattern({ dataSourceType: dataViewId ? DataSourceType.DataView : DataSourceType.IndexPatterns, index: index ?? [], dataViewId, }); - const flattenedFilters = mapAndFlattenFilters(filters); + const styles = useFiltersStyles(); return ( - - {flattenedFilters.map((filter, idx) => { - const displayContent = filter.meta.alias ? ( - filter.meta.alias - ) : ( - - ); - return ( - - - {indexPattern != null ? displayContent : } - - - ); - })} + + ); }; -const QueryContent = styled.div` - white-space: pre-wrap; -`; - interface QueryProps { query: string; 'data-test-subj'?: string; } -const Query = ({ query, 'data-test-subj': dataTestSubj = 'query' }: QueryProps) => ( - {query} -); +const Query = ({ query, 'data-test-subj': dataTestSubj = 'query' }: QueryProps) => { + const styles = useQueryStyles(); + return ( +
+ {query} +
+ ); +}; interface IndexProps { index: string[]; @@ -260,42 +249,40 @@ const RuleType = ({ type }: RuleTypeProps) => ( {getRuleTypeDescription(type)} ); -const StyledFieldTypeText = styled(EuiText)` - font-size: ${({ theme }) => theme.eui.euiFontSizeXS}; - font-family: ${({ theme }) => theme.eui.euiCodeFontFamily}; - display: inline; -`; - interface RequiredFieldsProps { requiredFields: RequiredFieldArray; } -const RequiredFields = ({ requiredFields }: RequiredFieldsProps) => ( - - {requiredFields.map((rF, index) => ( - - - - - - - - {` ${rF.name}${index + 1 !== requiredFields.length ? ', ' : ''}`} - - - - - ))} - -); +const RequiredFields = ({ requiredFields }: RequiredFieldsProps) => { + const styles = useRequiredFieldsStyles(); + return ( + + {requiredFields.map((rF, index) => ( + + + + + + + + {` ${rF.name}${index + 1 !== requiredFields.length ? ', ' : ''}`} + + + + + ))} + + ); +}; interface TimelineTitleProps { timelineTitle: string;