From a08e4b0ada39336251ef8e104786402e1929dc83 Mon Sep 17 00:00:00 2001 From: Maksym Yadlovskyi Date: Fri, 17 Jan 2025 11:54:43 +0100 Subject: [PATCH] Refactoring of FilterPreview component --- .../event-definition-types/FilterPreview.tsx | 134 ++++++++---------- 1 file changed, 62 insertions(+), 72 deletions(-) diff --git a/graylog2-web-interface/src/components/event-definitions/event-definition-types/FilterPreview.tsx b/graylog2-web-interface/src/components/event-definitions/event-definition-types/FilterPreview.tsx index 5ef4498b2ff4..7beb3567f4ff 100644 --- a/graylog2-web-interface/src/components/event-definitions/event-definition-types/FilterPreview.tsx +++ b/graylog2-web-interface/src/components/event-definitions/event-definition-types/FilterPreview.tsx @@ -32,85 +32,75 @@ type FilterPreviewProps = { type Message = { timestamp: string, message: string, + _id: string, } -class FilterPreview extends React.Component { - static defaultProps = { - searchResult: {}, - errors: [], - isFetchingData: false, - displayPreview: false, - }; +const Messages = ({ messages }: { messages: Array }) => messages.map(({ index, message }) => ( + + {message.timestamp} + {message.message} + +)); - renderMessages = (messages) => messages.map(({ index, message }) => ( - - {message.timestamp} - {message.message} - - )); +const SearchResult = ({ searchResult, isFetchingData }: { isFetchingData: boolean, searchResult: { messages?: Array }} = {}) => { + if (isFetchingData) return ; - renderSearchResult = (searchResult: { messages?: Array } = {}) => { - if (!searchResult.messages || searchResult.messages.length === 0) { - return

Could not find any messages with the current search criteria.

; - } - - return ( - - - - - - - - - {this.renderMessages(searchResult.messages)} - -
TimestampMessage
- ); - }; + if (!searchResult.messages || searchResult.messages.length === 0) { + return

Could not find any messages with the current search criteria.

; + } - render() { - const { isFetchingData, searchResult, errors, displayPreview } = this.props; + return ( + + + + + + + + + + +
TimestampMessage
+ ); +}; - const renderedResults = isFetchingData ? : this.renderSearchResult(searchResult); +const FilterPreview = ({ searchResult = {}, displayPreview = false, errors = [], isFetchingData = false }: FilterPreviewProps) => { + const hasError = errors?.length > 0; - return ( - <> - -

- The Filter & Aggregation Condition will generate different number of Events, depending on how it is - configured: -

-
    -
  • Filter: One Event per message matching the filter
  • -
  • - Aggregation without groups: One Event every time the aggregation result satisfies - the condition -
  • -
  • - Aggregation with groups: One Event per group whose aggregation result satisfies - the condition -
  • -
-
+ return ( + <> + +

+ The Filter & Aggregation Condition will generate different number of Events, depending on how it is + configured: +

+
    +
  • Filter: One Event per message matching the filter
  • +
  • + Aggregation without groups: One Event every time the aggregation result satisfies + the condition +
  • +
  • + Aggregation with groups: One Event per group whose aggregation result satisfies + the condition +
  • +
+
- {displayPreview && ( - - - Filter Preview - - - {errors.length > 0 ?

{errors[0].description}

: renderedResults} -
-
- )} - - ); - } -} + {displayPreview && ( + 0 ? 'danger' : 'default'}> + + Filter Preview + + + {hasError ?

{errors[0].description}

: } +
+
+ )} + + ); +}; export default FilterPreview;